1
1
mirror of synced 2025-01-18 08:44:45 +01:00
TaikoArcadeLoader/CMakeLists.txt
ptmaster 7dc76ed958 Refactor Plugins API / Card API / Qr API
Kinda fix exit voice issue by enter testmode before quit
fix bnusio::Update not invoked issue when fpsLimit=0
add option in config.toml for cursor (mouse)
move FixLanguage to testmode, upgrade it to support release attractdemo
add attractdemo control switch after attractmovie (only enable when FixLanguage on)
move unlock songs to testmode, add force option to release shop songs
move NusBusVolumeHook to audio patches
2024-11-30 03:19:36 +08:00

216 lines
5.5 KiB
CMake

cmake_minimum_required(VERSION 3.25)
project(TaikoArcadeLoader VERSION 1.0.0 LANGUAGES C CXX)
# Set C and C++ standards
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# Set warning level
if(MSVC)
add_compile_options(/W3)
# Set the source file encoding to UTF-8
add_compile_options(/utf-8)
else()
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
# Add project definitions
add_definitions(-DNOMINMAX -DLTC_NO_PROTOTYPES -D_CRT_SECURE_NO_WARNINGS)
# Include FetchContent module
include(FetchContent)
# Fetch tomlc99 (no built-in CMake support)
FetchContent_Declare(
tomlc99
GIT_REPOSITORY https://github.com/cktan/tomlc99.git
GIT_TAG master
)
FetchContent_GetProperties(tomlc99)
if(NOT tomlc99_POPULATED)
FetchContent_MakeAvailable(tomlc99)
add_library(tomlc99 STATIC ${tomlc99_SOURCE_DIR}/toml.c)
target_include_directories(tomlc99 PUBLIC ${tomlc99_SOURCE_DIR})
endif()
# Fetch stb (header-only library, no built-in CMake support)
FetchContent_Declare(
stb
GIT_REPOSITORY https://github.com/nothings/stb.git
GIT_TAG master
)
FetchContent_GetProperties(stb)
if(NOT stb_POPULATED)
FetchContent_MakeAvailable(stb)
add_library(stb INTERFACE)
target_include_directories(stb INTERFACE ${stb_SOURCE_DIR})
endif()
# Fetch zxing-cpp
FetchContent_Declare(
zxing_cpp
URL https://github.com/zxing-cpp/zxing-cpp/archive/refs/tags/v2.2.1.zip
)
set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(zxing_cpp)
# Fetch zlib
FetchContent_Declare(
zlib
GIT_REPOSITORY https://github.com/madler/zlib.git
GIT_TAG 51b7f2abdade71cd9bb0e7a373ef2610ec6f9daf
)
FetchContent_MakeAvailable(zlib)
# Fetch libtomcrypt
FetchContent_Declare(
libtomcrypt
GIT_REPOSITORY https://github.com/libtom/libtomcrypt.git
GIT_TAG 124e020437715b0d2647ed12632fa10e2cfe9234 # v1.18.2 does not have cmake
)
set(BUILD_SHARED OFF CACHE BOOL "" FORCE)
set(WITH_LTM OFF CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(libtomcrypt)
# Fetch pugixml
FetchContent_Declare(
pugixml
URL https://github.com/zeux/pugixml/archive/v1.14.tar.gz
)
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
set(PUGIXML_WCHAR_MODE ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(pugixml)
# Fetch safetyhook
FetchContent_Declare(
safetyhook
GIT_REPOSITORY https://github.com/cursey/safetyhook.git
GIT_TAG v0.4.1
)
set(SAFETYHOOK_FETCH_ZYDIS ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(safetyhook)
# Fetch SDL2
FetchContent_Declare(
SDL2
URL https://github.com/libsdl-org/SDL/releases/download/release-2.26.5/SDL2-2.26.5.tar.gz
)
set(SDL_SHARED OFF CACHE BOOL "" FORCE)
set(SDL_STATIC ON CACHE BOOL "" FORCE)
set(SDL_TEST OFF CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(SDL2)
# Fetch xxHash
FetchContent_Declare(
xxhash
URL https://github.com/Cyan4973/xxHash/archive/v0.8.2.tar.gz
SOURCE_SUBDIR cmake_unofficial
)
set(XXH_BUILD_SHARED OFF CACHE BOOL "" FORCE)
set(XXH_BUILD_STATIC ON CACHE BOOL "" FORCE)
set(XXH_BUILD_XXHSUM OFF CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(xxhash)
# Fetch Minhook
FetchContent_Declare(
minhook
GIT_REPOSITORY https://github.com/TsudaKageyu/minhook.git
GIT_TAG d862245d98fecd56dd7b1ca2f2e5185b75ecc780
)
FetchContent_MakeAvailable(minhook)
# Source files
set(SOURCES
src/dllmain.cpp
src/helpers.cpp
src/logger.cpp
src/poll.cpp
src/bnusio.cpp
src/patches/amauth.cpp
src/patches/dxgi.cpp
src/patches/fpslimiter.cpp
src/patches/audio.cpp
src/patches/plugins.cpp
src/patches/scanner.cpp
# src/patches/qr.cpp
src/patches/layeredfs.cpp
src/patches/testmode.cpp
src/patches/versions/JPN00.cpp
src/patches/versions/JPN08.cpp
src/patches/versions/JPN39.cpp
src/patches/versions/CHN00.cpp
)
# Create the library
add_library(bnusio SHARED ${SOURCES})
# Remove 'lib' prefix from the library name
set_target_properties(bnusio PROPERTIES PREFIX "")
# Include directories
target_include_directories(bnusio PRIVATE
src
${tomlc99_SOURCE_DIR}
${SDL2_SOURCE_DIR}/include
${xxhash_SOURCE_DIR}
${zlib_SOURCE_DIR}
${libtomcrypt_SOURCE_DIR}/src/headers
${minhook_SOURCE_DIR}/include
)
# Compiler definitions
target_compile_definitions(bnusio PRIVATE
_WIN32_WINNT=_WIN32_WINNT_WIN10
)
# Add link options
if(NOT MSVC)
target_link_options(bnusio PRIVATE -Wl,--allow-multiple-definition)
endif()
# Link libraries
target_link_libraries(bnusio PRIVATE
tomlc99
SDL2-static
xxhash
zlibstatic
libtomcrypt
safetyhook
ZXing::ZXing
pugixml
stb
ws2_32
ntdll
minhook
)
# Define log path; used to make the file path relative in the log calls.
# Last character (-) to remove the trailing slash in the log path
add_compile_definitions("SOURCE_ROOT=${CMAKE_CURRENT_SOURCE_DIR}/src-")
# Set runtime library to static
if(MSVC)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()
# Define the .def file
set(DEF_FILE "${CMAKE_CURRENT_SOURCE_DIR}/exports.def")
if (MSVC)
# Add the .def file to the target properties
set_target_properties(bnusio PROPERTIES LINK_FLAGS "/DEF:${DEF_FILE}")
endif()
add_custom_command(
TARGET bnusio POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/bnusio.dll"
"${CMAKE_SOURCE_DIR}/dist/bnusio.dll"
COMMENT "Copying bnusio.dll to dist directory"
)
# Set a default target
add_custom_target(default ALL DEPENDS bnusio)