From 13af296bf8b9023a8d13df9445a3e29d4783fb99 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Thu, 19 Oct 2023 08:08:50 +0100 Subject: [PATCH 01/18] initial toolchain -test of an initial toolchain setup for macosx builds --- CMakeLists.txt | 1 + Engine/lib/CMakeLists.txt | 7 +- Tools/CMake/toolchain/apple.toolchain.cmake | 329 ++++++++++++++++++++ Tools/CMake/torque_macros.cmake | 24 +- 4 files changed, 359 insertions(+), 2 deletions(-) create mode 100644 Tools/CMake/toolchain/apple.toolchain.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index a94931c74..6a79ed0fd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,6 +27,7 @@ set(TORQUE_APP_GAME_DIRECTORY "${TORQUE_APP_ROOT_DIRECTORY}/game") #library handling set(TORQUE_LIB_ROOT_DIRECTORY "${CMAKE_SOURCE_DIR}/Engine/lib") set(TORQUE_LIB_TARG_DIRECTORY "${CMAKE_BINARY_DIR}/Engine/lib") +set(TORQUE_SOURCE_DIRECTROY "${CMAKE_SOURCE_DIR}/Engine/source") # Ensure all possible configurations end up in the project directory set(CMAKE_INSTALL_PREFIX "${TORQUE_APP_ROOT_DIRECTORY}") diff --git a/Engine/lib/CMakeLists.txt b/Engine/lib/CMakeLists.txt index 1944b6446..c73efbd25 100644 --- a/Engine/lib/CMakeLists.txt +++ b/Engine/lib/CMakeLists.txt @@ -153,8 +153,11 @@ mark_as_advanced(ASSIMP_PACKAGE_VERSION) mark_as_advanced(ASSIMP_RUNTIME_OUTPUT_DIRECTORY) add_subdirectory(assimp ${TORQUE_LIB_TARG_DIRECTORY}/assimp EXCLUDE_FROM_ALL) target_compile_definitions(assimp PUBLIC ASSIMP_BUILD_NO_OWN_ZLIB) + if (TORQUE_CPU_ARM32 OR TORQUE_CPU_ARM64) - set(PNG_ARM_NEON on CACHE BOOL "" FORCE) + if(NOT APPLE) + set(PNG_ARM_NEON on CACHE BOOL "" FORCE) + endif(NOT APPLE) endif (TORQUE_CPU_ARM32 OR TORQUE_CPU_ARM64) #PNG @@ -168,10 +171,12 @@ set(PNG_TESTS off CACHE BOOL "" FORCE) mark_as_advanced(PNG_TESTS) set(PNG_HARDWARE_OPTIMIZATIONS on CACHE BOOL "" FORCE) mark_as_advanced(PNG_HARDWARE_OPTIMIZATIONS) + if(APPLE) set(PNG_FRAMEWORK on CACHE BOOL "" FORCE) addDef(PNG_DEBUG Debug) endif() + mark_as_advanced(PNG_DEBUG) mark_as_advanced(PNG_FRAMEWORK) mark_as_advanced(PNG_PREFIX) diff --git a/Tools/CMake/toolchain/apple.toolchain.cmake b/Tools/CMake/toolchain/apple.toolchain.cmake new file mode 100644 index 000000000..0b06ee365 --- /dev/null +++ b/Tools/CMake/toolchain/apple.toolchain.cmake @@ -0,0 +1,329 @@ +cmake_minimum_required (VERSION 3.21.0) + +project(${TORQUE_APP_NAME}) + +enable_language(OBJC) +enable_language(OBJCXX) + +set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE INTERNAL "") +set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13" CACHE INTERNAL "") + +set(CMAKE_THREAD_LIBS_INIT "-lpthread") +set(CMAKE_HAVE_THREADS_LIBRARY 1) +set(CMAKE_USE_WIN32_THREADS_INIT 0) +set(CMAKE_USE_PTHREADS_INIT 1) +set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO") +set(CMAKE_SHARED_LIBRARY_PREFIX "lib") +set(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib") +set(CMAKE_SHARED_MODULE_PREFIX "lib") +set(CMAKE_SHARED_MODULE_SUFFIX ".so") +set(CMAKE_C_COMPILER_ABI ELF) +set(CMAKE_CXX_COMPILER_ABI ELF) +set(CMAKE_C_HAS_ISYSROOT 1) +set(CMAKE_CXX_HAS_ISYSROOT 1) +set(CMAKE_MODULE_EXISTS 1) +set(CMAKE_DL_LIBS "") +set(CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ") +set(CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ") +set(CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}") +set(CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}") +set(CMAKE_MACOSX_BUNDLE YES) +set(OBJC_VARS "-fobjc-abi-version=2 -DOBJC_OLD_DISPATCH_PROTOTYPES=0") + +set(CMAKE_OBJC_FLAGS "${C_TARGET_FLAGS} ${APPLE_TARGET_TRIPLE_FLAG} ${SDK_NAME_VERSION_FLAGS} ${BITCODE} ${VISIBILITY} ${FOBJC_ARC} ${OBJC_VARS} ${CMAKE_OBJC_FLAGS}") +set(CMAKE_OBJC_FLAGS_DEBUG "-O0 -g ${CMAKE_OBJC_FLAGS_DEBUG}") +set(CMAKE_OBJC_FLAGS_MINSIZEREL "-DNDEBUG -Os ${CMAKE_OBJC_FLAGS_MINSIZEREL}") +set(CMAKE_OBJC_FLAGS_RELWITHDEBINFO "-DNDEBUG -O2 -g ${CMAKE_OBJC_FLAGS_RELWITHDEBINFO}") +set(CMAKE_OBJC_FLAGS_RELEASE "-DNDEBUG -O3 ${CMAKE_OBJC_FLAGS_RELEASE}") +set(CMAKE_OBJCXX_FLAGS "${C_TARGET_FLAGS} ${APPLE_TARGET_TRIPLE_FLAG} ${SDK_NAME_VERSION_FLAGS} ${BITCODE} ${VISIBILITY} ${FOBJC_ARC} ${OBJC_VARS} ${CMAKE_OBJCXX_FLAGS}") +set(CMAKE_OBJCXX_FLAGS_DEBUG "-O0 -g ${CMAKE_OBJCXX_FLAGS_DEBUG}") +set(CMAKE_OBJCXX_FLAGS_MINSIZEREL "-DNDEBUG -Os ${CMAKE_OBJCXX_FLAGS_MINSIZEREL}") +set(CMAKE_OBJCXX_FLAGS_RELWITHDEBINFO "-DNDEBUG -O2 -g ${CMAKE_OBJCXX_FLAGS_RELWITHDEBINFO}") +set(CMAKE_OBJCXX_FLAGS_RELEASE "-DNDEBUG -O3 ${CMAKE_OBJCXX_FLAGS_RELEASE}") +set(CMAKE_OBJC_LINK_FLAGS "${C_TARGET_FLAGS} ${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_OBJC_LINK_FLAGS}") +set(CMAKE_OBJCXX_LINK_FLAGS "${C_TARGET_FLAGS} ${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_OBJCXX_LINK_FLAGS}") + +set(CMAKE_PLATFORM_HAS_INSTALLNAME 1) +set(CMAKE_SHARED_LINKER_FLAGS "-rpath @executable_path/Frameworks -rpath @loader_path/Frameworks") +set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names") +set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -Wl,-headerpad_max_install_names") +set(CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,") +set(CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,") +set(CMAKE_FIND_LIBRARY_SUFFIXES ".tbd" ".dylib" ".so" ".a") +set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-install_name") + +# Add our libs. +add_subdirectory(${TORQUE_LIB_ROOT_DIRECTORY}) + +################# Helper Function Calls ################### +forwardDef(TORQUE_OPENGL) +forwardDef(TORQUE_D3D11) +forwardDef(TORQUE_ADVANCED_LIGHTING) +forwardDef(TORQUE_BASIC_LIGHTING) +set(TORQUE_SDL ON) # we need sdl to do our platform interop +forwardDef(TORQUE_SDL) + +if(TORQUE_TESTING) +set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} TORQUE_TESTS_ENABLED) +set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} "_VARIADIC_MAX=10") +endif() + +set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} __MACOSX__) + +################# Collect Source Files ################### + +# Handle app +torqueToolchainSourceDirectories("app" "app/net") + +# Handle console +torqueToolchainSourceDirectories("console") +torqueToolchainSourceDirectories("console/torquescript") + +# Handle Platform +torqueToolchainSourceDirectories("platform" "platform/threads" "platform/async" + "platform/input" "platform/output") + +torqueToolchainSourceDirectories("platform/nativeDialogs") + +# Handle T3D +torqueToolchainSourceDirectories("T3D/fps" "T3D/fx" "T3D/vehicles" "T3D/physics" + "T3D/decal" "T3D/sfx" "T3D/gameBase" "T3D/turret" + "T3D/lighting" "T3D/gameOBjects" "T3D/components" + "T3D/systems" "T3D/assets" "T3D" "T3D/gameBase/std") + +# Handle TS +torqueToolchainSourceDirectories("ts" "ts/collada" "ts/assimp" "ts/loader" "ts/arch") + +# Handle SFX - OpenAL is handled as a module later on +torqueToolchainSourceDirectories("sfx" "sfx/media" "sfx/null") +if(TORQUE_SFX_OPENAL AND NOT TORQUE_DEDICATED) + torqueToolchainSourceDirectories("sfx/openal") + torqueToolchainSourceDirectories("sfx/openal/mac") +endif() +# Handle GFX +torqueToolchainSourceDirectories("gfx" "gfx/Null" "gfx/test" "gfx/bitmap" "gfx/bitmap/loaders" + "gfx/util" "gfx/video" "gfx/sim" ) + +if (TORQUE_OPENGL) + torqueToolchainSourceDirectories("gfx/gl" "gfx/gl/sdl" "gfx/gl/tGL") +endif (TORQUE_OPENGL) + +# Handle core +torqueToolchainSourceDirectories("core" "core/stream" "core/strings" "core/util" + "core/util/journal" "core/util/zip" "core/util/compressors") +# Handle GUI +torqueToolchainSourceDirectories("gui" "gui/buttons" "gui/containers" "gui/controls" "gui/core" + "gui/game" "gui/shiny" "gui/utility" "gui/3d") + +# Handle postFX +torqueToolchainSourceDirectories("postFx") + +# Handle Windowmanager +torqueToolchainSourceDirectories("windowManager" "windowManager/torque" "windowManager/sdl") + +# Handle scene +torqueToolchainSourceDirectories("scene" "scene/culling" "scene/zones" "scene/mixin") + +# Handle math +torqueToolchainSourceDirectories("math" "math/util") + +# Handle persistence +torqueToolchainSourceDirectories("persistence/taml" "persistence/taml/binary" "persistence/taml/xml") + +# Handle Cinterface +torqueToolchainSourceDirectories("cinterface") + +# Handle util +torqueToolchainSourceDirectories("util" "util/messaging") + +# Handle assets +torqueToolchainSourceDirectories("assets") + +# Handle Sim +torqueToolchainSourceDirectories("sim") + +# Handle module +torqueToolchainSourceDirectories("module") + +# Handle forest +torqueToolchainSourceDirectories("forest" "forest/ts") +if(TORQUE_OPENGL) + torqueToolchainSourceDirectories("forest" "forest/glsl") +endif(TORQUE_OPENGL) + +# Handle shadergen +torqueToolchainSourceDirectories("shaderGen") + +if (TORQUE_OPENGL) +torqueToolchainSourceDirectories("shaderGen/GLSL") +endif (TORQUE_OPENGL) + +# Handle terrain +torqueToolchainSourceDirectories("terrain") + +if (TORQUE_OPENGL) +torqueToolchainSourceDirectories("terrain/glsl") +endif (TORQUE_OPENGL) + +# Handle Materials +torqueToolchainSourceDirectories("materials") + +# Handle collision +torqueToolchainSourceDirectories("collision") + +# Handle lighting +torqueToolchainSourceDirectories("lighting" "lighting/common" + "lighting/shadowMap") +if (TORQUE_ADVANCED_LIGHTING) +torqueToolchainSourceDirectories("lighting/advanced") + if (TORQUE_OPENGL) + torqueToolchainSourceDirectories("lighting/advanced/glsl") + endif (TORQUE_OPENGL) +endif (TORQUE_ADVANCED_LIGHTING) + +if (TORQUE_BASIC_LIGHTING) +torqueToolchainSourceDirectories("lighting/basic" "lighting/basic/shadowMap") +endif (TORQUE_BASIC_LIGHTING) + +# Begin handling platform specific stuff +# Handle Platform POSIX +if (UNIX) +torqueToolchainSourceDirectories("platformPOSIX") + + if (TORQUE_CPU_X32 OR TORQUE_CPU_X64) + torqueToolchainSourceDirectories("platformX86UNIX") + endif (TORQUE_CPU_X32 OR TORQUE_CPU_X64) +endif (UNIX) + +# Mac platform +torqueToolchainSourceDirectories("platformMac") + +# Handle platformSDL +torqueToolchainSourceDirectories("platformSDL" "platformSDL/threads") + +if(TORQUE_TESTING) +torqueToolchainSourceDirectories("testing") + set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} TORQUE_SHARED SDL_MAIN_HANDLED) +endif(TORQUE_TESTING) + +# Add the collected files to our engine group +source_group(TREE "${CMAKE_SOURCE_DIR}/Engine/source" PREFIX "Engine" FILES ${TORQUE_SOURCE_FILES}) +file(GLOB_RECURSE TORQUE_APP_GAME_SOURCES "${TORQUE_APP_ROOT_DIRECTORY}/source/*.cpp" "${TORQUE_APP_ROOT_DIRECTORY}/source/*.h") +source_group(TREE "${TORQUE_APP_ROOT_DIRECTORY}/source" PREFIX "Source Files" FILES ${TORQUE_APP_GAME_SOURCES}) +set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} "${TORQUE_APP_ROOT_DIRECTORY}/source") + +################# Engine Module Handling ################### + +set(TORQUE_MODULE_PATHS "${CMAKE_SOURCE_DIR}/Tools/CMake/modules" "${TORQUE_APP_GAME_DIRECTORY}/data") +if (NOT "${TORQUE_MODULE_USER_PATH}" STREQUAL "") + list(APPEND TORQUE_MODULE_PATHS "${TORQUE_MODULE_USER_PATH}") +endif() + +# Before doing module scanning, store away the engine sources - we do this so that modules +# can be placed into the proper filters +set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES} ${TORQUE_APP_GAME_SOURCES}) +set(TORQUE_SOURCE_FILES "") + +foreach (TORQUE_MODULE_PATH ${TORQUE_MODULE_PATHS}) + # First find simple cmake scripts, mostly used for in-engine modules + file(GLOB MODULE_SCRIPTS "${TORQUE_MODULE_PATH}/*.cmake") + foreach (TORQUE_MODULE_SCRIPT ${MODULE_SCRIPTS}) + include(${TORQUE_MODULE_SCRIPT}) + + # Add this script's collected files to our Engine group + source_group(TREE "${CMAKE_SOURCE_DIR}/Engine" PREFIX "Engine" FILES ${TORQUE_SOURCE_FILES}) + + set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${TORQUE_SOURCE_FILES}) + set(TORQUE_SOURCE_FILES "") + endforeach() + + # Next find sub projects, these can introduce new source files + SUBDIRLIST(POSSIBLE_PROJECTS "${TORQUE_MODULE_PATH}") + foreach (POSSIBLE_PROJECT ${POSSIBLE_PROJECTS}) + # Retrieve the absolute path of this possible project + get_filename_component(POSSIBLE_PROJECT_ABSOLUTEPATH "${POSSIBLE_PROJECT}" + REALPATH BASE_DIR "${TORQUE_MODULE_PATH}") + + if (EXISTS "${POSSIBLE_PROJECT_ABSOLUTEPATH}/CMakeLists.txt") + add_subdirectory("${POSSIBLE_PROJECT_ABSOLUTEPATH}" ${CMAKE_BINARY_DIR}/temp/${POSSIBLE_PROJECT} EXCLUDE_FROM_ALL) + source_group(TREE "${POSSIBLE_PROJECT_ABSOLUTEPATH}" PREFIX "Modules/${POSSIBLE_PROJECT}" FILES ${TORQUE_SOURCE_FILES}) + + set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${TORQUE_SOURCE_FILES}) + set(TORQUE_SOURCE_FILES "") + elseif(NOT EXISTS "${POSSIBLE_PROJECT_ABSOLUTEPATH}/*.cmake") + file(GLOB_RECURSE MODULE_SOURCE "${POSSIBLE_PROJECT_ABSOLUTEPATH}/source/*.h" "${POSSIBLE_PROJECT_ABSOLUTEPATH}/source/*.cpp") + #message(STATUS "MODULE_SOURCE:${MODULE_SOURCE}") + source_group(TREE "${POSSIBLE_PROJECT_ABSOLUTEPATH}" PREFIX "Modules/${POSSIBLE_PROJECT}/" FILES ${MODULE_SOURCE}) + set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${MODULE_SOURCE}) + endif() + endforeach() +endforeach() + +set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES_TEMPORARY}) + +################# Library Post-build Handling ################### +set(TORQUE_LIBRARY_PATHS "${CMAKE_SOURCE_DIR}/Engine/lib" "${TORQUE_APP_GAME_DIRECTORY}/data") +if (NOT "${TORQUE_LIBRARY_USER_PATH}" STREQUAL "") + list(APPEND TORQUE_LIBRARY_PATHS "${TORQUE_LIBRARY_USER_PATH}") +endif() + +foreach (TORQUE_LIBRARY_PATH ${TORQUE_LIBRARY_PATHS}) + # First find simple cmake scripts, mostly used for in-engine libraries + file(GLOB_RECURSE LIBRARY_SCRIPTS "${TORQUE_LIBRARY_PATH}/*Torque_postBuild.cmake") + #message(STATUS "LIBRARY_SCRIPTS:${LIBRARY_SCRIPTS}") + foreach (TORQUE_LIBRARY_SCRIPT ${LIBRARY_SCRIPTS}) + include(${TORQUE_LIBRARY_SCRIPT}) + endforeach() +endforeach() + +set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_MAC_SOURCES} "${CMAKE_SOURCE_DIR}/Tools/CMake/torque.icns") +set_source_files_properties("${CMAKE_SOURCE_DIR}/Tools/CMake/torque.icns" PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") + +set(EXECUTABLE_NAME "${TORQUE_APP_NAME}") +configure_file("${CMAKE_SOURCE_DIR}/Tools/CMake/Info.plist.in" "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist" COPYONLY) + +addDef(TORQUE_DEBUG Debug) +addDef(TORQUE_RELEASE "RelWithDebInfo;Release") +addDef(TORQUE_ENABLE_ASSERTS "Debug;RelWithDebInfo") +addDef(TORQUE_DEBUG_GFX_MODE "RelWithDebInfo") +addDef(TORQUE_OGGVORBIS) + +if(NOT TORQUE_SDL) + filterOut("platform/nativeDialogs/fileDialog.cpp" ) +endif() +if(NOT TORQUE_OPENGL) + filterOut("platformSDL/sdlPlatformGL.cpp") +endif() +if (NOT TORQUE_NET_CURL) + filterOut("app/net/httpObject.h" "app/net/httpObject.cpp") +endif() + + +add_executable(${TORQUE_APP_NAME} MACOSX_BUNDLE ${TORQUE_SOURCE_FILES}) +set_target_properties(${TORQUE_APP_NAME} PROPERTIES + BUNDLE true + MACOSX_BUNDLE_INFO_PLIST "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist") + + +# Ensure the shared libraries are actually referenced at the correct path +set(CMAKE_XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../Frameworks") + +install(TARGETS ${APP_NAME} + BUNDLE DESTINATION . COMPONENT Runtime + RUNTIME DESTINATION bin COMPONENT Runtime + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib/static) + + # Note Mac specific extension .app + set(APPS "\${CMAKE_BINARY_DIR}/game/${APP_NAME}.app") + + # Directories to look for dependencies + set(DIRS ${CMAKE_BINARY_DIR}) + + install(CODE "include(BundleUtilities) + fixup_bundle(\"${APPS}\" \"\" \"${DIRS}\")") + + set(CPACK_GENERATOR "DRAGNDROP") + include(CPack) + + diff --git a/Tools/CMake/torque_macros.cmake b/Tools/CMake/torque_macros.cmake index 5aee66f32..6783c7671 100644 --- a/Tools/CMake/torque_macros.cmake +++ b/Tools/CMake/torque_macros.cmake @@ -65,6 +65,23 @@ macro (torqueAddSourceDirectories) endforeach() endmacro (torqueAddSourceDirectories) +# Helper function to add a directory to the TORQUE_SOURCE_FILES variable. It automatically searches for .cpp and .h files in the +# specified directory then adds them to the TORQUE_SOURCE_FILES variable. +macro (torqueToolchainSourceDirectories) + foreach(ARGUMENT ${ARGV}) + file(GLOB SCANNED_SOURCE_FILES "${TORQUE_SOURCE_DIRECTROY}/${ARGUMENT}/*.cpp") + file(GLOB SCANNED_INCLUDE_FILES "${TORQUE_SOURCE_DIRECTROY}/${ARGUMENT}/*.h") + + if (APPLE) + file(GLOB SCANNED_MAC_FILES "${TORQUE_SOURCE_DIRECTROY}/${ARGUMENT}/*.mm") + endif (APPLE) + + # Set in both current and parent scope so this macro can be used from loaded modules + set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${SCANNED_SOURCE_FILES} ${SCANNED_INCLUDE_FILES} ${SCANNED_MAC_FILES}) + set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} PARENT_SCOPE) + endforeach() +endmacro (torqueToolchainSourceDirectories) + ################# Set Conditional Engine Defines ################### macro (forwardDef flag) if (${flag}) @@ -128,6 +145,11 @@ endmacro (filterOut) ################# apple frameworks ################### macro(addFramework framework) if (APPLE) - set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} "-framework ${framework}") + find_library(${FRAMEWORK_LIB} ${framework}) + if(NOT ${FRAMEWORK_LIB}) + message(STATUS "${framework} not found.") + else() + set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} "${framework}") + endif() endif() endmacro() \ No newline at end of file From e6c387c67ae62d5eeaad44f291cc6ee8e94b13fb Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Thu, 19 Oct 2023 08:29:27 +0100 Subject: [PATCH 02/18] Update apple.toolchain.cmake --- Tools/CMake/toolchain/apple.toolchain.cmake | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/Tools/CMake/toolchain/apple.toolchain.cmake b/Tools/CMake/toolchain/apple.toolchain.cmake index 0b06ee365..fdd99f3a6 100644 --- a/Tools/CMake/toolchain/apple.toolchain.cmake +++ b/Tools/CMake/toolchain/apple.toolchain.cmake @@ -304,6 +304,20 @@ set_target_properties(${TORQUE_APP_NAME} PROPERTIES BUNDLE true MACOSX_BUNDLE_INFO_PLIST "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist") +target_compile_definitions(${TORQUE_APP_NAME} PUBLIC ${TORQUE_COMPILE_DEFINITIONS}) +target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_LIBRARIES}) +target_link_options(${TORQUE_APP_NAME} PUBLIC ${TORQUE_LINK_OPTIONS}) +if (TORQUE_TARGET_PROPERTIES) + set_target_properties(${TORQUE_APP_NAME} PROPERTIES ${TORQUE_TARGET_PROPERTIES}) +endif (TORQUE_TARGET_PROPERTIES) +target_include_directories(${TORQUE_APP_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_BINARY_DIR}/temp" ${TORQUE_INCLUDE_DIRECTORIES}) + +append_defs() + +foreach (LIBRARY_BINARY ${TORQUE_ADDITIONAL_LIBRARY_BINARIES}) + # For OSX, we want these binaries to be copied to the Frameworks directory + add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks") +endforeach() # Ensure the shared libraries are actually referenced at the correct path set(CMAKE_XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../Frameworks") @@ -315,7 +329,7 @@ install(TARGETS ${APP_NAME} ARCHIVE DESTINATION lib/static) # Note Mac specific extension .app - set(APPS "\${CMAKE_BINARY_DIR}/game/${APP_NAME}.app") + set(APPS "\${TORQUE_APP_GAME_DIRECTORY}/${APP_NAME}.app") # Directories to look for dependencies set(DIRS ${CMAKE_BINARY_DIR}) From 1b49f28d19acbac4c3bb82e1bb4454ba363b2205 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Thu, 19 Oct 2023 08:57:24 +0100 Subject: [PATCH 03/18] move all setup to toolchain -All apple config in toolchain --- Tools/CMake/toolchain/apple.toolchain.cmake | 2 +- Tools/CMake/torqueMacOSconfigs.cmake | 22 --------------------- 2 files changed, 1 insertion(+), 23 deletions(-) diff --git a/Tools/CMake/toolchain/apple.toolchain.cmake b/Tools/CMake/toolchain/apple.toolchain.cmake index fdd99f3a6..41b24880f 100644 --- a/Tools/CMake/toolchain/apple.toolchain.cmake +++ b/Tools/CMake/toolchain/apple.toolchain.cmake @@ -7,7 +7,7 @@ enable_language(OBJCXX) set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE INTERNAL "") set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13" CACHE INTERNAL "") - +set(CMAKE_SYSTEM_NAME Darwin) set(CMAKE_THREAD_LIBS_INIT "-lpthread") set(CMAKE_HAVE_THREADS_LIBRARY 1) set(CMAKE_USE_WIN32_THREADS_INIT 0) diff --git a/Tools/CMake/torqueMacOSconfigs.cmake b/Tools/CMake/torqueMacOSconfigs.cmake index 99f918ea8..5f0c870d4 100644 --- a/Tools/CMake/torqueMacOSconfigs.cmake +++ b/Tools/CMake/torqueMacOSconfigs.cmake @@ -1,23 +1 @@ #detect Architecture -if (APPLE AND NOT IOS) - option(TORQUE_MACOS_UNIVERSAL_BINARY OFF) - - # Detect architecture if not using universal - if (TORQUE_MACOS_UNIVERSAL_BINARY) - set(ARCHITECTURE_STRING_APPLE "x86_64;arm64") - set(DEPLOYMENT_TARGET_APPLE "10.13") - else() - if (CMAKE_SYSTEM_PROCESSOR MATCHES "arm64") - set(ARCHITECTURE_STRING_APPLE "arm64") - set(DEPLOYMENT_TARGET_APPLE "11.0") - else() - set(ARCHITECTURE_STRING_APPLE "x86_64") - set(DEPLOYMENT_TARGET_APPLE "10.13") - endif() - endif() - - set(CMAKE_OSX_ARCHITECTURES ${ARCHITECTURE_STRING_APPLE} CACHE STRING "OSX Architecture" FORCE) - set(CMAKE_OSX_DEPLOYMENT_TARGET ${DEPLOYMENT_TARGET_APPLE} CACHE STRING "OSX Deployment target" FORCE) - mark_as_advanced(CMAKE_OSX_ARCHITECTURES) - mark_as_advanced(CMAKE_OSX_DEPLOYMENT_TARGET) -endif() \ No newline at end of file From ac60ce8da7a3a27bb7bd1c745555235680bfc828 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Thu, 19 Oct 2023 09:58:55 +0100 Subject: [PATCH 04/18] Update apple.toolchain.cmake --- Tools/CMake/toolchain/apple.toolchain.cmake | 58 +++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/Tools/CMake/toolchain/apple.toolchain.cmake b/Tools/CMake/toolchain/apple.toolchain.cmake index 41b24880f..3bd52aa27 100644 --- a/Tools/CMake/toolchain/apple.toolchain.cmake +++ b/Tools/CMake/toolchain/apple.toolchain.cmake @@ -5,8 +5,66 @@ project(${TORQUE_APP_NAME}) enable_language(OBJC) enable_language(OBJCXX) +find_program(XCODEBUILD_EXECUTABLE xcodebuild) +execute_process(COMMAND ${XCODEBUILD_EXECUTABLE} -version -sdk macosx Path + OUTPUT_VARIABLE XCODE_SDK_ROOT_DIR + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + +set(XCODE_SDK_ROOT_DIR "${XCODE_SDK_ROOT_DIR}" CACHE INTERNAL "") +# Specify the location or name of the platform SDK to be used in CMAKE_OSX_SYSROOT. +set(CMAKE_OSX_SYSROOT "${XCODE_SDK_ROOT_DIR}" CACHE INTERNAL "") + +if (NOT DEFINED CMAKE_DEVELOPER_ROOT AND NOT CMAKE_GENERATOR MATCHES "Xcode") + get_filename_component(PLATFORM_SDK_DIR ${XCODE_SDK_ROOT_DIR} PATH) + get_filename_component(CMAKE_DEVELOPER_ROOT ${PLATFORM_SDK_DIR} PATH) + if (NOT EXISTS "${CMAKE_DEVELOPER_ROOT}") + message(FATAL_ERROR "Invalid CMAKE_DEVELOPER_ROOT: ${CMAKE_DEVELOPER_ROOT} does not exist.") + endif() +endif() + +# Find (Apple's) libtool. +if(DEFINED BUILD_LIBTOOL) + # Environment variables are always preserved. + set(ENV{_BUILD_LIBTOOL} "${BUILD_LIBTOOL}") +elseif(DEFINED ENV{_BUILD_LIBTOOL}) + set(BUILD_LIBTOOL "$ENV{_BUILD_LIBTOOL}") +elseif(NOT DEFINED BUILD_LIBTOOL) + execute_process(COMMAND xcrun -sdk ${XCODE_SDK_ROOT_DIR} -find libtool + OUTPUT_VARIABLE BUILD_LIBTOOL + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) +endif() + +# Find the toolchain's provided install_name_tool if none is found on the host +if(DEFINED CMAKE_INSTALL_NAME_TOOL) + # Environment variables are always preserved. + set(ENV{_CMAKE_INSTALL_NAME_TOOL} "${CMAKE_INSTALL_NAME_TOOL}") +elseif(DEFINED ENV{_CMAKE_INSTALL_NAME_TOOL}) + set(CMAKE_INSTALL_NAME_TOOL "$ENV{_CMAKE_INSTALL_NAME_TOOL}") +elseif(NOT DEFINED CMAKE_INSTALL_NAME_TOOL) + execute_process(COMMAND xcrun -sdk ${XCODE_SDK_ROOT_DIR} -find install_name_tool + OUTPUT_VARIABLE CMAKE_INSTALL_NAME_TOOL_INT + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + set(CMAKE_INSTALL_NAME_TOOL ${CMAKE_INSTALL_NAME_TOOL_INT} CACHE INTERNAL "") +endif() + +get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES) +foreach(lang ${languages}) + set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "${BUILD_LIBTOOL} -static -o " CACHE INTERNAL "") +endforeach() + +set(CMAKE_FRAMEWORK_PATH + ${CMAKE_DEVELOPER_ROOT}/Library/PrivateFrameworks + ${XCODE_SDK_ROOT_DIR}/System/Library/Frameworks + ${CMAKE_FRAMEWORK_PATH} CACHE INTERNAL "") + +set(CMAKE_FIND_FRAMEWORK FIRST) set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE INTERNAL "") set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13" CACHE INTERNAL "") +set(CMAKE_XCODE_ATTRIBUTE_SDKROOT macosx) +set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO") set(CMAKE_SYSTEM_NAME Darwin) set(CMAKE_THREAD_LIBS_INIT "-lpthread") set(CMAKE_HAVE_THREADS_LIBRARY 1) From c11587cad381bf096ec10260ddf65ddb1a808709 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Thu, 19 Oct 2023 11:04:16 +0100 Subject: [PATCH 05/18] Attempt 2 -Missing includes may be due to no parent_scope --- Engine/source/CMakeLists.txt | 24 +- Tools/CMake/toolchain/apple.toolchain.cmake | 401 -------------------- Tools/CMake/torqueMacOSconfigs.cmake | 107 ++++++ 3 files changed, 130 insertions(+), 402 deletions(-) delete mode 100644 Tools/CMake/toolchain/apple.toolchain.cmake diff --git a/Engine/source/CMakeLists.txt b/Engine/source/CMakeLists.txt index 3ec15127a..77d0a56f7 100644 --- a/Engine/source/CMakeLists.txt +++ b/Engine/source/CMakeLists.txt @@ -351,7 +351,9 @@ endif (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) if (APPLE) add_executable(${TORQUE_APP_NAME} MACOSX_BUNDLE ${TORQUE_SOURCE_FILES}) - set_target_properties(${TORQUE_APP_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist") + set_target_properties(${TORQUE_APP_NAME} PROPERTIES + BUNDLE true + MACOSX_BUNDLE_INFO_PLIST "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist") # Ensure the shared libraries are actually referenced at the correct path set(CMAKE_XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../Frameworks") @@ -454,3 +456,23 @@ if (UNIX) endif() endforeach() endif (UNIX) + +if(APPLE) +install(TARGETS ${APP_NAME} + BUNDLE DESTINATION . COMPONENT Runtime + RUNTIME DESTINATION bin COMPONENT Runtime + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib/static) + +# Note Mac specific extension .app +set(APPS "\${TORQUE_APP_GAME_DIRECTORY}/${APP_NAME}.app") + +# Directories to look for dependencies +set(DIRS ${CMAKE_BINARY_DIR}) + +install(CODE "include(BundleUtilities) + fixup_bundle(\"${APPS}\" \"\" \"${DIRS}\")") + +set(CPACK_GENERATOR "DRAGNDROP") +include(CPack) +endif() diff --git a/Tools/CMake/toolchain/apple.toolchain.cmake b/Tools/CMake/toolchain/apple.toolchain.cmake deleted file mode 100644 index 3bd52aa27..000000000 --- a/Tools/CMake/toolchain/apple.toolchain.cmake +++ /dev/null @@ -1,401 +0,0 @@ -cmake_minimum_required (VERSION 3.21.0) - -project(${TORQUE_APP_NAME}) - -enable_language(OBJC) -enable_language(OBJCXX) - -find_program(XCODEBUILD_EXECUTABLE xcodebuild) -execute_process(COMMAND ${XCODEBUILD_EXECUTABLE} -version -sdk macosx Path - OUTPUT_VARIABLE XCODE_SDK_ROOT_DIR - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) - -set(XCODE_SDK_ROOT_DIR "${XCODE_SDK_ROOT_DIR}" CACHE INTERNAL "") -# Specify the location or name of the platform SDK to be used in CMAKE_OSX_SYSROOT. -set(CMAKE_OSX_SYSROOT "${XCODE_SDK_ROOT_DIR}" CACHE INTERNAL "") - -if (NOT DEFINED CMAKE_DEVELOPER_ROOT AND NOT CMAKE_GENERATOR MATCHES "Xcode") - get_filename_component(PLATFORM_SDK_DIR ${XCODE_SDK_ROOT_DIR} PATH) - get_filename_component(CMAKE_DEVELOPER_ROOT ${PLATFORM_SDK_DIR} PATH) - if (NOT EXISTS "${CMAKE_DEVELOPER_ROOT}") - message(FATAL_ERROR "Invalid CMAKE_DEVELOPER_ROOT: ${CMAKE_DEVELOPER_ROOT} does not exist.") - endif() -endif() - -# Find (Apple's) libtool. -if(DEFINED BUILD_LIBTOOL) - # Environment variables are always preserved. - set(ENV{_BUILD_LIBTOOL} "${BUILD_LIBTOOL}") -elseif(DEFINED ENV{_BUILD_LIBTOOL}) - set(BUILD_LIBTOOL "$ENV{_BUILD_LIBTOOL}") -elseif(NOT DEFINED BUILD_LIBTOOL) - execute_process(COMMAND xcrun -sdk ${XCODE_SDK_ROOT_DIR} -find libtool - OUTPUT_VARIABLE BUILD_LIBTOOL - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) -endif() - -# Find the toolchain's provided install_name_tool if none is found on the host -if(DEFINED CMAKE_INSTALL_NAME_TOOL) - # Environment variables are always preserved. - set(ENV{_CMAKE_INSTALL_NAME_TOOL} "${CMAKE_INSTALL_NAME_TOOL}") -elseif(DEFINED ENV{_CMAKE_INSTALL_NAME_TOOL}) - set(CMAKE_INSTALL_NAME_TOOL "$ENV{_CMAKE_INSTALL_NAME_TOOL}") -elseif(NOT DEFINED CMAKE_INSTALL_NAME_TOOL) - execute_process(COMMAND xcrun -sdk ${XCODE_SDK_ROOT_DIR} -find install_name_tool - OUTPUT_VARIABLE CMAKE_INSTALL_NAME_TOOL_INT - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) - set(CMAKE_INSTALL_NAME_TOOL ${CMAKE_INSTALL_NAME_TOOL_INT} CACHE INTERNAL "") -endif() - -get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES) -foreach(lang ${languages}) - set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "${BUILD_LIBTOOL} -static -o " CACHE INTERNAL "") -endforeach() - -set(CMAKE_FRAMEWORK_PATH - ${CMAKE_DEVELOPER_ROOT}/Library/PrivateFrameworks - ${XCODE_SDK_ROOT_DIR}/System/Library/Frameworks - ${CMAKE_FRAMEWORK_PATH} CACHE INTERNAL "") - -set(CMAKE_FIND_FRAMEWORK FIRST) -set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE INTERNAL "") -set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13" CACHE INTERNAL "") -set(CMAKE_XCODE_ATTRIBUTE_SDKROOT macosx) -set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO") -set(CMAKE_SYSTEM_NAME Darwin) -set(CMAKE_THREAD_LIBS_INIT "-lpthread") -set(CMAKE_HAVE_THREADS_LIBRARY 1) -set(CMAKE_USE_WIN32_THREADS_INIT 0) -set(CMAKE_USE_PTHREADS_INIT 1) -set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO") -set(CMAKE_SHARED_LIBRARY_PREFIX "lib") -set(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib") -set(CMAKE_SHARED_MODULE_PREFIX "lib") -set(CMAKE_SHARED_MODULE_SUFFIX ".so") -set(CMAKE_C_COMPILER_ABI ELF) -set(CMAKE_CXX_COMPILER_ABI ELF) -set(CMAKE_C_HAS_ISYSROOT 1) -set(CMAKE_CXX_HAS_ISYSROOT 1) -set(CMAKE_MODULE_EXISTS 1) -set(CMAKE_DL_LIBS "") -set(CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ") -set(CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ") -set(CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}") -set(CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}") -set(CMAKE_MACOSX_BUNDLE YES) -set(OBJC_VARS "-fobjc-abi-version=2 -DOBJC_OLD_DISPATCH_PROTOTYPES=0") - -set(CMAKE_OBJC_FLAGS "${C_TARGET_FLAGS} ${APPLE_TARGET_TRIPLE_FLAG} ${SDK_NAME_VERSION_FLAGS} ${BITCODE} ${VISIBILITY} ${FOBJC_ARC} ${OBJC_VARS} ${CMAKE_OBJC_FLAGS}") -set(CMAKE_OBJC_FLAGS_DEBUG "-O0 -g ${CMAKE_OBJC_FLAGS_DEBUG}") -set(CMAKE_OBJC_FLAGS_MINSIZEREL "-DNDEBUG -Os ${CMAKE_OBJC_FLAGS_MINSIZEREL}") -set(CMAKE_OBJC_FLAGS_RELWITHDEBINFO "-DNDEBUG -O2 -g ${CMAKE_OBJC_FLAGS_RELWITHDEBINFO}") -set(CMAKE_OBJC_FLAGS_RELEASE "-DNDEBUG -O3 ${CMAKE_OBJC_FLAGS_RELEASE}") -set(CMAKE_OBJCXX_FLAGS "${C_TARGET_FLAGS} ${APPLE_TARGET_TRIPLE_FLAG} ${SDK_NAME_VERSION_FLAGS} ${BITCODE} ${VISIBILITY} ${FOBJC_ARC} ${OBJC_VARS} ${CMAKE_OBJCXX_FLAGS}") -set(CMAKE_OBJCXX_FLAGS_DEBUG "-O0 -g ${CMAKE_OBJCXX_FLAGS_DEBUG}") -set(CMAKE_OBJCXX_FLAGS_MINSIZEREL "-DNDEBUG -Os ${CMAKE_OBJCXX_FLAGS_MINSIZEREL}") -set(CMAKE_OBJCXX_FLAGS_RELWITHDEBINFO "-DNDEBUG -O2 -g ${CMAKE_OBJCXX_FLAGS_RELWITHDEBINFO}") -set(CMAKE_OBJCXX_FLAGS_RELEASE "-DNDEBUG -O3 ${CMAKE_OBJCXX_FLAGS_RELEASE}") -set(CMAKE_OBJC_LINK_FLAGS "${C_TARGET_FLAGS} ${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_OBJC_LINK_FLAGS}") -set(CMAKE_OBJCXX_LINK_FLAGS "${C_TARGET_FLAGS} ${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_OBJCXX_LINK_FLAGS}") - -set(CMAKE_PLATFORM_HAS_INSTALLNAME 1) -set(CMAKE_SHARED_LINKER_FLAGS "-rpath @executable_path/Frameworks -rpath @loader_path/Frameworks") -set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names") -set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -Wl,-headerpad_max_install_names") -set(CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,") -set(CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,") -set(CMAKE_FIND_LIBRARY_SUFFIXES ".tbd" ".dylib" ".so" ".a") -set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-install_name") - -# Add our libs. -add_subdirectory(${TORQUE_LIB_ROOT_DIRECTORY}) - -################# Helper Function Calls ################### -forwardDef(TORQUE_OPENGL) -forwardDef(TORQUE_D3D11) -forwardDef(TORQUE_ADVANCED_LIGHTING) -forwardDef(TORQUE_BASIC_LIGHTING) -set(TORQUE_SDL ON) # we need sdl to do our platform interop -forwardDef(TORQUE_SDL) - -if(TORQUE_TESTING) -set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} TORQUE_TESTS_ENABLED) -set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} "_VARIADIC_MAX=10") -endif() - -set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} __MACOSX__) - -################# Collect Source Files ################### - -# Handle app -torqueToolchainSourceDirectories("app" "app/net") - -# Handle console -torqueToolchainSourceDirectories("console") -torqueToolchainSourceDirectories("console/torquescript") - -# Handle Platform -torqueToolchainSourceDirectories("platform" "platform/threads" "platform/async" - "platform/input" "platform/output") - -torqueToolchainSourceDirectories("platform/nativeDialogs") - -# Handle T3D -torqueToolchainSourceDirectories("T3D/fps" "T3D/fx" "T3D/vehicles" "T3D/physics" - "T3D/decal" "T3D/sfx" "T3D/gameBase" "T3D/turret" - "T3D/lighting" "T3D/gameOBjects" "T3D/components" - "T3D/systems" "T3D/assets" "T3D" "T3D/gameBase/std") - -# Handle TS -torqueToolchainSourceDirectories("ts" "ts/collada" "ts/assimp" "ts/loader" "ts/arch") - -# Handle SFX - OpenAL is handled as a module later on -torqueToolchainSourceDirectories("sfx" "sfx/media" "sfx/null") -if(TORQUE_SFX_OPENAL AND NOT TORQUE_DEDICATED) - torqueToolchainSourceDirectories("sfx/openal") - torqueToolchainSourceDirectories("sfx/openal/mac") -endif() -# Handle GFX -torqueToolchainSourceDirectories("gfx" "gfx/Null" "gfx/test" "gfx/bitmap" "gfx/bitmap/loaders" - "gfx/util" "gfx/video" "gfx/sim" ) - -if (TORQUE_OPENGL) - torqueToolchainSourceDirectories("gfx/gl" "gfx/gl/sdl" "gfx/gl/tGL") -endif (TORQUE_OPENGL) - -# Handle core -torqueToolchainSourceDirectories("core" "core/stream" "core/strings" "core/util" - "core/util/journal" "core/util/zip" "core/util/compressors") -# Handle GUI -torqueToolchainSourceDirectories("gui" "gui/buttons" "gui/containers" "gui/controls" "gui/core" - "gui/game" "gui/shiny" "gui/utility" "gui/3d") - -# Handle postFX -torqueToolchainSourceDirectories("postFx") - -# Handle Windowmanager -torqueToolchainSourceDirectories("windowManager" "windowManager/torque" "windowManager/sdl") - -# Handle scene -torqueToolchainSourceDirectories("scene" "scene/culling" "scene/zones" "scene/mixin") - -# Handle math -torqueToolchainSourceDirectories("math" "math/util") - -# Handle persistence -torqueToolchainSourceDirectories("persistence/taml" "persistence/taml/binary" "persistence/taml/xml") - -# Handle Cinterface -torqueToolchainSourceDirectories("cinterface") - -# Handle util -torqueToolchainSourceDirectories("util" "util/messaging") - -# Handle assets -torqueToolchainSourceDirectories("assets") - -# Handle Sim -torqueToolchainSourceDirectories("sim") - -# Handle module -torqueToolchainSourceDirectories("module") - -# Handle forest -torqueToolchainSourceDirectories("forest" "forest/ts") -if(TORQUE_OPENGL) - torqueToolchainSourceDirectories("forest" "forest/glsl") -endif(TORQUE_OPENGL) - -# Handle shadergen -torqueToolchainSourceDirectories("shaderGen") - -if (TORQUE_OPENGL) -torqueToolchainSourceDirectories("shaderGen/GLSL") -endif (TORQUE_OPENGL) - -# Handle terrain -torqueToolchainSourceDirectories("terrain") - -if (TORQUE_OPENGL) -torqueToolchainSourceDirectories("terrain/glsl") -endif (TORQUE_OPENGL) - -# Handle Materials -torqueToolchainSourceDirectories("materials") - -# Handle collision -torqueToolchainSourceDirectories("collision") - -# Handle lighting -torqueToolchainSourceDirectories("lighting" "lighting/common" - "lighting/shadowMap") -if (TORQUE_ADVANCED_LIGHTING) -torqueToolchainSourceDirectories("lighting/advanced") - if (TORQUE_OPENGL) - torqueToolchainSourceDirectories("lighting/advanced/glsl") - endif (TORQUE_OPENGL) -endif (TORQUE_ADVANCED_LIGHTING) - -if (TORQUE_BASIC_LIGHTING) -torqueToolchainSourceDirectories("lighting/basic" "lighting/basic/shadowMap") -endif (TORQUE_BASIC_LIGHTING) - -# Begin handling platform specific stuff -# Handle Platform POSIX -if (UNIX) -torqueToolchainSourceDirectories("platformPOSIX") - - if (TORQUE_CPU_X32 OR TORQUE_CPU_X64) - torqueToolchainSourceDirectories("platformX86UNIX") - endif (TORQUE_CPU_X32 OR TORQUE_CPU_X64) -endif (UNIX) - -# Mac platform -torqueToolchainSourceDirectories("platformMac") - -# Handle platformSDL -torqueToolchainSourceDirectories("platformSDL" "platformSDL/threads") - -if(TORQUE_TESTING) -torqueToolchainSourceDirectories("testing") - set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} TORQUE_SHARED SDL_MAIN_HANDLED) -endif(TORQUE_TESTING) - -# Add the collected files to our engine group -source_group(TREE "${CMAKE_SOURCE_DIR}/Engine/source" PREFIX "Engine" FILES ${TORQUE_SOURCE_FILES}) -file(GLOB_RECURSE TORQUE_APP_GAME_SOURCES "${TORQUE_APP_ROOT_DIRECTORY}/source/*.cpp" "${TORQUE_APP_ROOT_DIRECTORY}/source/*.h") -source_group(TREE "${TORQUE_APP_ROOT_DIRECTORY}/source" PREFIX "Source Files" FILES ${TORQUE_APP_GAME_SOURCES}) -set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} "${TORQUE_APP_ROOT_DIRECTORY}/source") - -################# Engine Module Handling ################### - -set(TORQUE_MODULE_PATHS "${CMAKE_SOURCE_DIR}/Tools/CMake/modules" "${TORQUE_APP_GAME_DIRECTORY}/data") -if (NOT "${TORQUE_MODULE_USER_PATH}" STREQUAL "") - list(APPEND TORQUE_MODULE_PATHS "${TORQUE_MODULE_USER_PATH}") -endif() - -# Before doing module scanning, store away the engine sources - we do this so that modules -# can be placed into the proper filters -set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES} ${TORQUE_APP_GAME_SOURCES}) -set(TORQUE_SOURCE_FILES "") - -foreach (TORQUE_MODULE_PATH ${TORQUE_MODULE_PATHS}) - # First find simple cmake scripts, mostly used for in-engine modules - file(GLOB MODULE_SCRIPTS "${TORQUE_MODULE_PATH}/*.cmake") - foreach (TORQUE_MODULE_SCRIPT ${MODULE_SCRIPTS}) - include(${TORQUE_MODULE_SCRIPT}) - - # Add this script's collected files to our Engine group - source_group(TREE "${CMAKE_SOURCE_DIR}/Engine" PREFIX "Engine" FILES ${TORQUE_SOURCE_FILES}) - - set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${TORQUE_SOURCE_FILES}) - set(TORQUE_SOURCE_FILES "") - endforeach() - - # Next find sub projects, these can introduce new source files - SUBDIRLIST(POSSIBLE_PROJECTS "${TORQUE_MODULE_PATH}") - foreach (POSSIBLE_PROJECT ${POSSIBLE_PROJECTS}) - # Retrieve the absolute path of this possible project - get_filename_component(POSSIBLE_PROJECT_ABSOLUTEPATH "${POSSIBLE_PROJECT}" - REALPATH BASE_DIR "${TORQUE_MODULE_PATH}") - - if (EXISTS "${POSSIBLE_PROJECT_ABSOLUTEPATH}/CMakeLists.txt") - add_subdirectory("${POSSIBLE_PROJECT_ABSOLUTEPATH}" ${CMAKE_BINARY_DIR}/temp/${POSSIBLE_PROJECT} EXCLUDE_FROM_ALL) - source_group(TREE "${POSSIBLE_PROJECT_ABSOLUTEPATH}" PREFIX "Modules/${POSSIBLE_PROJECT}" FILES ${TORQUE_SOURCE_FILES}) - - set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${TORQUE_SOURCE_FILES}) - set(TORQUE_SOURCE_FILES "") - elseif(NOT EXISTS "${POSSIBLE_PROJECT_ABSOLUTEPATH}/*.cmake") - file(GLOB_RECURSE MODULE_SOURCE "${POSSIBLE_PROJECT_ABSOLUTEPATH}/source/*.h" "${POSSIBLE_PROJECT_ABSOLUTEPATH}/source/*.cpp") - #message(STATUS "MODULE_SOURCE:${MODULE_SOURCE}") - source_group(TREE "${POSSIBLE_PROJECT_ABSOLUTEPATH}" PREFIX "Modules/${POSSIBLE_PROJECT}/" FILES ${MODULE_SOURCE}) - set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${MODULE_SOURCE}) - endif() - endforeach() -endforeach() - -set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES_TEMPORARY}) - -################# Library Post-build Handling ################### -set(TORQUE_LIBRARY_PATHS "${CMAKE_SOURCE_DIR}/Engine/lib" "${TORQUE_APP_GAME_DIRECTORY}/data") -if (NOT "${TORQUE_LIBRARY_USER_PATH}" STREQUAL "") - list(APPEND TORQUE_LIBRARY_PATHS "${TORQUE_LIBRARY_USER_PATH}") -endif() - -foreach (TORQUE_LIBRARY_PATH ${TORQUE_LIBRARY_PATHS}) - # First find simple cmake scripts, mostly used for in-engine libraries - file(GLOB_RECURSE LIBRARY_SCRIPTS "${TORQUE_LIBRARY_PATH}/*Torque_postBuild.cmake") - #message(STATUS "LIBRARY_SCRIPTS:${LIBRARY_SCRIPTS}") - foreach (TORQUE_LIBRARY_SCRIPT ${LIBRARY_SCRIPTS}) - include(${TORQUE_LIBRARY_SCRIPT}) - endforeach() -endforeach() - -set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_MAC_SOURCES} "${CMAKE_SOURCE_DIR}/Tools/CMake/torque.icns") -set_source_files_properties("${CMAKE_SOURCE_DIR}/Tools/CMake/torque.icns" PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") - -set(EXECUTABLE_NAME "${TORQUE_APP_NAME}") -configure_file("${CMAKE_SOURCE_DIR}/Tools/CMake/Info.plist.in" "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist" COPYONLY) - -addDef(TORQUE_DEBUG Debug) -addDef(TORQUE_RELEASE "RelWithDebInfo;Release") -addDef(TORQUE_ENABLE_ASSERTS "Debug;RelWithDebInfo") -addDef(TORQUE_DEBUG_GFX_MODE "RelWithDebInfo") -addDef(TORQUE_OGGVORBIS) - -if(NOT TORQUE_SDL) - filterOut("platform/nativeDialogs/fileDialog.cpp" ) -endif() -if(NOT TORQUE_OPENGL) - filterOut("platformSDL/sdlPlatformGL.cpp") -endif() -if (NOT TORQUE_NET_CURL) - filterOut("app/net/httpObject.h" "app/net/httpObject.cpp") -endif() - - -add_executable(${TORQUE_APP_NAME} MACOSX_BUNDLE ${TORQUE_SOURCE_FILES}) -set_target_properties(${TORQUE_APP_NAME} PROPERTIES - BUNDLE true - MACOSX_BUNDLE_INFO_PLIST "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist") - -target_compile_definitions(${TORQUE_APP_NAME} PUBLIC ${TORQUE_COMPILE_DEFINITIONS}) -target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_LIBRARIES}) -target_link_options(${TORQUE_APP_NAME} PUBLIC ${TORQUE_LINK_OPTIONS}) -if (TORQUE_TARGET_PROPERTIES) - set_target_properties(${TORQUE_APP_NAME} PROPERTIES ${TORQUE_TARGET_PROPERTIES}) -endif (TORQUE_TARGET_PROPERTIES) -target_include_directories(${TORQUE_APP_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_BINARY_DIR}/temp" ${TORQUE_INCLUDE_DIRECTORIES}) - -append_defs() - -foreach (LIBRARY_BINARY ${TORQUE_ADDITIONAL_LIBRARY_BINARIES}) - # For OSX, we want these binaries to be copied to the Frameworks directory - add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks") -endforeach() - -# Ensure the shared libraries are actually referenced at the correct path -set(CMAKE_XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../Frameworks") - -install(TARGETS ${APP_NAME} - BUNDLE DESTINATION . COMPONENT Runtime - RUNTIME DESTINATION bin COMPONENT Runtime - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib/static) - - # Note Mac specific extension .app - set(APPS "\${TORQUE_APP_GAME_DIRECTORY}/${APP_NAME}.app") - - # Directories to look for dependencies - set(DIRS ${CMAKE_BINARY_DIR}) - - install(CODE "include(BundleUtilities) - fixup_bundle(\"${APPS}\" \"\" \"${DIRS}\")") - - set(CPACK_GENERATOR "DRAGNDROP") - include(CPack) - - diff --git a/Tools/CMake/torqueMacOSconfigs.cmake b/Tools/CMake/torqueMacOSconfigs.cmake index 5f0c870d4..3d19ffc76 100644 --- a/Tools/CMake/torqueMacOSconfigs.cmake +++ b/Tools/CMake/torqueMacOSconfigs.cmake @@ -1 +1,108 @@ #detect Architecture +enable_language(OBJC) +enable_language(OBJCXX) + +find_program(XCODEBUILD_EXECUTABLE xcodebuild) +execute_process(COMMAND ${XCODEBUILD_EXECUTABLE} -version -sdk macosx Path + OUTPUT_VARIABLE XCODE_SDK_ROOT_DIR + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + +set(XCODE_SDK_ROOT_DIR "${XCODE_SDK_ROOT_DIR}" CACHE INTERNAL "") +# Specify the location or name of the platform SDK to be used in CMAKE_OSX_SYSROOT. +set(CMAKE_OSX_SYSROOT "${XCODE_SDK_ROOT_DIR}" CACHE INTERNAL "") + +if (NOT DEFINED CMAKE_DEVELOPER_ROOT AND NOT CMAKE_GENERATOR MATCHES "Xcode") + get_filename_component(PLATFORM_SDK_DIR ${XCODE_SDK_ROOT_DIR} PATH) + get_filename_component(CMAKE_DEVELOPER_ROOT ${PLATFORM_SDK_DIR} PATH) + if (NOT EXISTS "${CMAKE_DEVELOPER_ROOT}") + message(FATAL_ERROR "Invalid CMAKE_DEVELOPER_ROOT: ${CMAKE_DEVELOPER_ROOT} does not exist.") + endif() +endif() + +# Find (Apple's) libtool. +if(DEFINED BUILD_LIBTOOL) + # Environment variables are always preserved. + set(ENV{_BUILD_LIBTOOL} "${BUILD_LIBTOOL}") +elseif(DEFINED ENV{_BUILD_LIBTOOL}) + set(BUILD_LIBTOOL "$ENV{_BUILD_LIBTOOL}") +elseif(NOT DEFINED BUILD_LIBTOOL) + execute_process(COMMAND xcrun -sdk ${XCODE_SDK_ROOT_DIR} -find libtool + OUTPUT_VARIABLE BUILD_LIBTOOL + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) +endif() + +# Find the toolchain's provided install_name_tool if none is found on the host +if(DEFINED CMAKE_INSTALL_NAME_TOOL) + # Environment variables are always preserved. + set(ENV{_CMAKE_INSTALL_NAME_TOOL} "${CMAKE_INSTALL_NAME_TOOL}") +elseif(DEFINED ENV{_CMAKE_INSTALL_NAME_TOOL}) + set(CMAKE_INSTALL_NAME_TOOL "$ENV{_CMAKE_INSTALL_NAME_TOOL}") +elseif(NOT DEFINED CMAKE_INSTALL_NAME_TOOL) + execute_process(COMMAND xcrun -sdk ${XCODE_SDK_ROOT_DIR} -find install_name_tool + OUTPUT_VARIABLE CMAKE_INSTALL_NAME_TOOL_INT + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + set(CMAKE_INSTALL_NAME_TOOL ${CMAKE_INSTALL_NAME_TOOL_INT} CACHE INTERNAL "") +endif() + +get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES) +foreach(lang ${languages}) + set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "${BUILD_LIBTOOL} -static -o " CACHE INTERNAL "") +endforeach() + +set(CMAKE_FRAMEWORK_PATH + ${CMAKE_DEVELOPER_ROOT}/Library/PrivateFrameworks + ${XCODE_SDK_ROOT_DIR}/System/Library/Frameworks + ${CMAKE_FRAMEWORK_PATH} CACHE INTERNAL "") + +set(CMAKE_FIND_FRAMEWORK FIRST) +set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE INTERNAL "") +set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13" CACHE INTERNAL "") +set(CMAKE_XCODE_ATTRIBUTE_SDKROOT macosx) +set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO") +set(CMAKE_SYSTEM_NAME Darwin) +set(CMAKE_THREAD_LIBS_INIT "-lpthread") +set(CMAKE_HAVE_THREADS_LIBRARY 1) +set(CMAKE_USE_WIN32_THREADS_INIT 0) +set(CMAKE_USE_PTHREADS_INIT 1) +set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO") +set(CMAKE_SHARED_LIBRARY_PREFIX "lib") +set(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib") +set(CMAKE_SHARED_MODULE_PREFIX "lib") +set(CMAKE_SHARED_MODULE_SUFFIX ".so") +set(CMAKE_C_COMPILER_ABI ELF) +set(CMAKE_CXX_COMPILER_ABI ELF) +set(CMAKE_C_HAS_ISYSROOT 1) +set(CMAKE_CXX_HAS_ISYSROOT 1) +set(CMAKE_MODULE_EXISTS 1) +set(CMAKE_DL_LIBS "") +set(CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ") +set(CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ") +set(CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}") +set(CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}") +set(CMAKE_MACOSX_BUNDLE YES) +set(OBJC_VARS "-fobjc-abi-version=2 -DOBJC_OLD_DISPATCH_PROTOTYPES=0") + +set(CMAKE_OBJC_FLAGS "${C_TARGET_FLAGS} ${APPLE_TARGET_TRIPLE_FLAG} ${SDK_NAME_VERSION_FLAGS} ${BITCODE} ${VISIBILITY} ${FOBJC_ARC} ${OBJC_VARS} ${CMAKE_OBJC_FLAGS}") +set(CMAKE_OBJC_FLAGS_DEBUG "-O0 -g ${CMAKE_OBJC_FLAGS_DEBUG}") +set(CMAKE_OBJC_FLAGS_MINSIZEREL "-DNDEBUG -Os ${CMAKE_OBJC_FLAGS_MINSIZEREL}") +set(CMAKE_OBJC_FLAGS_RELWITHDEBINFO "-DNDEBUG -O2 -g ${CMAKE_OBJC_FLAGS_RELWITHDEBINFO}") +set(CMAKE_OBJC_FLAGS_RELEASE "-DNDEBUG -O3 ${CMAKE_OBJC_FLAGS_RELEASE}") +set(CMAKE_OBJCXX_FLAGS "${C_TARGET_FLAGS} ${APPLE_TARGET_TRIPLE_FLAG} ${SDK_NAME_VERSION_FLAGS} ${BITCODE} ${VISIBILITY} ${FOBJC_ARC} ${OBJC_VARS} ${CMAKE_OBJCXX_FLAGS}") +set(CMAKE_OBJCXX_FLAGS_DEBUG "-O0 -g ${CMAKE_OBJCXX_FLAGS_DEBUG}") +set(CMAKE_OBJCXX_FLAGS_MINSIZEREL "-DNDEBUG -Os ${CMAKE_OBJCXX_FLAGS_MINSIZEREL}") +set(CMAKE_OBJCXX_FLAGS_RELWITHDEBINFO "-DNDEBUG -O2 -g ${CMAKE_OBJCXX_FLAGS_RELWITHDEBINFO}") +set(CMAKE_OBJCXX_FLAGS_RELEASE "-DNDEBUG -O3 ${CMAKE_OBJCXX_FLAGS_RELEASE}") +set(CMAKE_OBJC_LINK_FLAGS "${C_TARGET_FLAGS} ${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_OBJC_LINK_FLAGS}") +set(CMAKE_OBJCXX_LINK_FLAGS "${C_TARGET_FLAGS} ${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_OBJCXX_LINK_FLAGS}") + +set(CMAKE_PLATFORM_HAS_INSTALLNAME 1) +set(CMAKE_SHARED_LINKER_FLAGS "-rpath @executable_path/Frameworks -rpath @loader_path/Frameworks") +set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names") +set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -Wl,-headerpad_max_install_names") +set(CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,") +set(CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,") +set(CMAKE_FIND_LIBRARY_SUFFIXES ".tbd" ".dylib" ".so" ".a") +set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-install_name") \ No newline at end of file From a20055449630f02c73a2dc150ff4fd17110d763e Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Thu, 19 Oct 2023 11:45:25 +0100 Subject: [PATCH 06/18] more changes -Apple = more trouble than its worth --- Tools/CMake/torqueMacOSconfigs.cmake | 16 +++++++++++++++- Tools/CMake/torque_macros.cmake | 17 ----------------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/Tools/CMake/torqueMacOSconfigs.cmake b/Tools/CMake/torqueMacOSconfigs.cmake index 3d19ffc76..fca739680 100644 --- a/Tools/CMake/torqueMacOSconfigs.cmake +++ b/Tools/CMake/torqueMacOSconfigs.cmake @@ -105,4 +105,18 @@ set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -Wl,-headerpad_max_install_names set(CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,") set(CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,") set(CMAKE_FIND_LIBRARY_SUFFIXES ".tbd" ".dylib" ".so" ".a") -set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-install_name") \ No newline at end of file +set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-install_name") + +if(CMAKE_OSX_ARCHITECTURES MATCHES "((^|;|, )(arm64|arm64e|x86_64))+") + set(CMAKE_C_SIZEOF_DATA_PTR 8) + set(CMAKE_CXX_SIZEOF_DATA_PTR 8) + if(CMAKE_OSX_ARCHITECTURES MATCHES "((^|;|, )(arm64|arm64e))+") + set(CMAKE_SYSTEM_PROCESSOR "aarch64") + else() + set(CMAKE_SYSTEM_PROCESSOR "x86_64") + endif() +else() + set(CMAKE_C_SIZEOF_DATA_PTR 4) + set(CMAKE_CXX_SIZEOF_DATA_PTR 4) + set(CMAKE_SYSTEM_PROCESSOR "arm") +endif() \ No newline at end of file diff --git a/Tools/CMake/torque_macros.cmake b/Tools/CMake/torque_macros.cmake index 6783c7671..04371ca6c 100644 --- a/Tools/CMake/torque_macros.cmake +++ b/Tools/CMake/torque_macros.cmake @@ -65,23 +65,6 @@ macro (torqueAddSourceDirectories) endforeach() endmacro (torqueAddSourceDirectories) -# Helper function to add a directory to the TORQUE_SOURCE_FILES variable. It automatically searches for .cpp and .h files in the -# specified directory then adds them to the TORQUE_SOURCE_FILES variable. -macro (torqueToolchainSourceDirectories) - foreach(ARGUMENT ${ARGV}) - file(GLOB SCANNED_SOURCE_FILES "${TORQUE_SOURCE_DIRECTROY}/${ARGUMENT}/*.cpp") - file(GLOB SCANNED_INCLUDE_FILES "${TORQUE_SOURCE_DIRECTROY}/${ARGUMENT}/*.h") - - if (APPLE) - file(GLOB SCANNED_MAC_FILES "${TORQUE_SOURCE_DIRECTROY}/${ARGUMENT}/*.mm") - endif (APPLE) - - # Set in both current and parent scope so this macro can be used from loaded modules - set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${SCANNED_SOURCE_FILES} ${SCANNED_INCLUDE_FILES} ${SCANNED_MAC_FILES}) - set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} PARENT_SCOPE) - endforeach() -endmacro (torqueToolchainSourceDirectories) - ################# Set Conditional Engine Defines ################### macro (forwardDef flag) if (${flag}) From 0af0b5a24ab1f6806bb61949778b92e5651536a9 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Thu, 19 Oct 2023 14:39:22 +0100 Subject: [PATCH 07/18] MACOS working Mac working in this stage --- Engine/lib/CMakeLists.txt | 5 +++++ Engine/lib/nativeFileDialogs/nfd_cocoa.m | 10 +++++----- Engine/source/CMakeLists.txt | 9 +++++---- Tools/CMake/torqueMacOSconfigs.cmake | 9 +++------ Tools/CMake/torque_macros.cmake | 7 +------ 5 files changed, 19 insertions(+), 21 deletions(-) diff --git a/Engine/lib/CMakeLists.txt b/Engine/lib/CMakeLists.txt index c73efbd25..b8545dffa 100644 --- a/Engine/lib/CMakeLists.txt +++ b/Engine/lib/CMakeLists.txt @@ -110,6 +110,7 @@ mark_as_advanced(SDL_X11) mark_as_advanced(SDL_XINPUT) add_subdirectory(sdl ${TORQUE_LIB_TARG_DIRECTORY}/sdl2 EXCLUDE_FROM_ALL) + add_subdirectory(nativeFileDialogs ${TORQUE_LIB_TARG_DIRECTORY}/nfd EXCLUDE_FROM_ALL) # Assimp @@ -160,6 +161,10 @@ if (TORQUE_CPU_ARM32 OR TORQUE_CPU_ARM64) endif(NOT APPLE) endif (TORQUE_CPU_ARM32 OR TORQUE_CPU_ARM64) +if(APPLE) + set(PNG_ARM_NEON off CACHE BOOL "" FORCE) +endif() + #PNG set(PNG_STATIC on CACHE BOOL "" FORCE) mark_as_advanced(PNG_STATIC) diff --git a/Engine/lib/nativeFileDialogs/nfd_cocoa.m b/Engine/lib/nativeFileDialogs/nfd_cocoa.m index 776152d41..7874c3b11 100644 --- a/Engine/lib/nativeFileDialogs/nfd_cocoa.m +++ b/Engine/lib/nativeFileDialogs/nfd_cocoa.m @@ -75,7 +75,7 @@ static nfdresult_t AllocPathSet( NSArray *urls, nfdpathset_t *pathset ) assert([urls count]); pathset->count = (size_t)[urls count]; - pathset->indices = NFDi_Malloc( sizeof(size_t)*pathset->count ); + pathset->indices = (unsigned long*)NFDi_Malloc( sizeof(size_t)*pathset->count ); if ( !pathset->indices ) { return NFD_ERROR; @@ -89,7 +89,7 @@ static nfdresult_t AllocPathSet( NSArray *urls, nfdpathset_t *pathset ) bufsize += [path lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1; } - pathset->buf = NFDi_Malloc( sizeof(nfdchar_t) * bufsize ); + pathset->buf = (char *)NFDi_Malloc( sizeof(nfdchar_t) * bufsize ); if ( !pathset->buf ) { return NFD_ERROR; @@ -144,7 +144,7 @@ nfdresult_t NFD_OpenDialog( const nfdchar_t *filterList, // byte count, not char count size_t len = strlen(utf8Path);//NFDi_UTF8_Strlen(utf8Path); - *outPath = NFDi_Malloc( len+1 ); + *outPath = (nfdchar_t*)NFDi_Malloc(len+1); if ( !*outPath ) { [pool release]; @@ -229,7 +229,7 @@ nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, size_t byteLen = [url.path lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1; - *outPath = NFDi_Malloc( byteLen ); + *outPath = (char *)NFDi_Malloc( byteLen ); if ( !*outPath ) { [pool release]; @@ -269,7 +269,7 @@ nfdresult_t NFD_PickFolder(const nfdchar_t *defaultPath, // byte count, not char count size_t len = strlen(utf8Path);//NFDi_UTF8_Strlen(utf8Path); - *outPath = NFDi_Malloc( len+1 ); + *outPath = (char *)NFDi_Malloc( len+1 ); if ( !*outPath ) { [pool release]; diff --git a/Engine/source/CMakeLists.txt b/Engine/source/CMakeLists.txt index 77d0a56f7..2f5564f02 100644 --- a/Engine/source/CMakeLists.txt +++ b/Engine/source/CMakeLists.txt @@ -57,7 +57,6 @@ torqueAddSourceDirectories("platform" "platform/threads" "platform/async" "platform/input" "platform/output") torqueAddSourceDirectories("platform/nativeDialogs") - # Handle T3D torqueAddSourceDirectories("T3D/fps" "T3D/fx" "T3D/vehicles" "T3D/physics" "T3D/decal" "T3D/sfx" "T3D/gameBase" "T3D/turret" @@ -199,9 +198,11 @@ torqueAddSourceDirectories("i18n") if (UNIX) torqueAddSourceDirectories("platformPOSIX") - if (TORQUE_CPU_X32 OR TORQUE_CPU_X64) - torqueAddSourceDirectories("platformX86UNIX") - endif (TORQUE_CPU_X32 OR TORQUE_CPU_X64) + if(NOT APPLE) + if (TORQUE_CPU_X32 OR TORQUE_CPU_X64) + torqueAddSourceDirectories("platformX86UNIX") + endif (TORQUE_CPU_X32 OR TORQUE_CPU_X64) + endif(NOT APPLE) endif (UNIX) # Handle platformMac diff --git a/Tools/CMake/torqueMacOSconfigs.cmake b/Tools/CMake/torqueMacOSconfigs.cmake index fca739680..37ba4d2de 100644 --- a/Tools/CMake/torqueMacOSconfigs.cmake +++ b/Tools/CMake/torqueMacOSconfigs.cmake @@ -52,14 +52,11 @@ foreach(lang ${languages}) set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "${BUILD_LIBTOOL} -static -o " CACHE INTERNAL "") endforeach() -set(CMAKE_FRAMEWORK_PATH - ${CMAKE_DEVELOPER_ROOT}/Library/PrivateFrameworks - ${XCODE_SDK_ROOT_DIR}/System/Library/Frameworks - ${CMAKE_FRAMEWORK_PATH} CACHE INTERNAL "") +set(CMAKE_FRAMEWORK_PATH "/Applications/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks") set(CMAKE_FIND_FRAMEWORK FIRST) -set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE INTERNAL "") -set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13" CACHE INTERNAL "") +set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "" FORCE) +set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13" CACHE STRING "" FORCE) set(CMAKE_XCODE_ATTRIBUTE_SDKROOT macosx) set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO") set(CMAKE_SYSTEM_NAME Darwin) diff --git a/Tools/CMake/torque_macros.cmake b/Tools/CMake/torque_macros.cmake index 04371ca6c..7f9fdf8bc 100644 --- a/Tools/CMake/torque_macros.cmake +++ b/Tools/CMake/torque_macros.cmake @@ -128,11 +128,6 @@ endmacro (filterOut) ################# apple frameworks ################### macro(addFramework framework) if (APPLE) - find_library(${FRAMEWORK_LIB} ${framework}) - if(NOT ${FRAMEWORK_LIB}) - message(STATUS "${framework} not found.") - else() - set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} "${framework}") - endif() + set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} "${CMAKE_FRAMEWORK_PATH}/${framework}.framework") endif() endmacro() \ No newline at end of file From 8c4650d5dce4ec748243d0fd0db2ea22e97556da Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Thu, 19 Oct 2023 15:47:16 +0100 Subject: [PATCH 08/18] NativeFileDialogs -Needed to change nfd_cocoa to an objc++ file with mm extension --- Engine/lib/nativeFileDialogs/CMakeLists.txt | 2 +- Engine/lib/nativeFileDialogs/{nfd_cocoa.m => nfd_cocoa.mm} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename Engine/lib/nativeFileDialogs/{nfd_cocoa.m => nfd_cocoa.mm} (100%) diff --git a/Engine/lib/nativeFileDialogs/CMakeLists.txt b/Engine/lib/nativeFileDialogs/CMakeLists.txt index 1d0454bc6..f40f44dde 100644 --- a/Engine/lib/nativeFileDialogs/CMakeLists.txt +++ b/Engine/lib/nativeFileDialogs/CMakeLists.txt @@ -5,7 +5,7 @@ set(TORQUE_NFD_COMMON_SOURCES "${TORQUE_NFD_ROOT}/nfd_common.c") set(TORQUE_NFD_INCLUDE_DIRECTORIES "${TORQUE_NFD_ROOT}" "${TORQUE_NFD_ROOT}/include") if (APPLE) - set(TORQUE_NFD_SOURCES ${TORQUE_NFD_COMMON_SOURCES} "${TORQUE_NFD_ROOT}/nfd_cocoa.m") + set(TORQUE_NFD_SOURCES ${TORQUE_NFD_COMMON_SOURCES} "${TORQUE_NFD_ROOT}/nfd_cocoa.mm") elseif (UNIX) if (TORQUE_USE_ZENITY) set(TORQUE_NFD_SOURCES ${TORQUE_NFD_COMMON_SOURCES} "${TORQUE_NFD_ROOT}/nfd_zenity.c") diff --git a/Engine/lib/nativeFileDialogs/nfd_cocoa.m b/Engine/lib/nativeFileDialogs/nfd_cocoa.mm similarity index 100% rename from Engine/lib/nativeFileDialogs/nfd_cocoa.m rename to Engine/lib/nativeFileDialogs/nfd_cocoa.mm From b6c9bef48fdd24e7098e8679262ed34952411969 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Thu, 19 Oct 2023 16:29:04 +0100 Subject: [PATCH 09/18] revert nativeFile -NativeFileDialog m file was not being set to obj-c, now we force it withe set_source_files_properties. --- Engine/lib/nativeFileDialogs/CMakeLists.txt | 4 ++- .../{nfd_cocoa.mm => nfd_cocoa.m} | 28 +++++++++---------- 2 files changed, 17 insertions(+), 15 deletions(-) rename Engine/lib/nativeFileDialogs/{nfd_cocoa.mm => nfd_cocoa.m} (90%) diff --git a/Engine/lib/nativeFileDialogs/CMakeLists.txt b/Engine/lib/nativeFileDialogs/CMakeLists.txt index f40f44dde..606be00fc 100644 --- a/Engine/lib/nativeFileDialogs/CMakeLists.txt +++ b/Engine/lib/nativeFileDialogs/CMakeLists.txt @@ -5,7 +5,9 @@ set(TORQUE_NFD_COMMON_SOURCES "${TORQUE_NFD_ROOT}/nfd_common.c") set(TORQUE_NFD_INCLUDE_DIRECTORIES "${TORQUE_NFD_ROOT}" "${TORQUE_NFD_ROOT}/include") if (APPLE) - set(TORQUE_NFD_SOURCES ${TORQUE_NFD_COMMON_SOURCES} "${TORQUE_NFD_ROOT}/nfd_cocoa.mm") + enable_language(OBJC) + set(TORQUE_NFD_SOURCES ${TORQUE_NFD_COMMON_SOURCES} "${TORQUE_NFD_ROOT}/nfd_cocoa.m") + set_source_files_properties(${TORQUE_NFD_SOURCES} PROPERTIES LANGUAGE OBJC) elseif (UNIX) if (TORQUE_USE_ZENITY) set(TORQUE_NFD_SOURCES ${TORQUE_NFD_COMMON_SOURCES} "${TORQUE_NFD_ROOT}/nfd_zenity.c") diff --git a/Engine/lib/nativeFileDialogs/nfd_cocoa.mm b/Engine/lib/nativeFileDialogs/nfd_cocoa.m similarity index 90% rename from Engine/lib/nativeFileDialogs/nfd_cocoa.mm rename to Engine/lib/nativeFileDialogs/nfd_cocoa.m index 7874c3b11..1e51d4efb 100644 --- a/Engine/lib/nativeFileDialogs/nfd_cocoa.mm +++ b/Engine/lib/nativeFileDialogs/nfd_cocoa.m @@ -64,7 +64,7 @@ static void SetDefaultPath( NSSavePanel *dialog, const nfdchar_t *defaultPath ) NSString *defaultPathString = [NSString stringWithUTF8String: defaultPath]; NSURL *url = [NSURL fileURLWithPath:defaultPathString isDirectory:YES]; - [dialog setDirectoryURL:url]; + [dialog setDirectoryURL:url]; } @@ -75,8 +75,8 @@ static nfdresult_t AllocPathSet( NSArray *urls, nfdpathset_t *pathset ) assert([urls count]); pathset->count = (size_t)[urls count]; - pathset->indices = (unsigned long*)NFDi_Malloc( sizeof(size_t)*pathset->count ); - if ( !pathset->indices ) + pathset->indices = NFDi_Malloc( sizeof(size_t)*pathset->count ); + if ( !pathset->indices ) { return NFD_ERROR; } @@ -89,7 +89,7 @@ static nfdresult_t AllocPathSet( NSArray *urls, nfdpathset_t *pathset ) bufsize += [path lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1; } - pathset->buf = (char *)NFDi_Malloc( sizeof(nfdchar_t) * bufsize ); + pathset->buf = NFDi_Malloc( sizeof(nfdchar_t) * bufsize ); if ( !pathset->buf ) { return NFD_ERROR; @@ -125,7 +125,7 @@ nfdresult_t NFD_OpenDialog( const nfdchar_t *filterList, { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - NSWindow *keyWindow = [[NSApplication sharedApplication] keyWindow]; + NSWindow *keyWindow = [[NSApplication sharedApplication] keyWindow]; NSOpenPanel *dialog = [NSOpenPanel openPanel]; [dialog setAllowsMultipleSelection:NO]; @@ -144,11 +144,11 @@ nfdresult_t NFD_OpenDialog( const nfdchar_t *filterList, // byte count, not char count size_t len = strlen(utf8Path);//NFDi_UTF8_Strlen(utf8Path); - *outPath = (nfdchar_t*)NFDi_Malloc(len+1); + *outPath = NFDi_Malloc( len+1 ); if ( !*outPath ) { [pool release]; - [keyWindow makeKeyAndOrderFront:nil]; + [keyWindow makeKeyAndOrderFront:nil]; return NFD_ERROR; } memcpy( *outPath, utf8Path, len+1 ); /* copy null term */ @@ -185,14 +185,14 @@ nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, if ( [urls count] == 0 ) { [pool release]; - [keyWindow makeKeyAndOrderFront:nil]; + [keyWindow makeKeyAndOrderFront:nil]; return NFD_CANCEL; } if ( AllocPathSet( urls, outPaths ) == NFD_ERROR ) { [pool release]; - [keyWindow makeKeyAndOrderFront:nil]; + [keyWindow makeKeyAndOrderFront:nil]; return NFD_ERROR; } @@ -200,7 +200,7 @@ nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, } [pool release]; - [keyWindow makeKeyAndOrderFront:nil]; + [keyWindow makeKeyAndOrderFront:nil]; return nfdResult; } @@ -229,11 +229,11 @@ nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, size_t byteLen = [url.path lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1; - *outPath = (char *)NFDi_Malloc( byteLen ); + *outPath = NFDi_Malloc( byteLen ); if ( !*outPath ) { [pool release]; - [keyWindow makeKeyAndOrderFront:nil]; + [keyWindow makeKeyAndOrderFront:nil]; return NFD_ERROR; } memcpy( *outPath, utf8Path, byteLen ); @@ -269,11 +269,11 @@ nfdresult_t NFD_PickFolder(const nfdchar_t *defaultPath, // byte count, not char count size_t len = strlen(utf8Path);//NFDi_UTF8_Strlen(utf8Path); - *outPath = (char *)NFDi_Malloc( len+1 ); + *outPath = NFDi_Malloc( len+1 ); if ( !*outPath ) { [pool release]; - [keyWindow makeKeyAndOrderFront:nil]; + [keyWindow makeKeyAndOrderFront:nil]; return NFD_ERROR; } memcpy( *outPath, utf8Path, len+1 ); /* copy null term */ From e381bf483828bd5512404f6617d3b76053fef051 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Fri, 20 Oct 2023 00:19:40 +0100 Subject: [PATCH 10/18] Working archive -Archive now working if we override the shared libs rpath with the correct installation path --- CMakeLists.txt | 2 +- Engine/source/CMakeLists.txt | 30 +++++++--------------------- Tools/CMake/torqueMacOSconfigs.cmake | 26 ++++++++++++++++++++++-- 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a79ed0fd..5de867942 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,7 +30,7 @@ set(TORQUE_LIB_TARG_DIRECTORY "${CMAKE_BINARY_DIR}/Engine/lib") set(TORQUE_SOURCE_DIRECTROY "${CMAKE_SOURCE_DIR}/Engine/source") # Ensure all possible configurations end up in the project directory -set(CMAKE_INSTALL_PREFIX "${TORQUE_APP_ROOT_DIRECTORY}") +set(CMAKE_INSTALL_PREFIX "${TORQUE_APP_ROOT_DIRECTORY}" CACHE STRING "" FORCE) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${TORQUE_APP_GAME_DIRECTORY}") foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} ) string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG ) diff --git a/Engine/source/CMakeLists.txt b/Engine/source/CMakeLists.txt index 2f5564f02..fe93f6145 100644 --- a/Engine/source/CMakeLists.txt +++ b/Engine/source/CMakeLists.txt @@ -354,7 +354,9 @@ if (APPLE) add_executable(${TORQUE_APP_NAME} MACOSX_BUNDLE ${TORQUE_SOURCE_FILES}) set_target_properties(${TORQUE_APP_NAME} PROPERTIES BUNDLE true - MACOSX_BUNDLE_INFO_PLIST "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist") + MACOSX_BUNDLE_INFO_PLIST "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist" + XCODE_ATTRIBUTE_INSTALL_PATH "/Applications" + XCODE_ATTRIBUTE_SKIP_INSTALL "No") # Ensure the shared libraries are actually referenced at the correct path set(CMAKE_XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../Frameworks") @@ -428,7 +430,7 @@ append_defs() foreach (LIBRARY_BINARY ${TORQUE_ADDITIONAL_LIBRARY_BINARIES}) if (APPLE) # For OSX, we want these binaries to be copied to the Frameworks directory - add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks") + #add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks") else() # All other platforms expect the file next to the executable add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}") @@ -449,7 +451,9 @@ if (UNIX) # Only pay attention to shared libraries and make them output to the app resources if ("${LINK_LIBRARY_TYPE}" STREQUAL "SHARED_LIBRARY") if (APPLE) - set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks") + set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES + LIBRARY_OUTPUT_DIRECTORY "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks" + XCODE_ATTRIBUTE_INSTALL_PATH "/Applications/${TORQUE_APP_NAME}.app/Contents/Frameworks/$(CONFIGURATION)") else() set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${TORQUE_APP_GAME_DIRECTORY}") endif(APPLE) @@ -457,23 +461,3 @@ if (UNIX) endif() endforeach() endif (UNIX) - -if(APPLE) -install(TARGETS ${APP_NAME} - BUNDLE DESTINATION . COMPONENT Runtime - RUNTIME DESTINATION bin COMPONENT Runtime - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib/static) - -# Note Mac specific extension .app -set(APPS "\${TORQUE_APP_GAME_DIRECTORY}/${APP_NAME}.app") - -# Directories to look for dependencies -set(DIRS ${CMAKE_BINARY_DIR}) - -install(CODE "include(BundleUtilities) - fixup_bundle(\"${APPS}\" \"\" \"${DIRS}\")") - -set(CPACK_GENERATOR "DRAGNDROP") -include(CPack) -endif() diff --git a/Tools/CMake/torqueMacOSconfigs.cmake b/Tools/CMake/torqueMacOSconfigs.cmake index 37ba4d2de..e8aea05c5 100644 --- a/Tools/CMake/torqueMacOSconfigs.cmake +++ b/Tools/CMake/torqueMacOSconfigs.cmake @@ -96,7 +96,6 @@ set(CMAKE_OBJC_LINK_FLAGS "${C_TARGET_FLAGS} ${SDK_NAME_VERSION_FLAGS} -Wl,-sear set(CMAKE_OBJCXX_LINK_FLAGS "${C_TARGET_FLAGS} ${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_OBJCXX_LINK_FLAGS}") set(CMAKE_PLATFORM_HAS_INSTALLNAME 1) -set(CMAKE_SHARED_LINKER_FLAGS "-rpath @executable_path/Frameworks -rpath @loader_path/Frameworks") set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names") set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -Wl,-headerpad_max_install_names") set(CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,") @@ -116,4 +115,27 @@ else() set(CMAKE_C_SIZEOF_DATA_PTR 4) set(CMAKE_CXX_SIZEOF_DATA_PTR 4) set(CMAKE_SYSTEM_PROCESSOR "arm") -endif() \ No newline at end of file +endif() + +# Only create a single Xcode project file +set(CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY TRUE) +# Add all libraries to project link phase (lets Xcode handle linking) +set(CMAKE_XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION) + +# Enable codesigning with secure timestamp when not in Debug configuration (required for Notarization) +set(CMAKE_XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS[variant=Release] "--timestamp") +set(CMAKE_XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS[variant=RelWithDebInfo] "--timestamp") + +# Enable codesigning with hardened runtime option when not in Debug configuration (required for Notarization) +set(CMAKE_XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME[variant=Release] YES) +set(CMAKE_XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME[variant=RelWithDebInfo] YES) + +# Disable injection of Xcode's base entitlements used for debugging when not in Debug configuration (required for +# Notarization) +set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS[variant=Release] NO) +set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS[variant=RelWithDebInfo] NO) + +set(_release_configs RelWithDebInfo Release) + if(CMAKE_BUILD_TYPE IN_LIST _release_configs) + add_link_options(LINKER:-dead_strip) + endif() \ No newline at end of file From b6617b1b0f1251cc2e28ebb2a591e6e28cf97586 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Fri, 20 Oct 2023 12:04:56 +0100 Subject: [PATCH 11/18] Working multi-arch archiving -Working multi arch compile -Required assets now copy to the app bundle TODO: Make the logic to wrap around whether its multi arch -The changes in torqumacosconfigs.cmake are not required if we are only building one architecture, also if it is x86_64 we can drop min deployment target to 10.13 --- Engine/lib/Torque_postBuild.cmake | 2 +- Engine/source/CMakeLists.txt | 27 +++++++++++++++++++++------ Tools/CMake/torqueMacOSconfigs.cmake | 10 +++++++++- Tools/CMake/torque_macros.cmake | 2 +- 4 files changed, 32 insertions(+), 9 deletions(-) diff --git a/Engine/lib/Torque_postBuild.cmake b/Engine/lib/Torque_postBuild.cmake index d5863dd61..15e448701 100644 --- a/Engine/lib/Torque_postBuild.cmake +++ b/Engine/lib/Torque_postBuild.cmake @@ -19,7 +19,7 @@ if (APPLE) addFramework("IOKit") #grrr damn you sdl! addFramework("Carbon") - set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} iconv) + set(TORQUE_LINK_FRAMEWORKS ${TORQUE_LINK_FRAMEWORKS} iconv) if(NOT TORQUE_DEDICATED) addFramework("OpenGL") addFramework("CoreVideo") diff --git a/Engine/source/CMakeLists.txt b/Engine/source/CMakeLists.txt index fe93f6145..c444a1477 100644 --- a/Engine/source/CMakeLists.txt +++ b/Engine/source/CMakeLists.txt @@ -309,8 +309,17 @@ endif (WIN32) # Prepare OSX Plist if (APPLE) - set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_MAC_SOURCES} "${CMAKE_SOURCE_DIR}/Tools/CMake/torque.icns") - set_source_files_properties("${CMAKE_SOURCE_DIR}/Tools/CMake/torque.icns" PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") + set(MACOSX_RESOURCES "${CMAKE_SOURCE_DIR}/Tools/CMake/torque.icns" + "${TORQUE_APP_GAME_DIRECTORY}/data" + "${TORQUE_APP_GAME_DIRECTORY}/core" + "${TORQUE_APP_GAME_DIRECTORY}/tools" + "${TORQUE_APP_GAME_DIRECTORY}/main.${TORQUE_SCRIPT_EXTENSION}") + + set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_MAC_SOURCES} ${MACOSX_RESOURCES}) + + source_group("Resources" FILES ${MACOSX_RESOURCES}) + + set_source_files_properties(${MACOSX_RESOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") set(EXECUTABLE_NAME "${TORQUE_APP_NAME}") configure_file("${CMAKE_SOURCE_DIR}/Tools/CMake/Info.plist.in" "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist" COPYONLY) @@ -358,8 +367,6 @@ if (APPLE) XCODE_ATTRIBUTE_INSTALL_PATH "/Applications" XCODE_ATTRIBUTE_SKIP_INSTALL "No") - # Ensure the shared libraries are actually referenced at the correct path - set(CMAKE_XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../Frameworks") elseif (WIN32) add_executable(${TORQUE_APP_NAME} WIN32 ${TORQUE_SOURCE_FILES}) @@ -406,8 +413,17 @@ if(MSVC) set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${TORQUE_APP_NAME}) endif() +set_property(GLOBAL PROPERTY USE_FOLDERS ON) +foreach (TORQUE_LIBRARY ${TORQUE_LINK_LIBRARIES}) + set_target_properties(${TORQUE_LIBRARY} PROPERTIES + FOLDER "Libraries") +endforeach() + target_compile_definitions(${TORQUE_APP_NAME} PUBLIC ${TORQUE_COMPILE_DEFINITIONS}) target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_LIBRARIES}) +if(APPLE) +target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_FRAMEWORKS}) +endif(APPLE) target_link_options(${TORQUE_APP_NAME} PUBLIC ${TORQUE_LINK_OPTIONS}) if (TORQUE_TARGET_PROPERTIES) set_target_properties(${TORQUE_APP_NAME} PROPERTIES ${TORQUE_TARGET_PROPERTIES}) @@ -430,7 +446,7 @@ append_defs() foreach (LIBRARY_BINARY ${TORQUE_ADDITIONAL_LIBRARY_BINARIES}) if (APPLE) # For OSX, we want these binaries to be copied to the Frameworks directory - #add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks") + add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/$(CONFIGURATION)") else() # All other platforms expect the file next to the executable add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}") @@ -447,7 +463,6 @@ if (UNIX) # For eg. OSX some links are not valid targets - for example frameworks provided by OS if (TARGET ${GAME_LINK_LIBRARY}) get_target_property(LINK_LIBRARY_TYPE ${GAME_LINK_LIBRARY} TYPE) - # Only pay attention to shared libraries and make them output to the app resources if ("${LINK_LIBRARY_TYPE}" STREQUAL "SHARED_LIBRARY") if (APPLE) diff --git a/Tools/CMake/torqueMacOSconfigs.cmake b/Tools/CMake/torqueMacOSconfigs.cmake index e8aea05c5..06de88552 100644 --- a/Tools/CMake/torqueMacOSconfigs.cmake +++ b/Tools/CMake/torqueMacOSconfigs.cmake @@ -55,8 +55,10 @@ endforeach() set(CMAKE_FRAMEWORK_PATH "/Applications/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks") set(CMAKE_FIND_FRAMEWORK FIRST) +# minimum for multi arch build is 11. +set(CMAKE_OSX_DEPLOYMENT_TARGET "11" CACHE STRING "" FORCE) set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "" FORCE) -set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13" CACHE STRING "" FORCE) +set(CMAKE_XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET[arch=arm64] "11.0" CACHE STRING "arm 64 minimum deployment target" FORCE) set(CMAKE_XCODE_ATTRIBUTE_SDKROOT macosx) set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO") set(CMAKE_SYSTEM_NAME Darwin) @@ -69,6 +71,11 @@ set(CMAKE_SHARED_LIBRARY_PREFIX "lib") set(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib") set(CMAKE_SHARED_MODULE_PREFIX "lib") set(CMAKE_SHARED_MODULE_SUFFIX ".so") + +set(CMAKE_C_COMPILER_TARGET x86_64-arm64-apple-macosx11) +set(CMAKE_CXX_COMPILER_TARGET x86_64-arm64-apple-macosx11) +set(CMAKE_ASM_COMPILER_TARGET x86_64-arm64-apple-macosx11) + set(CMAKE_C_COMPILER_ABI ELF) set(CMAKE_CXX_COMPILER_ABI ELF) set(CMAKE_C_HAS_ISYSROOT 1) @@ -121,6 +128,7 @@ endif() set(CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY TRUE) # Add all libraries to project link phase (lets Xcode handle linking) set(CMAKE_XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION) +set(CMAKE_XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@loader_path/../Frameworks") # Enable codesigning with secure timestamp when not in Debug configuration (required for Notarization) set(CMAKE_XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS[variant=Release] "--timestamp") diff --git a/Tools/CMake/torque_macros.cmake b/Tools/CMake/torque_macros.cmake index 7f9fdf8bc..e98cb1f6c 100644 --- a/Tools/CMake/torque_macros.cmake +++ b/Tools/CMake/torque_macros.cmake @@ -128,6 +128,6 @@ endmacro (filterOut) ################# apple frameworks ################### macro(addFramework framework) if (APPLE) - set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} "${CMAKE_FRAMEWORK_PATH}/${framework}.framework") + set(TORQUE_LINK_FRAMEWORKS ${TORQUE_LINK_FRAMEWORKS} "${CMAKE_FRAMEWORK_PATH}/${framework}.framework") endif() endmacro() \ No newline at end of file From f10520e751a587b7e1683eb66399a10e6d4c02ef Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Fri, 20 Oct 2023 21:06:53 +0100 Subject: [PATCH 12/18] Macosx build with rpath Archiving builds no longer have linking errors when run --- Engine/source/CMakeLists.txt | 6 +-- Tools/CMake/torqueMacOSconfigs.cmake | 62 ++++++++++++++++------------ 2 files changed, 39 insertions(+), 29 deletions(-) diff --git a/Engine/source/CMakeLists.txt b/Engine/source/CMakeLists.txt index c444a1477..faadd39ed 100644 --- a/Engine/source/CMakeLists.txt +++ b/Engine/source/CMakeLists.txt @@ -365,7 +365,8 @@ if (APPLE) BUNDLE true MACOSX_BUNDLE_INFO_PLIST "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist" XCODE_ATTRIBUTE_INSTALL_PATH "/Applications" - XCODE_ATTRIBUTE_SKIP_INSTALL "No") + XCODE_ATTRIBUTE_SKIP_INSTALL "No" + MACOSX_RPATH TRUE) elseif (WIN32) add_executable(${TORQUE_APP_NAME} WIN32 ${TORQUE_SOURCE_FILES}) @@ -467,8 +468,7 @@ if (UNIX) if ("${LINK_LIBRARY_TYPE}" STREQUAL "SHARED_LIBRARY") if (APPLE) set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES - LIBRARY_OUTPUT_DIRECTORY "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks" - XCODE_ATTRIBUTE_INSTALL_PATH "/Applications/${TORQUE_APP_NAME}.app/Contents/Frameworks/$(CONFIGURATION)") + XCODE_ATTRIBUTE_INSTALL_PATH "@rpath") else() set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${TORQUE_APP_GAME_DIRECTORY}") endif(APPLE) diff --git a/Tools/CMake/torqueMacOSconfigs.cmake b/Tools/CMake/torqueMacOSconfigs.cmake index 06de88552..9c3f5020a 100644 --- a/Tools/CMake/torqueMacOSconfigs.cmake +++ b/Tools/CMake/torqueMacOSconfigs.cmake @@ -1,6 +1,7 @@ #detect Architecture enable_language(OBJC) enable_language(OBJCXX) +enable_language(CXX) find_program(XCODEBUILD_EXECUTABLE xcodebuild) execute_process(COMMAND ${XCODEBUILD_EXECUTABLE} -version -sdk macosx Path @@ -33,27 +34,13 @@ elseif(NOT DEFINED BUILD_LIBTOOL) OUTPUT_STRIP_TRAILING_WHITESPACE) endif() -# Find the toolchain's provided install_name_tool if none is found on the host -if(DEFINED CMAKE_INSTALL_NAME_TOOL) - # Environment variables are always preserved. - set(ENV{_CMAKE_INSTALL_NAME_TOOL} "${CMAKE_INSTALL_NAME_TOOL}") -elseif(DEFINED ENV{_CMAKE_INSTALL_NAME_TOOL}) - set(CMAKE_INSTALL_NAME_TOOL "$ENV{_CMAKE_INSTALL_NAME_TOOL}") -elseif(NOT DEFINED CMAKE_INSTALL_NAME_TOOL) - execute_process(COMMAND xcrun -sdk ${XCODE_SDK_ROOT_DIR} -find install_name_tool - OUTPUT_VARIABLE CMAKE_INSTALL_NAME_TOOL_INT - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) - set(CMAKE_INSTALL_NAME_TOOL ${CMAKE_INSTALL_NAME_TOOL_INT} CACHE INTERNAL "") -endif() - get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES) foreach(lang ${languages}) set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "${BUILD_LIBTOOL} -static -o " CACHE INTERNAL "") endforeach() set(CMAKE_FRAMEWORK_PATH "/Applications/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks") - +set(CMAKE_SHARED_LINKER_FLAGS "-rpath @executable_path/../Frameworks -rpath @loader_path/../Frameworks") set(CMAKE_FIND_FRAMEWORK FIRST) # minimum for multi arch build is 11. set(CMAKE_OSX_DEPLOYMENT_TARGET "11" CACHE STRING "" FORCE) @@ -62,10 +49,9 @@ set(CMAKE_XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET[arch=arm64] "11.0" CACHE STRI set(CMAKE_XCODE_ATTRIBUTE_SDKROOT macosx) set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO") set(CMAKE_SYSTEM_NAME Darwin) -set(CMAKE_THREAD_LIBS_INIT "-lpthread") -set(CMAKE_HAVE_THREADS_LIBRARY 1) -set(CMAKE_USE_WIN32_THREADS_INIT 0) -set(CMAKE_USE_PTHREADS_INIT 1) + +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO") set(CMAKE_SHARED_LIBRARY_PREFIX "lib") set(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib") @@ -108,7 +94,6 @@ set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -Wl,-headerpad_max_install_names set(CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,") set(CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,") set(CMAKE_FIND_LIBRARY_SUFFIXES ".tbd" ".dylib" ".so" ".a") -set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-install_name") if(CMAKE_OSX_ARCHITECTURES MATCHES "((^|;|, )(arm64|arm64e|x86_64))+") set(CMAKE_C_SIZEOF_DATA_PTR 8) @@ -124,19 +109,32 @@ else() set(CMAKE_SYSTEM_PROCESSOR "arm") endif() +if(DEFINED CMAKE_INSTALL_NAME_TOOL) + # Environment variables are always preserved. + set(ENV{_CMAKE_INSTALL_NAME_TOOL} "${CMAKE_INSTALL_NAME_TOOL}") +elseif(DEFINED ENV{_CMAKE_INSTALL_NAME_TOOL}) + set(CMAKE_INSTALL_NAME_TOOL "$ENV{_CMAKE_INSTALL_NAME_TOOL}") +elseif(NOT DEFINED CMAKE_INSTALL_NAME_TOOL) + execute_process(COMMAND xcrun -sdk ${XCODE_SDK_ROOT_DIR} -find install_name_tool + OUTPUT_VARIABLE CMAKE_INSTALL_NAME_TOOL_INT + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + set(CMAKE_INSTALL_NAME_TOOL ${CMAKE_INSTALL_NAME_TOOL_INT} CACHE INTERNAL "") +endif() + # Only create a single Xcode project file set(CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY TRUE) # Add all libraries to project link phase (lets Xcode handle linking) set(CMAKE_XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION) -set(CMAKE_XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@loader_path/../Frameworks") +set(CMAKE_XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../Frameworks") # Enable codesigning with secure timestamp when not in Debug configuration (required for Notarization) set(CMAKE_XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS[variant=Release] "--timestamp") set(CMAKE_XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS[variant=RelWithDebInfo] "--timestamp") # Enable codesigning with hardened runtime option when not in Debug configuration (required for Notarization) -set(CMAKE_XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME[variant=Release] YES) -set(CMAKE_XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME[variant=RelWithDebInfo] YES) +#set(CMAKE_XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME[variant=Release] YES) +#set(CMAKE_XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME[variant=RelWithDebInfo] YES) # Disable injection of Xcode's base entitlements used for debugging when not in Debug configuration (required for # Notarization) @@ -144,6 +142,18 @@ set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS[variant=Release] NO set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS[variant=RelWithDebInfo] NO) set(_release_configs RelWithDebInfo Release) - if(CMAKE_BUILD_TYPE IN_LIST _release_configs) - add_link_options(LINKER:-dead_strip) - endif() \ No newline at end of file +if(CMAKE_BUILD_TYPE IN_LIST _release_configs) + add_link_options(LINKER:-dead_strip) +endif() + +if(APPLE) + set(CMAKE_THREAD_LIBS_INIT "-lpthread") + set(CMAKE_HAVE_THREADS_LIBRARY 1) + set(CMAKE_USE_WIN32_THREADS_INIT 0) + set(CMAKE_USE_PTHREADS_INIT 1) + set(THREADS_PREFER_PTHREAD_FLAG ON) +endif() + +set(CMAKE_MACOSX_RPATH 1) +set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") + From 9bc06f088763069d756d138391aac84037b4fe1f Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Fri, 20 Oct 2023 22:23:38 +0100 Subject: [PATCH 13/18] main dir SDL_BaseDir was returning the directory that contains the app, now it returns the resources directory --- Engine/source/platformMac/macFileIO.mm | 2 +- Tools/CMake/Info.plist.in | 2 +- Tools/CMake/torqueMacOSconfigs.cmake | 5 +++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Engine/source/platformMac/macFileIO.mm b/Engine/source/platformMac/macFileIO.mm index dae844163..d0eb99c10 100644 --- a/Engine/source/platformMac/macFileIO.mm +++ b/Engine/source/platformMac/macFileIO.mm @@ -646,7 +646,7 @@ StringTableEntry Platform::getExecutablePath() return cwd; } - NSString* string = [[NSBundle mainBundle] pathForResource:@"main" ofType:@"cs"]; + NSString* string = [[NSBundle mainBundle] pathForResource:@"main" ofType:@"tscript"]; if(!string) string = [[NSBundle mainBundle] bundlePath]; diff --git a/Tools/CMake/Info.plist.in b/Tools/CMake/Info.plist.in index 8c39d8f4f..0c6657131 100644 --- a/Tools/CMake/Info.plist.in +++ b/Tools/CMake/Info.plist.in @@ -17,6 +17,6 @@ CFBundleVersion 1.0 SDL_FILESYSTEM_BASE_DIR_TYPE - parent + resource diff --git a/Tools/CMake/torqueMacOSconfigs.cmake b/Tools/CMake/torqueMacOSconfigs.cmake index 9c3f5020a..03fbbc198 100644 --- a/Tools/CMake/torqueMacOSconfigs.cmake +++ b/Tools/CMake/torqueMacOSconfigs.cmake @@ -157,3 +157,8 @@ endif() set(CMAKE_MACOSX_RPATH 1) set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") +# Debug configuration for quicker debug builds +set(CMAKE_XCODE_ATTRIBUTE_LINKER_DISPLAYS_MANGLED_NAMES[variant=Debug] YES) +set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Debug] YES) +set(CMAKE_XCODE_ATTRIBUTE_ENABLE_TESTABILITY[variant=Debug] YES) + From 8b7e318fd574b4971b91c2c1dc7aa81d5dbcf9f4 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Fri, 20 Oct 2023 22:33:20 +0100 Subject: [PATCH 14/18] multiplatform fixes -Wrap macosconfig in if(apple) --- Engine/lib/Torque_postBuild.cmake | 8 ++++---- Engine/source/CMakeLists.txt | 12 +++++++++++- Tools/CMake/torqueMacOSconfigs.cmake | 14 +++++++------- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/Engine/lib/Torque_postBuild.cmake b/Engine/lib/Torque_postBuild.cmake index 15e448701..d8430e112 100644 --- a/Engine/lib/Torque_postBuild.cmake +++ b/Engine/lib/Torque_postBuild.cmake @@ -2,9 +2,9 @@ # When on Windows, we need to link against winsock and windows codecs if (WIN32) - set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} WS2_32.LIB windowscodecs.lib) + set(TORQUE_LINK_WINDOWS ${TORQUE_LINK_WINDOWS} WS2_32.LIB windowscodecs.lib) if (TORQUE_D3D11) - set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} dxguid.lib) + set(TORQUE_LINK_WINDOWS ${TORQUE_LINK_WINDOWS} dxguid.lib) endif (TORQUE_D3D11) endif (WIN32) @@ -36,8 +36,8 @@ set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} nativeFileDialogs) # Linux requires X11 & freetype if (UNIX AND NOT APPLE) - set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} "X11" "Xft" "dl" "pthread") + set(TORQUE_LINK_LINUX ${TORQUE_LINK_LINUX} "X11" "Xft" "dl" "pthread") find_package(Freetype REQUIRED) set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} ${FREETYPE_INCLUDE_DIRS}) - set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} ${FREETYPE_LIBRARIES}) + set(TORQUE_LINK_LINUX ${TORQUE_LINK_LINUX} ${FREETYPE_LIBRARIES}) endif (UNIX AND NOT APPLE) \ No newline at end of file diff --git a/Engine/source/CMakeLists.txt b/Engine/source/CMakeLists.txt index faadd39ed..aad4df349 100644 --- a/Engine/source/CMakeLists.txt +++ b/Engine/source/CMakeLists.txt @@ -422,9 +422,19 @@ endforeach() target_compile_definitions(${TORQUE_APP_NAME} PUBLIC ${TORQUE_COMPILE_DEFINITIONS}) target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_LIBRARIES}) + if(APPLE) -target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_FRAMEWORKS}) + target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_FRAMEWORKS}) endif(APPLE) + +if(WIN32) + target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_WINDOWS}) +endif(WIN32) + +if(UNIX AND NOT APPLE) + target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_LINUX}) +endif(UNIX AND NOT APPLE) + target_link_options(${TORQUE_APP_NAME} PUBLIC ${TORQUE_LINK_OPTIONS}) if (TORQUE_TARGET_PROPERTIES) set_target_properties(${TORQUE_APP_NAME} PROPERTIES ${TORQUE_TARGET_PROPERTIES}) diff --git a/Tools/CMake/torqueMacOSconfigs.cmake b/Tools/CMake/torqueMacOSconfigs.cmake index 03fbbc198..0e583d0b4 100644 --- a/Tools/CMake/torqueMacOSconfigs.cmake +++ b/Tools/CMake/torqueMacOSconfigs.cmake @@ -1,3 +1,4 @@ +if(APPLE) #detect Architecture enable_language(OBJC) enable_language(OBJCXX) @@ -146,13 +147,11 @@ if(CMAKE_BUILD_TYPE IN_LIST _release_configs) add_link_options(LINKER:-dead_strip) endif() -if(APPLE) - set(CMAKE_THREAD_LIBS_INIT "-lpthread") - set(CMAKE_HAVE_THREADS_LIBRARY 1) - set(CMAKE_USE_WIN32_THREADS_INIT 0) - set(CMAKE_USE_PTHREADS_INIT 1) - set(THREADS_PREFER_PTHREAD_FLAG ON) -endif() +set(CMAKE_THREAD_LIBS_INIT "-lpthread") +set(CMAKE_HAVE_THREADS_LIBRARY 1) +set(CMAKE_USE_WIN32_THREADS_INIT 0) +set(CMAKE_USE_PTHREADS_INIT 1) +set(THREADS_PREFER_PTHREAD_FLAG ON) set(CMAKE_MACOSX_RPATH 1) set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") @@ -162,3 +161,4 @@ set(CMAKE_XCODE_ATTRIBUTE_LINKER_DISPLAYS_MANGLED_NAMES[variant=Debug] YES) set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Debug] YES) set(CMAKE_XCODE_ATTRIBUTE_ENABLE_TESTABILITY[variant=Debug] YES) +endif(APPLE) \ No newline at end of file From 233c6a80457bd3aaba3083e0f957444a973533e6 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Sat, 21 Oct 2023 01:50:31 +0100 Subject: [PATCH 15/18] example cmake workflow --- CMakeLists.txt | 15 +- Engine/source/CMakeLists.txt | 471 +----------------- Engine/source/torqueEveryEngine.cmake | 465 +++++++++++++++++ Engine/source/torqueMacosEngine.cmake | 283 +++++++++++ .../torqueMacosxconfig.cmake} | 3 +- 5 files changed, 763 insertions(+), 474 deletions(-) create mode 100644 Engine/source/torqueEveryEngine.cmake create mode 100644 Engine/source/torqueMacosEngine.cmake rename Tools/CMake/{torqueMacOSconfigs.cmake => platformconfigs/torqueMacosxconfig.cmake} (99%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5de867942..c5bec3818 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,10 +4,10 @@ set(CMAKE_CONFIGURATION_TYPES "Debug;RelWithDebInfo;Release" CACHE STRING "" FOR include("${CMAKE_SOURCE_DIR}/Tools/CMake/torque_macros.cmake") include("${CMAKE_SOURCE_DIR}/Tools/CMake/torque_configs.cmake") -file(GLOB OS_SCRIPTS "${CMAKE_SOURCE_DIR}/Tools/CMake/torque*configs.cmake") -foreach (TORQUE_OS_SCRIPT ${OS_SCRIPTS}) - include(${TORQUE_OS_SCRIPT}) -endforeach() +#file(GLOB OS_SCRIPTS "${CMAKE_SOURCE_DIR}/Tools/CMake/torque*configs.cmake") +#foreach (TORQUE_OS_SCRIPT ${OS_SCRIPTS}) +# include(${TORQUE_OS_SCRIPT}) +#endforeach() # Ensure multi-core compilation is enabled for everything add_compile_options($<$:/MP>) @@ -28,6 +28,7 @@ set(TORQUE_APP_GAME_DIRECTORY "${TORQUE_APP_ROOT_DIRECTORY}/game") set(TORQUE_LIB_ROOT_DIRECTORY "${CMAKE_SOURCE_DIR}/Engine/lib") set(TORQUE_LIB_TARG_DIRECTORY "${CMAKE_BINARY_DIR}/Engine/lib") set(TORQUE_SOURCE_DIRECTROY "${CMAKE_SOURCE_DIR}/Engine/source") +set(TORQUE_ENGINE_DIRECTORY "${CMAKE_SOURCE_DIR}/Engine") # Ensure all possible configurations end up in the project directory set(CMAKE_INSTALL_PREFIX "${TORQUE_APP_ROOT_DIRECTORY}" CACHE STRING "" FORCE) @@ -74,4 +75,8 @@ endif(NOT TORQUE_INSTALLED_TEMPLATE) # Generate torqueConfig.h in our temp directory configure_file("${CMAKE_SOURCE_DIR}/Tools/CMake/torqueConfig.h.in" "${TORQUE_APP_ROOT_DIRECTORY}/source/torqueConfig.h") -add_subdirectory(Engine) +if(APPLE) + include("${CMAKE_SOURCE_DIR}/Tools/CMake/platformconfigs/torqueMacosxconfig.cmake") +else(APPLE) + add_subdirectory(Engine) +endif(APPLE) \ No newline at end of file diff --git a/Engine/source/CMakeLists.txt b/Engine/source/CMakeLists.txt index aad4df349..ee80caa46 100644 --- a/Engine/source/CMakeLists.txt +++ b/Engine/source/CMakeLists.txt @@ -18,471 +18,8 @@ set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} TORQUE_TESTS_ENABLE set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} "_VARIADIC_MAX=10") endif() -# On Windows we disable CRT Security warnings - this comes from recommendations to use non-portable functions. -if (WIN32) - set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} _CRT_SECURE_NO_WARNINGS WIN32) -endif (WIN32) - -if (APPLE) - set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} __MACOSX__) -elseif (UNIX) - set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} __linux__) -endif (APPLE) - -################# Set Engine Linkages ################### - -# When on Windows, we need to link against winsock and windows codecs -if (WIN32) - set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_WIN_SOURCES}) -endif (WIN32) - -# Linux requires X11 & freetype -if (UNIX AND NOT APPLE) - set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_X11_SOURCES}) - find_package(Freetype REQUIRED) - set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} ${FREETYPE_INCLUDE_DIRS}) -endif (UNIX AND NOT APPLE) - -################# Collect Source Files ################### - -# Handle app -torqueAddSourceDirectories("app" "app/net") - -# Handle console -torqueAddSourceDirectories("console") -torqueAddSourceDirectories("console/torquescript") - -# Handle Platform -torqueAddSourceDirectories("platform" "platform/threads" "platform/async" - "platform/input" "platform/output") - -torqueAddSourceDirectories("platform/nativeDialogs") -# Handle T3D -torqueAddSourceDirectories("T3D/fps" "T3D/fx" "T3D/vehicles" "T3D/physics" - "T3D/decal" "T3D/sfx" "T3D/gameBase" "T3D/turret" - "T3D/lighting" "T3D/gameOBjects" "T3D/components" - "T3D/systems" "T3D/assets" "T3D" "T3D/gameBase/std") - -# Handle TS -torqueAddSourceDirectories("ts" "ts/collada" "ts/assimp" "ts/loader" "ts/arch") - -# Handle SFX - OpenAL is handled as a module later on -torqueAddSourceDirectories("sfx" "sfx/media" "sfx/null") -if(TORQUE_SFX_OPENAL AND NOT TORQUE_DEDICATED) - torqueAddSourceDirectories("sfx/openal") - if(WIN32) - torqueAddSourceDirectories("sfx/openal/win32") - elseif(UNIX AND NOT APPLE) - torqueAddSourceDirectories("sfx/openal/linux") - elseif(APPLE) - torqueAddSourceDirectories("sfx/openal/mac") - endif() -endif() -# Handle GFX -torqueAddSourceDirectories("gfx" "gfx/Null" "gfx/test" "gfx/bitmap" "gfx/bitmap/loaders" - "gfx/util" "gfx/video" "gfx/sim" ) - -if (TORQUE_OPENGL) - torqueAddSourceDirectories("gfx/gl" "gfx/gl/sdl" "gfx/gl/tGL") -endif (TORQUE_OPENGL) - -if (WIN32 AND TORQUE_D3D11) - torqueAddSourceDirectories("gfx/D3D11") -endif (WIN32 AND TORQUE_D3D11) - -# Handle core -torqueAddSourceDirectories("core" "core/stream" "core/strings" "core/util" - "core/util/journal" "core/util/zip" "core/util/compressors") -# Handle GUI -torqueAddSourceDirectories("gui" "gui/buttons" "gui/containers" "gui/controls" "gui/core" - "gui/game" "gui/shiny" "gui/utility" "gui/3d") - -# Handle postFX -torqueAddSourceDirectories("postFx") - -# Handle Windowmanager -torqueAddSourceDirectories("windowManager" "windowManager/torque" "windowManager/sdl") - -# Handle scene -torqueAddSourceDirectories("scene" "scene/culling" "scene/zones" "scene/mixin") - -# Handle math -torqueAddSourceDirectories("math" "math/util") - -# Handle persistence -torqueAddSourceDirectories("persistence/taml" "persistence/taml/binary" "persistence/taml/xml") - -# Handle Cinterface -torqueAddSourceDirectories("cinterface") - -# Handle util -torqueAddSourceDirectories("util" "util/messaging") - -# Handle assets -torqueAddSourceDirectories("assets") - -# Handle Sim -torqueAddSourceDirectories("sim") - -# Handle module -torqueAddSourceDirectories("module") - -# Handle forest -torqueAddSourceDirectories("forest" "forest/ts") -if(TORQUE_OPENGL) - torqueAddSourceDirectories("forest" "forest/glsl") -endif(TORQUE_OPENGL) -if(TORQUE_D3D11) - torqueAddSourceDirectories("forest" "forest/hlsl") -endif(TORQUE_D3D11) - -# Handle shadergen -torqueAddSourceDirectories("shaderGen") - -if (WIN32 AND TORQUE_D3D11) - torqueAddSourceDirectories("shaderGen/HLSL") -endif (WIN32 AND TORQUE_D3D11) - -if (TORQUE_OPENGL) - torqueAddSourceDirectories("shaderGen/GLSL") -endif (TORQUE_OPENGL) - -# Handle terrain -torqueAddSourceDirectories("terrain") - -if (WIN32 AND TORQUE_D3D11) - torqueAddSourceDirectories("terrain/hlsl") -endif (WIN32 AND TORQUE_D3D11) - -if (TORQUE_OPENGL) - torqueAddSourceDirectories("terrain/glsl") -endif (TORQUE_OPENGL) - -# Handle Materials -torqueAddSourceDirectories("materials") - -# Handle collision -torqueAddSourceDirectories("collision") - -# Handle lighting -torqueAddSourceDirectories("lighting" "lighting/common" - "lighting/shadowMap") - -if (TORQUE_ADVANCED_LIGHTING) - torqueAddSourceDirectories("lighting/advanced") - - if (WIN32 AND TORQUE_D3D11) - torqueAddSourceDirectories("lighting/advanced/hlsl") - endif (WIN32 AND TORQUE_D3D11) - - if (TORQUE_OPENGL) - torqueAddSourceDirectories("lighting/advanced/glsl") - endif (TORQUE_OPENGL) -endif (TORQUE_ADVANCED_LIGHTING) - -if (TORQUE_BASIC_LIGHTING) - torqueAddSourceDirectories("lighting/basic" "lighting/basic/shadowMap") -endif (TORQUE_BASIC_LIGHTING) - -# Handle environment -torqueAddSourceDirectories("environment") - -# Handle renderInstance -torqueAddSourceDirectories("renderInstance") - -# Handle i18n -torqueAddSourceDirectories("i18n") - -# Begin handling platform specific stuff -# Handle Platform POSIX -if (UNIX) - torqueAddSourceDirectories("platformPOSIX") - - if(NOT APPLE) - if (TORQUE_CPU_X32 OR TORQUE_CPU_X64) - torqueAddSourceDirectories("platformX86UNIX") - endif (TORQUE_CPU_X32 OR TORQUE_CPU_X64) - endif(NOT APPLE) -endif (UNIX) - -# Handle platformMac -if (APPLE) - torqueAddSourceDirectories("platformMac") -endif (APPLE) - -# Handle platformWin32 -if (WIN32) - torqueAddSourceDirectories("platformWin32" "platformWin32/videoInfo") -endif (WIN32) - -# Handle platformSDL -torqueAddSourceDirectories("platformSDL" "platformSDL/threads") - -# Handle platformX11 -if (UNIX AND NOT APPLE) - torqueAddSourceDirectories("platformX11") -endif (UNIX AND NOT APPLE) - -if(TORQUE_TESTING) - torqueAddSourceDirectories("testing") - set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} TORQUE_SHARED SDL_MAIN_HANDLED) -endif(TORQUE_TESTING) - -# Add the collected files to our engine group -source_group(TREE "${CMAKE_SOURCE_DIR}/Engine/source" PREFIX "Engine" FILES ${TORQUE_SOURCE_FILES}) -file(GLOB_RECURSE TORQUE_APP_GAME_SOURCES "${TORQUE_APP_ROOT_DIRECTORY}/source/*.cpp" "${TORQUE_APP_ROOT_DIRECTORY}/source/*.h") -source_group(TREE "${TORQUE_APP_ROOT_DIRECTORY}/source" PREFIX "Source Files" FILES ${TORQUE_APP_GAME_SOURCES}) -set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} "${TORQUE_APP_ROOT_DIRECTORY}/source") - -################# Engine Module Handling ################### - -set(TORQUE_MODULE_PATHS "${CMAKE_SOURCE_DIR}/Tools/CMake/modules" "${TORQUE_APP_GAME_DIRECTORY}/data") -if (NOT "${TORQUE_MODULE_USER_PATH}" STREQUAL "") - list(APPEND TORQUE_MODULE_PATHS "${TORQUE_MODULE_USER_PATH}") -endif() - -# Before doing module scanning, store away the engine sources - we do this so that modules -# can be placed into the proper filters -set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES} ${TORQUE_APP_GAME_SOURCES}) -set(TORQUE_SOURCE_FILES "") - -foreach (TORQUE_MODULE_PATH ${TORQUE_MODULE_PATHS}) - # First find simple cmake scripts, mostly used for in-engine modules - file(GLOB MODULE_SCRIPTS "${TORQUE_MODULE_PATH}/*.cmake") - foreach (TORQUE_MODULE_SCRIPT ${MODULE_SCRIPTS}) - include(${TORQUE_MODULE_SCRIPT}) - - # Add this script's collected files to our Engine group - source_group(TREE "${CMAKE_SOURCE_DIR}/Engine" PREFIX "Engine" FILES ${TORQUE_SOURCE_FILES}) - - set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${TORQUE_SOURCE_FILES}) - set(TORQUE_SOURCE_FILES "") - endforeach() - - # Next find sub projects, these can introduce new source files - SUBDIRLIST(POSSIBLE_PROJECTS "${TORQUE_MODULE_PATH}") - foreach (POSSIBLE_PROJECT ${POSSIBLE_PROJECTS}) - # Retrieve the absolute path of this possible project - get_filename_component(POSSIBLE_PROJECT_ABSOLUTEPATH "${POSSIBLE_PROJECT}" - REALPATH BASE_DIR "${TORQUE_MODULE_PATH}") - - if (EXISTS "${POSSIBLE_PROJECT_ABSOLUTEPATH}/CMakeLists.txt") - add_subdirectory("${POSSIBLE_PROJECT_ABSOLUTEPATH}" ${CMAKE_BINARY_DIR}/temp/${POSSIBLE_PROJECT} EXCLUDE_FROM_ALL) - source_group(TREE "${POSSIBLE_PROJECT_ABSOLUTEPATH}" PREFIX "Modules/${POSSIBLE_PROJECT}" FILES ${TORQUE_SOURCE_FILES}) - - set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${TORQUE_SOURCE_FILES}) - set(TORQUE_SOURCE_FILES "") - elseif(NOT EXISTS "${POSSIBLE_PROJECT_ABSOLUTEPATH}/*.cmake") - file(GLOB_RECURSE MODULE_SOURCE "${POSSIBLE_PROJECT_ABSOLUTEPATH}/source/*.h" "${POSSIBLE_PROJECT_ABSOLUTEPATH}/source/*.cpp") - #message(STATUS "MODULE_SOURCE:${MODULE_SOURCE}") - source_group(TREE "${POSSIBLE_PROJECT_ABSOLUTEPATH}" PREFIX "Modules/${POSSIBLE_PROJECT}/" FILES ${MODULE_SOURCE}) - set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${MODULE_SOURCE}) - endif() - endforeach() -endforeach() - -set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES_TEMPORARY}) - -################# Library Post-build Handling ################### -set(TORQUE_LIBRARY_PATHS "${CMAKE_SOURCE_DIR}/Engine/lib" "${TORQUE_APP_GAME_DIRECTORY}/data") -if (NOT "${TORQUE_LIBRARY_USER_PATH}" STREQUAL "") - list(APPEND TORQUE_LIBRARY_PATHS "${TORQUE_LIBRARY_USER_PATH}") -endif() - -foreach (TORQUE_LIBRARY_PATH ${TORQUE_LIBRARY_PATHS}) - # First find simple cmake scripts, mostly used for in-engine libraries - file(GLOB_RECURSE LIBRARY_SCRIPTS "${TORQUE_LIBRARY_PATH}/*Torque_postBuild.cmake") - #message(STATUS "LIBRARY_SCRIPTS:${LIBRARY_SCRIPTS}") - foreach (TORQUE_LIBRARY_SCRIPT ${LIBRARY_SCRIPTS}) - include(${TORQUE_LIBRARY_SCRIPT}) - endforeach() -endforeach() -################# Dynamic File Configuration ################### - -# Prepare Windows RC file -if (WIN32) - set(APPLICATION_ICON_PATH "${CMAKE_SOURCE_DIR}/Tools/CMake/torque.ico") - - configure_file("${CMAKE_SOURCE_DIR}/Tools/CMake/torque-win.rc.in" "${TORQUE_APP_ROOT_DIRECTORY}/source/torque.rc") - set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} "${TORQUE_APP_ROOT_DIRECTORY}/source/torque.rc") -endif (WIN32) - -# Prepare OSX Plist -if (APPLE) - set(MACOSX_RESOURCES "${CMAKE_SOURCE_DIR}/Tools/CMake/torque.icns" - "${TORQUE_APP_GAME_DIRECTORY}/data" - "${TORQUE_APP_GAME_DIRECTORY}/core" - "${TORQUE_APP_GAME_DIRECTORY}/tools" - "${TORQUE_APP_GAME_DIRECTORY}/main.${TORQUE_SCRIPT_EXTENSION}") - - set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_MAC_SOURCES} ${MACOSX_RESOURCES}) - - source_group("Resources" FILES ${MACOSX_RESOURCES}) - - set_source_files_properties(${MACOSX_RESOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") - - set(EXECUTABLE_NAME "${TORQUE_APP_NAME}") - configure_file("${CMAKE_SOURCE_DIR}/Tools/CMake/Info.plist.in" "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist" COPYONLY) -endif (APPLE) - -addDef(TORQUE_DEBUG Debug) -addDef(TORQUE_RELEASE "RelWithDebInfo;Release") -addDef(TORQUE_ENABLE_ASSERTS "Debug;RelWithDebInfo") -addDef(TORQUE_DEBUG_GFX_MODE "RelWithDebInfo") -addDef(TORQUE_OGGVORBIS) - -if(NOT TORQUE_SDL) - filterOut("platform/nativeDialogs/fileDialog.cpp" ) -endif() -if(NOT TORQUE_OPENGL) - filterOut("platformSDL/sdlPlatformGL.cpp") -endif() -if (NOT TORQUE_NET_CURL) - filterOut("app/net/httpObject.h" "app/net/httpObject.cpp") -endif() - -################# Executable Generation ################### -if (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) - set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} TORQUE_SHARED) - - # Build the main engine library - add_library(TorqueEngine SHARED ${TORQUE_SOURCE_FILES}) - target_compile_definitions(TorqueEngine PUBLIC ${TORQUE_COMPILE_DEFINITIONS}) - target_link_libraries(TorqueEngine ${TORQUE_LINK_LIBRARIES}) - target_include_directories(TorqueEngine PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_BINARY_DIR}/temp" ${TORQUE_INCLUDE_DIRECTORIES}) - - set(TORQUE_SOURCE_FILES "main/main.cpp") - set(TORQUE_LINK_LIBRARIES TorqueEngine) -else() - if(NOT TORQUE_TESTING) - set(TORQUE_SOURCE_FILES "main/main.cpp" ${TORQUE_SOURCE_FILES}) - endif() -endif (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) - -if (APPLE) - add_executable(${TORQUE_APP_NAME} MACOSX_BUNDLE ${TORQUE_SOURCE_FILES}) - set_target_properties(${TORQUE_APP_NAME} PROPERTIES - BUNDLE true - MACOSX_BUNDLE_INFO_PLIST "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist" - XCODE_ATTRIBUTE_INSTALL_PATH "/Applications" - XCODE_ATTRIBUTE_SKIP_INSTALL "No" - MACOSX_RPATH TRUE) - -elseif (WIN32) - add_executable(${TORQUE_APP_NAME} WIN32 ${TORQUE_SOURCE_FILES}) - - set(TORQUE_CXX_FLAGS_COMMON_DEFAULT "-DUNICODE -D_UNICODE -D_CRT_SECURE_NO_WARNINGS /MP /Ob2 /Oi /Ot /Oy /GT /Zi /W4 /nologo /GF /EHsc /GS- /Gy- /Qpar- /fp:precise /fp:except- /GR /Zc:wchar_t-" ) - if( TORQUE_CPU_X32 ) - set(TORQUE_CXX_FLAGS_COMMON_DEFAULT "${TORQUE_CXX_FLAGS_COMMON_DEFAULT} /arch:SSE2") - endif() - set(TORQUE_CXX_FLAGS_COMMON ${TORQUE_CXX_FLAGS_COMMON_DEFAULT} CACHE STRING "") - mark_as_advanced(TORQUE_CXX_FLAGS_COMMON) - - set(TORQUE_CXX_FLAGS_EXECUTABLES "/wd4018 /wd4100 /wd4121 /wd4127 /wd4130 /wd4244 /wd4245 /wd4389 /wd4511 /wd4512 /wd4800 /wd4995" CACHE STRING "") - mark_as_advanced(TORQUE_CXX_FLAGS_EXECUTABLES) - - set(TORQUE_CXX_FLAGS "${TORQUE_CXX_FLAGS_COMMON_DEFAULT} ${TORQUE_CXX_FLAGS_EXECUTABLES}" CACHE STRING "") - mark_as_advanced(TORQUE_CXX_FLAGS) - - # NOTE: On Windows, /Zc:wchar_t- is necessary otherwise you get unicode errors - set_target_properties(${TORQUE_APP_NAME} PROPERTIES COMPILE_FLAGS "${TORQUE_CXX_FLAGS}") - if (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) - set_target_properties(TorqueEngine PROPERTIES COMPILE_FLAGS "${TORQUE_CXX_FLAGS_COMMON_DEFAULT}") - endif (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) -else() - add_executable(${TORQUE_APP_NAME} ${TORQUE_SOURCE_FILES}) - - # NOTE: On Linux, we set the rpath to ./ so that shared objects next to the executable are used - set_target_properties(${TORQUE_APP_NAME} PROPERTIES LINK_FLAGS "-Wl,-rpath,./") -endif() - - -if(MSVC) - # Match projectGenerator naming for executables - set(OUTPUT_CONFIG DEBUG MINSIZEREL RELWITHDEBINFO) - set(OUTPUT_SUFFIX DEBUG MINSIZE OPTIMIZEDDEBUG) - foreach(INDEX RANGE 2) - list(GET OUTPUT_CONFIG ${INDEX} CONF) - list(GET OUTPUT_SUFFIX ${INDEX} SUFFIX) - set_property(TARGET ${TORQUE_APP_NAME} PROPERTY OUTPUT_NAME_${CONF} ${TORQUE_APP_NAME}_${SUFFIX}) - if (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) - set_property(TARGET TorqueEngine PROPERTY ${CONF}_POSTFIX "_${SUFFIX}") - set_property(TARGET TorqueEngine PROPERTY ${CONF}_OUTPUT_NAME ${TORQUE_APP_NAME}) - endif (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) - endforeach() - # Set Visual Studio startup project - set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${TORQUE_APP_NAME}) -endif() - -set_property(GLOBAL PROPERTY USE_FOLDERS ON) -foreach (TORQUE_LIBRARY ${TORQUE_LINK_LIBRARIES}) - set_target_properties(${TORQUE_LIBRARY} PROPERTIES - FOLDER "Libraries") -endforeach() - -target_compile_definitions(${TORQUE_APP_NAME} PUBLIC ${TORQUE_COMPILE_DEFINITIONS}) -target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_LIBRARIES}) - if(APPLE) - target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_FRAMEWORKS}) -endif(APPLE) - -if(WIN32) - target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_WINDOWS}) -endif(WIN32) - -if(UNIX AND NOT APPLE) - target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_LINUX}) -endif(UNIX AND NOT APPLE) - -target_link_options(${TORQUE_APP_NAME} PUBLIC ${TORQUE_LINK_OPTIONS}) -if (TORQUE_TARGET_PROPERTIES) - set_target_properties(${TORQUE_APP_NAME} PROPERTIES ${TORQUE_TARGET_PROPERTIES}) -endif (TORQUE_TARGET_PROPERTIES) -target_include_directories(${TORQUE_APP_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_BINARY_DIR}/temp" ${TORQUE_INCLUDE_DIRECTORIES}) - -if(TORQUE_TESTING) - if(WIN32) - target_link_options(${TORQUE_APP_NAME} PRIVATE "/SUBSYSTEM:CONSOLE") - set_target_properties(gtest PROPERTIES COMPILE_FLAGS "/Zc:wchar_t-") - set_target_properties(gmock PROPERTIES COMPILE_FLAGS "/Zc:wchar_t-") - endif() -endif(TORQUE_TESTING) - -append_defs() - -# Process library binaries - these are coming from modules that are providing links to external, precompiled code that should be included -# with the executable. This is done because on Windows, the .lib is separate from the .dll so we can't automatically scan for shared -# objects in our link libraries in that case. -foreach (LIBRARY_BINARY ${TORQUE_ADDITIONAL_LIBRARY_BINARIES}) - if (APPLE) - # For OSX, we want these binaries to be copied to the Frameworks directory - add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/$(CONFIGURATION)") - else() - # All other platforms expect the file next to the executable - add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}") - endif (APPLE) -endforeach() - -# Process link libraries for dynamic links - we do this on OSX/Linux to ensure the binaries end up in the correct App directory -# as in the root CMake we force everything to be in game. This is necessary because on these platforms these are considered "libraries" -# and not runtime binaries like we configure in the root CMake. We don't globally set library outputs to avoid outputting eg. a files to -# our game directory. -if (UNIX) - get_target_property(GAME_LINK_LIBRARIES ${TORQUE_APP_NAME} LINK_LIBRARIES) - foreach (GAME_LINK_LIBRARY ${GAME_LINK_LIBRARIES}) - # For eg. OSX some links are not valid targets - for example frameworks provided by OS - if (TARGET ${GAME_LINK_LIBRARY}) - get_target_property(LINK_LIBRARY_TYPE ${GAME_LINK_LIBRARY} TYPE) - # Only pay attention to shared libraries and make them output to the app resources - if ("${LINK_LIBRARY_TYPE}" STREQUAL "SHARED_LIBRARY") - if (APPLE) - set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES - XCODE_ATTRIBUTE_INSTALL_PATH "@rpath") - else() - set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${TORQUE_APP_GAME_DIRECTORY}") - endif(APPLE) - endif() - endif() - endforeach() -endif (UNIX) + include(torqueMacosEngine.cmake) +else() + include(torqueEveryEngine.cmake) +endif(APPLE) \ No newline at end of file diff --git a/Engine/source/torqueEveryEngine.cmake b/Engine/source/torqueEveryEngine.cmake new file mode 100644 index 000000000..03f95a8fd --- /dev/null +++ b/Engine/source/torqueEveryEngine.cmake @@ -0,0 +1,465 @@ +# On Windows we disable CRT Security warnings - this comes from recommendations to use non-portable functions. +if (WIN32) +set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} _CRT_SECURE_NO_WARNINGS WIN32) +endif (WIN32) + +set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} __linux__) +endif (APPLE) + +################# Set Engine Linkages ################### + +# When on Windows, we need to link against winsock and windows codecs +if (WIN32) +set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_WIN_SOURCES}) +endif (WIN32) + +# Linux requires X11 & freetype +if (UNIX AND NOT APPLE) +set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_X11_SOURCES}) +find_package(Freetype REQUIRED) +set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} ${FREETYPE_INCLUDE_DIRS}) +endif (UNIX AND NOT APPLE) + +################# Collect Source Files ################### + +# Handle app +torqueAddSourceDirectories("app" "app/net") + +# Handle console +torqueAddSourceDirectories("console") +torqueAddSourceDirectories("console/torquescript") + +# Handle Platform +torqueAddSourceDirectories("platform" "platform/threads" "platform/async" + "platform/input" "platform/output") + +torqueAddSourceDirectories("platform/nativeDialogs") +# Handle T3D +torqueAddSourceDirectories("T3D/fps" "T3D/fx" "T3D/vehicles" "T3D/physics" + "T3D/decal" "T3D/sfx" "T3D/gameBase" "T3D/turret" + "T3D/lighting" "T3D/gameOBjects" "T3D/components" + "T3D/systems" "T3D/assets" "T3D" "T3D/gameBase/std") + +# Handle TS +torqueAddSourceDirectories("ts" "ts/collada" "ts/assimp" "ts/loader" "ts/arch") + +# Handle SFX - OpenAL is handled as a module later on +torqueAddSourceDirectories("sfx" "sfx/media" "sfx/null") +if(TORQUE_SFX_OPENAL AND NOT TORQUE_DEDICATED) + torqueAddSourceDirectories("sfx/openal") + if(WIN32) + torqueAddSourceDirectories("sfx/openal/win32") + elseif(UNIX AND NOT APPLE) + torqueAddSourceDirectories("sfx/openal/linux") + elseif(APPLE) + torqueAddSourceDirectories("sfx/openal/mac") + endif() +endif() +# Handle GFX +torqueAddSourceDirectories("gfx" "gfx/Null" "gfx/test" "gfx/bitmap" "gfx/bitmap/loaders" + "gfx/util" "gfx/video" "gfx/sim" ) + +if (TORQUE_OPENGL) +torqueAddSourceDirectories("gfx/gl" "gfx/gl/sdl" "gfx/gl/tGL") +endif (TORQUE_OPENGL) + +if (WIN32 AND TORQUE_D3D11) +torqueAddSourceDirectories("gfx/D3D11") +endif (WIN32 AND TORQUE_D3D11) + +# Handle core +torqueAddSourceDirectories("core" "core/stream" "core/strings" "core/util" + "core/util/journal" "core/util/zip" "core/util/compressors") +# Handle GUI +torqueAddSourceDirectories("gui" "gui/buttons" "gui/containers" "gui/controls" "gui/core" + "gui/game" "gui/shiny" "gui/utility" "gui/3d") + +# Handle postFX +torqueAddSourceDirectories("postFx") + +# Handle Windowmanager +torqueAddSourceDirectories("windowManager" "windowManager/torque" "windowManager/sdl") + +# Handle scene +torqueAddSourceDirectories("scene" "scene/culling" "scene/zones" "scene/mixin") + +# Handle math +torqueAddSourceDirectories("math" "math/util") + +# Handle persistence +torqueAddSourceDirectories("persistence/taml" "persistence/taml/binary" "persistence/taml/xml") + +# Handle Cinterface +torqueAddSourceDirectories("cinterface") + +# Handle util +torqueAddSourceDirectories("util" "util/messaging") + +# Handle assets +torqueAddSourceDirectories("assets") + +# Handle Sim +torqueAddSourceDirectories("sim") + +# Handle module +torqueAddSourceDirectories("module") + +# Handle forest +torqueAddSourceDirectories("forest" "forest/ts") +if(TORQUE_OPENGL) +torqueAddSourceDirectories("forest" "forest/glsl") +endif(TORQUE_OPENGL) +if(TORQUE_D3D11) +torqueAddSourceDirectories("forest" "forest/hlsl") +endif(TORQUE_D3D11) + +# Handle shadergen +torqueAddSourceDirectories("shaderGen") + +if (WIN32 AND TORQUE_D3D11) +torqueAddSourceDirectories("shaderGen/HLSL") +endif (WIN32 AND TORQUE_D3D11) + +if (TORQUE_OPENGL) +torqueAddSourceDirectories("shaderGen/GLSL") +endif (TORQUE_OPENGL) + +# Handle terrain +torqueAddSourceDirectories("terrain") + +if (WIN32 AND TORQUE_D3D11) +torqueAddSourceDirectories("terrain/hlsl") +endif (WIN32 AND TORQUE_D3D11) + +if (TORQUE_OPENGL) +torqueAddSourceDirectories("terrain/glsl") +endif (TORQUE_OPENGL) + +# Handle Materials +torqueAddSourceDirectories("materials") + +# Handle collision +torqueAddSourceDirectories("collision") + +# Handle lighting +torqueAddSourceDirectories("lighting" "lighting/common" + "lighting/shadowMap") + +if (TORQUE_ADVANCED_LIGHTING) +torqueAddSourceDirectories("lighting/advanced") + +if (WIN32 AND TORQUE_D3D11) + torqueAddSourceDirectories("lighting/advanced/hlsl") +endif (WIN32 AND TORQUE_D3D11) + +if (TORQUE_OPENGL) + torqueAddSourceDirectories("lighting/advanced/glsl") +endif (TORQUE_OPENGL) +endif (TORQUE_ADVANCED_LIGHTING) + +if (TORQUE_BASIC_LIGHTING) +torqueAddSourceDirectories("lighting/basic" "lighting/basic/shadowMap") +endif (TORQUE_BASIC_LIGHTING) + +# Handle environment +torqueAddSourceDirectories("environment") + +# Handle renderInstance +torqueAddSourceDirectories("renderInstance") + +# Handle i18n +torqueAddSourceDirectories("i18n") + +# Begin handling platform specific stuff +# Handle Platform POSIX +if (UNIX) +torqueAddSourceDirectories("platformPOSIX") + +if(NOT APPLE) + if (TORQUE_CPU_X32 OR TORQUE_CPU_X64) + torqueAddSourceDirectories("platformX86UNIX") + endif (TORQUE_CPU_X32 OR TORQUE_CPU_X64) +endif(NOT APPLE) +endif (UNIX) + +# Handle platformMac +if (APPLE) +torqueAddSourceDirectories("platformMac") +endif (APPLE) + +# Handle platformWin32 +if (WIN32) +torqueAddSourceDirectories("platformWin32" "platformWin32/videoInfo") +endif (WIN32) + +# Handle platformSDL +torqueAddSourceDirectories("platformSDL" "platformSDL/threads") + +# Handle platformX11 +if (UNIX AND NOT APPLE) +torqueAddSourceDirectories("platformX11") +endif (UNIX AND NOT APPLE) + +if(TORQUE_TESTING) +torqueAddSourceDirectories("testing") +set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} TORQUE_SHARED SDL_MAIN_HANDLED) +endif(TORQUE_TESTING) + +# Add the collected files to our engine group +source_group(TREE "${CMAKE_SOURCE_DIR}/Engine/source" PREFIX "Engine" FILES ${TORQUE_SOURCE_FILES}) +file(GLOB_RECURSE TORQUE_APP_GAME_SOURCES "${TORQUE_APP_ROOT_DIRECTORY}/source/*.cpp" "${TORQUE_APP_ROOT_DIRECTORY}/source/*.h") +source_group(TREE "${TORQUE_APP_ROOT_DIRECTORY}/source" PREFIX "Source Files" FILES ${TORQUE_APP_GAME_SOURCES}) +set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} "${TORQUE_APP_ROOT_DIRECTORY}/source") + +################# Engine Module Handling ################### + +set(TORQUE_MODULE_PATHS "${CMAKE_SOURCE_DIR}/Tools/CMake/modules" "${TORQUE_APP_GAME_DIRECTORY}/data") +if (NOT "${TORQUE_MODULE_USER_PATH}" STREQUAL "") +list(APPEND TORQUE_MODULE_PATHS "${TORQUE_MODULE_USER_PATH}") +endif() + +# Before doing module scanning, store away the engine sources - we do this so that modules +# can be placed into the proper filters +set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES} ${TORQUE_APP_GAME_SOURCES}) +set(TORQUE_SOURCE_FILES "") + +foreach (TORQUE_MODULE_PATH ${TORQUE_MODULE_PATHS}) +# First find simple cmake scripts, mostly used for in-engine modules +file(GLOB MODULE_SCRIPTS "${TORQUE_MODULE_PATH}/*.cmake") +foreach (TORQUE_MODULE_SCRIPT ${MODULE_SCRIPTS}) + include(${TORQUE_MODULE_SCRIPT}) + + # Add this script's collected files to our Engine group + source_group(TREE "${CMAKE_SOURCE_DIR}/Engine" PREFIX "Engine" FILES ${TORQUE_SOURCE_FILES}) + + set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${TORQUE_SOURCE_FILES}) + set(TORQUE_SOURCE_FILES "") +endforeach() + +# Next find sub projects, these can introduce new source files +SUBDIRLIST(POSSIBLE_PROJECTS "${TORQUE_MODULE_PATH}") +foreach (POSSIBLE_PROJECT ${POSSIBLE_PROJECTS}) + # Retrieve the absolute path of this possible project + get_filename_component(POSSIBLE_PROJECT_ABSOLUTEPATH "${POSSIBLE_PROJECT}" + REALPATH BASE_DIR "${TORQUE_MODULE_PATH}") + + if (EXISTS "${POSSIBLE_PROJECT_ABSOLUTEPATH}/CMakeLists.txt") + add_subdirectory("${POSSIBLE_PROJECT_ABSOLUTEPATH}" ${CMAKE_BINARY_DIR}/temp/${POSSIBLE_PROJECT} EXCLUDE_FROM_ALL) + source_group(TREE "${POSSIBLE_PROJECT_ABSOLUTEPATH}" PREFIX "Modules/${POSSIBLE_PROJECT}" FILES ${TORQUE_SOURCE_FILES}) + + set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${TORQUE_SOURCE_FILES}) + set(TORQUE_SOURCE_FILES "") + elseif(NOT EXISTS "${POSSIBLE_PROJECT_ABSOLUTEPATH}/*.cmake") + file(GLOB_RECURSE MODULE_SOURCE "${POSSIBLE_PROJECT_ABSOLUTEPATH}/source/*.h" "${POSSIBLE_PROJECT_ABSOLUTEPATH}/source/*.cpp") + #message(STATUS "MODULE_SOURCE:${MODULE_SOURCE}") + source_group(TREE "${POSSIBLE_PROJECT_ABSOLUTEPATH}" PREFIX "Modules/${POSSIBLE_PROJECT}/" FILES ${MODULE_SOURCE}) + set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${MODULE_SOURCE}) + endif() +endforeach() +endforeach() + +set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES_TEMPORARY}) + +################# Library Post-build Handling ################### +set(TORQUE_LIBRARY_PATHS "${CMAKE_SOURCE_DIR}/Engine/lib" "${TORQUE_APP_GAME_DIRECTORY}/data") +if (NOT "${TORQUE_LIBRARY_USER_PATH}" STREQUAL "") +list(APPEND TORQUE_LIBRARY_PATHS "${TORQUE_LIBRARY_USER_PATH}") +endif() + +foreach (TORQUE_LIBRARY_PATH ${TORQUE_LIBRARY_PATHS}) +# First find simple cmake scripts, mostly used for in-engine libraries +file(GLOB_RECURSE LIBRARY_SCRIPTS "${TORQUE_LIBRARY_PATH}/*Torque_postBuild.cmake") + #message(STATUS "LIBRARY_SCRIPTS:${LIBRARY_SCRIPTS}") +foreach (TORQUE_LIBRARY_SCRIPT ${LIBRARY_SCRIPTS}) + include(${TORQUE_LIBRARY_SCRIPT}) +endforeach() +endforeach() +################# Dynamic File Configuration ################### + +# Prepare Windows RC file +if (WIN32) +set(APPLICATION_ICON_PATH "${CMAKE_SOURCE_DIR}/Tools/CMake/torque.ico") + +configure_file("${CMAKE_SOURCE_DIR}/Tools/CMake/torque-win.rc.in" "${TORQUE_APP_ROOT_DIRECTORY}/source/torque.rc") +set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} "${TORQUE_APP_ROOT_DIRECTORY}/source/torque.rc") +endif (WIN32) + +# Prepare OSX Plist +if (APPLE) +set(MACOSX_RESOURCES "${CMAKE_SOURCE_DIR}/Tools/CMake/torque.icns" +"${TORQUE_APP_GAME_DIRECTORY}/data" +"${TORQUE_APP_GAME_DIRECTORY}/core" +"${TORQUE_APP_GAME_DIRECTORY}/tools" +"${TORQUE_APP_GAME_DIRECTORY}/main.${TORQUE_SCRIPT_EXTENSION}") + +set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_MAC_SOURCES} ${MACOSX_RESOURCES}) + +source_group("Resources" FILES ${MACOSX_RESOURCES}) + +set_source_files_properties(${MACOSX_RESOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") + +set(EXECUTABLE_NAME "${TORQUE_APP_NAME}") +configure_file("${CMAKE_SOURCE_DIR}/Tools/CMake/Info.plist.in" "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist" COPYONLY) +endif (APPLE) + +addDef(TORQUE_DEBUG Debug) +addDef(TORQUE_RELEASE "RelWithDebInfo;Release") +addDef(TORQUE_ENABLE_ASSERTS "Debug;RelWithDebInfo") +addDef(TORQUE_DEBUG_GFX_MODE "RelWithDebInfo") +addDef(TORQUE_OGGVORBIS) + +if(NOT TORQUE_SDL) +filterOut("platform/nativeDialogs/fileDialog.cpp" ) +endif() +if(NOT TORQUE_OPENGL) +filterOut("platformSDL/sdlPlatformGL.cpp") +endif() +if (NOT TORQUE_NET_CURL) +filterOut("app/net/httpObject.h" "app/net/httpObject.cpp") +endif() + +################# Executable Generation ################### +if (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) +set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} TORQUE_SHARED) + +# Build the main engine library +add_library(TorqueEngine SHARED ${TORQUE_SOURCE_FILES}) +target_compile_definitions(TorqueEngine PUBLIC ${TORQUE_COMPILE_DEFINITIONS}) +target_link_libraries(TorqueEngine ${TORQUE_LINK_LIBRARIES}) +target_include_directories(TorqueEngine PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_BINARY_DIR}/temp" ${TORQUE_INCLUDE_DIRECTORIES}) + +set(TORQUE_SOURCE_FILES "main/main.cpp") +set(TORQUE_LINK_LIBRARIES TorqueEngine) +else() +if(NOT TORQUE_TESTING) + set(TORQUE_SOURCE_FILES "main/main.cpp" ${TORQUE_SOURCE_FILES}) +endif() +endif (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) + +if (APPLE) +add_executable(${TORQUE_APP_NAME} MACOSX_BUNDLE ${TORQUE_SOURCE_FILES}) +set_target_properties(${TORQUE_APP_NAME} PROPERTIES +BUNDLE true +MACOSX_BUNDLE_INFO_PLIST "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist" +XCODE_ATTRIBUTE_INSTALL_PATH "/Applications" +XCODE_ATTRIBUTE_SKIP_INSTALL "No" +MACOSX_RPATH TRUE) + +elseif (WIN32) +add_executable(${TORQUE_APP_NAME} WIN32 ${TORQUE_SOURCE_FILES}) + + set(TORQUE_CXX_FLAGS_COMMON_DEFAULT "-DUNICODE -D_UNICODE -D_CRT_SECURE_NO_WARNINGS /MP /Ob2 /Oi /Ot /Oy /GT /Zi /W4 /nologo /GF /EHsc /GS- /Gy- /Qpar- /fp:precise /fp:except- /GR /Zc:wchar_t-" ) + if( TORQUE_CPU_X32 ) + set(TORQUE_CXX_FLAGS_COMMON_DEFAULT "${TORQUE_CXX_FLAGS_COMMON_DEFAULT} /arch:SSE2") + endif() + set(TORQUE_CXX_FLAGS_COMMON ${TORQUE_CXX_FLAGS_COMMON_DEFAULT} CACHE STRING "") + mark_as_advanced(TORQUE_CXX_FLAGS_COMMON) + + set(TORQUE_CXX_FLAGS_EXECUTABLES "/wd4018 /wd4100 /wd4121 /wd4127 /wd4130 /wd4244 /wd4245 /wd4389 /wd4511 /wd4512 /wd4800 /wd4995" CACHE STRING "") + mark_as_advanced(TORQUE_CXX_FLAGS_EXECUTABLES) + + set(TORQUE_CXX_FLAGS "${TORQUE_CXX_FLAGS_COMMON_DEFAULT} ${TORQUE_CXX_FLAGS_EXECUTABLES}" CACHE STRING "") + mark_as_advanced(TORQUE_CXX_FLAGS) + +# NOTE: On Windows, /Zc:wchar_t- is necessary otherwise you get unicode errors +set_target_properties(${TORQUE_APP_NAME} PROPERTIES COMPILE_FLAGS "${TORQUE_CXX_FLAGS}") +if (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) + set_target_properties(TorqueEngine PROPERTIES COMPILE_FLAGS "${TORQUE_CXX_FLAGS_COMMON_DEFAULT}") +endif (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) +else() +add_executable(${TORQUE_APP_NAME} ${TORQUE_SOURCE_FILES}) + +# NOTE: On Linux, we set the rpath to ./ so that shared objects next to the executable are used +set_target_properties(${TORQUE_APP_NAME} PROPERTIES LINK_FLAGS "-Wl,-rpath,./") +endif() + + +if(MSVC) + # Match projectGenerator naming for executables + set(OUTPUT_CONFIG DEBUG MINSIZEREL RELWITHDEBINFO) + set(OUTPUT_SUFFIX DEBUG MINSIZE OPTIMIZEDDEBUG) + foreach(INDEX RANGE 2) + list(GET OUTPUT_CONFIG ${INDEX} CONF) + list(GET OUTPUT_SUFFIX ${INDEX} SUFFIX) + set_property(TARGET ${TORQUE_APP_NAME} PROPERTY OUTPUT_NAME_${CONF} ${TORQUE_APP_NAME}_${SUFFIX}) + if (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) + set_property(TARGET TorqueEngine PROPERTY ${CONF}_POSTFIX "_${SUFFIX}") + set_property(TARGET TorqueEngine PROPERTY ${CONF}_OUTPUT_NAME ${TORQUE_APP_NAME}) + endif (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) + endforeach() + # Set Visual Studio startup project + set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${TORQUE_APP_NAME}) +endif() + +set_property(GLOBAL PROPERTY USE_FOLDERS ON) +foreach (TORQUE_LIBRARY ${TORQUE_LINK_LIBRARIES}) +set_target_properties(${TORQUE_LIBRARY} PROPERTIES +FOLDER "Libraries") +endforeach() + +target_compile_definitions(${TORQUE_APP_NAME} PUBLIC ${TORQUE_COMPILE_DEFINITIONS}) +target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_LIBRARIES}) + +if(APPLE) +target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_FRAMEWORKS}) +endif(APPLE) + +if(WIN32) +target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_WINDOWS}) +endif(WIN32) + +if(UNIX AND NOT APPLE) +target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_LINUX}) +endif(UNIX AND NOT APPLE) + +target_link_options(${TORQUE_APP_NAME} PUBLIC ${TORQUE_LINK_OPTIONS}) +if (TORQUE_TARGET_PROPERTIES) +set_target_properties(${TORQUE_APP_NAME} PROPERTIES ${TORQUE_TARGET_PROPERTIES}) +endif (TORQUE_TARGET_PROPERTIES) +target_include_directories(${TORQUE_APP_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_BINARY_DIR}/temp" ${TORQUE_INCLUDE_DIRECTORIES}) + +if(TORQUE_TESTING) +if(WIN32) + target_link_options(${TORQUE_APP_NAME} PRIVATE "/SUBSYSTEM:CONSOLE") + set_target_properties(gtest PROPERTIES COMPILE_FLAGS "/Zc:wchar_t-") + set_target_properties(gmock PROPERTIES COMPILE_FLAGS "/Zc:wchar_t-") + endif() +endif(TORQUE_TESTING) + +append_defs() + +# Process library binaries - these are coming from modules that are providing links to external, precompiled code that should be included +# with the executable. This is done because on Windows, the .lib is separate from the .dll so we can't automatically scan for shared +# objects in our link libraries in that case. +foreach (LIBRARY_BINARY ${TORQUE_ADDITIONAL_LIBRARY_BINARIES}) +if (APPLE) + # For OSX, we want these binaries to be copied to the Frameworks directory + add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/$(CONFIGURATION)") +else() + # All other platforms expect the file next to the executable + add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}") +endif (APPLE) +endforeach() + +# Process link libraries for dynamic links - we do this on OSX/Linux to ensure the binaries end up in the correct App directory +# as in the root CMake we force everything to be in game. This is necessary because on these platforms these are considered "libraries" +# and not runtime binaries like we configure in the root CMake. We don't globally set library outputs to avoid outputting eg. a files to +# our game directory. +if (UNIX) +get_target_property(GAME_LINK_LIBRARIES ${TORQUE_APP_NAME} LINK_LIBRARIES) +foreach (GAME_LINK_LIBRARY ${GAME_LINK_LIBRARIES}) + # For eg. OSX some links are not valid targets - for example frameworks provided by OS + if (TARGET ${GAME_LINK_LIBRARY}) + get_target_property(LINK_LIBRARY_TYPE ${GAME_LINK_LIBRARY} TYPE) + # Only pay attention to shared libraries and make them output to the app resources + if ("${LINK_LIBRARY_TYPE}" STREQUAL "SHARED_LIBRARY") + if (APPLE) + set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES + XCODE_ATTRIBUTE_INSTALL_PATH "@rpath") + else() + set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${TORQUE_APP_GAME_DIRECTORY}") + endif(APPLE) + endif() + endif() +endforeach() +endif (UNIX) \ No newline at end of file diff --git a/Engine/source/torqueMacosEngine.cmake b/Engine/source/torqueMacosEngine.cmake new file mode 100644 index 000000000..4ca95cd25 --- /dev/null +++ b/Engine/source/torqueMacosEngine.cmake @@ -0,0 +1,283 @@ + +set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} __MACOSX__) + +################# Collect Source Files ################### + +# Handle app +torqueAddSourceDirectories("app" "app/net") + +# Handle console +torqueAddSourceDirectories("console") +torqueAddSourceDirectories("console/torquescript") + +# Handle Platform +torqueAddSourceDirectories("platform" "platform/threads" "platform/async" + "platform/input" "platform/output") + +torqueAddSourceDirectories("platform/nativeDialogs") +# Handle T3D +torqueAddSourceDirectories("T3D/fps" "T3D/fx" "T3D/vehicles" "T3D/physics" + "T3D/decal" "T3D/sfx" "T3D/gameBase" "T3D/turret" + "T3D/lighting" "T3D/gameOBjects" "T3D/components" + "T3D/systems" "T3D/assets" "T3D" "T3D/gameBase/std") + +# Handle TS +torqueAddSourceDirectories("ts" "ts/collada" "ts/assimp" "ts/loader" "ts/arch") + +# Handle SFX - OpenAL is handled as a module later on +torqueAddSourceDirectories("sfx" "sfx/media" "sfx/null") +if(TORQUE_SFX_OPENAL AND NOT TORQUE_DEDICATED) + torqueAddSourceDirectories("sfx/openal") + torqueAddSourceDirectories("sfx/openal/mac") +endif() + +# Handle GFX +torqueAddSourceDirectories("gfx" "gfx/Null" "gfx/test" "gfx/bitmap" "gfx/bitmap/loaders" + "gfx/util" "gfx/video" "gfx/sim" ) + +if (TORQUE_OPENGL) + torqueAddSourceDirectories("gfx/gl" "gfx/gl/sdl" "gfx/gl/tGL") +endif (TORQUE_OPENGL) + +# Handle core +torqueAddSourceDirectories("core" "core/stream" "core/strings" "core/util" + "core/util/journal" "core/util/zip" "core/util/compressors") +# Handle GUI +torqueAddSourceDirectories("gui" "gui/buttons" "gui/containers" "gui/controls" "gui/core" + "gui/game" "gui/shiny" "gui/utility" "gui/3d") + +# Handle postFX +torqueAddSourceDirectories("postFx") + +# Handle Windowmanager +torqueAddSourceDirectories("windowManager" "windowManager/torque" "windowManager/sdl") + +# Handle scene +torqueAddSourceDirectories("scene" "scene/culling" "scene/zones" "scene/mixin") + +# Handle math +torqueAddSourceDirectories("math" "math/util") + +# Handle persistence +torqueAddSourceDirectories("persistence/taml" "persistence/taml/binary" "persistence/taml/xml") + +# Handle Cinterface +torqueAddSourceDirectories("cinterface") + +# Handle util +torqueAddSourceDirectories("util" "util/messaging") + +# Handle assets +torqueAddSourceDirectories("assets") + +# Handle Sim +torqueAddSourceDirectories("sim") + +# Handle module +torqueAddSourceDirectories("module") + +# Handle forest +torqueAddSourceDirectories("forest" "forest/ts") +if(TORQUE_OPENGL) + torqueAddSourceDirectories("forest" "forest/glsl") +endif(TORQUE_OPENGL) + +# Handle shadergen +torqueAddSourceDirectories("shaderGen") + +if (TORQUE_OPENGL) + torqueAddSourceDirectories("shaderGen/GLSL") +endif (TORQUE_OPENGL) + +# Handle terrain +torqueAddSourceDirectories("terrain") + +if (TORQUE_OPENGL) + torqueAddSourceDirectories("terrain/glsl") +endif (TORQUE_OPENGL) + +# Handle Materials +torqueAddSourceDirectories("materials") + +# Handle collision +torqueAddSourceDirectories("collision") + +# Handle lighting +torqueAddSourceDirectories("lighting" "lighting/common" + "lighting/shadowMap") + +if (TORQUE_ADVANCED_LIGHTING) + torqueAddSourceDirectories("lighting/advanced") + if (TORQUE_OPENGL) + torqueAddSourceDirectories("lighting/advanced/glsl") + endif (TORQUE_OPENGL) +endif (TORQUE_ADVANCED_LIGHTING) + +if (TORQUE_BASIC_LIGHTING) + torqueAddSourceDirectories("lighting/basic" "lighting/basic/shadowMap") +endif (TORQUE_BASIC_LIGHTING) + +# Handle environment +torqueAddSourceDirectories("environment") + +# Handle renderInstance +torqueAddSourceDirectories("renderInstance") + +# Handle i18n +torqueAddSourceDirectories("i18n") + +# Handle posix +torqueAddSourceDirectories("platformPOSIX") +torqueAddSourceDirectories("platformMac") + +# Handle platformSDL +torqueAddSourceDirectories("platformSDL" "platformSDL/threads") + +if(TORQUE_TESTING) + torqueAddSourceDirectories("testing") + set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} TORQUE_SHARED SDL_MAIN_HANDLED) +endif(TORQUE_TESTING) + +# Add the collected files to our engine group +source_group(TREE "${CMAKE_SOURCE_DIR}/Engine/source" PREFIX "Engine" FILES ${TORQUE_SOURCE_FILES}) +file(GLOB_RECURSE TORQUE_APP_GAME_SOURCES "${TORQUE_APP_ROOT_DIRECTORY}/source/*.cpp" "${TORQUE_APP_ROOT_DIRECTORY}/source/*.h") +source_group(TREE "${TORQUE_APP_ROOT_DIRECTORY}/source" PREFIX "Source Files" FILES ${TORQUE_APP_GAME_SOURCES}) +set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} "${TORQUE_APP_ROOT_DIRECTORY}/source") + +################# Engine Module Handling ################### + +set(TORQUE_MODULE_PATHS "${CMAKE_SOURCE_DIR}/Tools/CMake/modules" "${TORQUE_APP_GAME_DIRECTORY}/data") +if (NOT "${TORQUE_MODULE_USER_PATH}" STREQUAL "") + list(APPEND TORQUE_MODULE_PATHS "${TORQUE_MODULE_USER_PATH}") +endif() + +# Before doing module scanning, store away the engine sources - we do this so that modules +# can be placed into the proper filters +set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES} ${TORQUE_APP_GAME_SOURCES}) +set(TORQUE_SOURCE_FILES "") + +foreach (TORQUE_MODULE_PATH ${TORQUE_MODULE_PATHS}) + # First find simple cmake scripts, mostly used for in-engine modules + file(GLOB MODULE_SCRIPTS "${TORQUE_MODULE_PATH}/*.cmake") + foreach (TORQUE_MODULE_SCRIPT ${MODULE_SCRIPTS}) + include(${TORQUE_MODULE_SCRIPT}) + + # Add this script's collected files to our Engine group + source_group(TREE "${CMAKE_SOURCE_DIR}/Engine" PREFIX "Engine" FILES ${TORQUE_SOURCE_FILES}) + + set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${TORQUE_SOURCE_FILES}) + set(TORQUE_SOURCE_FILES "") + endforeach() + + # Next find sub projects, these can introduce new source files + SUBDIRLIST(POSSIBLE_PROJECTS "${TORQUE_MODULE_PATH}") + foreach (POSSIBLE_PROJECT ${POSSIBLE_PROJECTS}) + # Retrieve the absolute path of this possible project + get_filename_component(POSSIBLE_PROJECT_ABSOLUTEPATH "${POSSIBLE_PROJECT}" + REALPATH BASE_DIR "${TORQUE_MODULE_PATH}") + + if (EXISTS "${POSSIBLE_PROJECT_ABSOLUTEPATH}/CMakeLists.txt") + add_subdirectory("${POSSIBLE_PROJECT_ABSOLUTEPATH}" ${CMAKE_BINARY_DIR}/temp/${POSSIBLE_PROJECT} EXCLUDE_FROM_ALL) + source_group(TREE "${POSSIBLE_PROJECT_ABSOLUTEPATH}" PREFIX "Modules/${POSSIBLE_PROJECT}" FILES ${TORQUE_SOURCE_FILES}) + + set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${TORQUE_SOURCE_FILES}) + set(TORQUE_SOURCE_FILES "") + elseif(NOT EXISTS "${POSSIBLE_PROJECT_ABSOLUTEPATH}/*.cmake") + file(GLOB_RECURSE MODULE_SOURCE "${POSSIBLE_PROJECT_ABSOLUTEPATH}/source/*.h" "${POSSIBLE_PROJECT_ABSOLUTEPATH}/source/*.cpp") + #message(STATUS "MODULE_SOURCE:${MODULE_SOURCE}") + source_group(TREE "${POSSIBLE_PROJECT_ABSOLUTEPATH}" PREFIX "Modules/${POSSIBLE_PROJECT}/" FILES ${MODULE_SOURCE}) + set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${MODULE_SOURCE}) + endif() + endforeach() +endforeach() + +set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES_TEMPORARY}) + +################# Library Post-build Handling ################### +set(TORQUE_LIBRARY_PATHS "${CMAKE_SOURCE_DIR}/Engine/lib" "${TORQUE_APP_GAME_DIRECTORY}/data") +if (NOT "${TORQUE_LIBRARY_USER_PATH}" STREQUAL "") + list(APPEND TORQUE_LIBRARY_PATHS "${TORQUE_LIBRARY_USER_PATH}") +endif() + +foreach (TORQUE_LIBRARY_PATH ${TORQUE_LIBRARY_PATHS}) + # First find simple cmake scripts, mostly used for in-engine libraries + file(GLOB_RECURSE LIBRARY_SCRIPTS "${TORQUE_LIBRARY_PATH}/*Torque_postBuild.cmake") + #message(STATUS "LIBRARY_SCRIPTS:${LIBRARY_SCRIPTS}") + foreach (TORQUE_LIBRARY_SCRIPT ${LIBRARY_SCRIPTS}) + include(${TORQUE_LIBRARY_SCRIPT}) + endforeach() +endforeach() +################# Dynamic File Configuration ################### + +set(MACOSX_RESOURCES "${CMAKE_SOURCE_DIR}/Tools/CMake/torque.icns" + "${TORQUE_APP_GAME_DIRECTORY}/data" + "${TORQUE_APP_GAME_DIRECTORY}/core" + "${TORQUE_APP_GAME_DIRECTORY}/tools" + "${TORQUE_APP_GAME_DIRECTORY}/main.${TORQUE_SCRIPT_EXTENSION}") + +set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_MAC_SOURCES} ${MACOSX_RESOURCES}) + +source_group("Resources" FILES ${MACOSX_RESOURCES}) + +set_source_files_properties(${MACOSX_RESOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") + +set(EXECUTABLE_NAME "${TORQUE_APP_NAME}") +configure_file("${CMAKE_SOURCE_DIR}/Tools/CMake/Info.plist.in" "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist" COPYONLY) + +addDef(TORQUE_DEBUG Debug) +addDef(TORQUE_RELEASE "RelWithDebInfo;Release") +addDef(TORQUE_ENABLE_ASSERTS "Debug;RelWithDebInfo") +addDef(TORQUE_DEBUG_GFX_MODE "RelWithDebInfo") +addDef(TORQUE_OGGVORBIS) + +if(NOT TORQUE_SDL) + filterOut("platform/nativeDialogs/fileDialog.cpp" ) +endif() +if(NOT TORQUE_OPENGL) + filterOut("platformSDL/sdlPlatformGL.cpp") +endif() +if (NOT TORQUE_NET_CURL) + filterOut("app/net/httpObject.h" "app/net/httpObject.cpp") +endif() + +add_executable(${TORQUE_APP_NAME} MACOSX_BUNDLE ${TORQUE_SOURCE_FILES}) +set_target_properties(${TORQUE_APP_NAME} PROPERTIES + BUNDLE true + MACOSX_BUNDLE_INFO_PLIST "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist" + XCODE_ATTRIBUTE_INSTALL_PATH "/Applications" + XCODE_ATTRIBUTE_SKIP_INSTALL "No" + MACOSX_RPATH TRUE) + + set_property(GLOBAL PROPERTY USE_FOLDERS ON) +foreach (TORQUE_LIBRARY ${TORQUE_LINK_LIBRARIES}) + set_target_properties(${TORQUE_LIBRARY} PROPERTIES + FOLDER "Libraries") +endforeach() + +target_compile_definitions(${TORQUE_APP_NAME} PUBLIC ${TORQUE_COMPILE_DEFINITIONS}) +target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_LIBRARIES} ${TORQUE_LINK_FRAMEWORKS}) + +target_link_options(${TORQUE_APP_NAME} PUBLIC ${TORQUE_LINK_OPTIONS}) +if (TORQUE_TARGET_PROPERTIES) + set_target_properties(${TORQUE_APP_NAME} PROPERTIES ${TORQUE_TARGET_PROPERTIES}) +endif (TORQUE_TARGET_PROPERTIES) +target_include_directories(${TORQUE_APP_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_BINARY_DIR}/temp" ${TORQUE_INCLUDE_DIRECTORIES}) + +append_defs() + +foreach (LIBRARY_BINARY ${TORQUE_ADDITIONAL_LIBRARY_BINARIES}) + add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/$(CONFIGURATION)") +endforeach() + +get_target_property(GAME_LINK_LIBRARIES ${TORQUE_APP_NAME} LINK_LIBRARIES) +foreach (GAME_LINK_LIBRARY ${GAME_LINK_LIBRARIES}) + if (TARGET ${GAME_LINK_LIBRARY}) + get_target_property(LINK_LIBRARY_TYPE ${GAME_LINK_LIBRARY} TYPE) + # Only pay attention to shared libraries and make them output to the app resources + if ("${LINK_LIBRARY_TYPE}" STREQUAL "SHARED_LIBRARY") + set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES + XCODE_ATTRIBUTE_INSTALL_PATH "@rpath") + endif() + endif() +endforeach() + diff --git a/Tools/CMake/torqueMacOSconfigs.cmake b/Tools/CMake/platformconfigs/torqueMacosxconfig.cmake similarity index 99% rename from Tools/CMake/torqueMacOSconfigs.cmake rename to Tools/CMake/platformconfigs/torqueMacosxconfig.cmake index 0e583d0b4..2d1c6e96c 100644 --- a/Tools/CMake/torqueMacOSconfigs.cmake +++ b/Tools/CMake/platformconfigs/torqueMacosxconfig.cmake @@ -1,4 +1,3 @@ -if(APPLE) #detect Architecture enable_language(OBJC) enable_language(OBJCXX) @@ -161,4 +160,4 @@ set(CMAKE_XCODE_ATTRIBUTE_LINKER_DISPLAYS_MANGLED_NAMES[variant=Debug] YES) set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Debug] YES) set(CMAKE_XCODE_ATTRIBUTE_ENABLE_TESTABILITY[variant=Debug] YES) -endif(APPLE) \ No newline at end of file +add_subdirectory(${TORQUE_ENGINE_DIRECTORY}) From acf31770212aa124ce72094183e471bccf244886 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Sat, 21 Oct 2023 07:08:12 +0100 Subject: [PATCH 16/18] Revert "example cmake workflow" This reverts commit 233c6a80457bd3aaba3083e0f957444a973533e6. --- CMakeLists.txt | 15 +- Engine/source/CMakeLists.txt | 471 +++++++++++++++++- Engine/source/torqueEveryEngine.cmake | 465 ----------------- Engine/source/torqueMacosEngine.cmake | 283 ----------- ...xconfig.cmake => torqueMacOSconfigs.cmake} | 3 +- 5 files changed, 474 insertions(+), 763 deletions(-) delete mode 100644 Engine/source/torqueEveryEngine.cmake delete mode 100644 Engine/source/torqueMacosEngine.cmake rename Tools/CMake/{platformconfigs/torqueMacosxconfig.cmake => torqueMacOSconfigs.cmake} (99%) diff --git a/CMakeLists.txt b/CMakeLists.txt index c5bec3818..5de867942 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,10 +4,10 @@ set(CMAKE_CONFIGURATION_TYPES "Debug;RelWithDebInfo;Release" CACHE STRING "" FOR include("${CMAKE_SOURCE_DIR}/Tools/CMake/torque_macros.cmake") include("${CMAKE_SOURCE_DIR}/Tools/CMake/torque_configs.cmake") -#file(GLOB OS_SCRIPTS "${CMAKE_SOURCE_DIR}/Tools/CMake/torque*configs.cmake") -#foreach (TORQUE_OS_SCRIPT ${OS_SCRIPTS}) -# include(${TORQUE_OS_SCRIPT}) -#endforeach() +file(GLOB OS_SCRIPTS "${CMAKE_SOURCE_DIR}/Tools/CMake/torque*configs.cmake") +foreach (TORQUE_OS_SCRIPT ${OS_SCRIPTS}) + include(${TORQUE_OS_SCRIPT}) +endforeach() # Ensure multi-core compilation is enabled for everything add_compile_options($<$:/MP>) @@ -28,7 +28,6 @@ set(TORQUE_APP_GAME_DIRECTORY "${TORQUE_APP_ROOT_DIRECTORY}/game") set(TORQUE_LIB_ROOT_DIRECTORY "${CMAKE_SOURCE_DIR}/Engine/lib") set(TORQUE_LIB_TARG_DIRECTORY "${CMAKE_BINARY_DIR}/Engine/lib") set(TORQUE_SOURCE_DIRECTROY "${CMAKE_SOURCE_DIR}/Engine/source") -set(TORQUE_ENGINE_DIRECTORY "${CMAKE_SOURCE_DIR}/Engine") # Ensure all possible configurations end up in the project directory set(CMAKE_INSTALL_PREFIX "${TORQUE_APP_ROOT_DIRECTORY}" CACHE STRING "" FORCE) @@ -75,8 +74,4 @@ endif(NOT TORQUE_INSTALLED_TEMPLATE) # Generate torqueConfig.h in our temp directory configure_file("${CMAKE_SOURCE_DIR}/Tools/CMake/torqueConfig.h.in" "${TORQUE_APP_ROOT_DIRECTORY}/source/torqueConfig.h") -if(APPLE) - include("${CMAKE_SOURCE_DIR}/Tools/CMake/platformconfigs/torqueMacosxconfig.cmake") -else(APPLE) - add_subdirectory(Engine) -endif(APPLE) \ No newline at end of file +add_subdirectory(Engine) diff --git a/Engine/source/CMakeLists.txt b/Engine/source/CMakeLists.txt index ee80caa46..aad4df349 100644 --- a/Engine/source/CMakeLists.txt +++ b/Engine/source/CMakeLists.txt @@ -18,8 +18,471 @@ set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} TORQUE_TESTS_ENABLE set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} "_VARIADIC_MAX=10") endif() -if(APPLE) - include(torqueMacosEngine.cmake) +# On Windows we disable CRT Security warnings - this comes from recommendations to use non-portable functions. +if (WIN32) + set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} _CRT_SECURE_NO_WARNINGS WIN32) +endif (WIN32) + +if (APPLE) + set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} __MACOSX__) +elseif (UNIX) + set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} __linux__) +endif (APPLE) + +################# Set Engine Linkages ################### + +# When on Windows, we need to link against winsock and windows codecs +if (WIN32) + set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_WIN_SOURCES}) +endif (WIN32) + +# Linux requires X11 & freetype +if (UNIX AND NOT APPLE) + set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_X11_SOURCES}) + find_package(Freetype REQUIRED) + set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} ${FREETYPE_INCLUDE_DIRS}) +endif (UNIX AND NOT APPLE) + +################# Collect Source Files ################### + +# Handle app +torqueAddSourceDirectories("app" "app/net") + +# Handle console +torqueAddSourceDirectories("console") +torqueAddSourceDirectories("console/torquescript") + +# Handle Platform +torqueAddSourceDirectories("platform" "platform/threads" "platform/async" + "platform/input" "platform/output") + +torqueAddSourceDirectories("platform/nativeDialogs") +# Handle T3D +torqueAddSourceDirectories("T3D/fps" "T3D/fx" "T3D/vehicles" "T3D/physics" + "T3D/decal" "T3D/sfx" "T3D/gameBase" "T3D/turret" + "T3D/lighting" "T3D/gameOBjects" "T3D/components" + "T3D/systems" "T3D/assets" "T3D" "T3D/gameBase/std") + +# Handle TS +torqueAddSourceDirectories("ts" "ts/collada" "ts/assimp" "ts/loader" "ts/arch") + +# Handle SFX - OpenAL is handled as a module later on +torqueAddSourceDirectories("sfx" "sfx/media" "sfx/null") +if(TORQUE_SFX_OPENAL AND NOT TORQUE_DEDICATED) + torqueAddSourceDirectories("sfx/openal") + if(WIN32) + torqueAddSourceDirectories("sfx/openal/win32") + elseif(UNIX AND NOT APPLE) + torqueAddSourceDirectories("sfx/openal/linux") + elseif(APPLE) + torqueAddSourceDirectories("sfx/openal/mac") + endif() +endif() +# Handle GFX +torqueAddSourceDirectories("gfx" "gfx/Null" "gfx/test" "gfx/bitmap" "gfx/bitmap/loaders" + "gfx/util" "gfx/video" "gfx/sim" ) + +if (TORQUE_OPENGL) + torqueAddSourceDirectories("gfx/gl" "gfx/gl/sdl" "gfx/gl/tGL") +endif (TORQUE_OPENGL) + +if (WIN32 AND TORQUE_D3D11) + torqueAddSourceDirectories("gfx/D3D11") +endif (WIN32 AND TORQUE_D3D11) + +# Handle core +torqueAddSourceDirectories("core" "core/stream" "core/strings" "core/util" + "core/util/journal" "core/util/zip" "core/util/compressors") +# Handle GUI +torqueAddSourceDirectories("gui" "gui/buttons" "gui/containers" "gui/controls" "gui/core" + "gui/game" "gui/shiny" "gui/utility" "gui/3d") + +# Handle postFX +torqueAddSourceDirectories("postFx") + +# Handle Windowmanager +torqueAddSourceDirectories("windowManager" "windowManager/torque" "windowManager/sdl") + +# Handle scene +torqueAddSourceDirectories("scene" "scene/culling" "scene/zones" "scene/mixin") + +# Handle math +torqueAddSourceDirectories("math" "math/util") + +# Handle persistence +torqueAddSourceDirectories("persistence/taml" "persistence/taml/binary" "persistence/taml/xml") + +# Handle Cinterface +torqueAddSourceDirectories("cinterface") + +# Handle util +torqueAddSourceDirectories("util" "util/messaging") + +# Handle assets +torqueAddSourceDirectories("assets") + +# Handle Sim +torqueAddSourceDirectories("sim") + +# Handle module +torqueAddSourceDirectories("module") + +# Handle forest +torqueAddSourceDirectories("forest" "forest/ts") +if(TORQUE_OPENGL) + torqueAddSourceDirectories("forest" "forest/glsl") +endif(TORQUE_OPENGL) +if(TORQUE_D3D11) + torqueAddSourceDirectories("forest" "forest/hlsl") +endif(TORQUE_D3D11) + +# Handle shadergen +torqueAddSourceDirectories("shaderGen") + +if (WIN32 AND TORQUE_D3D11) + torqueAddSourceDirectories("shaderGen/HLSL") +endif (WIN32 AND TORQUE_D3D11) + +if (TORQUE_OPENGL) + torqueAddSourceDirectories("shaderGen/GLSL") +endif (TORQUE_OPENGL) + +# Handle terrain +torqueAddSourceDirectories("terrain") + +if (WIN32 AND TORQUE_D3D11) + torqueAddSourceDirectories("terrain/hlsl") +endif (WIN32 AND TORQUE_D3D11) + +if (TORQUE_OPENGL) + torqueAddSourceDirectories("terrain/glsl") +endif (TORQUE_OPENGL) + +# Handle Materials +torqueAddSourceDirectories("materials") + +# Handle collision +torqueAddSourceDirectories("collision") + +# Handle lighting +torqueAddSourceDirectories("lighting" "lighting/common" + "lighting/shadowMap") + +if (TORQUE_ADVANCED_LIGHTING) + torqueAddSourceDirectories("lighting/advanced") + + if (WIN32 AND TORQUE_D3D11) + torqueAddSourceDirectories("lighting/advanced/hlsl") + endif (WIN32 AND TORQUE_D3D11) + + if (TORQUE_OPENGL) + torqueAddSourceDirectories("lighting/advanced/glsl") + endif (TORQUE_OPENGL) +endif (TORQUE_ADVANCED_LIGHTING) + +if (TORQUE_BASIC_LIGHTING) + torqueAddSourceDirectories("lighting/basic" "lighting/basic/shadowMap") +endif (TORQUE_BASIC_LIGHTING) + +# Handle environment +torqueAddSourceDirectories("environment") + +# Handle renderInstance +torqueAddSourceDirectories("renderInstance") + +# Handle i18n +torqueAddSourceDirectories("i18n") + +# Begin handling platform specific stuff +# Handle Platform POSIX +if (UNIX) + torqueAddSourceDirectories("platformPOSIX") + + if(NOT APPLE) + if (TORQUE_CPU_X32 OR TORQUE_CPU_X64) + torqueAddSourceDirectories("platformX86UNIX") + endif (TORQUE_CPU_X32 OR TORQUE_CPU_X64) + endif(NOT APPLE) +endif (UNIX) + +# Handle platformMac +if (APPLE) + torqueAddSourceDirectories("platformMac") +endif (APPLE) + +# Handle platformWin32 +if (WIN32) + torqueAddSourceDirectories("platformWin32" "platformWin32/videoInfo") +endif (WIN32) + +# Handle platformSDL +torqueAddSourceDirectories("platformSDL" "platformSDL/threads") + +# Handle platformX11 +if (UNIX AND NOT APPLE) + torqueAddSourceDirectories("platformX11") +endif (UNIX AND NOT APPLE) + +if(TORQUE_TESTING) + torqueAddSourceDirectories("testing") + set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} TORQUE_SHARED SDL_MAIN_HANDLED) +endif(TORQUE_TESTING) + +# Add the collected files to our engine group +source_group(TREE "${CMAKE_SOURCE_DIR}/Engine/source" PREFIX "Engine" FILES ${TORQUE_SOURCE_FILES}) +file(GLOB_RECURSE TORQUE_APP_GAME_SOURCES "${TORQUE_APP_ROOT_DIRECTORY}/source/*.cpp" "${TORQUE_APP_ROOT_DIRECTORY}/source/*.h") +source_group(TREE "${TORQUE_APP_ROOT_DIRECTORY}/source" PREFIX "Source Files" FILES ${TORQUE_APP_GAME_SOURCES}) +set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} "${TORQUE_APP_ROOT_DIRECTORY}/source") + +################# Engine Module Handling ################### + +set(TORQUE_MODULE_PATHS "${CMAKE_SOURCE_DIR}/Tools/CMake/modules" "${TORQUE_APP_GAME_DIRECTORY}/data") +if (NOT "${TORQUE_MODULE_USER_PATH}" STREQUAL "") + list(APPEND TORQUE_MODULE_PATHS "${TORQUE_MODULE_USER_PATH}") +endif() + +# Before doing module scanning, store away the engine sources - we do this so that modules +# can be placed into the proper filters +set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES} ${TORQUE_APP_GAME_SOURCES}) +set(TORQUE_SOURCE_FILES "") + +foreach (TORQUE_MODULE_PATH ${TORQUE_MODULE_PATHS}) + # First find simple cmake scripts, mostly used for in-engine modules + file(GLOB MODULE_SCRIPTS "${TORQUE_MODULE_PATH}/*.cmake") + foreach (TORQUE_MODULE_SCRIPT ${MODULE_SCRIPTS}) + include(${TORQUE_MODULE_SCRIPT}) + + # Add this script's collected files to our Engine group + source_group(TREE "${CMAKE_SOURCE_DIR}/Engine" PREFIX "Engine" FILES ${TORQUE_SOURCE_FILES}) + + set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${TORQUE_SOURCE_FILES}) + set(TORQUE_SOURCE_FILES "") + endforeach() + + # Next find sub projects, these can introduce new source files + SUBDIRLIST(POSSIBLE_PROJECTS "${TORQUE_MODULE_PATH}") + foreach (POSSIBLE_PROJECT ${POSSIBLE_PROJECTS}) + # Retrieve the absolute path of this possible project + get_filename_component(POSSIBLE_PROJECT_ABSOLUTEPATH "${POSSIBLE_PROJECT}" + REALPATH BASE_DIR "${TORQUE_MODULE_PATH}") + + if (EXISTS "${POSSIBLE_PROJECT_ABSOLUTEPATH}/CMakeLists.txt") + add_subdirectory("${POSSIBLE_PROJECT_ABSOLUTEPATH}" ${CMAKE_BINARY_DIR}/temp/${POSSIBLE_PROJECT} EXCLUDE_FROM_ALL) + source_group(TREE "${POSSIBLE_PROJECT_ABSOLUTEPATH}" PREFIX "Modules/${POSSIBLE_PROJECT}" FILES ${TORQUE_SOURCE_FILES}) + + set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${TORQUE_SOURCE_FILES}) + set(TORQUE_SOURCE_FILES "") + elseif(NOT EXISTS "${POSSIBLE_PROJECT_ABSOLUTEPATH}/*.cmake") + file(GLOB_RECURSE MODULE_SOURCE "${POSSIBLE_PROJECT_ABSOLUTEPATH}/source/*.h" "${POSSIBLE_PROJECT_ABSOLUTEPATH}/source/*.cpp") + #message(STATUS "MODULE_SOURCE:${MODULE_SOURCE}") + source_group(TREE "${POSSIBLE_PROJECT_ABSOLUTEPATH}" PREFIX "Modules/${POSSIBLE_PROJECT}/" FILES ${MODULE_SOURCE}) + set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${MODULE_SOURCE}) + endif() + endforeach() +endforeach() + +set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES_TEMPORARY}) + +################# Library Post-build Handling ################### +set(TORQUE_LIBRARY_PATHS "${CMAKE_SOURCE_DIR}/Engine/lib" "${TORQUE_APP_GAME_DIRECTORY}/data") +if (NOT "${TORQUE_LIBRARY_USER_PATH}" STREQUAL "") + list(APPEND TORQUE_LIBRARY_PATHS "${TORQUE_LIBRARY_USER_PATH}") +endif() + +foreach (TORQUE_LIBRARY_PATH ${TORQUE_LIBRARY_PATHS}) + # First find simple cmake scripts, mostly used for in-engine libraries + file(GLOB_RECURSE LIBRARY_SCRIPTS "${TORQUE_LIBRARY_PATH}/*Torque_postBuild.cmake") + #message(STATUS "LIBRARY_SCRIPTS:${LIBRARY_SCRIPTS}") + foreach (TORQUE_LIBRARY_SCRIPT ${LIBRARY_SCRIPTS}) + include(${TORQUE_LIBRARY_SCRIPT}) + endforeach() +endforeach() +################# Dynamic File Configuration ################### + +# Prepare Windows RC file +if (WIN32) + set(APPLICATION_ICON_PATH "${CMAKE_SOURCE_DIR}/Tools/CMake/torque.ico") + + configure_file("${CMAKE_SOURCE_DIR}/Tools/CMake/torque-win.rc.in" "${TORQUE_APP_ROOT_DIRECTORY}/source/torque.rc") + set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} "${TORQUE_APP_ROOT_DIRECTORY}/source/torque.rc") +endif (WIN32) + +# Prepare OSX Plist +if (APPLE) + set(MACOSX_RESOURCES "${CMAKE_SOURCE_DIR}/Tools/CMake/torque.icns" + "${TORQUE_APP_GAME_DIRECTORY}/data" + "${TORQUE_APP_GAME_DIRECTORY}/core" + "${TORQUE_APP_GAME_DIRECTORY}/tools" + "${TORQUE_APP_GAME_DIRECTORY}/main.${TORQUE_SCRIPT_EXTENSION}") + + set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_MAC_SOURCES} ${MACOSX_RESOURCES}) + + source_group("Resources" FILES ${MACOSX_RESOURCES}) + + set_source_files_properties(${MACOSX_RESOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") + + set(EXECUTABLE_NAME "${TORQUE_APP_NAME}") + configure_file("${CMAKE_SOURCE_DIR}/Tools/CMake/Info.plist.in" "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist" COPYONLY) +endif (APPLE) + +addDef(TORQUE_DEBUG Debug) +addDef(TORQUE_RELEASE "RelWithDebInfo;Release") +addDef(TORQUE_ENABLE_ASSERTS "Debug;RelWithDebInfo") +addDef(TORQUE_DEBUG_GFX_MODE "RelWithDebInfo") +addDef(TORQUE_OGGVORBIS) + +if(NOT TORQUE_SDL) + filterOut("platform/nativeDialogs/fileDialog.cpp" ) +endif() +if(NOT TORQUE_OPENGL) + filterOut("platformSDL/sdlPlatformGL.cpp") +endif() +if (NOT TORQUE_NET_CURL) + filterOut("app/net/httpObject.h" "app/net/httpObject.cpp") +endif() + +################# Executable Generation ################### +if (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) + set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} TORQUE_SHARED) + + # Build the main engine library + add_library(TorqueEngine SHARED ${TORQUE_SOURCE_FILES}) + target_compile_definitions(TorqueEngine PUBLIC ${TORQUE_COMPILE_DEFINITIONS}) + target_link_libraries(TorqueEngine ${TORQUE_LINK_LIBRARIES}) + target_include_directories(TorqueEngine PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_BINARY_DIR}/temp" ${TORQUE_INCLUDE_DIRECTORIES}) + + set(TORQUE_SOURCE_FILES "main/main.cpp") + set(TORQUE_LINK_LIBRARIES TorqueEngine) else() - include(torqueEveryEngine.cmake) -endif(APPLE) \ No newline at end of file + if(NOT TORQUE_TESTING) + set(TORQUE_SOURCE_FILES "main/main.cpp" ${TORQUE_SOURCE_FILES}) + endif() +endif (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) + +if (APPLE) + add_executable(${TORQUE_APP_NAME} MACOSX_BUNDLE ${TORQUE_SOURCE_FILES}) + set_target_properties(${TORQUE_APP_NAME} PROPERTIES + BUNDLE true + MACOSX_BUNDLE_INFO_PLIST "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist" + XCODE_ATTRIBUTE_INSTALL_PATH "/Applications" + XCODE_ATTRIBUTE_SKIP_INSTALL "No" + MACOSX_RPATH TRUE) + +elseif (WIN32) + add_executable(${TORQUE_APP_NAME} WIN32 ${TORQUE_SOURCE_FILES}) + + set(TORQUE_CXX_FLAGS_COMMON_DEFAULT "-DUNICODE -D_UNICODE -D_CRT_SECURE_NO_WARNINGS /MP /Ob2 /Oi /Ot /Oy /GT /Zi /W4 /nologo /GF /EHsc /GS- /Gy- /Qpar- /fp:precise /fp:except- /GR /Zc:wchar_t-" ) + if( TORQUE_CPU_X32 ) + set(TORQUE_CXX_FLAGS_COMMON_DEFAULT "${TORQUE_CXX_FLAGS_COMMON_DEFAULT} /arch:SSE2") + endif() + set(TORQUE_CXX_FLAGS_COMMON ${TORQUE_CXX_FLAGS_COMMON_DEFAULT} CACHE STRING "") + mark_as_advanced(TORQUE_CXX_FLAGS_COMMON) + + set(TORQUE_CXX_FLAGS_EXECUTABLES "/wd4018 /wd4100 /wd4121 /wd4127 /wd4130 /wd4244 /wd4245 /wd4389 /wd4511 /wd4512 /wd4800 /wd4995" CACHE STRING "") + mark_as_advanced(TORQUE_CXX_FLAGS_EXECUTABLES) + + set(TORQUE_CXX_FLAGS "${TORQUE_CXX_FLAGS_COMMON_DEFAULT} ${TORQUE_CXX_FLAGS_EXECUTABLES}" CACHE STRING "") + mark_as_advanced(TORQUE_CXX_FLAGS) + + # NOTE: On Windows, /Zc:wchar_t- is necessary otherwise you get unicode errors + set_target_properties(${TORQUE_APP_NAME} PROPERTIES COMPILE_FLAGS "${TORQUE_CXX_FLAGS}") + if (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) + set_target_properties(TorqueEngine PROPERTIES COMPILE_FLAGS "${TORQUE_CXX_FLAGS_COMMON_DEFAULT}") + endif (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) +else() + add_executable(${TORQUE_APP_NAME} ${TORQUE_SOURCE_FILES}) + + # NOTE: On Linux, we set the rpath to ./ so that shared objects next to the executable are used + set_target_properties(${TORQUE_APP_NAME} PROPERTIES LINK_FLAGS "-Wl,-rpath,./") +endif() + + +if(MSVC) + # Match projectGenerator naming for executables + set(OUTPUT_CONFIG DEBUG MINSIZEREL RELWITHDEBINFO) + set(OUTPUT_SUFFIX DEBUG MINSIZE OPTIMIZEDDEBUG) + foreach(INDEX RANGE 2) + list(GET OUTPUT_CONFIG ${INDEX} CONF) + list(GET OUTPUT_SUFFIX ${INDEX} SUFFIX) + set_property(TARGET ${TORQUE_APP_NAME} PROPERTY OUTPUT_NAME_${CONF} ${TORQUE_APP_NAME}_${SUFFIX}) + if (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) + set_property(TARGET TorqueEngine PROPERTY ${CONF}_POSTFIX "_${SUFFIX}") + set_property(TARGET TorqueEngine PROPERTY ${CONF}_OUTPUT_NAME ${TORQUE_APP_NAME}) + endif (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) + endforeach() + # Set Visual Studio startup project + set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${TORQUE_APP_NAME}) +endif() + +set_property(GLOBAL PROPERTY USE_FOLDERS ON) +foreach (TORQUE_LIBRARY ${TORQUE_LINK_LIBRARIES}) + set_target_properties(${TORQUE_LIBRARY} PROPERTIES + FOLDER "Libraries") +endforeach() + +target_compile_definitions(${TORQUE_APP_NAME} PUBLIC ${TORQUE_COMPILE_DEFINITIONS}) +target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_LIBRARIES}) + +if(APPLE) + target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_FRAMEWORKS}) +endif(APPLE) + +if(WIN32) + target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_WINDOWS}) +endif(WIN32) + +if(UNIX AND NOT APPLE) + target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_LINUX}) +endif(UNIX AND NOT APPLE) + +target_link_options(${TORQUE_APP_NAME} PUBLIC ${TORQUE_LINK_OPTIONS}) +if (TORQUE_TARGET_PROPERTIES) + set_target_properties(${TORQUE_APP_NAME} PROPERTIES ${TORQUE_TARGET_PROPERTIES}) +endif (TORQUE_TARGET_PROPERTIES) +target_include_directories(${TORQUE_APP_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_BINARY_DIR}/temp" ${TORQUE_INCLUDE_DIRECTORIES}) + +if(TORQUE_TESTING) + if(WIN32) + target_link_options(${TORQUE_APP_NAME} PRIVATE "/SUBSYSTEM:CONSOLE") + set_target_properties(gtest PROPERTIES COMPILE_FLAGS "/Zc:wchar_t-") + set_target_properties(gmock PROPERTIES COMPILE_FLAGS "/Zc:wchar_t-") + endif() +endif(TORQUE_TESTING) + +append_defs() + +# Process library binaries - these are coming from modules that are providing links to external, precompiled code that should be included +# with the executable. This is done because on Windows, the .lib is separate from the .dll so we can't automatically scan for shared +# objects in our link libraries in that case. +foreach (LIBRARY_BINARY ${TORQUE_ADDITIONAL_LIBRARY_BINARIES}) + if (APPLE) + # For OSX, we want these binaries to be copied to the Frameworks directory + add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/$(CONFIGURATION)") + else() + # All other platforms expect the file next to the executable + add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}") + endif (APPLE) +endforeach() + +# Process link libraries for dynamic links - we do this on OSX/Linux to ensure the binaries end up in the correct App directory +# as in the root CMake we force everything to be in game. This is necessary because on these platforms these are considered "libraries" +# and not runtime binaries like we configure in the root CMake. We don't globally set library outputs to avoid outputting eg. a files to +# our game directory. +if (UNIX) + get_target_property(GAME_LINK_LIBRARIES ${TORQUE_APP_NAME} LINK_LIBRARIES) + foreach (GAME_LINK_LIBRARY ${GAME_LINK_LIBRARIES}) + # For eg. OSX some links are not valid targets - for example frameworks provided by OS + if (TARGET ${GAME_LINK_LIBRARY}) + get_target_property(LINK_LIBRARY_TYPE ${GAME_LINK_LIBRARY} TYPE) + # Only pay attention to shared libraries and make them output to the app resources + if ("${LINK_LIBRARY_TYPE}" STREQUAL "SHARED_LIBRARY") + if (APPLE) + set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES + XCODE_ATTRIBUTE_INSTALL_PATH "@rpath") + else() + set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${TORQUE_APP_GAME_DIRECTORY}") + endif(APPLE) + endif() + endif() + endforeach() +endif (UNIX) diff --git a/Engine/source/torqueEveryEngine.cmake b/Engine/source/torqueEveryEngine.cmake deleted file mode 100644 index 03f95a8fd..000000000 --- a/Engine/source/torqueEveryEngine.cmake +++ /dev/null @@ -1,465 +0,0 @@ -# On Windows we disable CRT Security warnings - this comes from recommendations to use non-portable functions. -if (WIN32) -set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} _CRT_SECURE_NO_WARNINGS WIN32) -endif (WIN32) - -set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} __linux__) -endif (APPLE) - -################# Set Engine Linkages ################### - -# When on Windows, we need to link against winsock and windows codecs -if (WIN32) -set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_WIN_SOURCES}) -endif (WIN32) - -# Linux requires X11 & freetype -if (UNIX AND NOT APPLE) -set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_X11_SOURCES}) -find_package(Freetype REQUIRED) -set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} ${FREETYPE_INCLUDE_DIRS}) -endif (UNIX AND NOT APPLE) - -################# Collect Source Files ################### - -# Handle app -torqueAddSourceDirectories("app" "app/net") - -# Handle console -torqueAddSourceDirectories("console") -torqueAddSourceDirectories("console/torquescript") - -# Handle Platform -torqueAddSourceDirectories("platform" "platform/threads" "platform/async" - "platform/input" "platform/output") - -torqueAddSourceDirectories("platform/nativeDialogs") -# Handle T3D -torqueAddSourceDirectories("T3D/fps" "T3D/fx" "T3D/vehicles" "T3D/physics" - "T3D/decal" "T3D/sfx" "T3D/gameBase" "T3D/turret" - "T3D/lighting" "T3D/gameOBjects" "T3D/components" - "T3D/systems" "T3D/assets" "T3D" "T3D/gameBase/std") - -# Handle TS -torqueAddSourceDirectories("ts" "ts/collada" "ts/assimp" "ts/loader" "ts/arch") - -# Handle SFX - OpenAL is handled as a module later on -torqueAddSourceDirectories("sfx" "sfx/media" "sfx/null") -if(TORQUE_SFX_OPENAL AND NOT TORQUE_DEDICATED) - torqueAddSourceDirectories("sfx/openal") - if(WIN32) - torqueAddSourceDirectories("sfx/openal/win32") - elseif(UNIX AND NOT APPLE) - torqueAddSourceDirectories("sfx/openal/linux") - elseif(APPLE) - torqueAddSourceDirectories("sfx/openal/mac") - endif() -endif() -# Handle GFX -torqueAddSourceDirectories("gfx" "gfx/Null" "gfx/test" "gfx/bitmap" "gfx/bitmap/loaders" - "gfx/util" "gfx/video" "gfx/sim" ) - -if (TORQUE_OPENGL) -torqueAddSourceDirectories("gfx/gl" "gfx/gl/sdl" "gfx/gl/tGL") -endif (TORQUE_OPENGL) - -if (WIN32 AND TORQUE_D3D11) -torqueAddSourceDirectories("gfx/D3D11") -endif (WIN32 AND TORQUE_D3D11) - -# Handle core -torqueAddSourceDirectories("core" "core/stream" "core/strings" "core/util" - "core/util/journal" "core/util/zip" "core/util/compressors") -# Handle GUI -torqueAddSourceDirectories("gui" "gui/buttons" "gui/containers" "gui/controls" "gui/core" - "gui/game" "gui/shiny" "gui/utility" "gui/3d") - -# Handle postFX -torqueAddSourceDirectories("postFx") - -# Handle Windowmanager -torqueAddSourceDirectories("windowManager" "windowManager/torque" "windowManager/sdl") - -# Handle scene -torqueAddSourceDirectories("scene" "scene/culling" "scene/zones" "scene/mixin") - -# Handle math -torqueAddSourceDirectories("math" "math/util") - -# Handle persistence -torqueAddSourceDirectories("persistence/taml" "persistence/taml/binary" "persistence/taml/xml") - -# Handle Cinterface -torqueAddSourceDirectories("cinterface") - -# Handle util -torqueAddSourceDirectories("util" "util/messaging") - -# Handle assets -torqueAddSourceDirectories("assets") - -# Handle Sim -torqueAddSourceDirectories("sim") - -# Handle module -torqueAddSourceDirectories("module") - -# Handle forest -torqueAddSourceDirectories("forest" "forest/ts") -if(TORQUE_OPENGL) -torqueAddSourceDirectories("forest" "forest/glsl") -endif(TORQUE_OPENGL) -if(TORQUE_D3D11) -torqueAddSourceDirectories("forest" "forest/hlsl") -endif(TORQUE_D3D11) - -# Handle shadergen -torqueAddSourceDirectories("shaderGen") - -if (WIN32 AND TORQUE_D3D11) -torqueAddSourceDirectories("shaderGen/HLSL") -endif (WIN32 AND TORQUE_D3D11) - -if (TORQUE_OPENGL) -torqueAddSourceDirectories("shaderGen/GLSL") -endif (TORQUE_OPENGL) - -# Handle terrain -torqueAddSourceDirectories("terrain") - -if (WIN32 AND TORQUE_D3D11) -torqueAddSourceDirectories("terrain/hlsl") -endif (WIN32 AND TORQUE_D3D11) - -if (TORQUE_OPENGL) -torqueAddSourceDirectories("terrain/glsl") -endif (TORQUE_OPENGL) - -# Handle Materials -torqueAddSourceDirectories("materials") - -# Handle collision -torqueAddSourceDirectories("collision") - -# Handle lighting -torqueAddSourceDirectories("lighting" "lighting/common" - "lighting/shadowMap") - -if (TORQUE_ADVANCED_LIGHTING) -torqueAddSourceDirectories("lighting/advanced") - -if (WIN32 AND TORQUE_D3D11) - torqueAddSourceDirectories("lighting/advanced/hlsl") -endif (WIN32 AND TORQUE_D3D11) - -if (TORQUE_OPENGL) - torqueAddSourceDirectories("lighting/advanced/glsl") -endif (TORQUE_OPENGL) -endif (TORQUE_ADVANCED_LIGHTING) - -if (TORQUE_BASIC_LIGHTING) -torqueAddSourceDirectories("lighting/basic" "lighting/basic/shadowMap") -endif (TORQUE_BASIC_LIGHTING) - -# Handle environment -torqueAddSourceDirectories("environment") - -# Handle renderInstance -torqueAddSourceDirectories("renderInstance") - -# Handle i18n -torqueAddSourceDirectories("i18n") - -# Begin handling platform specific stuff -# Handle Platform POSIX -if (UNIX) -torqueAddSourceDirectories("platformPOSIX") - -if(NOT APPLE) - if (TORQUE_CPU_X32 OR TORQUE_CPU_X64) - torqueAddSourceDirectories("platformX86UNIX") - endif (TORQUE_CPU_X32 OR TORQUE_CPU_X64) -endif(NOT APPLE) -endif (UNIX) - -# Handle platformMac -if (APPLE) -torqueAddSourceDirectories("platformMac") -endif (APPLE) - -# Handle platformWin32 -if (WIN32) -torqueAddSourceDirectories("platformWin32" "platformWin32/videoInfo") -endif (WIN32) - -# Handle platformSDL -torqueAddSourceDirectories("platformSDL" "platformSDL/threads") - -# Handle platformX11 -if (UNIX AND NOT APPLE) -torqueAddSourceDirectories("platformX11") -endif (UNIX AND NOT APPLE) - -if(TORQUE_TESTING) -torqueAddSourceDirectories("testing") -set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} TORQUE_SHARED SDL_MAIN_HANDLED) -endif(TORQUE_TESTING) - -# Add the collected files to our engine group -source_group(TREE "${CMAKE_SOURCE_DIR}/Engine/source" PREFIX "Engine" FILES ${TORQUE_SOURCE_FILES}) -file(GLOB_RECURSE TORQUE_APP_GAME_SOURCES "${TORQUE_APP_ROOT_DIRECTORY}/source/*.cpp" "${TORQUE_APP_ROOT_DIRECTORY}/source/*.h") -source_group(TREE "${TORQUE_APP_ROOT_DIRECTORY}/source" PREFIX "Source Files" FILES ${TORQUE_APP_GAME_SOURCES}) -set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} "${TORQUE_APP_ROOT_DIRECTORY}/source") - -################# Engine Module Handling ################### - -set(TORQUE_MODULE_PATHS "${CMAKE_SOURCE_DIR}/Tools/CMake/modules" "${TORQUE_APP_GAME_DIRECTORY}/data") -if (NOT "${TORQUE_MODULE_USER_PATH}" STREQUAL "") -list(APPEND TORQUE_MODULE_PATHS "${TORQUE_MODULE_USER_PATH}") -endif() - -# Before doing module scanning, store away the engine sources - we do this so that modules -# can be placed into the proper filters -set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES} ${TORQUE_APP_GAME_SOURCES}) -set(TORQUE_SOURCE_FILES "") - -foreach (TORQUE_MODULE_PATH ${TORQUE_MODULE_PATHS}) -# First find simple cmake scripts, mostly used for in-engine modules -file(GLOB MODULE_SCRIPTS "${TORQUE_MODULE_PATH}/*.cmake") -foreach (TORQUE_MODULE_SCRIPT ${MODULE_SCRIPTS}) - include(${TORQUE_MODULE_SCRIPT}) - - # Add this script's collected files to our Engine group - source_group(TREE "${CMAKE_SOURCE_DIR}/Engine" PREFIX "Engine" FILES ${TORQUE_SOURCE_FILES}) - - set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${TORQUE_SOURCE_FILES}) - set(TORQUE_SOURCE_FILES "") -endforeach() - -# Next find sub projects, these can introduce new source files -SUBDIRLIST(POSSIBLE_PROJECTS "${TORQUE_MODULE_PATH}") -foreach (POSSIBLE_PROJECT ${POSSIBLE_PROJECTS}) - # Retrieve the absolute path of this possible project - get_filename_component(POSSIBLE_PROJECT_ABSOLUTEPATH "${POSSIBLE_PROJECT}" - REALPATH BASE_DIR "${TORQUE_MODULE_PATH}") - - if (EXISTS "${POSSIBLE_PROJECT_ABSOLUTEPATH}/CMakeLists.txt") - add_subdirectory("${POSSIBLE_PROJECT_ABSOLUTEPATH}" ${CMAKE_BINARY_DIR}/temp/${POSSIBLE_PROJECT} EXCLUDE_FROM_ALL) - source_group(TREE "${POSSIBLE_PROJECT_ABSOLUTEPATH}" PREFIX "Modules/${POSSIBLE_PROJECT}" FILES ${TORQUE_SOURCE_FILES}) - - set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${TORQUE_SOURCE_FILES}) - set(TORQUE_SOURCE_FILES "") - elseif(NOT EXISTS "${POSSIBLE_PROJECT_ABSOLUTEPATH}/*.cmake") - file(GLOB_RECURSE MODULE_SOURCE "${POSSIBLE_PROJECT_ABSOLUTEPATH}/source/*.h" "${POSSIBLE_PROJECT_ABSOLUTEPATH}/source/*.cpp") - #message(STATUS "MODULE_SOURCE:${MODULE_SOURCE}") - source_group(TREE "${POSSIBLE_PROJECT_ABSOLUTEPATH}" PREFIX "Modules/${POSSIBLE_PROJECT}/" FILES ${MODULE_SOURCE}) - set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${MODULE_SOURCE}) - endif() -endforeach() -endforeach() - -set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES_TEMPORARY}) - -################# Library Post-build Handling ################### -set(TORQUE_LIBRARY_PATHS "${CMAKE_SOURCE_DIR}/Engine/lib" "${TORQUE_APP_GAME_DIRECTORY}/data") -if (NOT "${TORQUE_LIBRARY_USER_PATH}" STREQUAL "") -list(APPEND TORQUE_LIBRARY_PATHS "${TORQUE_LIBRARY_USER_PATH}") -endif() - -foreach (TORQUE_LIBRARY_PATH ${TORQUE_LIBRARY_PATHS}) -# First find simple cmake scripts, mostly used for in-engine libraries -file(GLOB_RECURSE LIBRARY_SCRIPTS "${TORQUE_LIBRARY_PATH}/*Torque_postBuild.cmake") - #message(STATUS "LIBRARY_SCRIPTS:${LIBRARY_SCRIPTS}") -foreach (TORQUE_LIBRARY_SCRIPT ${LIBRARY_SCRIPTS}) - include(${TORQUE_LIBRARY_SCRIPT}) -endforeach() -endforeach() -################# Dynamic File Configuration ################### - -# Prepare Windows RC file -if (WIN32) -set(APPLICATION_ICON_PATH "${CMAKE_SOURCE_DIR}/Tools/CMake/torque.ico") - -configure_file("${CMAKE_SOURCE_DIR}/Tools/CMake/torque-win.rc.in" "${TORQUE_APP_ROOT_DIRECTORY}/source/torque.rc") -set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} "${TORQUE_APP_ROOT_DIRECTORY}/source/torque.rc") -endif (WIN32) - -# Prepare OSX Plist -if (APPLE) -set(MACOSX_RESOURCES "${CMAKE_SOURCE_DIR}/Tools/CMake/torque.icns" -"${TORQUE_APP_GAME_DIRECTORY}/data" -"${TORQUE_APP_GAME_DIRECTORY}/core" -"${TORQUE_APP_GAME_DIRECTORY}/tools" -"${TORQUE_APP_GAME_DIRECTORY}/main.${TORQUE_SCRIPT_EXTENSION}") - -set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_MAC_SOURCES} ${MACOSX_RESOURCES}) - -source_group("Resources" FILES ${MACOSX_RESOURCES}) - -set_source_files_properties(${MACOSX_RESOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") - -set(EXECUTABLE_NAME "${TORQUE_APP_NAME}") -configure_file("${CMAKE_SOURCE_DIR}/Tools/CMake/Info.plist.in" "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist" COPYONLY) -endif (APPLE) - -addDef(TORQUE_DEBUG Debug) -addDef(TORQUE_RELEASE "RelWithDebInfo;Release") -addDef(TORQUE_ENABLE_ASSERTS "Debug;RelWithDebInfo") -addDef(TORQUE_DEBUG_GFX_MODE "RelWithDebInfo") -addDef(TORQUE_OGGVORBIS) - -if(NOT TORQUE_SDL) -filterOut("platform/nativeDialogs/fileDialog.cpp" ) -endif() -if(NOT TORQUE_OPENGL) -filterOut("platformSDL/sdlPlatformGL.cpp") -endif() -if (NOT TORQUE_NET_CURL) -filterOut("app/net/httpObject.h" "app/net/httpObject.cpp") -endif() - -################# Executable Generation ################### -if (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) -set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} TORQUE_SHARED) - -# Build the main engine library -add_library(TorqueEngine SHARED ${TORQUE_SOURCE_FILES}) -target_compile_definitions(TorqueEngine PUBLIC ${TORQUE_COMPILE_DEFINITIONS}) -target_link_libraries(TorqueEngine ${TORQUE_LINK_LIBRARIES}) -target_include_directories(TorqueEngine PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_BINARY_DIR}/temp" ${TORQUE_INCLUDE_DIRECTORIES}) - -set(TORQUE_SOURCE_FILES "main/main.cpp") -set(TORQUE_LINK_LIBRARIES TorqueEngine) -else() -if(NOT TORQUE_TESTING) - set(TORQUE_SOURCE_FILES "main/main.cpp" ${TORQUE_SOURCE_FILES}) -endif() -endif (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) - -if (APPLE) -add_executable(${TORQUE_APP_NAME} MACOSX_BUNDLE ${TORQUE_SOURCE_FILES}) -set_target_properties(${TORQUE_APP_NAME} PROPERTIES -BUNDLE true -MACOSX_BUNDLE_INFO_PLIST "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist" -XCODE_ATTRIBUTE_INSTALL_PATH "/Applications" -XCODE_ATTRIBUTE_SKIP_INSTALL "No" -MACOSX_RPATH TRUE) - -elseif (WIN32) -add_executable(${TORQUE_APP_NAME} WIN32 ${TORQUE_SOURCE_FILES}) - - set(TORQUE_CXX_FLAGS_COMMON_DEFAULT "-DUNICODE -D_UNICODE -D_CRT_SECURE_NO_WARNINGS /MP /Ob2 /Oi /Ot /Oy /GT /Zi /W4 /nologo /GF /EHsc /GS- /Gy- /Qpar- /fp:precise /fp:except- /GR /Zc:wchar_t-" ) - if( TORQUE_CPU_X32 ) - set(TORQUE_CXX_FLAGS_COMMON_DEFAULT "${TORQUE_CXX_FLAGS_COMMON_DEFAULT} /arch:SSE2") - endif() - set(TORQUE_CXX_FLAGS_COMMON ${TORQUE_CXX_FLAGS_COMMON_DEFAULT} CACHE STRING "") - mark_as_advanced(TORQUE_CXX_FLAGS_COMMON) - - set(TORQUE_CXX_FLAGS_EXECUTABLES "/wd4018 /wd4100 /wd4121 /wd4127 /wd4130 /wd4244 /wd4245 /wd4389 /wd4511 /wd4512 /wd4800 /wd4995" CACHE STRING "") - mark_as_advanced(TORQUE_CXX_FLAGS_EXECUTABLES) - - set(TORQUE_CXX_FLAGS "${TORQUE_CXX_FLAGS_COMMON_DEFAULT} ${TORQUE_CXX_FLAGS_EXECUTABLES}" CACHE STRING "") - mark_as_advanced(TORQUE_CXX_FLAGS) - -# NOTE: On Windows, /Zc:wchar_t- is necessary otherwise you get unicode errors -set_target_properties(${TORQUE_APP_NAME} PROPERTIES COMPILE_FLAGS "${TORQUE_CXX_FLAGS}") -if (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) - set_target_properties(TorqueEngine PROPERTIES COMPILE_FLAGS "${TORQUE_CXX_FLAGS_COMMON_DEFAULT}") -endif (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) -else() -add_executable(${TORQUE_APP_NAME} ${TORQUE_SOURCE_FILES}) - -# NOTE: On Linux, we set the rpath to ./ so that shared objects next to the executable are used -set_target_properties(${TORQUE_APP_NAME} PROPERTIES LINK_FLAGS "-Wl,-rpath,./") -endif() - - -if(MSVC) - # Match projectGenerator naming for executables - set(OUTPUT_CONFIG DEBUG MINSIZEREL RELWITHDEBINFO) - set(OUTPUT_SUFFIX DEBUG MINSIZE OPTIMIZEDDEBUG) - foreach(INDEX RANGE 2) - list(GET OUTPUT_CONFIG ${INDEX} CONF) - list(GET OUTPUT_SUFFIX ${INDEX} SUFFIX) - set_property(TARGET ${TORQUE_APP_NAME} PROPERTY OUTPUT_NAME_${CONF} ${TORQUE_APP_NAME}_${SUFFIX}) - if (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) - set_property(TARGET TorqueEngine PROPERTY ${CONF}_POSTFIX "_${SUFFIX}") - set_property(TARGET TorqueEngine PROPERTY ${CONF}_OUTPUT_NAME ${TORQUE_APP_NAME}) - endif (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING) - endforeach() - # Set Visual Studio startup project - set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${TORQUE_APP_NAME}) -endif() - -set_property(GLOBAL PROPERTY USE_FOLDERS ON) -foreach (TORQUE_LIBRARY ${TORQUE_LINK_LIBRARIES}) -set_target_properties(${TORQUE_LIBRARY} PROPERTIES -FOLDER "Libraries") -endforeach() - -target_compile_definitions(${TORQUE_APP_NAME} PUBLIC ${TORQUE_COMPILE_DEFINITIONS}) -target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_LIBRARIES}) - -if(APPLE) -target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_FRAMEWORKS}) -endif(APPLE) - -if(WIN32) -target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_WINDOWS}) -endif(WIN32) - -if(UNIX AND NOT APPLE) -target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_LINUX}) -endif(UNIX AND NOT APPLE) - -target_link_options(${TORQUE_APP_NAME} PUBLIC ${TORQUE_LINK_OPTIONS}) -if (TORQUE_TARGET_PROPERTIES) -set_target_properties(${TORQUE_APP_NAME} PROPERTIES ${TORQUE_TARGET_PROPERTIES}) -endif (TORQUE_TARGET_PROPERTIES) -target_include_directories(${TORQUE_APP_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_BINARY_DIR}/temp" ${TORQUE_INCLUDE_DIRECTORIES}) - -if(TORQUE_TESTING) -if(WIN32) - target_link_options(${TORQUE_APP_NAME} PRIVATE "/SUBSYSTEM:CONSOLE") - set_target_properties(gtest PROPERTIES COMPILE_FLAGS "/Zc:wchar_t-") - set_target_properties(gmock PROPERTIES COMPILE_FLAGS "/Zc:wchar_t-") - endif() -endif(TORQUE_TESTING) - -append_defs() - -# Process library binaries - these are coming from modules that are providing links to external, precompiled code that should be included -# with the executable. This is done because on Windows, the .lib is separate from the .dll so we can't automatically scan for shared -# objects in our link libraries in that case. -foreach (LIBRARY_BINARY ${TORQUE_ADDITIONAL_LIBRARY_BINARIES}) -if (APPLE) - # For OSX, we want these binaries to be copied to the Frameworks directory - add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/$(CONFIGURATION)") -else() - # All other platforms expect the file next to the executable - add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}") -endif (APPLE) -endforeach() - -# Process link libraries for dynamic links - we do this on OSX/Linux to ensure the binaries end up in the correct App directory -# as in the root CMake we force everything to be in game. This is necessary because on these platforms these are considered "libraries" -# and not runtime binaries like we configure in the root CMake. We don't globally set library outputs to avoid outputting eg. a files to -# our game directory. -if (UNIX) -get_target_property(GAME_LINK_LIBRARIES ${TORQUE_APP_NAME} LINK_LIBRARIES) -foreach (GAME_LINK_LIBRARY ${GAME_LINK_LIBRARIES}) - # For eg. OSX some links are not valid targets - for example frameworks provided by OS - if (TARGET ${GAME_LINK_LIBRARY}) - get_target_property(LINK_LIBRARY_TYPE ${GAME_LINK_LIBRARY} TYPE) - # Only pay attention to shared libraries and make them output to the app resources - if ("${LINK_LIBRARY_TYPE}" STREQUAL "SHARED_LIBRARY") - if (APPLE) - set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES - XCODE_ATTRIBUTE_INSTALL_PATH "@rpath") - else() - set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${TORQUE_APP_GAME_DIRECTORY}") - endif(APPLE) - endif() - endif() -endforeach() -endif (UNIX) \ No newline at end of file diff --git a/Engine/source/torqueMacosEngine.cmake b/Engine/source/torqueMacosEngine.cmake deleted file mode 100644 index 4ca95cd25..000000000 --- a/Engine/source/torqueMacosEngine.cmake +++ /dev/null @@ -1,283 +0,0 @@ - -set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} __MACOSX__) - -################# Collect Source Files ################### - -# Handle app -torqueAddSourceDirectories("app" "app/net") - -# Handle console -torqueAddSourceDirectories("console") -torqueAddSourceDirectories("console/torquescript") - -# Handle Platform -torqueAddSourceDirectories("platform" "platform/threads" "platform/async" - "platform/input" "platform/output") - -torqueAddSourceDirectories("platform/nativeDialogs") -# Handle T3D -torqueAddSourceDirectories("T3D/fps" "T3D/fx" "T3D/vehicles" "T3D/physics" - "T3D/decal" "T3D/sfx" "T3D/gameBase" "T3D/turret" - "T3D/lighting" "T3D/gameOBjects" "T3D/components" - "T3D/systems" "T3D/assets" "T3D" "T3D/gameBase/std") - -# Handle TS -torqueAddSourceDirectories("ts" "ts/collada" "ts/assimp" "ts/loader" "ts/arch") - -# Handle SFX - OpenAL is handled as a module later on -torqueAddSourceDirectories("sfx" "sfx/media" "sfx/null") -if(TORQUE_SFX_OPENAL AND NOT TORQUE_DEDICATED) - torqueAddSourceDirectories("sfx/openal") - torqueAddSourceDirectories("sfx/openal/mac") -endif() - -# Handle GFX -torqueAddSourceDirectories("gfx" "gfx/Null" "gfx/test" "gfx/bitmap" "gfx/bitmap/loaders" - "gfx/util" "gfx/video" "gfx/sim" ) - -if (TORQUE_OPENGL) - torqueAddSourceDirectories("gfx/gl" "gfx/gl/sdl" "gfx/gl/tGL") -endif (TORQUE_OPENGL) - -# Handle core -torqueAddSourceDirectories("core" "core/stream" "core/strings" "core/util" - "core/util/journal" "core/util/zip" "core/util/compressors") -# Handle GUI -torqueAddSourceDirectories("gui" "gui/buttons" "gui/containers" "gui/controls" "gui/core" - "gui/game" "gui/shiny" "gui/utility" "gui/3d") - -# Handle postFX -torqueAddSourceDirectories("postFx") - -# Handle Windowmanager -torqueAddSourceDirectories("windowManager" "windowManager/torque" "windowManager/sdl") - -# Handle scene -torqueAddSourceDirectories("scene" "scene/culling" "scene/zones" "scene/mixin") - -# Handle math -torqueAddSourceDirectories("math" "math/util") - -# Handle persistence -torqueAddSourceDirectories("persistence/taml" "persistence/taml/binary" "persistence/taml/xml") - -# Handle Cinterface -torqueAddSourceDirectories("cinterface") - -# Handle util -torqueAddSourceDirectories("util" "util/messaging") - -# Handle assets -torqueAddSourceDirectories("assets") - -# Handle Sim -torqueAddSourceDirectories("sim") - -# Handle module -torqueAddSourceDirectories("module") - -# Handle forest -torqueAddSourceDirectories("forest" "forest/ts") -if(TORQUE_OPENGL) - torqueAddSourceDirectories("forest" "forest/glsl") -endif(TORQUE_OPENGL) - -# Handle shadergen -torqueAddSourceDirectories("shaderGen") - -if (TORQUE_OPENGL) - torqueAddSourceDirectories("shaderGen/GLSL") -endif (TORQUE_OPENGL) - -# Handle terrain -torqueAddSourceDirectories("terrain") - -if (TORQUE_OPENGL) - torqueAddSourceDirectories("terrain/glsl") -endif (TORQUE_OPENGL) - -# Handle Materials -torqueAddSourceDirectories("materials") - -# Handle collision -torqueAddSourceDirectories("collision") - -# Handle lighting -torqueAddSourceDirectories("lighting" "lighting/common" - "lighting/shadowMap") - -if (TORQUE_ADVANCED_LIGHTING) - torqueAddSourceDirectories("lighting/advanced") - if (TORQUE_OPENGL) - torqueAddSourceDirectories("lighting/advanced/glsl") - endif (TORQUE_OPENGL) -endif (TORQUE_ADVANCED_LIGHTING) - -if (TORQUE_BASIC_LIGHTING) - torqueAddSourceDirectories("lighting/basic" "lighting/basic/shadowMap") -endif (TORQUE_BASIC_LIGHTING) - -# Handle environment -torqueAddSourceDirectories("environment") - -# Handle renderInstance -torqueAddSourceDirectories("renderInstance") - -# Handle i18n -torqueAddSourceDirectories("i18n") - -# Handle posix -torqueAddSourceDirectories("platformPOSIX") -torqueAddSourceDirectories("platformMac") - -# Handle platformSDL -torqueAddSourceDirectories("platformSDL" "platformSDL/threads") - -if(TORQUE_TESTING) - torqueAddSourceDirectories("testing") - set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} TORQUE_SHARED SDL_MAIN_HANDLED) -endif(TORQUE_TESTING) - -# Add the collected files to our engine group -source_group(TREE "${CMAKE_SOURCE_DIR}/Engine/source" PREFIX "Engine" FILES ${TORQUE_SOURCE_FILES}) -file(GLOB_RECURSE TORQUE_APP_GAME_SOURCES "${TORQUE_APP_ROOT_DIRECTORY}/source/*.cpp" "${TORQUE_APP_ROOT_DIRECTORY}/source/*.h") -source_group(TREE "${TORQUE_APP_ROOT_DIRECTORY}/source" PREFIX "Source Files" FILES ${TORQUE_APP_GAME_SOURCES}) -set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} "${TORQUE_APP_ROOT_DIRECTORY}/source") - -################# Engine Module Handling ################### - -set(TORQUE_MODULE_PATHS "${CMAKE_SOURCE_DIR}/Tools/CMake/modules" "${TORQUE_APP_GAME_DIRECTORY}/data") -if (NOT "${TORQUE_MODULE_USER_PATH}" STREQUAL "") - list(APPEND TORQUE_MODULE_PATHS "${TORQUE_MODULE_USER_PATH}") -endif() - -# Before doing module scanning, store away the engine sources - we do this so that modules -# can be placed into the proper filters -set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES} ${TORQUE_APP_GAME_SOURCES}) -set(TORQUE_SOURCE_FILES "") - -foreach (TORQUE_MODULE_PATH ${TORQUE_MODULE_PATHS}) - # First find simple cmake scripts, mostly used for in-engine modules - file(GLOB MODULE_SCRIPTS "${TORQUE_MODULE_PATH}/*.cmake") - foreach (TORQUE_MODULE_SCRIPT ${MODULE_SCRIPTS}) - include(${TORQUE_MODULE_SCRIPT}) - - # Add this script's collected files to our Engine group - source_group(TREE "${CMAKE_SOURCE_DIR}/Engine" PREFIX "Engine" FILES ${TORQUE_SOURCE_FILES}) - - set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${TORQUE_SOURCE_FILES}) - set(TORQUE_SOURCE_FILES "") - endforeach() - - # Next find sub projects, these can introduce new source files - SUBDIRLIST(POSSIBLE_PROJECTS "${TORQUE_MODULE_PATH}") - foreach (POSSIBLE_PROJECT ${POSSIBLE_PROJECTS}) - # Retrieve the absolute path of this possible project - get_filename_component(POSSIBLE_PROJECT_ABSOLUTEPATH "${POSSIBLE_PROJECT}" - REALPATH BASE_DIR "${TORQUE_MODULE_PATH}") - - if (EXISTS "${POSSIBLE_PROJECT_ABSOLUTEPATH}/CMakeLists.txt") - add_subdirectory("${POSSIBLE_PROJECT_ABSOLUTEPATH}" ${CMAKE_BINARY_DIR}/temp/${POSSIBLE_PROJECT} EXCLUDE_FROM_ALL) - source_group(TREE "${POSSIBLE_PROJECT_ABSOLUTEPATH}" PREFIX "Modules/${POSSIBLE_PROJECT}" FILES ${TORQUE_SOURCE_FILES}) - - set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${TORQUE_SOURCE_FILES}) - set(TORQUE_SOURCE_FILES "") - elseif(NOT EXISTS "${POSSIBLE_PROJECT_ABSOLUTEPATH}/*.cmake") - file(GLOB_RECURSE MODULE_SOURCE "${POSSIBLE_PROJECT_ABSOLUTEPATH}/source/*.h" "${POSSIBLE_PROJECT_ABSOLUTEPATH}/source/*.cpp") - #message(STATUS "MODULE_SOURCE:${MODULE_SOURCE}") - source_group(TREE "${POSSIBLE_PROJECT_ABSOLUTEPATH}" PREFIX "Modules/${POSSIBLE_PROJECT}/" FILES ${MODULE_SOURCE}) - set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${MODULE_SOURCE}) - endif() - endforeach() -endforeach() - -set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES_TEMPORARY}) - -################# Library Post-build Handling ################### -set(TORQUE_LIBRARY_PATHS "${CMAKE_SOURCE_DIR}/Engine/lib" "${TORQUE_APP_GAME_DIRECTORY}/data") -if (NOT "${TORQUE_LIBRARY_USER_PATH}" STREQUAL "") - list(APPEND TORQUE_LIBRARY_PATHS "${TORQUE_LIBRARY_USER_PATH}") -endif() - -foreach (TORQUE_LIBRARY_PATH ${TORQUE_LIBRARY_PATHS}) - # First find simple cmake scripts, mostly used for in-engine libraries - file(GLOB_RECURSE LIBRARY_SCRIPTS "${TORQUE_LIBRARY_PATH}/*Torque_postBuild.cmake") - #message(STATUS "LIBRARY_SCRIPTS:${LIBRARY_SCRIPTS}") - foreach (TORQUE_LIBRARY_SCRIPT ${LIBRARY_SCRIPTS}) - include(${TORQUE_LIBRARY_SCRIPT}) - endforeach() -endforeach() -################# Dynamic File Configuration ################### - -set(MACOSX_RESOURCES "${CMAKE_SOURCE_DIR}/Tools/CMake/torque.icns" - "${TORQUE_APP_GAME_DIRECTORY}/data" - "${TORQUE_APP_GAME_DIRECTORY}/core" - "${TORQUE_APP_GAME_DIRECTORY}/tools" - "${TORQUE_APP_GAME_DIRECTORY}/main.${TORQUE_SCRIPT_EXTENSION}") - -set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_MAC_SOURCES} ${MACOSX_RESOURCES}) - -source_group("Resources" FILES ${MACOSX_RESOURCES}) - -set_source_files_properties(${MACOSX_RESOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") - -set(EXECUTABLE_NAME "${TORQUE_APP_NAME}") -configure_file("${CMAKE_SOURCE_DIR}/Tools/CMake/Info.plist.in" "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist" COPYONLY) - -addDef(TORQUE_DEBUG Debug) -addDef(TORQUE_RELEASE "RelWithDebInfo;Release") -addDef(TORQUE_ENABLE_ASSERTS "Debug;RelWithDebInfo") -addDef(TORQUE_DEBUG_GFX_MODE "RelWithDebInfo") -addDef(TORQUE_OGGVORBIS) - -if(NOT TORQUE_SDL) - filterOut("platform/nativeDialogs/fileDialog.cpp" ) -endif() -if(NOT TORQUE_OPENGL) - filterOut("platformSDL/sdlPlatformGL.cpp") -endif() -if (NOT TORQUE_NET_CURL) - filterOut("app/net/httpObject.h" "app/net/httpObject.cpp") -endif() - -add_executable(${TORQUE_APP_NAME} MACOSX_BUNDLE ${TORQUE_SOURCE_FILES}) -set_target_properties(${TORQUE_APP_NAME} PROPERTIES - BUNDLE true - MACOSX_BUNDLE_INFO_PLIST "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist" - XCODE_ATTRIBUTE_INSTALL_PATH "/Applications" - XCODE_ATTRIBUTE_SKIP_INSTALL "No" - MACOSX_RPATH TRUE) - - set_property(GLOBAL PROPERTY USE_FOLDERS ON) -foreach (TORQUE_LIBRARY ${TORQUE_LINK_LIBRARIES}) - set_target_properties(${TORQUE_LIBRARY} PROPERTIES - FOLDER "Libraries") -endforeach() - -target_compile_definitions(${TORQUE_APP_NAME} PUBLIC ${TORQUE_COMPILE_DEFINITIONS}) -target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_LIBRARIES} ${TORQUE_LINK_FRAMEWORKS}) - -target_link_options(${TORQUE_APP_NAME} PUBLIC ${TORQUE_LINK_OPTIONS}) -if (TORQUE_TARGET_PROPERTIES) - set_target_properties(${TORQUE_APP_NAME} PROPERTIES ${TORQUE_TARGET_PROPERTIES}) -endif (TORQUE_TARGET_PROPERTIES) -target_include_directories(${TORQUE_APP_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_BINARY_DIR}/temp" ${TORQUE_INCLUDE_DIRECTORIES}) - -append_defs() - -foreach (LIBRARY_BINARY ${TORQUE_ADDITIONAL_LIBRARY_BINARIES}) - add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/$(CONFIGURATION)") -endforeach() - -get_target_property(GAME_LINK_LIBRARIES ${TORQUE_APP_NAME} LINK_LIBRARIES) -foreach (GAME_LINK_LIBRARY ${GAME_LINK_LIBRARIES}) - if (TARGET ${GAME_LINK_LIBRARY}) - get_target_property(LINK_LIBRARY_TYPE ${GAME_LINK_LIBRARY} TYPE) - # Only pay attention to shared libraries and make them output to the app resources - if ("${LINK_LIBRARY_TYPE}" STREQUAL "SHARED_LIBRARY") - set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES - XCODE_ATTRIBUTE_INSTALL_PATH "@rpath") - endif() - endif() -endforeach() - diff --git a/Tools/CMake/platformconfigs/torqueMacosxconfig.cmake b/Tools/CMake/torqueMacOSconfigs.cmake similarity index 99% rename from Tools/CMake/platformconfigs/torqueMacosxconfig.cmake rename to Tools/CMake/torqueMacOSconfigs.cmake index 2d1c6e96c..0e583d0b4 100644 --- a/Tools/CMake/platformconfigs/torqueMacosxconfig.cmake +++ b/Tools/CMake/torqueMacOSconfigs.cmake @@ -1,3 +1,4 @@ +if(APPLE) #detect Architecture enable_language(OBJC) enable_language(OBJCXX) @@ -160,4 +161,4 @@ set(CMAKE_XCODE_ATTRIBUTE_LINKER_DISPLAYS_MANGLED_NAMES[variant=Debug] YES) set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Debug] YES) set(CMAKE_XCODE_ATTRIBUTE_ENABLE_TESTABILITY[variant=Debug] YES) -add_subdirectory(${TORQUE_ENGINE_DIRECTORY}) +endif(APPLE) \ No newline at end of file From be3d26d9e60dd9bc576fb128701ff645daf4d338 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Sun, 22 Oct 2023 00:47:14 +0100 Subject: [PATCH 17/18] SDL_FILESYSTEM -Set the base dir based on build type -enable only building active arch on debug --- CMakeLists.txt | 8 ++++---- Engine/source/CMakeLists.txt | 6 ++++++ Tools/CMake/Info.plist.in | 2 +- Tools/CMake/torqueMacOSconfigs.cmake | 1 - 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5de867942..0f1be940a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,10 +4,6 @@ set(CMAKE_CONFIGURATION_TYPES "Debug;RelWithDebInfo;Release" CACHE STRING "" FOR include("${CMAKE_SOURCE_DIR}/Tools/CMake/torque_macros.cmake") include("${CMAKE_SOURCE_DIR}/Tools/CMake/torque_configs.cmake") -file(GLOB OS_SCRIPTS "${CMAKE_SOURCE_DIR}/Tools/CMake/torque*configs.cmake") -foreach (TORQUE_OS_SCRIPT ${OS_SCRIPTS}) - include(${TORQUE_OS_SCRIPT}) -endforeach() # Ensure multi-core compilation is enabled for everything add_compile_options($<$:/MP>) @@ -74,4 +70,8 @@ endif(NOT TORQUE_INSTALLED_TEMPLATE) # Generate torqueConfig.h in our temp directory configure_file("${CMAKE_SOURCE_DIR}/Tools/CMake/torqueConfig.h.in" "${TORQUE_APP_ROOT_DIRECTORY}/source/torqueConfig.h") +if(APPLE) +include("${CMAKE_SOURCE_DIR}/Tools/CMake/torqueMacOSconfigs.cmake") +endif(APPLE) + add_subdirectory(Engine) diff --git a/Engine/source/CMakeLists.txt b/Engine/source/CMakeLists.txt index aad4df349..10d600012 100644 --- a/Engine/source/CMakeLists.txt +++ b/Engine/source/CMakeLists.txt @@ -366,6 +366,12 @@ if (APPLE) MACOSX_BUNDLE_INFO_PLIST "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist" XCODE_ATTRIBUTE_INSTALL_PATH "/Applications" XCODE_ATTRIBUTE_SKIP_INSTALL "No" + XCODE_ATTRIBUTE_LINKER_DISPLAYS_MANGLED_NAMES[variant=Debug] YES + XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Debug] YES + XCODE_ATTRIBUTE_ENABLE_TESTABILITY[variant=Debug] YES + XCODE_ATTRIBUTE_SDL_FILE_DIR[variant=Debug] parent + XCODE_ATTRIBUTE_SDL_FILE_DIR[variant=RelWithDebInfo] parent + XCODE_ATTRIBUTE_SDL_FILE_DIR[variant=Release] resource MACOSX_RPATH TRUE) elseif (WIN32) diff --git a/Tools/CMake/Info.plist.in b/Tools/CMake/Info.plist.in index 0c6657131..cfe6d5943 100644 --- a/Tools/CMake/Info.plist.in +++ b/Tools/CMake/Info.plist.in @@ -17,6 +17,6 @@ CFBundleVersion 1.0 SDL_FILESYSTEM_BASE_DIR_TYPE - resource + $(SDL_FILE_DIR) diff --git a/Tools/CMake/torqueMacOSconfigs.cmake b/Tools/CMake/torqueMacOSconfigs.cmake index 0e583d0b4..a0b3c42db 100644 --- a/Tools/CMake/torqueMacOSconfigs.cmake +++ b/Tools/CMake/torqueMacOSconfigs.cmake @@ -48,7 +48,6 @@ set(CMAKE_OSX_DEPLOYMENT_TARGET "11" CACHE STRING "" FORCE) set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "" FORCE) set(CMAKE_XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET[arch=arm64] "11.0" CACHE STRING "arm 64 minimum deployment target" FORCE) set(CMAKE_XCODE_ATTRIBUTE_SDKROOT macosx) -set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO") set(CMAKE_SYSTEM_NAME Darwin) set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) From dbb6359d80edd52db032198e9de8ae866845119d Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Sun, 22 Oct 2023 00:56:57 +0100 Subject: [PATCH 18/18] Update CMakeLists.txt add remaining torque requirements --- Engine/source/CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Engine/source/CMakeLists.txt b/Engine/source/CMakeLists.txt index 10d600012..b800d7981 100644 --- a/Engine/source/CMakeLists.txt +++ b/Engine/source/CMakeLists.txt @@ -313,7 +313,13 @@ if (APPLE) "${TORQUE_APP_GAME_DIRECTORY}/data" "${TORQUE_APP_GAME_DIRECTORY}/core" "${TORQUE_APP_GAME_DIRECTORY}/tools" - "${TORQUE_APP_GAME_DIRECTORY}/main.${TORQUE_SCRIPT_EXTENSION}") + "${TORQUE_APP_GAME_DIRECTORY}/main.${TORQUE_SCRIPT_EXTENSION}" + "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.torsion" + "${TORQUE_APP_GAME_DIRECTORY}/Template.torsion.exports") + + if(TORQUE_TESTING) + set(MACOSX_RESOURCES ${MACOSX_RESOURCES} "${TORQUE_APP_GAME_DIRECTORY}/runTests.${TORQUE_SCRIPT_EXTENSION}") + endif() set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_MAC_SOURCES} ${MACOSX_RESOURCES})