Files
Prism/Prism/CMakeLists.txt
2025-12-17 12:39:20 +08:00

190 lines
4.9 KiB
CMake

project(Prism)
file(GLOB_RECURSE SRC_SOURCE src/**.cpp)
# ------------- configure -------------
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(ASSIMP_BUILD_ZLIB ON CACHE BOOL "Build built-in zlib" FORCE)
add_subdirectory(vendor/spdlog EXCLUDE_FROM_ALL)
add_subdirectory(vendor/glfw EXCLUDE_FROM_ALL)
add_subdirectory(vendor/glad EXCLUDE_FROM_ALL)
add_subdirectory(vendor/glm EXCLUDE_FROM_ALL)
add_subdirectory(vendor/assimp EXCLUDE_FROM_ALL)
add_subdirectory(vendor/stb EXCLUDE_FROM_ALL)
add_subdirectory(vendor/TinyFileDialog EXCLUDE_FROM_ALL)
add_subdirectory(vendor/EnTT EXCLUDE_FROM_ALL)
add_subdirectory(vendor/mono EXCLUDE_FROM_ALL)
add_subdirectory(vendor/FastNoise EXCLUDE_FROM_ALL)
add_subdirectory(vendor/yaml-cpp EXCLUDE_FROM_ALL)
add_subdirectory(vendor/Box2D EXCLUDE_FROM_ALL)
# ------------- imgui -------------
set(IMGUI_DIR vendor/ImGui)
include_directories(
${IMGUI_DIR}
${IMGUI_DIR}/backends
)
file(GLOB IMGUI_SOURCE
${IMGUI_DIR}/*.cpp
${IMGUI_DIR}/backends/imgui_impl_opengl3.cpp
${IMGUI_DIR}/backends/imgui_impl_glfw.cpp)
# add imgui source
list(APPEND SRC_SOURCE ${IMGUI_SOURCE})
# ------------- ImGuizmo -------------
set(IMGUIZMO_DIR vendor/ImGuizmo)
include_directories(${IMGUIZMO_DIR})
file(GLOB IMGUIZMO_SOURCE ${IMGUIZMO_DIR}/*.cpp)
# add imguizmo source
list(APPEND SRC_SOURCE ${IMGUIZMO_SOURCE})
# ------------- NVIDIA PhysX -------------
# PhysX/physx/buildtools/presets/*.xml
# PX_GENERATE_STATIC_LIBRARIES=True
# NV_USE_STATIC_WINCRT=False
set(PHYSX_BUILD_TYPE "checked" CACHE STRING "The build type of PhysX")
set_property(CACHE PHYSX_BUILD_TYPE PROPERTY STRINGS debug checked profile release)
if(NOT CMAKE_BUILD_TYPE)
if(PHYSX_BUILD_TYPE STREQUAL "debug" OR PHYSX_BUILD_TYPE STREQUAL "checked")
set(CMAKE_BUILD_TYPE "Debug")
endif()
endif()
if(CMAKE_BUILD_TYPE STREQUAL "Release")
set(PHYSX_BUILD_TYPE "release")
elseif (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(PHYSX_BUILD_TYPE "debug")
endif ()
include_directories(vendor/PhysX/physx/include)
link_directories("vendor/PhysX/physx/bin/win.x86_64.vc143.md/${PHYSX_BUILD_TYPE}") # This is the path where PhysX libraries are installed
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
message("Building snippet in debug with PhysX ${PHYSX_BUILD_TYPE} configuration")
add_compile_definitions(_DEBUG)
else()
message("Building snippet in release configuration with PhysX ${PHYSX_BUILD_TYPE} configuration")
add_compile_definitions(NDEBUG)
endif()
# ------------- link libraries -------------
set(LINK_LIBRARIES_PRIVATE
glfw
glad
assimp
stb
tinyFileDialogs
FastNoise
yaml-cpp
PhysXExtensions_static_64
PhysX_static_64
PhysXPvdSDK_static_64
PhysXCommon_static_64
PhysXFoundation_static_64
PhysXCooking_static_64
)
set(LINK_LIBRARIES_PUBLIC
spdlog
glm
EnTT::EnTT
mono
box2d
)
# link library opengl
if(WIN32)
list(APPEND LINK_LIBRARIES_PRIVATE opengl32)
elseif(UNIX AND NOT APPLE)
find_package(X11 REQUIRED)
list(APPEND LINK_LIBRARIES_PRIVATE GL ${X11_LIBRARIES})
endif()
# ------------- Target include Directory -------------
set(TARGET_INCLUDE_DIR
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
${IMGUI_DIR}
${IMGUIZMO_DIR}
)
# ------------- debug Defines -------------
set(DEBUG_DEFINITIONS
$<$<CONFIG:Debug>:PM_ENABLE_ASSERTS>
$<$<CONFIG:RelWithDebInfo>:PM_ENABLE_ASSERTS>
)
# static library
set(STATIC_LIBRARY ${PROJECT_NAME}-static)
add_library(${STATIC_LIBRARY} STATIC ${SRC_SOURCE})
target_compile_definitions(${STATIC_LIBRARY} PRIVATE
${DEBUG_DEFINITIONS}
INTERFACE
PRISM_STATIC
)
target_include_directories(${STATIC_LIBRARY} PUBLIC
${TARGET_INCLUDE_DIR}
)
target_link_libraries(${STATIC_LIBRARY}
PRIVATE
${LINK_LIBRARIES_PRIVATE}
PUBLIC
${LINK_LIBRARIES_PUBLIC}
)
target_precompile_headers(${STATIC_LIBRARY} PRIVATE
src/pmpch.h
)
set_target_properties(${STATIC_LIBRARY} PROPERTIES
OUTPUT_NAME ${PROJECT_NAME}
ARCHIVE_OUTPUT_NAME ${PROJECT_NAME}d
)
# shared library
set(SHARED_LIBRARY ${PROJECT_NAME}-shared)
add_library(${SHARED_LIBRARY} SHARED ${SRC_SOURCE})
target_compile_definitions(${SHARED_LIBRARY} PRIVATE
PRISM_SHARED BUILD_PRISM_DLL
${DEBUG_DEFINITIONS}
)
target_include_directories(${SHARED_LIBRARY} PUBLIC
${TARGET_INCLUDE_DIR}
)
target_link_libraries(${SHARED_LIBRARY}
PRIVATE
${LINK_LIBRARIES_PRIVATE}
PUBLIC
${LINK_LIBRARIES_PUBLIC}
)
target_precompile_headers(${SHARED_LIBRARY} PRIVATE
src/pmpch.h
)
set_target_properties(${SHARED_LIBRARY} PROPERTIES
OUTPUT_NAME ${PROJECT_NAME}
LIBRARY_OUTPUT_NAME ${PROJECT_NAME}
)
# alias
add_library(Prism::static ALIAS Prism-static)
add_library(Prism::shared ALIAS Prism-shared)
add_library(Prism ALIAS Prism-shared)