196 lines
5.0 KiB
CMake
196 lines
5.0 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)
|
|
set(PHYSX_LIB_DIR "vendor/PhysX/physx/bin/win.x86_64.vc143.md/${PHYSX_BUILD_TYPE}") # This is the path where PhysX libraries are installed
|
|
link_directories(${PHYSX_LIB_DIR})
|
|
|
|
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_directories(${STATIC_LIBRARY} INTERFACE
|
|
${PHYSX_LIB_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)
|