Files
Prism/Prism/CMakeLists.txt

123 lines
2.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)
# ------------- 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})
# ------------- link libraries -------------
set(LINK_LIBRARIES_PRIVATE
spdlog
glfw
glad
assimp
stb
)
set(LINK_LIBRARIES_PUBLIC
glm
)
# 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}
)
# ------------- 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
PRISM_STATIC
${DEBUG_DEFINITIONS}
)
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}d
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)