From acf31770212aa124ce72094183e471bccf244886 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Sat, 21 Oct 2023 07:08:12 +0100 Subject: [PATCH] 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