metaforce/Runtime/CMakeLists.txt

243 lines
9.9 KiB
CMake

macro(runtime_add_list rel_path a_list)
unset(tmp_list)
foreach (path IN LISTS ${a_list})
if (IS_ABSOLUTE ${path})
list(APPEND tmp_list "${path}")
else ()
list(APPEND tmp_list "${rel_path}/${path}")
endif ()
endforeach (path)
set(${a_list} "${tmp_list}" PARENT_SCOPE)
endmacro(runtime_add_list)
add_subdirectory(Audio)
add_subdirectory(Character)
add_subdirectory(Graphics)
add_subdirectory(Collision)
add_subdirectory(Camera)
add_subdirectory(World)
add_subdirectory(Weapon)
add_subdirectory(AutoMapper)
add_subdirectory(GuiSys)
add_subdirectory(Input)
add_subdirectory(Particle)
if (WIN32)
list(APPEND PLAT_SRCS CMemoryCardSysWin.cpp)
#elseif (APPLE)
#list(APPEND PLAT_SRCS CMemoryCardSysOSX.cpp)
else ()
list(APPEND PLAT_SRCS CMemoryCardSysNix.cpp)
endif ()
add_custom_command(OUTPUT TCastTo.hpp TCastTo.cpp DEPENDS MkCastTo.py
COMMAND python ARGS ${CMAKE_CURRENT_SOURCE_DIR}/MkCastTo.py
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating cast functions")
add_subdirectory(MP1)
add_subdirectory(MP2)
add_subdirectory(MP3)
set(CAST_TO_SOURCES
MkCastTo.py
TCastTo.hpp TCastTo.cpp)
set(RUNTIME_SOURCES_A
RetroTypes.hpp RetroTypes.cpp
${CAST_TO_SOURCES}
${MP1_SOURCES}
${AUDIO_SOURCES}
${AUTOMAPPER_SOURCES}
${CAMERA_SOURCES}
${CHARACTER_SOURCES}
${COLLISION_SOURCES}
${GRAPHICS_SOURCES})
set(RUNTIME_SOURCES_B
${CAST_TO_SOURCES}
${GUISYS_SOURCES}
${INPUT_SOURCES}
${PARTICLE_SOURCES}
${WORLD_SOURCES}
${WEAPON_SOURCES}
ConsoleVariables/FileStoreManager.hpp ConsoleVariables/FileStoreManager.cpp
ConsoleVariables/CVar.hpp ConsoleVariables/CVar.cpp
ConsoleVariables/CVarManager.hpp ConsoleVariables/CVarManager.cpp
ConsoleVariables/CVarCommons.hpp ConsoleVariables/CVarCommons.cpp
Tweaks/ITweak.hpp
Tweaks/ITweakAutoMapper.hpp
Tweaks/ITweakBall.hpp
Tweaks/ITweakGame.hpp
Tweaks/ITweakGui.hpp
Tweaks/ITweakGuiColors.hpp
Tweaks/ITweakGunRes.hpp
Tweaks/ITweakParticle.hpp
Tweaks/ITweakPlayer.hpp
Tweaks/ITweakPlayerControl.hpp
Tweaks/ITweakPlayerGun.hpp Tweaks/ITweakPlayerGun.cpp
Tweaks/ITweakPlayerRes.hpp
Tweaks/ITweakSlideShow.hpp
Tweaks/ITweakTargeting.hpp
IMain.hpp
CStopwatch.hpp CStopwatch.cpp
Streams/IOStreams.hpp Streams/IOStreams.cpp
Streams/CMemoryStreamOut.hpp Streams/CMemoryStreamOut.cpp
Streams/CInputStream.hpp Streams/CInputStream.cpp
Streams/COutputStream.hpp Streams/COutputStream.cpp
Streams/CMemoryInStream.hpp
Streams/CZipInputStream.hpp Streams/CZipInputStream.cpp
Streams/ContainerReaders.hpp
CGameAllocator.hpp CGameAllocator.cpp
CMemoryCardSys.hpp CMemoryCardSys.cpp
CScannableObjectInfo.hpp CScannableObjectInfo.cpp
CWorldSaveGameInfo.hpp CWorldSaveGameInfo.cpp
CDependencyGroup.hpp CDependencyGroup.cpp
CBasics.hpp CBasicsPC.cpp
CIOWin.hpp
CIOWinManager.hpp CIOWinManager.cpp
CStateManager.hpp CStateManager.cpp
CGameState.hpp CGameState.cpp
CScriptMailbox.hpp CScriptMailbox.cpp
CPlayerState.hpp CPlayerState.cpp
CRandom16.hpp CRandom16.cpp
Factory/CResFactory.hpp Factory/CResFactory.cpp
Factory/CResLoader.hpp Factory/CResLoader.cpp
CDvdRequest.hpp
CDvdFile.hpp CDvdFile.cpp
Factory/IObjectStore.hpp
Factory/CSimplePool.hpp Factory/CSimplePool.cpp
CGameOptions.hpp CGameOptions.cpp
CGameOptionsTouchBar.hpp CGameOptionsTouchBar.cpp
CStaticInterference.hpp CStaticInterference.cpp
CCRC32.hpp CCRC32.cpp
Factory/IFactory.hpp
Factory/IObjFactory.hpp
CObjectList.hpp CObjectList.cpp
GameObjectLists.hpp GameObjectLists.cpp
CSortedLists.hpp CSortedLists.cpp
CArchitectureMessage.hpp
CArchitectureQueue.hpp
Factory/IObj.hpp
Factory/IVParamObj.hpp
CTimeProvider.hpp CTimeProvider.cpp
CToken.hpp CToken.cpp
Factory/CFactoryMgr.hpp Factory/CFactoryMgr.cpp
CPakFile.hpp CPakFile.cpp
CStringExtras.hpp CStringExtras.cpp
CMainFlowBase.hpp CMainFlowBase.cpp
CMFGameBase.hpp
CInGameTweakManagerBase.hpp
CGameDebug.hpp
CGameHintInfo.hpp CGameHintInfo.cpp
rstl.hpp
GameGlobalObjects.hpp GameGlobalObjects.cpp
GCNTypes.hpp
CTextureCache.hpp CTextureCache.cpp
CMayaSpline.hpp CMayaSpline.cpp
${PLAT_SRCS})
function(add_runtime_common_library name)
add_library(${name} ${ARGN})
target_compile_definitions(${name} PUBLIC "-DMETAFORCE_TARGET_BYTE_ORDER=__BYTE_ORDER__")
if (COMMAND add_sanitizers)
add_sanitizers(${name})
endif ()
if (WINDOWS_STORE)
set_property(TARGET ${name} PROPERTY VS_WINRT_COMPONENT TRUE)
endif ()
endfunction()
set(RUNTIME_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR})
set(RUNTIME_LIBRARIES amuse zeus nod NESEmulator libjpeg-turbo jbus kabufuda discord-rpc logvisor OptickCore imgui aurora SDL2-static)
add_runtime_common_library(RuntimeCommon ${RUNTIME_SOURCES_A})
target_include_directories(RuntimeCommon PUBLIC ${RUNTIME_INCLUDES})
target_link_libraries(RuntimeCommon PUBLIC ${RUNTIME_LIBRARIES})
add_runtime_common_library(RuntimeCommonB ${RUNTIME_SOURCES_B})
target_include_directories(RuntimeCommonB PUBLIC ${RUNTIME_INCLUDES})
target_link_libraries(RuntimeCommonB PUBLIC ${RUNTIME_LIBRARIES})
if (WIN32)
configure_file(platforms/win/metaforce.rc.in "${CMAKE_CURRENT_SOURCE_DIR}/platforms/win/metaforce.rc" @ONLY)
set(PLAT_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/platforms/win/metaforce.rc" platforms/win/metaforce.manifest)
if (WINDOWS_STORE)
set(UWP_ASSETS
platforms/win/Assets/LargeTile.scale-100.png
platforms/win/Assets/LargeTile.scale-125.png
platforms/win/Assets/LargeTile.scale-150.png
platforms/win/Assets/LargeTile.scale-200.png
platforms/win/Assets/LargeTile.scale-400.png
platforms/win/Assets/SmallTile.scale-100.png
platforms/win/Assets/SmallTile.scale-125.png
platforms/win/Assets/SmallTile.scale-150.png
platforms/win/Assets/SmallTile.scale-200.png
platforms/win/Assets/SmallTile.scale-400.png
platforms/win/Assets/SplashScreen.scale-100.png
platforms/win/Assets/SplashScreen.scale-125.png
platforms/win/Assets/SplashScreen.scale-150.png
platforms/win/Assets/SplashScreen.scale-200.png
platforms/win/Assets/SplashScreen.scale-400.png
platforms/win/Assets/Square44x44Logo.scale-100.png
platforms/win/Assets/Square44x44Logo.scale-125.png
platforms/win/Assets/Square44x44Logo.scale-150.png
platforms/win/Assets/Square44x44Logo.scale-200.png
platforms/win/Assets/Square44x44Logo.scale-400.png
platforms/win/Assets/Square44x44Logo.altform-unplated_targetsize-16.png
platforms/win/Assets/Square44x44Logo.altform-unplated_targetsize-24.png
platforms/win/Assets/Square44x44Logo.altform-unplated_targetsize-32.png
platforms/win/Assets/Square44x44Logo.altform-unplated_targetsize-48.png
platforms/win/Assets/Square44x44Logo.altform-unplated_targetsize-256.png
platforms/win/Assets/Square150x150Logo.scale-100.png
platforms/win/Assets/Square150x150Logo.scale-125.png
platforms/win/Assets/Square150x150Logo.scale-150.png
platforms/win/Assets/Square150x150Logo.scale-200.png
platforms/win/Assets/Square150x150Logo.scale-400.png
platforms/win/Assets/metaforce.scale-100.png
platforms/win/Assets/metaforce.scale-125.png
platforms/win/Assets/metaforce.scale-150.png
platforms/win/Assets/metaforce.scale-200.png
platforms/win/Assets/metaforce.scale-400.png
platforms/win/Assets/WideTile.scale-100.png
platforms/win/Assets/WideTile.scale-125.png
platforms/win/Assets/WideTile.scale-150.png
platforms/win/Assets/WideTile.scale-200.png
platforms/win/Assets/WideTile.scale-400.png)
set_property(SOURCE platforms/win/Package.appxmanifest PROPERTY VS_DEPLOYMENT_CONTENT 1)
set_property(SOURCE ${UWP_ASSETS} PROPERTY VS_DEPLOYMENT_CONTENT 1)
set_property(SOURCE ${UWP_ASSETS} PROPERTY VS_DEPLOYMENT_LOCATION "Assets")
list(APPEND PLAT_SRCS ${UWP_ASSETS} platforms/win/Package.appxmanifest)
endif ()
elseif (APPLE)
# nothing
elseif (UNIX)
add_subdirectory(platforms/freedesktop)
declare_wmicon_target()
set(PLAT_SRCS mainicon_netwm.cpp)
set(PLAT_LIBS rt)
endif ()
add_executable(metaforce CMain.cpp ${PLAT_SRCS}
ImGuiConsole.hpp ImGuiConsole.cpp
ImGuiEntitySupport.hpp ImGuiEntitySupport.cpp)
# RUNTIME_LIBRARIES repeated here for link ordering
target_link_libraries(metaforce PUBLIC RuntimeCommon RuntimeCommonB ${RUNTIME_LIBRARIES} ${PLAT_LIBS})
if (TARGET nativefiledialog)
target_link_libraries(metaforce PRIVATE nativefiledialog)
endif()
target_compile_definitions(metaforce PUBLIC "-DMETAFORCE_TARGET_BYTE_ORDER=__BYTE_ORDER__")
if (COMMAND add_sanitizers)
add_sanitizers(metaforce)
endif ()
if (NOT WINDOWS_STORE)
#add_dependencies(metaforce hecl) # visigen
else ()
set_property(TARGET metaforce PROPERTY VS_WINRT_COMPONENT TRUE)
# This should match the Package.appxmanifest
set_property(TARGET metaforce PROPERTY VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION "10.0.14393.0")
endif ()