Cxbx-Reloaded/projects/cxbx/CMakeLists.txt

192 lines
4.2 KiB
CMake

cmake_minimum_required (VERSION 3.12)
project(cxbx)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 17)
# Suppress extra stuff from generated solution
set(CMAKE_SUPPRESS_REGENERATION true)
include_directories(
"${CXBXR_ROOT_DIR}/src"
"${CXBXR_ROOT_DIR}/src/common"
"${CXBXR_ROOT_DIR}/src/common/Win32"
"${CXBXR_ROOT_DIR}/import/OpenXDK/include"
"${CXBXR_ROOT_DIR}/import/distorm/include"
"${CXBXR_ROOT_DIR}/import/glew-2.0.0/include"
"${CXBXR_ROOT_DIR}/import/DirectX9/include"
"${CXBXR_ROOT_DIR}/import/simpleini"
"${CXBXR_ROOT_DIR}/import/winpcap/Include"
"${CXBXR_ROOT_DIR}/import/xxHash"
)
link_directories(
"${CXBXR_ROOT_DIR}/import/distorm/lib/Win32"
"${CXBXR_ROOT_DIR}/import/glew-2.0.0/lib/Release/Win32"
"${CXBXR_ROOT_DIR}/import/DirectX9/lib"
"${CXBXR_ROOT_DIR}/import/winpcap/Lib"
)
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
add_compile_definitions(
_CRT_SECURE_NO_WARNINGS
# Windows 7 minimum requirement
_WIN32_WINNT=0x0601
LTM_DESC
USE_LTM
LTC_NO_TEST
LTC_NO_CIPHERS
LTC_NO_HASHES
LTC_NO_MACS
LTC_NO_PRNGS
LTC_NO_MISC
LTC_NO_PROTOTYPES
)
# Reference: https://docs.microsoft.com/en-us/cpp/build/reference/compiler-options-listed-alphabetically
add_compile_options(
# Catch synchronous (C++) exceptions only
# plus assume extern "C" may throw exception
/EHs
# Compile multiple source files by using multiple processes.
/MP
# Enable string pooling (reduce duplicate strings)
/GF
# Enable SSE2 code generation
/arch:SSE2
)
endif()
add_compile_definitions(NOMINMAX
# Use inline XXHash version
XXH_INLINE_ALL
)
file (GLOB RESOURCES
"${CXBXR_ROOT_DIR}/CONTRIBUTORS"
"${CXBXR_ROOT_DIR}/COPYING"
"${CXBXR_ROOT_DIR}/README.md"
"${CXBXR_ROOT_DIR}/src/gui/resource/.editorconfig"
"${CXBXR_ROOT_DIR}/src/gui/resource/Cxbx.rc"
"${CXBXR_ROOT_DIR}/src/gui/resource/Cxbx-R.ico"
"${CXBXR_ROOT_DIR}/src/gui/resource/Logo.bmp"
"${CXBXR_ROOT_DIR}/src/gui/resource/Logo-License-CC4.bmp"
"${CXBXR_ROOT_DIR}/src/.editorconfig"
)
source_group(TREE ${CXBXR_ROOT_DIR}/src PREFIX header FILES
${CXBXR_HEADER_GUIv1}
${CXBXR_HEADER_COMMON}
${CXBXR_HEADER_EMU}
)
source_group(TREE ${CXBXR_ROOT_DIR}/src PREFIX source FILES
${CXBXR_SOURCE_GUIv1}
${CXBXR_SOURCE_COMMON}
${CXBXR_SOURCE_EMU}
)
source_group(TREE ${CXBXR_ROOT_DIR} FILES ${RESOURCES})
add_executable(cxbx WIN32 ${RESOURCES}
${CXBXR_HEADER_GUIv1}
${CXBXR_HEADER_COMMON}
${CXBXR_HEADER_EMU}
${CXBXR_SOURCE_GUIv1}
${CXBXR_SOURCE_COMMON}
${CXBXR_SOURCE_EMU}
${CXBXR_GIT_VERSION_H}
)
# Link and compile flags
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
# Reference: https://docs.microsoft.com/en-us/cpp/build/reference/linker-options
set_target_properties(cxbx PROPERTIES
LINK_FLAGS "
/INCREMENTAL:NO
/LARGEADDRESSAWARE
/FIXED
/SAFESEH:NO
/DYNAMICBASE:NO
/BASE:0x10000
/STACK:65536,65536
/NODEFAULTLIB:libcmt
/DELAYLOAD:wpcap.dll
"
LINK_FLAGS_RELEASE "
/LTCG
/DEBUG
"
)
# Reference: https://docs.microsoft.com/en-us/cpp/build/reference/compiler-options-listed-alphabetically
# /Zi = create a PDB file without affecting optimization
# /Ob2 = Controls inline expansion of functions.
# /Oi = Generate intrinsic functions
# /Ot = In favor of using fast code than small code
# /GL = Whole program optimization
# /GS- = Remove buffer security check
# /Gy = Enable function-level linking
# /Qpar = Enable automatic parallelize loops in the code
# Set optimization options for release build
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}
/Zi
/Ob2
/Oi
/Ot
/GL
/GS-
/Gy
/Qpar
"
)
# disable optimization for CxbxKrnl.cpp file
set_source_files_properties(
${CXBXR_KRNL_CPP} PROPERTIES COMPILE_FLAGS "/Od /GL-"
)
endif()
# Windows libraries
set(WINS_LIB
legacy_stdio_definitions
d3d9
d3dcompiler
dinput8
dxguid
odbc32
odbccp32
Shlwapi
dxerr9
ws2_32
dsound
winmm
ddraw
d3dx9
dbghelp
comctl32
XINPUT9_1_0
Iphlpapi
wpcap
)
target_link_libraries(cxbx
PUBLIC libXbSymbolDatabase
subhook
libtomcrypt
SDL2
${WINS_LIB}
)
if(${CMAKE_GENERATOR} MATCHES "Visual Studio ([^9]|[9][0-9])")
add_dependencies(cxbx cxbxr-debugger)
endif()
add_dependencies(cxbx cxbxr-ldr cxbxr-emu misc-batch)