# ----------------------------------------------------------------------------- # Copyright (c) 2014 GarageGames, LLC # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # ----------------------------------------------------------------------------- project(${TORQUE_APP_NAME}) if(UNIX) if(NOT CXX_FLAG32) set(CXX_FLAG32 "") endif() #set(CXX_FLAG32 "-m32") #uncomment for build x32 on OSx64 if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_FLAG32} -Wundef -pipe -Wfatal-errors -Wno-return-type-c-linkage -Wno-unused-local-typedef ${TORQUE_ADDITIONAL_LINKER_FLAGS}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CXX_FLAG32} -Wundef -pipe -Wfatal-errors -Wno-return-type-c-linkage -Wno-unused-local-typedef ${TORQUE_ADDITIONAL_LINKER_FLAGS}") # Only use SSE on x86 devices if (TORQUE_CPU_X32 OR TORQUE_CPU_X64) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse") endif() else() # default compiler flags set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_FLAG32} -Wundef -pipe -Wfatal-errors -no-pie ${TORQUE_ADDITIONAL_LINKER_FLAGS} -Wl,-rpath,'$ORIGIN'") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CXX_FLAG32} -Wundef -pipe -Wfatal-errors ${TORQUE_ADDITIONAL_LINKER_FLAGS} -Wl,-rpath,'$ORIGIN'") # Only use SSE on x86 devices if (TORQUE_CPU_X32 OR TORQUE_CPU_X64) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse") endif() endif() endif() ############################################################################### # modules ############################################################################### option(TORQUE_SFX_VORBIS "Vorbis Sound" ON) mark_as_advanced(TORQUE_SFX_VORBIS) option(TORQUE_THEORA "Theora Video Support" ON) mark_as_advanced(TORQUE_THEORA) option(TORQUE_ADVANCED_LIGHTING "Advanced Lighting" ON) mark_as_advanced(TORQUE_ADVANCED_LIGHTING) option(TORQUE_BASIC_LIGHTING "Basic Lighting" ON) mark_as_advanced(TORQUE_BASIC_LIGHTING) # option(TORQUE_SFX_DirectX "DirectX Sound" OFF) # mark_as_advanced(TORQUE_SFX_DirectX) option(TORQUE_SFX_OPENAL "OpenAL Sound" ON) mark_as_advanced(TORQUE_APP_PASSWORD) set(TORQUE_APP_PASSWORD "changeme" CACHE STRING "zip file password") #windows uses openal-soft if(WIN32) #disable a few things that are not required set(ALSOFT_TESTS OFF CACHE BOOL "Build and install test programs" FORCE) set(ALSOFT_UTILS OFF CACHE BOOL "Build and install utility programs" FORCE) set(ALSOFT_EXAMPLES OFF CACHE BOOL "Build and install example programs" FORCE) set(ALSOFT_INSTALL_CONFIG OFF CACHE BOOL "Install alsoft.conf sample configuration file" FORCE) set(ALSOFT_INSTALL OFF CACHE BOOL "Install headers and libraries" FORCE) set(ALSOFT_NO_CONFIG_UTIL OFF CACHE BOOL "Disable building the alsoft-config utility" FORCE) set(ALSOFT_INSTALL_HRTF_DATA OFF CACHE BOOL "Install HRTF definition files" FORCE) set(ALSOFT_INSTALL_AMBDEC_PRESETS OFF CACHE BOOL "Install AmbDec presets" FORCE) set(ALSOFT_EMBED_HRTF_DATA OFF CACHE BOOL "Embed the HRTF data (increases library footprint)" FORCE) add_subdirectory( ${libDir}/openal-soft ${CMAKE_CURRENT_BINARY_DIR}/openal-soft) endif() if(TORQUE_SFX_OPENAL) #Hide some unnecessary fields as advanced mark_as_advanced(ALSOFT_INSTALL_AMBDEC_PRESETS) mark_as_advanced(ALSOFT_BACKEND_DSOUND) mark_as_advanced(ALSOFT_BACKEND_MMDEVAPI) mark_as_advanced(ALSOFT_BACKEND_WAVE) mark_as_advanced(ALSOFT_BACKEND_WINMM) mark_as_advanced(ALSOFT_INSTALL_CONFIG) mark_as_advanced(ALSOFT_CPUEXT_SSE) mark_as_advanced(ALSOFT_CPUEXT_SSE2) mark_as_advanced(ALSOFT_CPUEXT_SSE3) mark_as_advanced(ALSOFT_CPUEXT_SSE4_1) mark_as_advanced(ALSOFT_DLOPEN) mark_as_advanced(ALSOFT_EMBED_HRTF_DATA) mark_as_advanced(ALSOFT_EXAMPLES) mark_as_advanced(ALSOFT_INSTALL_HRTF_DATA) mark_as_advanced(ALSOFT_INSTALL) mark_as_advanced(ALSOFT_NO_CONFIG_UTIL) mark_as_advanced(ALSOFT_NO_UID_DEFS) mark_as_advanced(ALSOFT_REQUIRE_ALSA) mark_as_advanced(ALSOFT_REQUIRE_COREAUDIO) mark_as_advanced(ALSOFT_REQUIRE_DSOUND) mark_as_advanced(ALSOFT_REQUIRE_JACK) mark_as_advanced(ALSOFT_REQUIRE_MMDEVAPI) mark_as_advanced(ALSOFT_REQUIRE_NEON) mark_as_advanced(ALSOFT_REQUIRE_OPENSL) mark_as_advanced(ALSOFT_REQUIRE_OSS) mark_as_advanced(ALSOFT_REQUIRE_PORTAUDIO) mark_as_advanced(ALSOFT_REQUIRE_PULSEAUDIO) mark_as_advanced(ALSOFT_REQUIRE_QSA) mark_as_advanced(ALSOFT_REQUIRE_SNDIO) mark_as_advanced(ALSOFT_REQUIRE_SOLARIS) mark_as_advanced(ALSOFT_REQUIRE_SSE) mark_as_advanced(ALSOFT_REQUIRE_SSE2) mark_as_advanced(ALSOFT_REQUIRE_SSE4_1) mark_as_advanced(ALSOFT_REQUIRE_WINMM) mark_as_advanced(ALSOFT_TESTS) mark_as_advanced(ALSOFT_UTILS) mark_as_advanced(ALSOFT_WERROR) mark_as_advanced(COREAUDIO_FRAMEWORK) mark_as_advanced(CMAKE_DEBUG_POSTFIX) mark_as_advanced(FORCE_STATIC_VCRT) mark_as_advanced(ALSOFT_BACKEND_WASAPI) mark_as_advanced(ALSOFT_BUILD_ROUTER) mark_as_advanced(ALSOFT_REQUIRE_SDL2) mark_as_advanced(ALSOFT_REQUIRE_WASAPI) #the following is from openal-soft mark_as_advanced(SDL2MAIN_LIBRARY) mark_as_advanced(SDL2_CORE_LIBRARY) mark_as_advanced(SDL2_INCLUDE_DIR) endif() mark_as_advanced(TORQUE_SFX_OPENAL) option(TORQUE_HIFI "HIFI? support" OFF) mark_as_advanced(TORQUE_HIFI) option(TORQUE_EXTENDED_MOVE "Extended move support" OFF) mark_as_advanced(TORQUE_EXTENDED_MOVE) set(TORQUE_SDL ON) # we need sdl to do our platform interop if(WIN32) option(TORQUE_OPENGL "Allow OpenGL render" ON) #mark_as_advanced(TORQUE_OPENGL) else() set(TORQUE_OPENGL ON) # we need OpenGL to render on Linux/Mac endif() if(WIN32) option(TORQUE_D3D11 "Allow Direct3D 11 render" ON) addDef(TORQUE_D3D11) endif() option(TORQUE_DEDICATED "Torque dedicated" OFF) mark_as_advanced(TORQUE_DEDICATED) ############################################################################### # options ############################################################################### option(TORQUE_SECURE_VFS "Secure VFS configuration. Arbitrary script access to file system will be heavily restricted." OFF) mark_as_advanced(TORQUE_SECURE_VFS) option(TORQUE_MULTITHREAD "Multi Threading" ON) mark_as_advanced(TORQUE_MULTITHREAD) option(TORQUE_POSIX_PATH_CASE_INSENSITIVE "POSIX Pathing Case Insensitivity" ON) mark_as_advanced(TORQUE_POSIX_PATH_CASE_INSENSITIVE) option(TORQUE_ZIP_PATH_CASE_INSENSITIVE "ZIP Pathing Case Insensitivity" ON) mark_as_advanced(TORQUE_ZIP_PATH_CASE_INSENSITIVE) option(TORQUE_DISABLE_MEMORY_MANAGER "Disable memory manager" ON) mark_as_advanced(TORQUE_DISABLE_MEMORY_MANAGER) option(TORQUE_DISABLE_VIRTUAL_MOUNT_SYSTEM "Disable virtual mount system" OFF) mark_as_advanced(TORQUE_DISABLE_VIRTUAL_MOUNT_SYSTEM) option(TORQUE_DISABLE_FIND_ROOT_WITHIN_ZIP "Disable reading root path from zip. Zips will be mounted in-place with file name as directory name." ON) mark_as_advanced(TORQUE_DISABLE_FIND_ROOT_WITHIN_ZIP) option(TORQUE_ZIP_DISK_LAYOUT "All zips must be placed in the executable directory and contain full paths to the files." OFF) mark_as_advanced(TORQUE_ZIP_DISK_LAYOUT) option(TORQUE_PLAYER "Playback only?" OFF) mark_as_advanced(TORQUE_PLAYER) option(TORQUE_TOOLS "Enable or disable the tools" ON) mark_as_advanced(TORQUE_TOOLS) option(TORQUE_ENABLE_PROFILER "Enable or disable the profiler" OFF) mark_as_advanced(TORQUE_ENABLE_PROFILER) option(TORQUE_DEBUG "T3D Debug mode" OFF) mark_as_advanced(TORQUE_DEBUG) option(TORQUE_SHIPPING "T3D Shipping build?" OFF) mark_as_advanced(TORQUE_SHIPPING) option(TORQUE_DEBUG_NET "debug network" OFF) mark_as_advanced(TORQUE_DEBUG_NET) option(TORQUE_DEBUG_NET_MOVES "debug network moves" OFF) mark_as_advanced(TORQUE_DEBUG_NET_MOVES) option(TORQUE_ENABLE_ASSERTS "enables or disable asserts" OFF) mark_as_advanced(TORQUE_ENABLE_ASSERTS) option(TORQUE_DEBUG_GFX_MODE "triggers graphics debug mode" OFF) mark_as_advanced(TORQUE_DEBUG_GFX_MODE) #option(DEBUG_SPEW "more debug" OFF) set(TORQUE_NO_DSO_GENERATION ON) if(NOT TORQUE_SCRIPT_EXTENSION) set(TORQUE_SCRIPT_EXTENSION "tscript" CACHE STRING "The default script extension to use for TorqueScript files") endif() mark_as_advanced(TORQUE_SCRIPT_EXTENSION) option(TORQUE_USE_ZENITY "use the Zenity backend for NFD" OFF) mark_as_advanced(TORQUE_USE_ZENITY) option(TORQUE_SHOW_LEGACY_FILE_FIELDS "If on, shows legacy direct file path fields in the inspector." OFF) mark_as_advanced(TORQUE_SHOW_LEGACY_FILE_FIELDS) if(WIN32) # warning C4800: 'XXX' : forcing value to bool 'true' or 'false' (performance warning) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd4800") # warning C4018: '<' : signed/unsigned mismatch set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd4018") # warning C4244: 'initializing' : conversion from 'XXX' to 'XXX', possible loss of data set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd4244") if(TORQUE_SFX_DirectX) if( TORQUE_CPU_X64 ) link_directories($ENV{DXSDK_DIR}/Lib/x64) else() link_directories($ENV{DXSDK_DIR}/Lib/x86) endif() endif() endif() ############################################################################### # Always enabled paths first ############################################################################### addPath("${srcDir}/") # must come first :) addPath("${srcDir}/app") addPath("${srcDir}/sfx/media") addPath("${srcDir}/sfx/null") addPath("${srcDir}/sfx") addPath("${srcDir}/console") addPath("${srcDir}/console/test") addPath("${srcDir}/core") addPath("${srcDir}/core/stream") addPath("${srcDir}/core/strings") addPath("${srcDir}/core/util") addPath("${srcDir}/core/util/test") addPath("${srcDir}/core/util/journal") addPath("${srcDir}/core/util/journal/test") addPath("${srcDir}/core/util/zip") addPath("${srcDir}/core/util/zip/test") addPath("${srcDir}/core/util/zip/compressors") addPath("${srcDir}/i18n") addPath("${srcDir}/sim") addPath("${srcDir}/util") addPath("${srcDir}/windowManager") addPath("${srcDir}/windowManager/torque") addPath("${srcDir}/windowManager/test") addPath("${srcDir}/math") addPath("${srcDir}/math/util") addPath("${srcDir}/math/test") addPath("${srcDir}/platform") if(NOT TORQUE_SDL) set(BLACKLIST "fileDialog.cpp" ) endif() addPath("${srcDir}/platform/nativeDialogs") set(BLACKLIST "" ) addPath("${srcDir}/cinterface") if( NOT TORQUE_DEDICATED ) addPath("${srcDir}/platform/menus") endif() addPath("${srcDir}/platform/test") addPath("${srcDir}/platform/threads") addPath("${srcDir}/platform/threads/test") addPath("${srcDir}/platform/async") addPath("${srcDir}/platform/async/test") addPath("${srcDir}/platform/input") addPath("${srcDir}/platform/output") addPath("${srcDir}/app") if (NOT TORQUE_NET_CURL) set(BLACKLIST "httpObject.h" "httpObject.cpp" ) endif() addPath("${srcDir}/app/net") set(BLACKLIST "") addPath("${srcDir}/util/messaging") addPath("${srcDir}/gfx/Null") addPath("${srcDir}/gfx/test") addPath("${srcDir}/gfx/bitmap") addPath("${srcDir}/gfx/bitmap/loaders") addPath("${srcDir}/gfx/util") addPath("${srcDir}/gfx/video") addPath("${srcDir}/gfx") addPath("${srcDir}/shaderGen") addPath("${srcDir}/gfx/sim") addPath("${srcDir}/gui/buttons") addPath("${srcDir}/gui/containers") addPath("${srcDir}/gui/controls") addPath("${srcDir}/gui/core") addPath("${srcDir}/gui/game") addPath("${srcDir}/gui/shiny") addPath("${srcDir}/gui/utility") addPath("${srcDir}/gui") addPath("${srcDir}/collision") addPath("${srcDir}/materials") addPath("${srcDir}/lighting") addPath("${srcDir}/lighting/common") addPath("${srcDir}/renderInstance") addPath("${srcDir}/renderInstance/debug") addPath("${srcDir}/scene") addPath("${srcDir}/scene/culling") addPath("${srcDir}/scene/zones") addPath("${srcDir}/scene/mixin") addPath("${srcDir}/shaderGen") addPath("${srcDir}/terrain") addPath("${srcDir}/environment") addPath("${srcDir}/forest") addPath("${srcDir}/forest/ts") addPath("${srcDir}/ts") addPath("${srcDir}/ts/arch") addPath("${srcDir}/physics") addPath("${srcDir}/gui/3d") addPath("${srcDir}/postFx") addPath("${srcDir}/T3D") set(BLACKLIST "" ) addPath("${srcDir}/T3D/examples") addPath("${srcDir}/T3D/fps") addPath("${srcDir}/T3D/fx") addPath("${srcDir}/T3D/vehicles") addPath("${srcDir}/T3D/physics") addPath("${srcDir}/T3D/decal") addPath("${srcDir}/T3D/sfx") addPath("${srcDir}/T3D/gameBase") addPath("${srcDir}/T3D/turret") addPath("${srcDir}/T3D/lighting") addPath("${srcDir}/T3D/gameObjects") addPathRec("${srcDir}/T3D/components/") addPathRec("${srcDir}/T3D/systems") addPath("${srcDir}/main/") addPath("${srcDir}/assets") addPath("${srcDir}/module") addPathRec("${srcDir}/T3D/assets") addPathRec("${srcDir}/persistence") addPathRec("${srcDir}/ts/collada") addPathRec("${srcDir}/ts/assimp") addPathRec("${srcDir}/ts/loader") addPathRec("${projectSrcDir}") # Load module-based files if(EXISTS ${TORQUE_APP_DIR}/game/data) message("Reading modules in ${TORQUE_APP_DIR}/game/data path...") subDirCmake(MODULEDIRS ${TORQUE_APP_DIR}/game/data) foreach(modDir ${MODULEDIRS}) addInclude("${modDir}/source") addPathRec("${modDir}/source") file(GLOB modules "${modDir}/lib/*.cmake") foreach(module ${modules}) set(moduleLibDir "${modDir}/lib") include(${module}) endforeach() endforeach() endif() if(EXISTS ${TORQUE_APP_DIR}/game/tools) message("Reading modules in ${TORQUE_APP_DIR}/game/tools path...") addInclude("${TORQUE_APP_DIR}/game/tools") addPathRec("${TORQUE_APP_DIR}/game/tools") endif() ############################################################################### # modular paths ############################################################################### # lighting if(TORQUE_ADVANCED_LIGHTING) addPath("${srcDir}/lighting/advanced") addPathRec("${srcDir}/lighting/shadowMap") if(WIN32) addPathRec("${srcDir}/lighting/advanced/hlsl") endif() if(TORQUE_OPENGL) addPathRec("${srcDir}/lighting/advanced/glsl") endif() addDef(TORQUE_ADVANCED_LIGHTING) endif() if(TORQUE_BASIC_LIGHTING) addPathRec("${srcDir}/lighting/basic") addPathRec("${srcDir}/lighting/shadowMap") addDef(TORQUE_BASIC_LIGHTING) endif() # DirectX Sound if(TORQUE_SFX_DirectX) addLib(x3daudio.lib) addPathRec("${srcDir}/sfx/dsound") addPathRec("${srcDir}/sfx/xaudio") endif() # OpenAL if(TORQUE_SFX_OPENAL AND NOT TORQUE_DEDICATED) addPath("${srcDir}/sfx/openal") if(WIN32) option(AL_ALEXT_PROTOTYPES "Use Extended OpenAL options" ON) addPath("${srcDir}/sfx/openal/win32") addInclude("${libDir}/openal-soft/include") endif() if(UNIX AND NOT APPLE) option(AL_ALEXT_PROTOTYPES "Use Extended OpenAL options" ON) addPath("${srcDir}/sfx/openal/linux") endif() if(APPLE) option(AL_ALEXT_PROTOTYPES "Use Extended OpenAL options" OFF) addPath("${srcDir}/sfx/openal/mac") addFramework("OpenAL") endif() endif() mark_as_advanced(AL_ALEXT_PROTOTYPES) if(AL_ALEXT_PROTOTYPES) addDef( "AL_ALEXT_PROTOTYPES" ) endif() # Vorbis if(TORQUE_SFX_VORBIS) addInclude(${libDir}/libvorbis/include) addDef(TORQUE_OGGVORBIS) addLib(libvorbis) addLib(libogg) endif() # Theora if(TORQUE_THEORA) addPath("${srcDir}/core/ogg") addPath("${srcDir}/gfx/video") addPath("${srcDir}/gui/theora") addDef(TORQUE_OGGTHEORA) addDef(TORQUE_OGGVORIBS) addInclude(${libDir}/libtheora/include) addLib(libtheora) endif() # Include tools for non-tool builds (or define player if a tool build) if(TORQUE_TOOLS) addPath("${srcDir}/gui/worldEditor") addPath("${srcDir}/gui/worldEditor/tools") addPath("${srcDir}/environment/editors") addPath("${srcDir}/forest/editor") addPath("${srcDir}/gui/editor") addPath("${srcDir}/gui/editor/inspector") set(BLACKLIST "" ) endif() if(TORQUE_HIFI) addPath("${srcDir}/T3D/gameBase/hifi") addDef(TORQUE_HIFI_NET) endif() if(TORQUE_EXTENDED_MOVE) addPath("${srcDir}/T3D/gameBase/extended") addDef(TORQUE_EXTENDED_MOVE) else() addPath("${srcDir}/T3D/gameBase/std") endif() if(TORQUE_SDL) addPathRec("${srcDir}/windowManager/sdl") if(NOT TORQUE_OPENGL) set(BLACKLIST "sdlPlatformGL.cpp") endif() addPathRec("${srcDir}/platformSDL") set(BLACKLIST "") if(TORQUE_OPENGL) addPathRec("${srcDir}/gfx/gl/sdl") endif() if(UNIX AND NOT APPLE) #set(CMAKE_SIZEOF_VOID_P 4) #force 32 bit set(ENV{CFLAGS} "${CXX_FLAG32} -g -O3") if("${TORQUE_ADDITIONAL_LINKER_FLAGS}" STREQUAL "") set(ENV{LDFLAGS} "${CXX_FLAG32}") else() set(ENV{LDFLAGS} "${CXX_FLAG32} ${TORQUE_ADDITIONAL_LINKER_FLAGS}") endif() find_package(PkgConfig REQUIRED) pkg_check_modules(GTK3 REQUIRED gtk+-3.0) # Setup CMake to use GTK+, tell the compiler where to look for headers # and to the linker where to look for libraries include_directories(${GTK3_INCLUDE_DIRS}) link_directories(${GTK3_LIBRARY_DIRS}) # Add other flags to the compiler add_definitions(${GTK3_CFLAGS_OTHER}) if(TORQUE_USE_ZENITY) set(BLACKLIST "nfd_win.cpp" "nfd_cocoa.m" "nfd_gtk.c" ) else() set(BLACKLIST "nfd_win.cpp" "nfd_cocoa.m" "simple_exec.h" "nfd_zenity.c") endif() addLib(nativeFileDialogs) set(BLACKLIST "" ) target_link_libraries(nativeFileDialogs ${GTK3_LIBRARIES}) elseif(APPLE) set(BLACKLIST "nfd_gtk.c" "nfd_win.cpp" ) addLib(nativeFileDialogs) set(BLACKLIST "" ) else() set(BLACKLIST "nfd_gtk.c" "nfd_cocoa.m" "simple_exec.h" "nfd_zenity.c") addLib(nativeFileDialogs) set(BLACKLIST "" ) addLib(comctl32) endif() #override and hide SDL2 cache variables #set apple to sue sdl static lib, other platforms use dynamic if(APPLE) set(SDL_SHARED OFF CACHE BOOL "Build a shared version of the library" FORCE) set(SDL_STATIC ON CACHE BOOL "Build a static version of the library" FORCE) else() set(SDL_SHARED ON CACHE BOOL "Build a shared version of the library" FORCE) set(SDL_STATIC OFF CACHE BOOL "Build a static version of the library" FORCE) endif() add_subdirectory( ${libDir}/sdl ${CMAKE_CURRENT_BINARY_DIR}/sdl2 EXCLUDE_FROM_ALL) link_directories( ${libDir}/sdl ${CMAKE_CURRENT_BINARY_DIR}/sdl2) endif() if(TORQUE_DEDICATED) addDef(TORQUE_DEDICATED) endif() #modules dir file(GLOB modules "modules/*.cmake") foreach(module ${modules}) include(${module}) endforeach() ############################################################################### # platform specific things ############################################################################### if(WIN32) addPath("${srcDir}/platformWin32") if(TORQUE_SDL) set(BLACKLIST "fileDialog.cpp" ) endif() addPath("${srcDir}/platformWin32/nativeDialogs") set(BLACKLIST "" ) addPath("${srcDir}/platformWin32/menus") if(NOT TORQUE_SDL) addPath("${srcDir}/platformWin32/threads") endif() addPath("${srcDir}/platformWin32/videoInfo") addPath("${srcDir}/platformWin32/minidump") addPath("${srcDir}/windowManager/win32") if(TORQUE_D3D11) addPath("${srcDir}/gfx/D3D11") endif() addPath("${srcDir}/shaderGen/HLSL") addPath("${srcDir}/terrain/hlsl") addPath("${srcDir}/forest/hlsl") # add windows rc file for the icon addFile("${projectSrcDir}/torque.rc") endif() if(APPLE) addPath("${srcDir}/platformMac") addPath("${srcDir}/platformPOSIX") endif() if (UNIX AND NOT APPLE) addPath("${srcDir}/platformX11") endif() if(UNIX AND NOT APPLE) # linux_dedicated if(TORQUE_DEDICATED) addPath("${srcDir}/windowManager/dedicated") # ${srcDir}/UNIX/*.client.* files are not needed # @todo: move to separate file file( GLOB tmp_files ${srcDir}/platformX86UNIX/*.cpp ${srcDir}/platformX86UNIX/*.c ${srcDir}/platformX86UNIX/*.cc ${srcDir}/platformX86UNIX/*.h ) file( GLOB tmp_remove_files ${srcDir}/platformX86UNIX/*client.* ) LIST( REMOVE_ITEM tmp_files ${tmp_remove_files} ) foreach( f ${tmp_files} ) addFile( ${f} ) endforeach() else() addPath("${srcDir}/platformX86UNIX") addPath("${srcDir}/platformX86UNIX/nativeDialogs") endif() # linux addPath("${srcDir}/platformPOSIX") endif() if( TORQUE_OPENGL ) addPath("${srcDir}/shaderGen/GLSL") if( TORQUE_OPENGL AND NOT TORQUE_DEDICATED ) addPath("${srcDir}/gfx/gl") addPath("${srcDir}/gfx/gl/tGL") addPath("${srcDir}/shaderGen/GLSL") addPath("${srcDir}/terrain/glsl") addPath("${srcDir}/forest/glsl") endif() if(WIN32 AND NOT TORQUE_SDL) addPath("${srcDir}/gfx/gl/win32") endif() endif() ############################################################################### ############################################################################### finishExecutable() ############################################################################### ############################################################################### # Set Visual Studio startup project if(MSVC) set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${TORQUE_APP_NAME}) endif() message(STATUS "writing ${projectSrcDir}/torqueConfig.h") CONFIGURE_FILE("${cmakeDir}/torqueConfig.h.in" "${projectSrcDir}/torqueConfig.h") # configure the relevant files only once if(APPLE) #icon if(NOT EXISTS "${projectSrcDir}/torque.icns") CONFIGURE_FILE("${cmakeDir}/torque.icns" "${projectSrcDir}/torque.icns" COPYONLY) endif() #plist if(NOT EXISTS "${projectSrcDir}/Info.plist") CONFIGURE_FILE("${cmakeDir}/Info.plist.in" "${projectSrcDir}/Info.plist" COPYONLY) endif() #target properties for mac set_target_properties("${PROJECT_NAME}" PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${projectSrcDir}/Info.plist") else() if(NOT EXISTS "${projectSrcDir}/torque.ico") CONFIGURE_FILE("${cmakeDir}/torque.ico" "${projectSrcDir}/torque.ico" COPYONLY) endif() endif() if(NOT EXISTS "${projectOutDir}/${PROJECT_NAME}.torsion") CONFIGURE_FILE("${cmakeDir}/template.torsion.in" "${projectOutDir}/${PROJECT_NAME}.torsion") endif() if(EXISTS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/main.tscript.in") CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/main.tscript.in" "${projectOutDir}/main.${TORQUE_SCRIPT_EXTENSION}") else() if(EXISTS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/main.${TORQUE_SCRIPT_EXTENSION}.in") CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/main.${TORQUE_SCRIPT_EXTENSION}.in" "${projectOutDir}/main.${TORQUE_SCRIPT_EXTENSION}") endif() endif() if(WIN32) if(NOT EXISTS "${projectSrcDir}/torque.rc") CONFIGURE_FILE("${cmakeDir}/torque-win.rc.in" "${projectSrcDir}/torque.rc") endif() if(NOT EXISTS "${projectOutDir}/${PROJECT_NAME}-debug.bat") CONFIGURE_FILE("${cmakeDir}/app-debug-win.bat.in" "${projectOutDir}/${PROJECT_NAME}-debug.bat") endif() if(NOT EXISTS "${projectOutDir}/cleanup.bat") CONFIGURE_FILE("${cmakeDir}/cleanup-win.bat.in" "${projectOutDir}/cleanup.bat") endif() endif() ############################################################################### # Common Libraries ############################################################################### addLib(lpng) addLib(ljpeg) addLib(zlib) addLib(tinyxml) addLib(opcode) addLib(squish) addLib(collada) addLib(pcre) addLib(convexDecomp) if (TORQUE_OPENGL) addLib(glad) endif() addLib(assimp) if(WIN32) # copy pasted from T3D build system, some might not be needed set(TORQUE_EXTERNAL_LIBS "COMCTL32.LIB;COMDLG32.LIB;USER32.LIB;ADVAPI32.LIB;GDI32.LIB;WINMM.LIB;WS2_32.LIB;vfw32.lib;Imm32.lib;ole32.lib;shell32.lib;oleaut32.lib;version.lib" CACHE STRING "external libs to link against") mark_as_advanced(TORQUE_EXTERNAL_LIBS) addLib("${TORQUE_EXTERNAL_LIBS}") if(TORQUE_OPENGL) addLib(OpenGL32.lib) endif() endif() if (APPLE) addFramework("Cocoa") addFramework("OpenGL") #These are needed by sdl2 static lib addFramework("CoreAudio") addFramework("AudioUnit") addFramework("ForceFeedback") addFramework("IOKit") addFramework("CoreVideo") #grrr damn you sdl! addFramework("Carbon") addFramework("AudioToolbox") addLib("iconv") endif() #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.9") 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) endif() if(UNIX AND NOT APPLE) # copy pasted from T3D build system, some might not be needed set(TORQUE_EXTERNAL_LIBS "dl Xxf86vm Xext X11 Xft stdc++ pthread GL" CACHE STRING "external libs to link against") mark_as_advanced(TORQUE_EXTERNAL_LIBS) string(REPLACE " " ";" TORQUE_EXTERNAL_LIBS_LIST ${TORQUE_EXTERNAL_LIBS}) addLib( "${TORQUE_EXTERNAL_LIBS_LIST}" ) endif() ############################################################################### # Always enabled Definitions ############################################################################### addDef(TORQUE_DEBUG Debug) addDef(TORQUE_RELEASE "RelWithDebInfo;Release") addDef(TORQUE_ENABLE_ASSERTS "Debug;RelWithDebInfo") addDef(TORQUE_DEBUG_GFX_MODE "RelWithDebInfo") addDef(TORQUE_SHADERGEN) addDef(INITGUID) addDef(NTORQUE_SHARED) addDef(UNICODE) addDef(_UNICODE) # for VS addDef(TORQUE_UNICODE) #addDef(TORQUE_SHARED) # not used anymore as the game is the executable directly addDef(LTC_NO_PROTOTYPES) # for libTomCrypt addDef(BAN_OPCODE_AUTOLINK) addDef(ICE_NO_DLL) addDef(TORQUE_OPCODE) addDef(TORQUE_COLLADA) addDef(TORQUE_ASSIMP) addDef(DOM_INCLUDE_TINYXML) addDef(PCRE_STATIC) addDef(_CRT_SECURE_NO_WARNINGS) addDef(_CRT_SECURE_NO_DEPRECATE) if(UNIX AND NOT APPLE) addDef(LINUX) endif() if(TORQUE_OPENGL) addDef(TORQUE_OPENGL) endif() if(TORQUE_SDL) addDef(TORQUE_SDL) addInclude(${libDir}/sdl/include) if(APPLE) addLib(SDL2main) addLib(SDL2-static) add_dependencies(${TORQUE_APP_NAME} SDL2main SDL2-static) else() addLib(SDL2) endif() SET(SDL_WAYLAND OFF CACHE BOOL "" FORCE) mark_as_advanced(SDL_3DNOW) mark_as_advanced(SDL_ALSA) mark_as_advanced(SDL_ALTIVEC) mark_as_advanced(SDL_ARTS) mark_as_advanced(SDL_ASSEMBLY) mark_as_advanced(SDL_ASSERTIONS) mark_as_advanced(SDL_DIRECTX) mark_as_advanced(SDL_DISKAUDIO) mark_as_advanced(SDL_DUMMYAUDIO) mark_as_advanced(SDL_ESD) mark_as_advanced(SDL_FUSIONSOUND) mark_as_advanced(SDL_INPUT_TSLIB) mark_as_advanced(SDL_LIBC) mark_as_advanced(SDL_MMX) mark_as_advanced(SDL_NAS) mark_as_advanced(SDL_NAS_SHARED) mark_as_advanced(SDL_OSS) mark_as_advanced(SDL_PTHREADS) mark_as_advanced(SDL_PULSEAUDIO) mark_as_advanced(SDL_RENDER_D3D) mark_as_advanced(SDL_RPATH) mark_as_advanced(SDL_SNDIO) mark_as_advanced(SDL_SSE) mark_as_advanced(SDL_SSE2) mark_as_advanced(SDL_SSEMATH) mark_as_advanced(SDL_WINDRES) mark_as_advanced(SDL_ATOMIC) mark_as_advanced(SDL_AUDIO) mark_as_advanced(SDL_CPUINFO) mark_as_advanced(SDL_DLOPEN) mark_as_advanced(SDL_EVENTS) mark_as_advanced(SDL_FILE) mark_as_advanced(SDL_FILESYSTEM) mark_as_advanced(SDL_HAPTIC) mark_as_advanced(SDL_JOYSTICK) mark_as_advanced(SDL_LOADSO) mark_as_advanced(SDL_POWER) mark_as_advanced(SDL_RENDER) mark_as_advanced(SDL_SHARED) mark_as_advanced(SDL_STATIC) mark_as_advanced(SDL_THREADS) mark_as_advanced(SDL_TIMERS) mark_as_advanced(SDL_VIDEO) mark_as_advanced(SDL_CLOCK_GETTIME) mark_as_advanced(SDL_GCC_ATOMICS) mark_as_advanced(SDL_WAYLAND) set(SDL_WAYLAND OFF) mark_as_advanced(SDL_COCOA) mark_as_advanced(SDL_DIRECTFB) mark_as_advanced(SDL_DUMMY) mark_as_advanced(SDL_MIR) mark_as_advanced(SDL_OPENGL) mark_as_advanced(SDL_OPENGLES) set(SDL_OPENGLES OFF) mark_as_advanced(SDL_RPI) set(SDL_RPI OFF) mark_as_advanced(SDL_VIVANTE) set(SDL_VIVANTE OFF) mark_as_advanced(VIDEO_X11) set(SDL_X11 OFF) mark_as_advanced(SDL_VULKAN) set(SDL_VULKAN OFF) mark_as_advanced(SDL_KMSDRM) set(SDL_KMSDRM OFF) mark_as_advanced(SDL_WASAPI) mark_as_advanced(SDL_SSE3) mark_as_advanced(SDL_TEST) set(SDL_TEST OFF) mark_as_advanced(SDL_SENSOR) set(SDL_SENSOR OFF) mark_as_advanced(SDL_BACKGROUNDING_SIGNAL) mark_as_advanced(SDL_FOREGROUNDING_SIGNAL) set(SDL_Metal OFF) mark_as_advanced(SDL_METAL) mark_as_advanced(SDL2_DISABLE_INSTALL) mark_as_advanced(SDL2_DISABLE_SDL2MAIN) mark_as_advanced(SDL2_DISABLE_UNINSTALL) mark_as_advanced(SDL_ARMNEON) mark_as_advanced(SDL_ARMSIMD) mark_as_advanced(SDL_ASAN) mark_as_advanced(SDL_DUMMYVIDEO) mark_as_advanced(SDL_HIDAPI) mark_as_advanced(SDL_HIDAPI_JOYSTICK) mark_as_advanced(SDL_INSTALL_TESTS) mark_as_advanced(SDL_JACK) mark_as_advanced(SDL_LIBSAMPLERATE) mark_as_advanced(SDL_LOCALE) mark_as_advanced(SDL_MISC) mark_as_advanced(SDL_OFFSCREEN) mark_as_advanced(SDL_PIPEWIRE) mark_as_advanced(SDL_PTHREADS_SEM) mark_as_advanced(SDL_RENDER_METAL) mark_as_advanced(SDL_SNDIO_SHARED) mark_as_advanced(SDL_STATIC_PIC) mark_as_advanced(SDL_VIRTUAL_JOYSTICK) mark_as_advanced(SDL_X11) mark_as_advanced(SDL_XINPUT) endif() if(TORQUE_STATIC_CODE_ANALYSIS) addDef( "ON_FAIL_ASSERTFATAL=exit(1)" ) endif() ############################################################################### # Include Paths ############################################################################### addInclude("${projectSrcDir}") addInclude("${srcDir}/") addInclude("${libDir}/lmpg") addInclude("${libDir}/lpng") addInclude("${libDir}/ljpeg") addInclude("${libDir}/lungif") addInclude("${libDir}/zlib") addInclude("${libDir}/") # for tinyxml addInclude("${libDir}/tinyxml") addInclude("${libDir}/squish") addInclude("${libDir}/convexDecomp") addInclude("${libDir}/libogg/include") addInclude("${libDir}/opcode") addInclude("${libDir}/collada/include") addInclude("${libDir}/collada/include/1.4") addInclude("${libDir}/assimp/include") if(TORQUE_SDL) addInclude("${libDir}/nativeFileDialogs/include") endif() if(TORQUE_OPENGL) addInclude("${libDir}/glad/include") endif() if(UNIX AND NOT APPLE) addInclude("/usr/include/freetype2/freetype") addInclude("/usr/include/freetype2") 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 ${PROJECT_NAME} PROPERTY OUTPUT_NAME_${CONF} ${PROJECT_NAME}_${SUFFIX}) endforeach() endif() ############################################################################### # Project-specific configuration: ############################################################################### include(${TORQUE_APP_DIR}/${PROJECT_NAME}.cmake OPTIONAL) ############################################################################### # Installation ############################################################################### if(TORQUE_TEMPLATE) message("Prepare Template(${TORQUE_TEMPLATE}) install...") file(GLOB_RECURSE INSTALL_FILES_AND_DIRS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/*") IF( NOT TORQUE_D3D11) list(REMOVE_ITEM INSTALL_FILES_AND_DIRS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/D3DCompiler_47.dll") ENDIF() list(REMOVE_ITEM INSTALL_FILES_AND_DIRS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/main.tscript.in") foreach(ITEM ${INSTALL_FILES_AND_DIRS}) get_filename_component( dir ${ITEM} DIRECTORY ) get_filename_component( scriptName ${ITEM} NAME ) STRING(REGEX REPLACE "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/" "${TORQUE_APP_DIR}/" INSTALL_DIR ${dir}) STRING(REGEX REPLACE ".tscript" ".${TORQUE_SCRIPT_EXTENSION}" newScriptName ${scriptName}) install( FILES ${ITEM} DESTINATION ${INSTALL_DIR} RENAME ${newScriptName} ) endforeach() if(WIN32) INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/cleanShaders.bat" DESTINATION "${TORQUE_APP_DIR}") INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/DeleteCachedDTSs.bat" DESTINATION "${TORQUE_APP_DIR}") INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/DeleteDSOs.bat" DESTINATION "${TORQUE_APP_DIR}") INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/DeletePrefs.bat" DESTINATION "${TORQUE_APP_DIR}") endif() endif() ############################################################################### # Properties folder ############################################################################### # we only need to add libs that we add via add_subdirectory command, basics.cmake # will take care of the other source libs added via addLib if(TORQUE_SFX_OPENAL AND WIN32) set_target_properties(OpenAL PROPERTIES FOLDER ${TORQUE_LIBS_FOLDER_NAME}) #why is openal adding these two? set_target_properties(common PROPERTIES FOLDER ${TORQUE_LIBS_FOLDER_NAME}) set_target_properties(ex-common PROPERTIES FOLDER ${TORQUE_LIBS_FOLDER_NAME}) endif() if(TORQUE_SDL) # Apple config has slightly different target names if (APPLE) set_target_properties(SDL2main PROPERTIES FOLDER ${TORQUE_LIBS_FOLDER_NAME}) set_target_properties(SDL2-static PROPERTIES FOLDER ${TORQUE_LIBS_FOLDER_NAME}) else() set_target_properties(SDL2 PROPERTIES FOLDER ${TORQUE_LIBS_FOLDER_NAME}) endif() endif()