mirror of
https://github.com/geode-sdk/geode.git
synced 2024-11-27 01:45:35 -05:00
041a98ee4d
compilation still won't work, pending implementations for gdstl/codegen/tuliphook. the first two should be mostly done already. may also be good to get FileWatcher, crashlog, and the file picker implemented but they aren't necessary the libcurl.a and libssl.a files were built using https://github.com/ibaoger/libcurl-android. they are placed in the link/android folder because putting them in the link folder confused the macOS build. once built, the geode binary should be loaded after nativeSetApkPath is ran (otherwise the directory setup crashes). in the future it would be nice if the internal mod also did save data path redirection, as base GD is incapable of doing this Co-authored-by: mat <26722564+matcool@users.noreply.github.com>
229 lines
6.6 KiB
CMake
229 lines
6.6 KiB
CMake
cmake_minimum_required(VERSION 3.21 FATAL_ERROR)
|
|
|
|
project(geode-loader VERSION ${GEODE_VERSION} LANGUAGES C CXX)
|
|
if (GEODE_VERSION_TAG_TYPE)
|
|
if (GEODE_VERSION_TAG_NUMBER)
|
|
set(PROJECT_VERSION_TAG_CONSTR "geode::VersionTag(geode::VersionTag::${GEODE_VERSION_TAG_TYPE}, ${GEODE_VERSION_TAG_NUMBER})")
|
|
else()
|
|
set(PROJECT_VERSION_TAG_CONSTR "geode::VersionTag::${GEODE_VERSION_TAG_TYPE}")
|
|
endif()
|
|
else()
|
|
set(PROJECT_VERSION_TAG_CONSTR "std::nullopt")
|
|
endif()
|
|
|
|
if (GEODE_VERSION_TAG)
|
|
set(PROJECT_VERSION_SUFFIX "-${GEODE_VERSION_TAG}")
|
|
else()
|
|
set(PROJECT_VERSION_SUFFIX "")
|
|
endif()
|
|
|
|
# https://stackoverflow.com/a/63924044/9124836
|
|
execute_process(
|
|
COMMAND git rev-parse --short HEAD
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
OUTPUT_VARIABLE GEODE_COMMIT_HASH
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
ERROR_QUIET
|
|
)
|
|
|
|
# Package info file for internal representation
|
|
configure_file(resources/mod.json.in ${CMAKE_CURRENT_SOURCE_DIR}/resources/mod.json)
|
|
file(READ resources/mod.json LOADER_MOD_JSON)
|
|
configure_file(${GEODE_ROOT_PATH}/VERSION ${CMAKE_CURRENT_SOURCE_DIR}/resources/version COPYONLY)
|
|
configure_file(${GEODE_ROOT_PATH}/CHANGELOG.md ${CMAKE_CURRENT_SOURCE_DIR}/resources/changelog.md COPYONLY)
|
|
configure_file(src/internal/about.hpp.in ${CMAKE_CURRENT_SOURCE_DIR}/src/internal/about.hpp)
|
|
|
|
# Source files
|
|
file(GLOB SOURCES CONFIGURE_DEPENDS
|
|
src/cocos2d-ext/*.cpp
|
|
src/cocos2d-ext/zip/*.cpp
|
|
src/core/*.cpp
|
|
src/hooks/*.cpp
|
|
src/ids/*.cpp
|
|
src/internal/*.cpp
|
|
src/platform/mac/*.cpp
|
|
src/platform/ios/*.cpp
|
|
src/platform/android/*.cpp
|
|
src/loader/*.cpp
|
|
src/main.cpp
|
|
src/utils/*.cpp
|
|
src/ui/*.cpp
|
|
src/ui/nodes/*.cpp
|
|
src/ui/internal/*.cpp
|
|
src/ui/internal/credits/*.cpp
|
|
src/ui/internal/dev/*.cpp
|
|
src/ui/internal/info/*.cpp
|
|
src/ui/internal/list/*.cpp
|
|
src/ui/internal/settings/*.cpp
|
|
)
|
|
|
|
# Obj-c sources
|
|
file(GLOB OBJC_SOURCES
|
|
src/platform/Objcpp.mm
|
|
)
|
|
set_source_files_properties(${OBJC_SOURCES} PROPERTIES SKIP_PRECOMPILE_HEADERS ON)
|
|
|
|
|
|
# Add platform sources
|
|
if (WIN32)
|
|
|
|
file(GLOB WIN_SOURCES CONFIGURE_DEPENDS
|
|
src/platform/windows/*.cpp
|
|
)
|
|
list(APPEND SOURCES ${WIN_SOURCES})
|
|
|
|
elseif(IOS)
|
|
|
|
file(GLOB IOS_SOURCES CONFIGURE_DEPENDS
|
|
src/platform/ios/*.cpp
|
|
)
|
|
list(APPEND SOURCES ${IOS_SOURCES})
|
|
list(APPEND SOURCES ${OBJC_SOURCES})
|
|
|
|
elseif(APPLE)
|
|
|
|
file(GLOB MAC_SOURCES CONFIGURE_DEPENDS
|
|
src/platform/mac/*.cpp
|
|
)
|
|
list(APPEND SOURCES ${MAC_SOURCES})
|
|
list(APPEND SOURCES ${OBJC_SOURCES})
|
|
|
|
elseif(ANDROID)
|
|
|
|
file(GLOB ANDROID_SOURCES CONFIGURE_DEPENDS
|
|
src/platform/android/*.cpp
|
|
)
|
|
list(APPEND SOURCES ${ANDROID_SOURCES})
|
|
|
|
endif()
|
|
|
|
# Embed version info in binary
|
|
if (WIN32)
|
|
configure_file(src/platform/windows/info.rc.in info.rc)
|
|
set(SOURCES ${SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/info.rc)
|
|
endif()
|
|
|
|
add_library(${PROJECT_NAME} SHARED ${SOURCES})
|
|
|
|
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)
|
|
|
|
make_directory("${GEODE_BIN_PATH}/nightly")
|
|
|
|
# Prevent SDK from activating a loader build
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES
|
|
PREFIX ""
|
|
OUTPUT_NAME "Geode"
|
|
# i'm going to say a slur that not a single soul has uttered in the last 200 years
|
|
LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${GEODE_BIN_PATH}/nightly"
|
|
RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${GEODE_BIN_PATH}/nightly"
|
|
ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO "${GEODE_BIN_PATH}/nightly"
|
|
LIBRARY_OUTPUT_DIRECTORY_RELEASE "${GEODE_BIN_PATH}/nightly"
|
|
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${GEODE_BIN_PATH}/nightly"
|
|
ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${GEODE_BIN_PATH}/nightly"
|
|
LIBRARY_OUTPUT_DIRECTORY_MINSIZEREL "${GEODE_BIN_PATH}/nightly"
|
|
RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${GEODE_BIN_PATH}/nightly"
|
|
ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL "${GEODE_BIN_PATH}/nightly"
|
|
LIBRARY_OUTPUT_DIRECTORY "${GEODE_BIN_PATH}/nightly"
|
|
RUNTIME_OUTPUT_DIRECTORY "${GEODE_BIN_PATH}/nightly"
|
|
ARCHIVE_OUTPUT_DIRECTORY "${GEODE_BIN_PATH}/nightly"
|
|
)
|
|
|
|
if (GEODE_NO_UNDEFINED_VIRTUALS)
|
|
target_compile_definitions(${PROJECT_NAME} PUBLIC GEODE_NO_UNDEFINED_VIRTUALS)
|
|
endif()
|
|
|
|
# Package resources for UI
|
|
package_geode_resources_now(
|
|
${PROJECT_NAME}
|
|
${CMAKE_CURRENT_SOURCE_DIR}/resources
|
|
${GEODE_BIN_PATH}/nightly/resources
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/internal/resources.hpp
|
|
)
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE
|
|
src/
|
|
src/loader/
|
|
src/internal/
|
|
src/platform/
|
|
src/gui/
|
|
hash/
|
|
./
|
|
)
|
|
|
|
if (APPLE)
|
|
# For profiling
|
|
target_compile_options(${PROJECT_NAME} PUBLIC "-ftime-trace")
|
|
# target_link_options(${PROJECT_NAME} PRIVATE "-Wl,-e,_dynamicInit")
|
|
#set_property(TARGET ${PROJECT_NAME} PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E time")
|
|
endif()
|
|
|
|
target_compile_definitions(${PROJECT_NAME} PUBLIC GEODE_EXPORTING MAT_JSON_EXPORTING)
|
|
|
|
# These are only needed for building source :-)
|
|
if (NOT GEODE_BUILDING_DOCS)
|
|
# Markdown support
|
|
CPMAddPackage("gh:mity/md4c#e9ff661")
|
|
|
|
# Zip support (needed for in-memory streams, which zlib's minizip doesn't support)
|
|
set(MZ_LZMA Off CACHE INTERNAL "Enables LZMA & XZ compression")
|
|
set(MZ_ZSTD Off CACHE INTERNAL "")
|
|
CPMAddPackage("gh:zlib-ng/minizip-ng#cee6d8c")
|
|
|
|
# Regex support
|
|
CPMAddPackage("gh:google/re2#954656f")
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE ${md4c_SOURCE_DIR}/src)
|
|
|
|
target_link_libraries(${PROJECT_NAME} md4c re2 minizip)
|
|
endif()
|
|
|
|
target_link_libraries(${PROJECT_NAME} z TulipHook geode-sdk mat-json)
|
|
|
|
|
|
# Use precompiled headers for faster builds
|
|
if (NOT GEODE_DISABLE_PRECOMPILED_HEADERS)
|
|
target_precompile_headers(${PROJECT_NAME} PRIVATE
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/include/Geode/Geode.hpp"
|
|
# "${CMAKE_CURRENT_SOURCE_DIR}/include/Geode/Utils.hpp"
|
|
# "${CMAKE_CURRENT_SOURCE_DIR}/include/Geode/Loader.hpp"
|
|
# "${CMAKE_CURRENT_SOURCE_DIR}/include/Geode/UI.hpp"
|
|
# "${CMAKE_CURRENT_SOURCE_DIR}/include/Geode/Bindings.hpp"
|
|
# "${CMAKE_CURRENT_SOURCE_DIR}/include/Geode/cocos/include/cocos2d.h"
|
|
# "${CMAKE_CURRENT_SOURCE_DIR}/include/Geode/cocos/extensions/cocos-ext.h"
|
|
)
|
|
endif()
|
|
|
|
# Create launcher
|
|
if (APPLE)
|
|
set_target_properties(geode-loader PROPERTIES
|
|
SYSTEM_NAME MacOS
|
|
OSX_DEPLOYMENT_TARGET 10.9
|
|
APPLE_SILICON_PROCESSOR x86_64
|
|
)
|
|
|
|
add_subdirectory(launcher/mac)
|
|
|
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm" OR GEODE_TARGET_PLATFORM STREQUAL "iOS")
|
|
add_custom_command(TARGET geode-loader
|
|
POST_BUILD COMMAND
|
|
${CMAKE_INSTALL_NAME_TOOL} -id \"/Library/MobileSubstrate/DynamicLibraries/Geode.dylib\"
|
|
$<TARGET_FILE:geode-loader>)
|
|
endif()
|
|
elseif (WIN32)
|
|
add_subdirectory(launcher/windows)
|
|
|
|
target_link_libraries(${PROJECT_NAME} dbghelp)
|
|
|
|
# disable warnings about CCNode::setID
|
|
if (MSVC)
|
|
target_link_options(${PROJECT_NAME} PUBLIC /ignore:4217)
|
|
endif()
|
|
endif()
|
|
|
|
# Build test mods if needed
|
|
if(NOT GEODE_DONT_BUILD_TEST_MODS)
|
|
add_subdirectory(test)
|
|
endif()
|
|
|
|
# Build index hashing algorithm test program
|
|
add_subdirectory(hash)
|