Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
145 changes: 72 additions & 73 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
cmake_minimum_required(VERSION 3.20)
cmake_minimum_required(VERSION 3.24)

set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")

project(Hell2Modding CXX C ASM ASM_MASM)

set(SRC_DIR "${PROJECT_SOURCE_DIR}/src")

# Fetch modules

set(CMAKE_POLICY_VERSION_MINIMUM 3.5)

message("\nFetching modules")

set(SRC_DIR "${PROJECT_SOURCE_DIR}/src")

# Fetch modules
message(STATUS "\nFetching modules")
include(cmake_scripts/capstone.cmake)
include(cmake_scripts/eastl.cmake)
include(cmake_scripts/git.cmake)
Expand All @@ -22,7 +23,6 @@ include(cmake_scripts/rom.cmake)
include(cmake_scripts/safetyhook.cmake)
include(cmake_scripts/tolk.cmake)

message(STATUS "Hell2Modding")
file(GLOB_RECURSE SRC_MAIN
"${SRC_DIR}/**.hpp"
"${SRC_DIR}/**.h"
Expand All @@ -34,79 +34,78 @@ file(GLOB_RECURSE SRC_MAIN
"${SRC_DIR}/**.rc"
)

add_compile_options(/bigobj)
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")

if (FINAL)
add_compile_definitions(FINAL)
if(CMAKE_GENERATOR MATCHES "Visual Studio|Xcode")
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
source_group(
TREE ${SRC_DIR}
PREFIX "src"
FILES ${SRC_MAIN}
)
endif()

message(STATUS "Hell2Modding")
add_library(Hell2Modding MODULE "${SRC_MAIN}")

set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(TARGET Hell2Modding PROPERTY CXX_STANDARD 23)

source_group(TREE ${SRC_DIR} PREFIX "src" FILES ${SRC_MAIN})

target_include_directories(Hell2Modding PRIVATE
"${SRC_DIR}"
"${eastl_SOURCE_DIR}/include"
"${tolk_SOURCE_DIR}/include"
"${lpeg_SOURCE_DIR}"
"${luasocket_SOURCE_DIR}/src"
"${raw_pdb_SOURCE_DIR}/src"
"${capstone_SOURCE_DIR}/include/"
target_compile_options(Hell2Modding
PUBLIC
$<$<OR:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>:/bigobj;/utf-8>
)
target_compile_features(Hell2Modding PRIVATE cxx_std_23)
target_compile_definitions(Hell2Modding
PUBLIC
$<$<BOOL:${FINAL}>:FINAL>
_CRT_SECURE_NO_WARNINGS
NOMINMAX
WIN32_LEAN_AND_MEAN
)

target_precompile_headers(Hell2Modding PRIVATE "${SRC_DIR}/common.hpp")

target_link_libraries(Hell2Modding PRIVATE ReturnOfModdingBase dxgi dxguid Tolk lpeg_static luasocket_static wsock32 ws2_32 EASTL raw_pdb capstone-static safetyhook Zydis::Zydis ${LOVELY_LIB} userenv ntdll)

set_property(TARGET Hell2Modding PROPERTY COMPILE_WARNING_AS_ERROR ON)

add_compile_definitions(Hell2Modding
"_CRT_SECURE_NO_WARNINGS"
"NOMINMAX"
"WIN32_LEAN_AND_MEAN"
target_include_directories(Hell2Modding PRIVATE ${SRC_DIR})
target_link_libraries(Hell2Modding
PRIVATE
ReturnOfModdingBase
dxgi
dxguid
Tolk
lpeg_static
luasocket_static
wsock32
ws2_32
EASTL
raw_pdb
capstone
safetyhook
Zydis::Zydis
${LOVELY_LIB}
userenv
ntdll
)
set_target_properties(Hell2Modding
PROPERTIES
COMPILE_WARNING_AS_ERROR ON
OUTPUT_NAME "d3d12_"
)

if (MSVC)
if (FINAL)
# Aggresive inlining (Release)
string(REPLACE "Ob2" "Ob3" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
# Aggresive inlining (RelWithDebInfo)
string(REPLACE "Ob1" "Ob3" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
# Enable intrinsics
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Oi")
# Favor fast code
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Ot")
# -ffast-math (fused multiply-add if the arch allows)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fp:fast")
# Whole program optimization
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GL")
# Function-level linking
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Gy")
# Disable Buffer Security Check
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GS-")
# Package global data in COMDAT sections for optimization.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Gw")

# For all objects:
# - strip unused functions
# - fold identical functions
# - link-time code generation
string(REPLACE "INCREMENTAL" "INCREMENTAL:NO" CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}")
string(REPLACE "INCREMENTAL" "INCREMENTAL:NO" CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO}")
string(REPLACE "INCREMENTAL" "INCREMENTAL:NO" CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO}")
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /OPT:ICF,REF /LTCG")
set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /OPT:ICF,REF /LTCG")
set(CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO} /OPT:ICF,REF /LTCG")

set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /PDBALTPATH:d3d12.pdb")
set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /PDBALTPATH:d3d12.pdb")
set(CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO} /PDBALTPATH:d3d12.pdb")
endif()
if(MSVC AND FINAL)
target_compile_options(Hell2Modding
PUBLIC
$<$<CONFIG:Release>:/Ob3> # Aggressive inlining (Release)
$<$<CONFIG:RelWithDebInfo>:/Ob3> # Aggressive inlining (RelWithDebInfo)
/Oi # Enable intrinsics
/Ot # Favor fast code
/fp:fast # -ffast-math (fused multiply-add if the arch allows)
/GL # Whole program optimization
/Gy # Function-level linking
/GS- # Disable Buffer Security Check
/Gw # Package global data in COMDAT sections for optimization.
)

target_link_options(Hell2Modding
PUBLIC
$<$<CONFIG:RelWithDebInfo>:
/INCREMENTAL:NO # Disable incremental linking for space
/OPT:ICF,REF # Strip unused functions and fold identical ones
/LTCG # Link-time code generation
/PDBALTPATH:d3d12.pdb # Provide alternate PDB path
>
)
endif()

set_target_properties(Hell2Modding PROPERTIES OUTPUT_NAME "d3d12_")
71 changes: 71 additions & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
{
"version": 5,
"cmakeMinimumRequired": {
"major": 3,
"minor": 24,
"patch": 0
},
"configurePresets": [
{
"name": "gen-ninja",
"hidden": true,
"generator": "Ninja"
},
{
"name": "build-type-deb",
"hidden": true,
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "build-type-rel-with-deb",
"hidden": true,
"cacheVariables": {
"CMAKE_BUILD_TYPE": "RelWithDebInfo"
}
},
{
"name": "arch_msvc_x64",
"hidden": true,
"architecture": {
"value": "x64",
"strategy": "external"
}
},
{
"name": "common-structure",
"hidden": true,
"binaryDir": "${sourceDir}/out/build/${presetName}",
"installDir": "${sourceDir}/out/install/${presetName}"
},
{
"name": "x64-Release-FastCompile",
"inherits": [
"gen-ninja",
"build-type-rel-with-deb",
"arch_msvc_x64",
"common-structure"
]
},
{
"name": "x64-Release-FINAL",
"inherits": "x64-Release-FastCompile",
"cacheVariables": {
"FINAL": {
"type": "BOOL",
"value": "ON"
}
}
},
{
"name": "x64-Debug",
"inherits": [
"gen-ninja",
"build-type-deb",
"arch_msvc_x64",
"common-structure"
]
}
]
}
45 changes: 0 additions & 45 deletions CMakeSettings.json

This file was deleted.

8 changes: 5 additions & 3 deletions cmake_scripts/capstone.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@ include(FetchContent)
FetchContent_Declare(
capstone
GIT_REPOSITORY https://github.com/aquynh/capstone.git
GIT_TAG 0f1674223452827493357dd7258145fe9f51cd05
GIT_TAG 6.0.0-Alpha6
)

set(CAPSTONE_BUILD_SHARED OFF CACHE BOOL "Disable shared builds of capstone" FORCE)
set(CAPSTONE_BUILD_TESTS OFF CACHE BOOL "Disable capstone tests" FORCE)
set(CAPSTONE_X86_ATT_DISABLE ON CACHE BOOL "Disble ATT syntax" FORCE)
set(CAPSTONE_X86_ATT_DISABLE ON CACHE BOOL "Disable ATT syntax" FORCE)
set(CAPSTONE_ARCHITECTURE_DEFAULT OFF CACHE BOOL "Disable all architecture by default" FORCE)
set(CAPSTONE_X86_SUPPORT ON CACHE BOOL "Enable x86 architecture" FORCE)

FetchContent_MakeAvailable(capstone)
set(CAPSTONE_INCLUDES ${capstone_SOURCE_DIR}/include/)
37 changes: 22 additions & 15 deletions cmake_scripts/luasocket.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -26,25 +26,32 @@ set(FILES
${luasocket_SOURCE_DIR}/src/mime.c
)

set(CMAKE_SHARED_LIBRARY_PREFIX "")
add_library(luasocket_static STATIC ${FILES})
set_target_properties(luasocket_static PROPERTIES OUTPUT_NAME "luasocket")

if (WIN32)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
endif ()
target_compile_definitions(luasocket_static PUBLIC $<$<BOOL:${WIN32}>:_CRT_SECURE_NO_WARNINGS>)

find_package(Lua)
if (LUA_FOUND)
target_link_libraries(luasocket_static PRIVATE ${LUA_LIBRARIES} wsock32 ws2_32)
target_include_directories(luasocket_static PRIVATE ${LUA_INCLUDE_DIR})
else()
target_link_libraries(luasocket_static PRIVATE lua_static wsock32 ws2_32)
endif()

set_target_properties(luasocket_static PROPERTIES OUTPUT_NAME luasocket)
set_target_properties(luasocket_static PROPERTIES PREFIX "")

target_link_libraries(luasocket_static
PRIVATE
$<IF:$<BOOL:${LUA_FOUND}>,${LUA_LIBRARIES},lua_static>
wsock32
ws2_32
)

target_include_directories(luasocket_static
PUBLIC
${luasocket_SOURCE_DIR}/src
PRIVATE
$<$<BOOL:${LUA_FOUND}>:${LUA_INCLUDE_DIR}> # FIXME: It'd be better if lua_static did populate its INTERFACE_INCLUDE_DIRECTORIES property instead
)

set_target_properties(luasocket_static
PROPERTIES
OUTPUT_NAME luasocket
PREFIX ""
)

install(
TARGETS luasocket_static
RENAME luasocket
Expand Down