115 lines
5.5 KiB
CMake
115 lines
5.5 KiB
CMake
set(METACORE_PANDA3D_VERSION "1.10.16" CACHE STRING "Pinned Panda3D SDK version used by MetaCore")
|
|
set(METACORE_PANDA3D_ARCH "x64" CACHE STRING "Pinned Panda3D Windows architecture used by MetaCore")
|
|
set(METACORE_PANDA3D_LOCAL_ROOT "${CMAKE_SOURCE_DIR}/.metacore/deps/panda3d/${METACORE_PANDA3D_VERSION}-${METACORE_PANDA3D_ARCH}" CACHE PATH "Local Panda3D SDK cache directory")
|
|
|
|
function(metacore_prepare_panda3d)
|
|
if(WIN32)
|
|
if(DEFINED ENV{PANDA3D_ROOT} AND NOT "$ENV{PANDA3D_ROOT}" STREQUAL "")
|
|
set(_metacore_panda3d_root "$ENV{PANDA3D_ROOT}")
|
|
elseif(DEFINED PANDA3D_ROOT AND NOT "${PANDA3D_ROOT}" STREQUAL "")
|
|
set(_metacore_panda3d_root "${PANDA3D_ROOT}")
|
|
else()
|
|
set(_metacore_panda3d_root "${METACORE_PANDA3D_LOCAL_ROOT}")
|
|
endif()
|
|
|
|
file(TO_CMAKE_PATH "${_metacore_panda3d_root}" _metacore_panda3d_root)
|
|
|
|
if(NOT EXISTS "${_metacore_panda3d_root}/include/pandaFramework.h")
|
|
if(METACORE_AUTO_PREPARE_PANDA3D)
|
|
message(STATUS "MetaCore will prepare Panda3D SDK into ${_metacore_panda3d_root}")
|
|
execute_process(
|
|
COMMAND
|
|
powershell
|
|
-NoProfile
|
|
-ExecutionPolicy Bypass
|
|
-File "${CMAKE_SOURCE_DIR}/scripts/PrepareMetaCorePanda3D.ps1"
|
|
-Version "${METACORE_PANDA3D_VERSION}"
|
|
-Architecture "${METACORE_PANDA3D_ARCH}"
|
|
-InstallDir "${_metacore_panda3d_root}"
|
|
RESULT_VARIABLE _metacore_prepare_result
|
|
)
|
|
if(NOT _metacore_prepare_result EQUAL 0)
|
|
message(FATAL_ERROR "MetaCore failed to prepare Panda3D SDK. Set PANDA3D_ROOT manually or inspect scripts/PrepareMetaCorePanda3D.ps1 output.")
|
|
endif()
|
|
else()
|
|
message(FATAL_ERROR "Panda3D SDK was not found. Set PANDA3D_ROOT or enable METACORE_AUTO_PREPARE_PANDA3D.")
|
|
endif()
|
|
endif()
|
|
|
|
set(METACORE_PANDA3D_ROOT "${_metacore_panda3d_root}" CACHE PATH "Resolved Panda3D SDK root used by MetaCore" FORCE)
|
|
set(METACORE_PANDA3D_INCLUDE_DIR "${METACORE_PANDA3D_ROOT}/include" CACHE PATH "Resolved Panda3D include directory" FORCE)
|
|
set(METACORE_PANDA3D_LIB_DIR "${METACORE_PANDA3D_ROOT}/lib" CACHE PATH "Resolved Panda3D library directory" FORCE)
|
|
set(METACORE_PANDA3D_BIN_DIR "${METACORE_PANDA3D_ROOT}/bin" CACHE PATH "Resolved Panda3D runtime directory" FORCE)
|
|
set(METACORE_PANDA3D_ETC_DIR "${METACORE_PANDA3D_ROOT}/etc" CACHE PATH "Resolved Panda3D config directory" FORCE)
|
|
set(METACORE_PANDA3D_MODELS_DIR "${METACORE_PANDA3D_ROOT}/models" CACHE PATH "Resolved Panda3D models directory" FORCE)
|
|
set(METACORE_PANDA3D_PLUGINS_DIR "${METACORE_PANDA3D_ROOT}/plugins" CACHE PATH "Resolved Panda3D plugins directory" FORCE)
|
|
|
|
set(_metacore_panda3d_libraries
|
|
"${METACORE_PANDA3D_LIB_DIR}/libp3framework.lib"
|
|
"${METACORE_PANDA3D_LIB_DIR}/libpanda.lib"
|
|
"${METACORE_PANDA3D_LIB_DIR}/libpandafx.lib"
|
|
"${METACORE_PANDA3D_LIB_DIR}/libpandaexpress.lib"
|
|
"${METACORE_PANDA3D_LIB_DIR}/libpandagl.lib"
|
|
"${METACORE_PANDA3D_LIB_DIR}/libp3windisplay.lib"
|
|
"${METACORE_PANDA3D_LIB_DIR}/libp3dtool.lib"
|
|
"${METACORE_PANDA3D_LIB_DIR}/libp3dtoolconfig.lib"
|
|
opengl32
|
|
gdi32
|
|
user32
|
|
shell32
|
|
advapi32
|
|
ws2_32
|
|
winmm
|
|
)
|
|
|
|
add_library(MetaCorePanda3D::SDK INTERFACE IMPORTED GLOBAL)
|
|
set_target_properties(MetaCorePanda3D::SDK PROPERTIES
|
|
INTERFACE_INCLUDE_DIRECTORIES "${METACORE_PANDA3D_INCLUDE_DIR}"
|
|
INTERFACE_LINK_LIBRARIES "${_metacore_panda3d_libraries}"
|
|
)
|
|
|
|
file(GLOB METACORE_PANDA3D_RUNTIME_DLLS "${METACORE_PANDA3D_BIN_DIR}/*.dll")
|
|
set(METACORE_PANDA3D_RUNTIME_DLLS "${METACORE_PANDA3D_RUNTIME_DLLS}" CACHE INTERNAL "Resolved Panda3D runtime DLL list")
|
|
else()
|
|
message(FATAL_ERROR "MetaCore Panda3D V1 currently supports Windows only.")
|
|
endif()
|
|
endfunction()
|
|
|
|
function(metacore_stage_panda3d_runtime target_name)
|
|
if(NOT TARGET ${target_name})
|
|
message(FATAL_ERROR "Target ${target_name} does not exist.")
|
|
endif()
|
|
|
|
foreach(_metacore_runtime_dll IN LISTS METACORE_PANDA3D_RUNTIME_DLLS)
|
|
add_custom_command(TARGET ${target_name} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${_metacore_runtime_dll}"
|
|
"$<TARGET_FILE_DIR:${target_name}>"
|
|
)
|
|
endforeach()
|
|
|
|
if(EXISTS "${METACORE_PANDA3D_ETC_DIR}")
|
|
add_custom_command(TARGET ${target_name} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${METACORE_PANDA3D_ETC_DIR}"
|
|
"$<TARGET_FILE_DIR:${target_name}>/etc"
|
|
)
|
|
endif()
|
|
|
|
if(EXISTS "${METACORE_PANDA3D_MODELS_DIR}")
|
|
add_custom_command(TARGET ${target_name} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${METACORE_PANDA3D_MODELS_DIR}"
|
|
"$<TARGET_FILE_DIR:${target_name}>/models"
|
|
)
|
|
endif()
|
|
|
|
if(EXISTS "${METACORE_PANDA3D_PLUGINS_DIR}")
|
|
add_custom_command(TARGET ${target_name} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${METACORE_PANDA3D_PLUGINS_DIR}"
|
|
"$<TARGET_FILE_DIR:${target_name}>/plugins"
|
|
)
|
|
endif()
|
|
endfunction()
|