mirror of
https://github.com/esuo1198/TaikoArcadeLoader.git
synced 2026-09-29 02:08:06 +03:00
Until now, if your path to the TaikoArcadeLoader repository contained spaces and you tried building bnusio, it would fail due to a linker error that looks something like this (from a real-world example): > LINK : fatal error LNK1181: cannot open input file 'Hinkle\Documents\TaikoArcadeLoader\exports.def' [C:\Users\Christian Hinkle\Documents\TaikoArcadeLoader\build\bnusio.vcxproj] Notice that it failed to open the "exports.def" file because the full file path was not used. It ignored everything preceeding the last space in the string. To fix this, we wrap the file path value in quotes, to indicate that the entire string (including spaces) should be treated as a single argument.
216 lines
5.5 KiB
CMake
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) |