152 lines
3.6 KiB
CMake
152 lines
3.6 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})
|
|
|
|
|
|
|
|
# ------------- link libraries -------------
|
|
set(LINK_LIBRARIES_PRIVATE
|
|
glfw
|
|
glad
|
|
assimp
|
|
stb
|
|
tinyFileDialogs
|
|
FastNoise
|
|
yaml-cpp
|
|
)
|
|
|
|
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>
|
|
)
|
|
|
|
|
|
# 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)
|