Path: blob/master/CMakeLists.txt
338 views
cmake_minimum_required(VERSION 3.13)1project(SonicMania)23option(WITH_RSDK "Whether or not to build with RSDKv5. Defaults to true" ON)45if(NOT DEFINED GAME_STATIC)6if(WIN32)7set(GAME_STATIC OFF)8elseif(UNIX)9set(GAME_STATIC OFF)10else()11set(GAME_STATIC ON)12endif()13endif()1415option(GAME_STATIC "Whether or not to build the game as a static library." $<BOOL:$<IF:WITH_RSDK,ON,OFF>>)1617option(MANIA_FIRST_RELEASE "Whether or not to build Mania's first release. Defaults to false" OFF)18if(MANIA_FIRST_RELEASE)19set(MANIA_PREPLUS ON)20else()21option(MANIA_PREPLUS "Whether or not to build Mania pre-plus. Defaults to false" OFF)22endif()232425if(NOT MANIA_PREPLUS)26set(GAME_VERSION 6 CACHE STRING "The game version to use. Defaults to 6 == Last Steam release")27else()28set(GAME_VERSION 3 CACHE STRING "The game version to use. Defaults to 3 == Last pre-plus release")29endif()3031set(GAME_NAME "SonicMania" CACHE STRING "The game directory to look into")32set(GAME_OUTPUT_NAME "Game" CACHE STRING "The name of the built library")3334option(GAME_INCLUDE_EDITOR "Whether or not to include editor functions. Defaults to true" ON)3536option(GAME_INCREMENTAL_BUILD "Whether or not to build all objects separately (for quicker dev-->build iterations). Defaults to false." OFF)3738if(GAME_INCREMENTAL_BUILD)39include(${GAME_NAME}/Objects.cmake)40set(GAME_SOURCES41${GAME_NAME}/Game.c42${GENERATED_SOURCES}43)44else()45set(GAME_SOURCES46${GAME_NAME}/Game.c47${GAME_NAME}/Objects/All.c48)49endif()5051if(GAME_STATIC)52add_library(${GAME_NAME} STATIC ${GAME_SOURCES})53else()54add_library(${GAME_NAME} SHARED ${GAME_SOURCES})55endif()5657target_include_directories(${GAME_NAME} PRIVATE58${GAME_NAME}/59${GAME_NAME}/Objects/60)6162if(WIN32)63target_compile_definitions(${GAME_NAME} PRIVATE _CRT_SECURE_NO_WARNINGS)64endif()6566set_target_properties(${GAME_NAME} PROPERTIES OUTPUT_NAME ${GAME_OUTPUT_NAME})6768if(WITH_RSDK)69set(RSDK_PATH dependencies/RSDKv5 CACHE STRING "The path to look for RSDKv5 if using WITH_RSDK.")7071add_subdirectory(${RSDK_PATH})7273if(GAME_STATIC)74target_include_directories(RetroEngine PRIVATE ${GAME_NAME}/)75target_link_libraries(RetroEngine ${GAME_NAME})76endif()77else()78set(RETRO_REVISION 3 CACHE STRING "What revision to compile for. Defaults to v5U = 3")7980option(RETRO_MOD_LOADER "Enables or disables the mod loader." ON)81set(RETRO_MOD_LOADER_VER 2 CACHE STRING "Sets the mod loader version. Defaults to latest")8283target_compile_definitions(${GAME_NAME} PRIVATE84RETRO_REVISION=${RETRO_REVISION}8586RETRO_USE_MOD_LOADER=$<BOOL:${RETRO_MOD_LOADER}>87RETRO_MOD_LOADER_VER=${RETRO_MOD_LOADER_VER}8889GAME_INCLUDE_EDITOR=$<BOOL:${GAME_INCLUDE_EDITOR}>9091MANIA_PREPLUS=$<BOOL:${MANIA_PREPLUS}>92MANIA_FIRST_RELEASE=$<BOOL:${MANIA_FIRST_RELEASE}>93GAME_VERSION=${GAME_VERSION}94)95endif()9697# MSVC likes to merge similar functions together even though their addresses are being referenced.98# Disable COMDAT folding to fix some bugs like not drowning when suspended to a pull chain in HCZ.99if(MSVC)100target_link_options(${GAME_NAME} PRIVATE /OPT:NOICF)101endif()102103104