2022-07-30 12:24:03 -04:00
cmake_minimum_required(VERSION 3.21 FATAL_ERROR)
2022-10-10 14:00:32 -04:00
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build libraries static" FORCE)
2022-10-11 04:37:46 -04:00
file(READ VERSION GEODE_VERSION)
2022-10-11 16:38:01 -04:00
string(STRIP "${GEODE_VERSION}" GEODE_VERSION)
2022-10-05 08:41:05 -04:00
project(geode-sdk VERSION ${GEODE_VERSION} LANGUAGES CXX C)
2022-07-30 12:24:03 -04:00
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
2022-10-11 16:56:12 -04:00
if (PROJECT_IS_TOP_LEVEL AND APPLE)
2022-10-04 06:32:40 -04:00
set(CMAKE_BUILD_TYPE Debug)
endif()
2022-07-30 12:24:03 -04:00
add_library(${PROJECT_NAME} INTERFACE)
2022-10-12 15:07:18 -04:00
if (CMAKE_BUILD_TYPE STREQUAL Debug OR CMAKE_BUILD_TYPE STREQUAL RelWithDebInfo)
target_compile_definitions(${PROJECT_NAME} INTERFACE -DGEODE_DEBUG)
endif()
2022-10-11 04:37:46 -04:00
# Rerun CMake on VERSION file change
set_target_properties(${PROJECT_NAME} PROPERTIES CMAKE_CONFIGURE_DEPENDS VERSION)
2022-07-30 12:24:03 -04:00
target_compile_definitions(${PROJECT_NAME} INTERFACE -DPROJECT_NAME=${CMAKE_PROJECT_NAME})
2022-10-12 17:22:43 -04:00
if (GEODE_DEBUG)
target_compile_definitions(${PROJECT_NAME} INTERFACE GEODE_DEBUG)
endif()
2022-07-30 12:24:03 -04:00
set(GEODE_CODEGEN_PATH ${CMAKE_CURRENT_BINARY_DIR}/codegenned)
set(GEODE_BIN_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin)
set(GEODE_LOADER_PATH ${CMAKE_CURRENT_SOURCE_DIR}/loader)
include(cmake/GeodeFile.cmake)
include(cmake/Platform.cmake)
target_sources(${PROJECT_NAME} INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/entry.cpp)
add_subdirectory(codegen)
add_custom_target(CodegenRun ALL
COMMAND Codegen ${GEODE_TARGET_PLATFORM} bindings ${GEODE_CODEGEN_PATH}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Run Codegen"
2022-10-13 07:00:41 -04:00
BYPRODUCTS ${GEODE_CODEGEN_PATH}/Geode/GeneratedSource.cpp
2022-07-30 12:24:03 -04:00
)
add_dependencies(${PROJECT_NAME} CodegenRun)
add_dependencies(CodegenRun Codegen)
2022-08-08 14:18:09 -04:00
# Hacky way to supress the not generated error
2022-10-13 07:00:41 -04:00
if (NOT EXISTS ${GEODE_CODEGEN_PATH}/Geode/GeneratedSource.cpp)
2022-08-08 14:18:09 -04:00
make_directory(${GEODE_CODEGEN_PATH})
2022-10-13 07:03:50 -04:00
make_directory(${GEODE_CODEGEN_PATH}/Geode)
2022-10-13 07:00:41 -04:00
file(TOUCH ${GEODE_CODEGEN_PATH}/Geode/GeneratedSource.cpp)
2022-08-08 14:18:09 -04:00
endif()
2022-10-13 07:00:41 -04:00
target_sources(${PROJECT_NAME} INTERFACE ${GEODE_CODEGEN_PATH}/Geode/GeneratedSource.cpp)
2022-07-30 12:24:03 -04:00
target_include_directories(${PROJECT_NAME} INTERFACE
2022-10-13 07:00:41 -04:00
${GEODE_CODEGEN_PATH}
2022-07-30 12:24:03 -04:00
${GEODE_LOADER_PATH}/include
${GEODE_LOADER_PATH}/include/Geode/cocos/
${GEODE_LOADER_PATH}/include/Geode/cocos/cocos2dx
${GEODE_LOADER_PATH}/include/Geode/cocos/cocos2dx/include
${GEODE_LOADER_PATH}/include/Geode/cocos/cocos2dx/support/zip_support
${GEODE_LOADER_PATH}/include/Geode/cocos/cocos2dx/kazmath/include
${GEODE_LOADER_PATH}/include/Geode/cocos/extensions
${GEODE_LOADER_PATH}/include/Geode/fmod
)
target_link_directories(${PROJECT_NAME} INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/loader/include/link)
add_subdirectory(filesystem)
add_subdirectory(fmt)
target_link_libraries(${PROJECT_NAME} INTERFACE filesystem fmt)
2022-08-08 14:18:09 -04:00
2022-07-30 12:24:03 -04:00
if (NOT EXISTS ${GEODE_BIN_PATH})
make_directory(${GEODE_BIN_PATH})
endif()
2022-10-03 01:06:27 -04:00
if (${GEODE_LINK_NIGHTLY})
2022-07-30 12:24:03 -04:00
set(GEODE_PLATFORM_BIN_PATH ${GEODE_BIN_PATH}/nightly/${GEODE_PLATFORM_BINARY})
else()
set(GEODE_PLATFORM_BIN_PATH ${GEODE_BIN_PATH}/${PROJECT_VERSION}/${GEODE_PLATFORM_BINARY})
endif()
if (PROJECT_IS_TOP_LEVEL)
2022-08-08 14:18:09 -04:00
add_subdirectory(loader)
2022-07-30 12:24:03 -04:00
target_link_libraries(${PROJECT_NAME} INTERFACE geode-loader)
elseif(EXISTS ${GEODE_PLATFORM_BIN_PATH})
target_link_libraries(${PROJECT_NAME} INTERFACE "${GEODE_PLATFORM_BIN_PATH}")
2022-10-14 16:44:33 -04:00
target_precompile_headers(${PROJECT_NAME} INTERFACE
2022-10-14 16:42:35 -04:00
"${CMAKE_CURRENT_SOURCE_DIR}/include/Geode/DefaultInclude.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/Geode/Loader.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/Geode/UI.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/include/Geode/cocos/cocos2dx/include/cocos2d.h"
"${CMAKE_CURRENT_SOURCE_DIR}/include/Geode/cocos/extensions/cocos-ext.h"
)
2022-07-30 12:24:03 -04:00
else()
message(FATAL_ERROR "No valid loader binary to link to! Install a pre-built binary for version ${PROJECT_VERSION} with Geode CLI or build it from source.")
endif()