Updated CMakeFile with MSVC options Review Erso lib interface Better tree display in RDIDebug tool Change lib interface functions naming Separate namespace for date file entries
219 lines
7.6 KiB
CMake
219 lines
7.6 KiB
CMake
# CMakeLists.txt
|
|
|
|
####################################################
|
|
# Written by JackCarterSmith, 2022
|
|
# This code is released under the RDI license.
|
|
####################################################
|
|
|
|
|
|
# CMake requirement and general configuration
|
|
cmake_minimum_required(VERSION 3.12)
|
|
cmake_policy(VERSION 3.12)
|
|
set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR})
|
|
if(DEFINED ENV{MS_COMPATIBLE})
|
|
set(CMAKE_GNUtoMS ON) # Enable compatibility level to exported libraries
|
|
endif()
|
|
|
|
|
|
# Project definition
|
|
if(DEFINED ENV{CI}) # Jenkins CI integration mode
|
|
project(rdi VERSION $ENV{CI_VERSION}.$ENV{CI_BUILD_NUMBER} DESCRIPTION "Rogue Data Interface" LANGUAGES C CXX)
|
|
set(RDI_NAME $ENV{CI_OUTPUT_NAME})
|
|
else() # Standalone project mode, should not be used for release.
|
|
project(rdi VERSION 1.0.0 DESCRIPTION "Rogue Data Interface" LANGUAGES C CXX)
|
|
set(RDI_NAME RDI)
|
|
endif()
|
|
#set(RDI_LIB_NAME RDI${PROJECT_VERSION_MAJOR}${PROJECT_VERSION_MINOR})
|
|
set(RDI_LIB_NAME RDI)
|
|
if(NOT MSVC)
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++17 -static-libgcc -static-libstdc++")
|
|
else()
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Wall")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Wall /std:c++17")
|
|
endif()
|
|
|
|
set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables")
|
|
set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries")
|
|
set(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation directory for headers")
|
|
|
|
# Compilation option
|
|
option(RDI_SHARED "Build shared lib" ON)
|
|
option(RDI_STATIC "Build static lib" ON)
|
|
option(BUILD_TOOLS "Build lib tools" ON)
|
|
|
|
# Import needed packages and references their include path
|
|
find_package(RSPModel 2.2 REQUIRED)
|
|
include_directories(${RSPModel_INCLUDE_DIR})
|
|
find_package(RSPTerrain 2.0 REQUIRED)
|
|
include_directories(${RSPTerrain_INCLUDE_DIR})
|
|
find_package(RSPTexture 2.1 REQUIRED)
|
|
include_directories(${RSPTexture_INCLUDE_DIR})
|
|
find_package(Boost 1.80.0 EXACT REQUIRED)
|
|
include_directories(${Boost_INCLUDE_DIR})
|
|
add_definitions(-DBOOST_ALL_NO_LIB)
|
|
|
|
|
|
# Push compile infos to source
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/src/config.h @ONLY)
|
|
|
|
|
|
# The project is divided in two parts:
|
|
# - RDI library to interface with RS3D data files. On windows system, it's can use registry to find RS3D install folder.
|
|
# - Some testing and debugging tools (WIP)
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
|
|
unset(RDI_TARGETS_LIST)
|
|
|
|
# Define src/headers files
|
|
file(GLOB_RECURSE RDI_LIB_SOURCES ./src/*.cpp ./src/*.c)
|
|
source_group("Source Files" FILES ${RDI_LIB_SOURCES})
|
|
file(GLOB_RECURSE RSP_LIB_PUBLIC_HRDS ./include/*.hpp ./include/*.h)
|
|
|
|
|
|
# Building instructions for RSP-Texture library
|
|
if(DEFINED ENV{CI})
|
|
set(CMAKE_BUILD_TYPE RELEASE)
|
|
endif()
|
|
|
|
# Declare the shared library instance
|
|
if(RDI_SHARED)
|
|
add_library(rdi-lib SHARED ${RDI_LIB_SOURCES})
|
|
set_property(TARGET rdi-lib PROPERTY C_STANDARD 90)
|
|
set_property(TARGET rdi-lib PROPERTY CXX_STANDARD 17)
|
|
set_target_properties(rdi-lib PROPERTIES VERSION 1.0.0)
|
|
|
|
target_include_directories(rdi-lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
|
|
|
set_target_properties(rdi-lib PROPERTIES OUTPUT_NAME "${RDI_LIB_NAME}")
|
|
|
|
target_link_libraries(rdi-lib PRIVATE
|
|
${RSPModel_LIBRARIES}
|
|
${RSPTerrain_LIBRARIES}
|
|
${RSPTexture_LIBRARIES}
|
|
${Boost_LIBRARIES}
|
|
)
|
|
|
|
if(WIN32)
|
|
# remove lib prefix on windows system when building dll file
|
|
set_target_properties(rdi-lib PROPERTIES PREFIX "")
|
|
set_target_properties(rdi-lib PROPERTIES DEFINE_SYMBOL RDI_DLL)
|
|
endif()
|
|
|
|
list(APPEND RDI_TARGETS_LIST rdi-lib)
|
|
|
|
# msvc does not append 'lib' - do it here to have consistent name
|
|
if(MSVC)
|
|
# only for import library, not the shared one
|
|
set_target_properties(rdi-lib PROPERTIES IMPORT_PREFIX "lib")
|
|
endif()
|
|
endif()
|
|
|
|
# Declare the static library instance
|
|
if(RDI_STATIC)
|
|
add_library(rdi-libstatic STATIC ${RDI_LIB_SOURCES})
|
|
set_property(TARGET rdi-libstatic PROPERTY C_STANDARD 90)
|
|
set_property(TARGET rdi-libstatic PROPERTY CXX_STANDARD 17)
|
|
|
|
target_include_directories(rdi-libstatic PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
|
|
|
target_link_libraries(rdi-libstatic PRIVATE
|
|
${RSPModel_LIBRARIES}
|
|
${RSPTerrain_LIBRARIES}
|
|
${RSPTexture_LIBRARIES}
|
|
${Boost_LIBRARIES}
|
|
)
|
|
|
|
list(APPEND RDI_TARGETS_LIST rdi-libstatic)
|
|
|
|
# MSVC doesn't use a different file extension for shared vs. static
|
|
# libs. We are able to change OUTPUT_NAME to remove the _static
|
|
# for all other platforms.
|
|
if(NOT MSVC)
|
|
set_target_properties(rdi-libstatic PROPERTIES OUTPUT_NAME "${RDI_LIB_NAME}")
|
|
set_target_properties(rdi-libstatic PROPERTIES CLEAN_DIRECT_OUTPUT 1)
|
|
else()
|
|
set_target_properties(rdi-libstatic PROPERTIES OUTPUT_NAME "${RDI_LIB_NAME}_static")
|
|
set_target_properties(rdi-libstatic PROPERTIES CLEAN_DIRECT_OUTPUT 1)
|
|
endif()
|
|
|
|
# MSVC does not append 'lib' - do it here to have consistent name
|
|
if(MSVC)
|
|
set_target_properties(rdi-libstatic PROPERTIES PREFIX "lib")
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT RDI_TARGETS_LIST)
|
|
message(SEND_ERROR
|
|
"No library variant selected to build. "
|
|
"Please enable at least one of the following options: "
|
|
"RDI_STATIC, RDI_SHARED")
|
|
endif()
|
|
|
|
if(BUILD_TOOLS)
|
|
# Add lib debug tool to buildchain
|
|
#file(GLOB_RECURSE RDI_TOOLS_SOURCES ./tools/*.cpp ./tools/*.c)
|
|
#source_group("Tools src files" FILES ${RDI_TOOLS_SOURCES})
|
|
|
|
#add_executable(rdi-debug-tools ${RDI_TOOLS_SOURCES})
|
|
add_executable(rdi-debug-tools ./tools/RDIDebug.cpp)
|
|
set_property(TARGET rdi-debug-tools PROPERTY C_STANDARD 90)
|
|
set_target_properties(rdi-debug-tools PROPERTIES OUTPUT_NAME "RDI-debug")
|
|
list(APPEND RDI_TARGETS_LIST rdi-debug-tools)
|
|
|
|
add_executable(erso-debug-tools ./tools/ErsoDebug.cpp)
|
|
set_property(TARGET erso-debug-tools PROPERTY C_STANDARD 90)
|
|
set_target_properties(erso-debug-tools PROPERTIES OUTPUT_NAME "Erso-debug")
|
|
list(APPEND RDI_TARGETS_LIST erso-debug-tools)
|
|
|
|
add_executable(krennic-debug-tools ./tools/KrennicDebug.cpp)
|
|
set_property(TARGET krennic-debug-tools PROPERTY C_STANDARD 90)
|
|
set_target_properties(krennic-debug-tools PROPERTIES OUTPUT_NAME "Krennic-debug")
|
|
list(APPEND RDI_TARGETS_LIST krennic-debug-tools)
|
|
|
|
|
|
if(MSVC)
|
|
# msvc does not append 'lib' - do it here to have consistent name
|
|
set_target_properties(rdi-debug-tools PROPERTIES IMPORT_PREFIX "lib")
|
|
set_target_properties(erso-debug-tools PROPERTIES IMPORT_PREFIX "lib")
|
|
set_target_properties(krennic-debug-tools PROPERTIES IMPORT_PREFIX "lib")
|
|
endif()
|
|
|
|
if(RDI_SHARED)
|
|
target_link_libraries(rdi-debug-tools PRIVATE rdi-lib ${Boost_LIBRARIES})
|
|
target_link_libraries(erso-debug-tools PRIVATE rdi-lib)
|
|
target_link_libraries(krennic-debug-tools PRIVATE rdi-lib)
|
|
elseif(RDI_STATIC)
|
|
target_link_libraries(rdi-debug-tools PRIVATE rdi-libstatic ${Boost_LIBRARIES})
|
|
target_link_libraries(erso-debug-tools PRIVATE rdi-libstatic)
|
|
target_link_libraries(krennic-debug-tools PRIVATE rdi-libstatic)
|
|
endif()
|
|
endif()
|
|
|
|
|
|
# GPG signature custom command
|
|
#add_custom_command(
|
|
# OUTPUT ""
|
|
# COMMAND gpg --batch --detach-sign
|
|
# -o ${RSE_MOD_NAME}_${CI_SYS_TARGET}.gpg
|
|
# ${RSE_MOD_NAME}
|
|
# DEPENDS ${RSE_MOD_NAME}
|
|
# VERBATIM
|
|
#)
|
|
|
|
|
|
# Install dependancies
|
|
#install(FILES ${PROJECT_BINARY_DIR}/bin/libpng16.dll
|
|
# DESTINATION ${INSTALL_BIN_DIR})
|
|
|
|
# Install library includes
|
|
install(FILES ${RSP_LIB_PUBLIC_HRDS} DESTINATION ${INSTALL_INC_DIR})
|
|
|
|
# Install project artifacts
|
|
install(TARGETS ${RDI_TARGETS_LIST}
|
|
RUNTIME DESTINATION ${INSTALL_BIN_DIR}
|
|
LIBRARY DESTINATION ${INSTALL_LIB_DIR}
|
|
ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
|
|
)
|