set(PROJECT_NAME ZAPDLib) set(CMAKE_CXX_STANDARD 20 CACHE STRING "The C++ standard to use") #set(CMAKE_C_STANDARD 11 CACHE STRING "The C standard to use") set(CMAKE_C_STANDARD 11) ################################################################################ # Source groups ################################################################################ set(Header_Files "../lib/tinyxml2/tinyxml2.h" "CRC32.h" "Declaration.h" "FileWorker.h" "GameConfig.h" "Globals.h" "ImageBackend.h" "OutputFormatter.h" "WarningHandler.h" "CrashHandler.h" ) source_group("Header Files" FILES ${Header_Files}) set(Header_Files__Libraries "ctpl_stl.h" ) source_group("Header Files\\Libraries" FILES ${Header_Files__Libraries}) set(Header_Files__Libraries__libgfxd "../lib/libgfxd/gbi.h" "../lib/libgfxd/gfxd.h" "../lib/libgfxd/priv.h" ) source_group("Header Files\\Libraries\\libgfxd" FILES ${Header_Files__Libraries__libgfxd}) set(Header_Files__Yaz0 "yaz0/readwrite.h" "yaz0/yaz0.h" ) source_group("Header Files\\Yaz0" FILES ${Header_Files__Yaz0}) set(Header_Files__Z64 "OtherStructs/Cutscene_Common.h" "OtherStructs/CutsceneMM_Commands.h" "OtherStructs/CutsceneOoT_Commands.h" "OtherStructs/SkinLimbStructs.h" "ZAnimation.h" "ZActorList.h" "ZArray.h" "ZAudio.h" "ZBackground.h" "ZBlob.h" "ZCollision.h" "ZCollisionPoly.h" "ZCKeyFrame.h" "ZCkeyFrameAnim.h" "ZCutscene.h" "ZDisplayList.h" "ZFile.h" "ZLimb.h" "ZMtx.h" "ZPath.h" "ZPlayerAnimationData.h" "ZPointer.h" "ZResource.h" "ZRom.h" "ZScalar.h" "ZSkeleton.h" "ZSurfaceType.h" "ZString.h" "ZSymbol.h" "ZText.h" "ZTextMM.cpp" "ZTexture.h" "ZTextureAnimation.h" "ZVector.h" "ZWaterbox.h" "ZVtx.h" ) source_group("Header Files\\Z64" FILES ${Header_Files__Z64}) set(Header_Files__Z64__ZRoom "ZRoom/ZRoom.h" "ZRoom/ZRoomCommand.h" ) source_group("Header Files\\Z64\\ZRoom" FILES ${Header_Files__Z64__ZRoom}) set(Header_Files__Z64__ZRoom__Commands "ZRoom/Commands/EndMarker.h" "ZRoom/Commands/SetActorList.h" "ZRoom/Commands/SetAlternateHeaders.h" "ZRoom/Commands/SetAnimatedMaterialList.h" "ZRoom/Commands/SetCameraSettings.h" "ZRoom/Commands/SetCollisionHeader.h" "ZRoom/Commands/SetCsCamera.h" "ZRoom/Commands/SetCutscenes.h" "ZRoom/Commands/SetCutsceneEntryList.cpp" "ZRoom/Commands/SetEchoSettings.h" "ZRoom/Commands/SetEntranceList.h" "ZRoom/Commands/SetExitList.h" "ZRoom/Commands/SetLightingSettings.h" "ZRoom/Commands/SetLightList.h" "ZRoom/Commands/SetMesh.h" "ZRoom/Commands/SetMinimapChests.h" "ZRoom/Commands/SetMinimapList.h" "ZRoom/Commands/SetObjectList.h" "ZRoom/Commands/SetPathways.h" "ZRoom/Commands/SetRoomBehavior.h" "ZRoom/Commands/SetRoomList.h" "ZRoom/Commands/SetSkyboxModifier.h" "ZRoom/Commands/SetSkyboxSettings.h" "ZRoom/Commands/SetSoundSettings.h" "ZRoom/Commands/SetSpecialObjects.h" "ZRoom/Commands/SetStartPositionList.h" "ZRoom/Commands/SetTimeSettings.h" "ZRoom/Commands/SetTransitionActorList.h" "ZRoom/Commands/SetWind.h" "ZRoom/Commands/SetWorldMapVisited.h" "ZRoom/Commands/Unused09.h" "ZRoom/Commands/Unused1D.h" "ZRoom/Commands/ZRoomCommandUnk.h" ) source_group("Header Files\\Z64\\ZRoom\\Commands" FILES ${Header_Files__Z64__ZRoom__Commands}) set(Source_Files "CrashHandler.cpp" "Declaration.cpp" "FileWorker.cpp" "GameConfig.cpp" "Globals.cpp" "ImageBackend.cpp" "Main.cpp" "OutputFormatter.cpp" "WarningHandler.cpp" ) source_group("Source Files" FILES ${Source_Files}) set(Source_Files__Libraries__libgfxd "../lib/libgfxd/gfxd.c" "../lib/libgfxd/uc.c" "../lib/libgfxd/uc_f3dex2.c" ) source_group("Source Files\\Libraries\\libgfxd" FILES ${Source_Files__Libraries__libgfxd}) set(Source_Files__Yaz0 "yaz0/yaz0.cpp" ) source_group("Source Files\\Yaz0" FILES ${Source_Files__Yaz0}) set(Source_Files__Z64 "OtherStructs/Cutscene_Common.cpp" "OtherStructs/CutsceneMM_Commands.cpp" "OtherStructs/CutsceneOoT_Commands.cpp" "OtherStructs/SkinLimbStructs.cpp" "ZAnimation.cpp" "ZActorList.cpp" "ZArray.cpp" "ZAudio.cpp" "ZAudioDecode.cpp" "ZBackground.cpp" "ZBlob.cpp" "ZCollision.cpp" "ZCollisionPoly.cpp" "ZCKeyFrame.cpp" "ZCKeyFrameAnim.cpp" "ZCutscene.cpp" "ZDisplayList.cpp" "ZFile.cpp" "ZLimb.cpp" "ZMtx.cpp" "ZPath.cpp" "ZPlayerAnimationData.cpp" "ZPointer.cpp" "ZResource.cpp" "ZRom.cpp" "ZScalar.cpp" "ZSkeleton.cpp" "ZSurfaceType.cpp" "ZString.cpp" "ZSymbol.cpp" "ZText.cpp" "ZTextMM.cpp" "ZTexture.cpp" "ZTextureAnimation.cpp" "ZVector.cpp" "ZWaterbox.cpp" "ZVtx.cpp" ) source_group("Source Files\\Z64" FILES ${Source_Files__Z64}) set(Source_Files__Z64__ZRoom "ZRoom/ZRoom.cpp" "ZRoom/ZRoomCommand.cpp" ) source_group("Source Files\\Z64\\ZRoom" FILES ${Source_Files__Z64__ZRoom}) set(Source_Files__Z64__ZRoom__Commands "ZRoom/Commands/EndMarker.cpp" "ZRoom/Commands/SetActorList.cpp" "ZRoom/Commands/SetAlternateHeaders.cpp" "ZRoom/Commands/SetAnimatedMaterialList.cpp" "ZRoom/Commands/SetCameraSettings.cpp" "ZRoom/Commands/SetCollisionHeader.cpp" "ZRoom/Commands/SetCsCamera.cpp" "ZRoom/Commands/SetCutscenes.cpp" "ZRoom/Commands/SetCutsceneEntryList.cpp" "ZRoom/Commands/SetEchoSettings.cpp" "ZRoom/Commands/SetEntranceList.cpp" "ZRoom/Commands/SetExitList.cpp" "ZRoom/Commands/SetLightingSettings.cpp" "ZRoom/Commands/SetLightList.cpp" "ZRoom/Commands/SetMesh.cpp" "ZRoom/Commands/SetMinimapChests.cpp" "ZRoom/Commands/SetMinimapList.cpp" "ZRoom/Commands/SetObjectList.cpp" "ZRoom/Commands/SetPathways.cpp" "ZRoom/Commands/SetRoomBehavior.cpp" "ZRoom/Commands/SetRoomList.cpp" "ZRoom/Commands/SetSkyboxModifier.cpp" "ZRoom/Commands/SetSkyboxSettings.cpp" "ZRoom/Commands/SetSoundSettings.cpp" "ZRoom/Commands/SetSpecialObjects.cpp" "ZRoom/Commands/SetStartPositionList.cpp" "ZRoom/Commands/SetTimeSettings.cpp" "ZRoom/Commands/SetTransitionActorList.cpp" "ZRoom/Commands/SetWind.cpp" "ZRoom/Commands/SetWorldMapVisited.cpp" "ZRoom/Commands/Unused09.cpp" "ZRoom/Commands/Unused1D.cpp" "ZRoom/Commands/ZRoomCommandUnk.cpp" ) source_group("Source Files\\Z64\\ZRoom\\Commands" FILES ${Source_Files__Z64__ZRoom__Commands}) file(GLOB Source_Files__Utils RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "Utils/*.c" "Utils/*.cpp") source_group("Source Files\\Utils" FILES ${Source_Files__Utils}) file(GLOB Header_Files__Utils RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "Utils/*.h") source_group("Header Files\\Utils" FILES ${Header_Files__Utils}) set(ALL_FILES ${Header_Files} ${Header_Files__Libraries} ${Header_Files__Libraries__libgfxd} ${Header_Files__Yaz0} ${Header_Files__Z64} ${Header_Files__Z64__ZRoom} ${Header_Files__Z64__ZRoom__Commands} ${Header_Files__Utils} ${Source_Files} ${Source_Files__Libraries__libgfxd} ${Source_Files__Yaz0} ${Source_Files__Z64} ${Source_Files__Z64__ZRoom} ${Source_Files__Z64__ZRoom__Commands} ${Source_Files__Utils} ${any__any} ) ################################################################################ # Target ################################################################################ add_library(${PROJECT_NAME} STATIC ${ALL_FILES}) add_executable(ZAPD ExecutableMain.cpp) target_link_libraries(ZAPD ${PROJECT_NAME}) if (CMAKE_SYSTEM_NAME STREQUAL "Windows") use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}") use_props(ZAPD "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}") endif() ################################################################################ # Includes for CMake from *.props ################################################################################ set(ROOT_NAMESPACE ZAPD) if (CMAKE_SYSTEM_NAME STREQUAL "Windows") set_target_properties(${PROJECT_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE" ) elseif (CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin") set_target_properties(ZAPD PROPERTIES OUTPUT_NAME "ZAPD.out" ) endif() ################################################################################ # MSVC runtime library ################################################################################ if (CMAKE_SYSTEM_NAME STREQUAL "Windows") foreach(ZTarget ${PROJECT_NAME} ZAPD) get_property(MSVC_RUNTIME_LIBRARY_DEFAULT TARGET ${ZTarget} PROPERTY MSVC_RUNTIME_LIBRARY) string(CONCAT "MSVC_RUNTIME_LIBRARY_STR" $<$: MultiThreadedDebug > $<$: MultiThreaded > $<$,$>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}> ) set_target_properties(${ZTarget} PROPERTIES MSVC_RUNTIME_LIBRARY ${MSVC_RUNTIME_LIBRARY_STR}) endforeach() endif() ################################################################################ # Compile definitions ################################################################################ if (CMAKE_SYSTEM_NAME STREQUAL "Windows") target_compile_definitions(${PROJECT_NAME} PRIVATE "_CRT_SECURE_NO_WARNINGS;" "_MBCS" STORMLIB_NO_AUTO_LINK ) endif() ################################################################################ # Compile and link options ################################################################################ if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") set(CMAKE_FIND_FRAMEWORK LAST) endif() find_package(PNG REQUIRED) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/src/resource ${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/include ${CMAKE_CURRENT_SOURCE_DIR}/../../ZAPDTR/lib/libgfxd ${PNG_PNG_INCLUDE_DIR}/ . ) if(MSVC) target_compile_options(${PROJECT_NAME} PRIVATE $<$: /Od; /RTC1 > $<$: /O2; /Oi; /Gy > /permissive-; /sdl; /W3; ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; ${DEFAULT_CXX_EXCEPTION_HANDLING} ) target_link_options(${PROJECT_NAME} PRIVATE $<$: /PROFILE > $<$: /OPT:REF; /OPT:ICF > /DEBUG:FULL ) endif() if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU|Clang|AppleClang") target_compile_options(${PROJECT_NAME} PUBLIC -Wall -Wextra -Wno-error -Wno-unused-parameter -Wno-unused-function -Wno-unused-variable -Wno-missing-field-initializers -Wno-parentheses -Wno-narrowing $<$:-Wno-deprecated-enum-enum-conversion> -pthread ) if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") target_link_options(${PROJECT_NAME} PUBLIC -pthread ) else() target_link_options(${PROJECT_NAME} PUBLIC -pthread -Wl,-export-dynamic ) endif() endif() ################################################################################ # Dependencies ################################################################################ add_dependencies(${PROJECT_NAME} OTRExporter libultraship ) if (CMAKE_SYSTEM_NAME STREQUAL "Windows") set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) set(ADDITIONAL_LIBRARY_DEPENDENCIES "-WHOLEARCHIVE:$/$" "libultraship;" storm PNG::PNG ) elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) set(ADDITIONAL_LIBRARY_DEPENDENCIES -Wl,-force_load $/$ "libultraship;" PNG::PNG ${CMAKE_DL_LIBS} Threads::Threads ) elseif(CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch") set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) set(ADDITIONAL_LIBRARY_DEPENDENCIES -Wl,--whole-archive $/$ -Wl,--no-whole-archive "libultraship;" PNG::PNG Threads::Threads ) elseif(CMAKE_SYSTEM_NAME STREQUAL "CafeOS") set(ADDITIONAL_LIBRARY_DEPENDENCIES "libultraship;" PNG::PNG ) else() set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) set(ADDITIONAL_LIBRARY_DEPENDENCIES -Wl,--whole-archive $/$ -Wl,--no-whole-archive "libultraship;" PNG::PNG ${CMAKE_DL_LIBS} Threads::Threads ) endif() if(CMAKE_SYSTEM_NAME MATCHES "NintendoSwitch|CafeOS") add_library(pathconf OBJECT pathconf.c) target_link_libraries(${PROJECT_NAME} PUBLIC "${ADDITIONAL_LIBRARY_DEPENDENCIES}" $ ) else() target_link_libraries(${PROJECT_NAME} PUBLIC "${ADDITIONAL_LIBRARY_DEPENDENCIES}") endif() if (GAME_STR STREQUAL "MM") target_compile_definitions(${PROJECT_NAME} PRIVATE GAME_MM) else() target_compile_definitions(${PROJECT_NAME} PRIVATE GAME_OOT) endif()