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}" "$" ) 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}" "$/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}" "$/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}" "$/plugins" ) endif() endfunction() function(metacore_stage_simplepbr_runtime target_name) if(NOT TARGET ${target_name}) message(FATAL_ERROR "Target ${target_name} does not exist.") endif() set(_metacore_simplepbr_root "${CMAKE_SOURCE_DIR}/third_party/simplepbr-shaders") if(EXISTS "${_metacore_simplepbr_root}/shaders") add_custom_command(TARGET ${target_name} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${_metacore_simplepbr_root}/shaders" "$/simplepbr/shaders" ) endif() if(EXISTS "${_metacore_simplepbr_root}/textures") add_custom_command(TARGET ${target_name} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${_metacore_simplepbr_root}/textures" "$/simplepbr/textures" ) endif() endfunction()