RDI/CMakeLists.txt
JackCarterSmith 05b3c1e88a
HOB file management
HOB file handler prototype

Mesh building should be moved to RSPModel lib

Tree rendering unicode chars fix


Updated version detection


HOB file handler




Debug HOB handler

Pointer probably deallocated, need to check it

Fix HOB loader and disposer


Using HOB instance instead of static methods


Review DLL support for MSVC build


Vertices values calculation fix


Added export obj method to debug tool


Missed levels name separation


Cleaned model processing

Multithreading branch reported to later
2023-02-03 18:12:04 +01:00

240 lines
8.4 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.15)
cmake_policy(VERSION 3.15)
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")
else()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Wall")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Wall")
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.3 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.81.0 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 17)
set_property(TARGET rdi-lib PROPERTY CXX_STANDARD 17)
set_property(TARGET rdi-lib PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
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}")
# As GNU-GCC have different runtime lib, we statically link them for this type of build
if (NOT MSVC)
target_link_libraries(rdi-lib PRIVATE
-static-libgcc
-static-libstdc++
)
endif()
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 17)
set_property(TARGET rdi-libstatic PROPERTY CXX_STANDARD 17)
set_property(TARGET rdi-libstatic PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
set_target_properties(rdi-libstatic PROPERTIES VERSION 1.0.0)
target_include_directories(rdi-libstatic PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
# As GNU-GCC have different runtime lib, we statically link them for this type of build
if (NOT MSVC)
target_link_libraries(rdi-libstatic PRIVATE
-static-libgcc
-static-libstdc++
)
endif()
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 17)
set_property(TARGET rdi-debug-tools PROPERTY CXX_STANDARD 17)
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 17)
set_property(TARGET erso-debug-tools PROPERTY CXX_STANDARD 17)
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 17)
set_property(TARGET krennic-debug-tools PROPERTY CXX_STANDARD 17)
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()
# Static libgcc and libstdc++ already linked in library
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}
)