213 lines
7.1 KiB
CMake
213 lines
7.1 KiB
CMake
cmake_minimum_required(VERSION 3.25)
|
|
|
|
set(CMAKE_VS_GLOBALS "VcpkgEnabled=false")
|
|
project(tech5 LANGUAGES C CXX)
|
|
|
|
if(NOT WIN32)
|
|
message(FATAL_ERROR "The recovered idTech 5 PC port currently supports Windows only.")
|
|
endif()
|
|
|
|
if(NOT CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
message(FATAL_ERROR
|
|
"The recovered Xbox 360 layouts require a Win32 host build. Configure with -A Win32."
|
|
)
|
|
endif()
|
|
|
|
get_filename_component(TECH5_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/.." ABSOLUTE)
|
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${TECH5_ROOT}/bin")
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${TECH5_ROOT}/bin")
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${TECH5_ROOT}/build/lib")
|
|
foreach(config Debug Release RelWithDebInfo MinSizeRel)
|
|
string(TOUPPER "${config}" config_upper)
|
|
set("CMAKE_RUNTIME_OUTPUT_DIRECTORY_${config_upper}" "${TECH5_ROOT}/bin")
|
|
set("CMAKE_LIBRARY_OUTPUT_DIRECTORY_${config_upper}" "${TECH5_ROOT}/bin")
|
|
set("CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${config_upper}"
|
|
"${TECH5_ROOT}/build/lib/${config}"
|
|
)
|
|
endforeach()
|
|
|
|
# This list is intentionally sourced only from the reconstructed tree. The
|
|
# Hex-Rays tree is evidence, never compiler input.
|
|
file(GLOB_RECURSE IDTECH5_IDLIB_SOURCES CONFIGURE_DEPENDS
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/shared/idlib/*.cpp"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/shared/idlib/*.h"
|
|
)
|
|
|
|
# These recovered subsystems remain outside the current PC build boundary.
|
|
set(IDTECH5_DEFERRED_PATTERNS
|
|
"/analysisclient\."
|
|
"/networking/amqp/"
|
|
"/typeinfo/typeinfofile\.cpp$"
|
|
)
|
|
foreach(pattern IN LISTS IDTECH5_DEFERRED_PATTERNS)
|
|
list(FILTER IDTECH5_IDLIB_SOURCES EXCLUDE REGEX "${pattern}")
|
|
endforeach()
|
|
|
|
add_library(idLib STATIC ${IDTECH5_IDLIB_SOURCES})
|
|
add_library(tech5::idLib ALIAS idLib)
|
|
target_include_directories(idLib PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/shared")
|
|
target_compile_features(idLib PUBLIC cxx_std_14)
|
|
target_compile_definitions(idLib PRIVATE
|
|
__IDLIB__
|
|
_CRT_SECURE_NO_DEPRECATE
|
|
_CRT_NONSTDC_NO_DEPRECATE
|
|
_USE_32BIT_TIME_T
|
|
)
|
|
target_link_libraries(idLib PUBLIC ws2_32 psapi)
|
|
set_property(TARGET idLib PROPERTY
|
|
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
|
|
)
|
|
set_target_properties(idLib PROPERTIES OUTPUT_NAME "idLib")
|
|
|
|
if(MSVC)
|
|
target_compile_options(idLib PRIVATE
|
|
/MP /W3 /arch:SSE2
|
|
/wd4244 /wd4267 /wd4305 /wd4467 /wd4595 /wd4996
|
|
)
|
|
endif()
|
|
|
|
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" PREFIX "Source"
|
|
FILES ${IDTECH5_IDLIB_SOURCES}
|
|
)
|
|
|
|
# Minimal framework resource ownership needed by recovered engine resources.
|
|
set(IDTECH5_FRAMEWORK_SOURCES
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/engine/framework/resource.cpp"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/engine/framework/resource.h"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/engine/framework/resourcelist.cpp"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/engine/framework/resourcelist.h"
|
|
)
|
|
|
|
add_library(framework STATIC ${IDTECH5_FRAMEWORK_SOURCES})
|
|
add_library(tech5::framework ALIAS framework)
|
|
target_include_directories(framework PUBLIC
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/engine"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/shared"
|
|
)
|
|
target_compile_features(framework PUBLIC cxx_std_14)
|
|
target_compile_definitions(framework PRIVATE
|
|
_CRT_SECURE_NO_DEPRECATE
|
|
_CRT_NONSTDC_NO_DEPRECATE
|
|
_USE_32BIT_TIME_T
|
|
)
|
|
target_link_libraries(framework PUBLIC tech5::idLib)
|
|
set_property(TARGET framework PROPERTY
|
|
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
|
|
)
|
|
if(MSVC)
|
|
target_compile_options(framework PRIVATE
|
|
/MP /W3 /arch:SSE2
|
|
/wd4244 /wd4267 /wd4305 /wd4467 /wd4595 /wd4996
|
|
)
|
|
endif()
|
|
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" PREFIX "Source"
|
|
FILES ${IDTECH5_FRAMEWORK_SOURCES}
|
|
)
|
|
|
|
# Collision model recovery is a separate engine library. As with idLib and
|
|
# GameLib, only reconstructed files under source/ are compiler inputs.
|
|
file(GLOB_RECURSE IDTECH5_CM_SOURCES CONFIGURE_DEPENDS
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/engine/cm/*.cpp"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/engine/cm/*.h"
|
|
)
|
|
|
|
add_library(cm STATIC ${IDTECH5_CM_SOURCES})
|
|
add_library(tech5::cm ALIAS cm)
|
|
target_include_directories(cm PUBLIC
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/engine"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/shared"
|
|
)
|
|
target_compile_features(cm PUBLIC cxx_std_14)
|
|
target_compile_definitions(cm PRIVATE
|
|
_CRT_SECURE_NO_DEPRECATE
|
|
_CRT_NONSTDC_NO_DEPRECATE
|
|
_USE_32BIT_TIME_T
|
|
)
|
|
target_link_libraries(cm PUBLIC tech5::framework tech5::idLib)
|
|
set_property(TARGET cm PROPERTY
|
|
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
|
|
)
|
|
set_target_properties(cm PROPERTIES OUTPUT_NAME "cm")
|
|
|
|
if(MSVC)
|
|
target_compile_options(cm PRIVATE
|
|
/MP /W3 /arch:SSE2
|
|
/wd4244 /wd4267 /wd4305 /wd4467 /wd4595 /wd4996
|
|
)
|
|
endif()
|
|
|
|
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" PREFIX "Source"
|
|
FILES ${IDTECH5_CM_SOURCES}
|
|
)
|
|
|
|
# Recovered AAS2 file/resource layer. The decompiler tree remains evidence;
|
|
# only the manually reconstructed PC sources below are compiled.
|
|
file(GLOB_RECURSE IDTECH5_AAS2FILE_SOURCES CONFIGURE_DEPENDS
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/engine/aas2file/*.cpp"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/engine/aas2file/*.h"
|
|
)
|
|
|
|
add_library(aas2file STATIC ${IDTECH5_AAS2FILE_SOURCES})
|
|
add_library(tech5::aas2file ALIAS aas2file)
|
|
target_include_directories(aas2file PUBLIC
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/engine"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/shared"
|
|
)
|
|
target_compile_features(aas2file PUBLIC cxx_std_14)
|
|
target_compile_definitions(aas2file PRIVATE
|
|
_CRT_SECURE_NO_DEPRECATE
|
|
_CRT_NONSTDC_NO_DEPRECATE
|
|
_USE_32BIT_TIME_T
|
|
)
|
|
target_link_libraries(aas2file PUBLIC tech5::framework tech5::idLib)
|
|
set_property(TARGET aas2file PROPERTY
|
|
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
|
|
)
|
|
set_target_properties(aas2file PROPERTIES OUTPUT_NAME "aas2file")
|
|
if(MSVC)
|
|
target_compile_options(aas2file PRIVATE
|
|
/MP /W3 /arch:SSE2
|
|
/wd4244 /wd4267 /wd4305 /wd4467 /wd4595 /wd4996
|
|
)
|
|
endif()
|
|
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" PREFIX "Source"
|
|
FILES ${IDTECH5_AAS2FILE_SOURCES}
|
|
)
|
|
|
|
# GameLib follows the same evidence boundary as idLib: only reconstructed
|
|
# files under source/ are compiler inputs. The Hex-Rays tree is never built.
|
|
file(GLOB_RECURSE IDTECH5_GAMELIB_SOURCES CONFIGURE_DEPENDS
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/engine/gamelib/*.cpp"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/engine/gamelib/*.h"
|
|
)
|
|
|
|
add_library(gameLib STATIC ${IDTECH5_GAMELIB_SOURCES})
|
|
add_library(tech5::gameLib ALIAS gameLib)
|
|
target_include_directories(gameLib PUBLIC
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/engine"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/shared"
|
|
)
|
|
target_compile_features(gameLib PUBLIC cxx_std_14)
|
|
target_compile_definitions(gameLib PRIVATE
|
|
_CRT_SECURE_NO_DEPRECATE
|
|
_CRT_NONSTDC_NO_DEPRECATE
|
|
_USE_32BIT_TIME_T
|
|
)
|
|
target_link_libraries(gameLib PUBLIC tech5::aas2file tech5::cm tech5::idLib)
|
|
set_property(TARGET gameLib PROPERTY
|
|
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
|
|
)
|
|
set_target_properties(gameLib PROPERTIES OUTPUT_NAME "gameLib")
|
|
|
|
if(MSVC)
|
|
target_compile_options(gameLib PRIVATE
|
|
/MP /W3 /arch:SSE2
|
|
/wd4244 /wd4267 /wd4305 /wd4467 /wd4595 /wd4996
|
|
)
|
|
endif()
|
|
|
|
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" PREFIX "Source"
|
|
FILES ${IDTECH5_GAMELIB_SOURCES}
|
|
)
|