152 lines
5.0 KiB
CMake
152 lines
5.0 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)
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
|
|
|
|
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)
|
|
|
|
|
|
# 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 RSP_LIB_PUBLIC_HRDS ./include/*.h)
|
|
|
|
|
|
# Building instructions for RSP-Texture library
|
|
if(DEFINED ENV{CI})
|
|
set(CMAKE_BUILD_TYPE RELEASE)
|
|
endif()
|
|
|
|
#if(BUILD_TOOLS)
|
|
# set(RDI_TARGETS_LIST rdi-tools)
|
|
#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}")
|
|
|
|
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)
|
|
|
|
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()
|
|
|
|
|
|
# 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}
|
|
)
|