Optionally include a CMake configurations file from the project directory to support...
[Torque-3d.git] / Tools / CMake / torque3d.cmake
bloba8220a545565503ce79f6e01a760feb7b16ec8e0
1 # -----------------------------------------------------------------------------
2 # Copyright (c) 2014 GarageGames, LLC
4 # Permission is hereby granted, free of charge, to any person obtaining a copy
5 # of this software and associated documentation files (the "Software"), to
6 # deal in the Software without restriction, including without limitation the
7 # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
8 # sell copies of the Software, and to permit persons to whom the Software is
9 # furnished to do so, subject to the following conditions:
11 # The above copyright notice and this permission notice shall be included in
12 # all copies or substantial portions of the Software.
14 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20 # IN THE SOFTWARE.
21 # -----------------------------------------------------------------------------
23 project(${TORQUE_APP_NAME})
25 if(UNIX)
26     if(NOT CXX_FLAG32)
27         set(CXX_FLAG32 "")
28     endif()
29     #set(CXX_FLAG32 "-m32") #uncomment for build x32 on OSx64
31     if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
32         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_FLAG32} -Wundef -msse -pipe -Wfatal-errors -Wno-return-type-c-linkage -Wno-unused-local-typedef ${TORQUE_ADDITIONAL_LINKER_FLAGS}")
33         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CXX_FLAG32} -Wundef -msse -pipe -Wfatal-errors -Wno-return-type-c-linkage -Wno-unused-local-typedef ${TORQUE_ADDITIONAL_LINKER_FLAGS}")
34     else()
35     # default compiler flags
36         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_FLAG32} -Wundef -msse -pipe -Wfatal-errors ${TORQUE_ADDITIONAL_LINKER_FLAGS} -Wl,-rpath,'$$ORIGIN'")
37         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CXX_FLAG32} -Wundef -msse -pipe -Wfatal-errors ${TORQUE_ADDITIONAL_LINKER_FLAGS} -Wl,-rpath,'$$ORIGIN'")
39    endif()    
41         # for asm files
42         SET (CMAKE_ASM_NASM_OBJECT_FORMAT "elf")
43         ENABLE_LANGUAGE (ASM_NASM)
45     set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
46 endif()
48 # TODO: fmod support
50 ###############################################################################
51 # modules
52 ###############################################################################
53 option(TORQUE_SFX_VORBIS "Vorbis Sound" ON)
54 mark_as_advanced(TORQUE_SFX_VORBIS)
55 option(TORQUE_THEORA "Theora Video Support" ON)
56 mark_as_advanced(TORQUE_THEORA)
57 option(TORQUE_ADVANCED_LIGHTING "Advanced Lighting" ON)
58 mark_as_advanced(TORQUE_ADVANCED_LIGHTING)
59 option(TORQUE_BASIC_LIGHTING "Basic Lighting" ON)
60 mark_as_advanced(TORQUE_BASIC_LIGHTING)
61 if(WIN32)
62         option(TORQUE_SFX_DirectX "DirectX Sound" ON)
63         mark_as_advanced(TORQUE_SFX_DirectX)
64 else()
65         set(TORQUE_SFX_DirectX OFF)
66 endif()
67 option(TORQUE_SFX_OPENAL "OpenAL Sound" ON)
68 #windows uses openal-soft
69 if(WIN32)
70 #disable a few things that are not required
71 set(ALSOFT_TESTS OFF CACHE BOOL "Build and install test programs" FORCE)
72 set(ALSOFT_UTILS OFF CACHE BOOL "Build and install utility programs" FORCE)
73 set(ALSOFT_EXAMPLES OFF CACHE BOOL "Build and install example programs" FORCE)
74 set(ALSOFT_CONFIG OFF CACHE BOOL "Install alsoft.conf sample configuration file" FORCE)
75 set(ALSOFT_INSTALL OFF CACHE BOOL "Install headers and libraries" FORCE)
76 set(ALSOFT_NO_CONFIG_UTIL OFF CACHE BOOL "Disable building the alsoft-config utility" FORCE)
77 set(ALSOFT_HRTF_DEFS OFF CACHE BOOL "Install HRTF definition files" FORCE)
78 set(ALSOFT_AMBDEC_PRESETS OFF CACHE BOOL "Install AmbDec presets" FORCE)
79 add_subdirectory( ${libDir}/openal-soft ${CMAKE_CURRENT_BINARY_DIR}/openal-soft)
80 endif()
81 mark_as_advanced(TORQUE_SFX_OPENAL)
82 option(TORQUE_HIFI "HIFI? support" OFF)
83 mark_as_advanced(TORQUE_HIFI)
84 option(TORQUE_EXTENDED_MOVE "Extended move support" OFF)
85 mark_as_advanced(TORQUE_EXTENDED_MOVE)
87 if(WIN32)
88         option(TORQUE_SDL "Use SDL for window and input" ON)
89 else()
90         set(TORQUE_SDL ON) # we need sdl to work on Linux/Mac
91 endif()
93 if(WIN32)
94         option(TORQUE_OPENGL "Allow OpenGL render" ON)
95         #mark_as_advanced(TORQUE_OPENGL)
96 else()
97         set(TORQUE_OPENGL ON) # we need OpenGL to render on Linux/Mac
98 endif()
100 if(WIN32)
101         option(TORQUE_D3D11 "Allow Direct3D 11 render" ON)
102 endif()
104 option(TORQUE_EXPERIMENTAL_EC "Experimental Entity/Component systems" OFF)
105 mark_as_advanced(TORQUE_EXPERIMENTAL_EC)
107 option(TORQUE_DEDICATED "Torque dedicated" OFF)
108 mark_as_advanced(TORQUE_DEDICATED)
110 ###############################################################################
111 # options
112 ###############################################################################
113 if(NOT MSVC AND NOT APPLE) # handle single-configuration generator
114     set(TORQUE_BUILD_TYPE "Debug" CACHE STRING "Select one of Debug, Release and RelWithDebInfo")
115     set_property(CACHE TORQUE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "RelWithDebInfo")
117     set(TORQUE_ADDITIONAL_LINKER_FLAGS "" CACHE STRING "Additional linker flags")
118     mark_as_advanced(TORQUE_ADDITIONAL_LINKER_FLAGS)
119 endif()
121 option(TORQUE_MULTITHREAD "Multi Threading" ON)
122 mark_as_advanced(TORQUE_MULTITHREAD)
124 option(TORQUE_DISABLE_MEMORY_MANAGER "Disable memory manager" ON)
125 mark_as_advanced(TORQUE_DISABLE_MEMORY_MANAGER)
127 option(TORQUE_DISABLE_VIRTUAL_MOUNT_SYSTEM "Disable virtual mount system" OFF)
128 mark_as_advanced(TORQUE_DISABLE_VIRTUAL_MOUNT_SYSTEM)
130 option(TORQUE_PLAYER "Playback only?" OFF)
131 mark_as_advanced(TORQUE_PLAYER)
133 option(TORQUE_TOOLS "Enable or disable the tools" ON)
134 mark_as_advanced(TORQUE_TOOLS)
136 option(TORQUE_ENABLE_PROFILER "Enable or disable the profiler" OFF)
137 mark_as_advanced(TORQUE_ENABLE_PROFILER)
139 option(TORQUE_DEBUG "T3D Debug mode" OFF)
140 mark_as_advanced(TORQUE_DEBUG)
142 option(TORQUE_SHIPPING "T3D Shipping build?" OFF)
143 mark_as_advanced(TORQUE_SHIPPING)
145 option(TORQUE_DEBUG_NET "debug network" OFF)
146 mark_as_advanced(TORQUE_DEBUG_NET)
148 option(TORQUE_DEBUG_NET_MOVES "debug network moves" OFF)
149 mark_as_advanced(TORQUE_DEBUG_NET_MOVES)
151 option(TORQUE_ENABLE_ASSERTS "enables or disable asserts" OFF)
152 mark_as_advanced(TORQUE_ENABLE_ASSERTS)
154 option(TORQUE_DEBUG_GFX_MODE "triggers graphics debug mode" OFF)
155 mark_as_advanced(TORQUE_DEBUG_GFX_MODE)
157 #option(DEBUG_SPEW "more debug" OFF)
158 set(TORQUE_NO_DSO_GENERATION ON)
160 if(WIN32)
161     # warning C4800: 'XXX' : forcing value to bool 'true' or 'false' (performance warning)
162     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd4800")
163     # warning C4018: '<' : signed/unsigned mismatch
164     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd4018")
165     # warning C4244: 'initializing' : conversion from 'XXX' to 'XXX', possible loss of data
166     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd4244")
168     if( TORQUE_CPU_X64 )
169         link_directories($ENV{DXSDK_DIR}/Lib/x64)
170     else()
171         link_directories($ENV{DXSDK_DIR}/Lib/x86)
172     endif()
173 endif()
175 # build types
176 if(NOT MSVC AND NOT APPLE) # handle single-configuration generator
177         set(CMAKE_BUILD_TYPE ${TORQUE_BUILD_TYPE})
178         if(CMAKE_BUILD_TYPE STREQUAL "Debug")
179         set(TORQUE_DEBUG TRUE)
180     elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
181         set(TORQUE_RELEASE TRUE)
182     elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
183         set(TORQUE_RELEASE TRUE)
184     else()
185                 message(FATAL_ERROR "Please select Debug, Release or RelWithDebInfo for TORQUE_BUILD_TYPE")
186         endif()
187 endif()
189 ###############################################################################
190 # Always enabled paths first
191 ###############################################################################
192 addPath("${srcDir}/") # must come first :)
193 addPathRec("${srcDir}/app")
194 addPath("${srcDir}/sfx/media")
195 addPath("${srcDir}/sfx/null")
196 addPath("${srcDir}/sfx")
197 addPath("${srcDir}/console")
198 addPath("${srcDir}/core")
199 addPath("${srcDir}/core/stream")
200 addPath("${srcDir}/core/strings")
201 addPath("${srcDir}/core/util")
202 addPath("${srcDir}/core/util/test")
203 addPath("${srcDir}/core/util/journal")
204 addPath("${srcDir}/core/util/journal/test")
205 addPath("${srcDir}/core/util/zip")
206 addPath("${srcDir}/core/util/zip/test")
207 addPath("${srcDir}/core/util/zip/compressors")
208 addPath("${srcDir}/i18n")
209 addPath("${srcDir}/sim")
210 addPath("${srcDir}/util")
211 addPath("${srcDir}/windowManager")
212 addPath("${srcDir}/windowManager/torque")
213 addPath("${srcDir}/windowManager/test")
214 addPath("${srcDir}/math")
215 addPath("${srcDir}/math/util")
216 addPath("${srcDir}/math/test")
218 addPath("${srcDir}/platform")
219 if(NOT TORQUE_SDL)
220    set(BLACKLIST "fileDialog.cpp" )
221 endif()
222 addPath("${srcDir}/platform/nativeDialogs")
223 set(BLACKLIST "" )
225 addPath("${srcDir}/cinterface")
227 if( NOT TORQUE_DEDICATED )
228     addPath("${srcDir}/platform/menus")
229 endif()
230 addPath("${srcDir}/platform/test")
231 addPath("${srcDir}/platform/threads")
232 addPath("${srcDir}/platform/threads/test")
233 addPath("${srcDir}/platform/async")
234 addPath("${srcDir}/platform/async/test")
235 addPath("${srcDir}/platform/input")
236 addPath("${srcDir}/platform/output")
237 addPath("${srcDir}/app")
238 addPath("${srcDir}/app/net")
239 addPath("${srcDir}/util/messaging")
240 addPath("${srcDir}/gfx/Null")
241 addPath("${srcDir}/gfx/test")
242 addPath("${srcDir}/gfx/bitmap")
243 addPath("${srcDir}/gfx/bitmap/loaders")
244 addPath("${srcDir}/gfx/util")
245 addPath("${srcDir}/gfx/video")
246 addPath("${srcDir}/gfx")
247 addPath("${srcDir}/shaderGen")
248 addPath("${srcDir}/gfx/sim")
249 addPath("${srcDir}/gui/buttons")
250 addPath("${srcDir}/gui/containers")
251 addPath("${srcDir}/gui/controls")
252 addPath("${srcDir}/gui/core")
253 addPath("${srcDir}/gui/game")
254 addPath("${srcDir}/gui/shiny")
255 addPath("${srcDir}/gui/utility")
256 addPath("${srcDir}/gui")
257 addPath("${srcDir}/collision")
258 addPath("${srcDir}/materials")
259 addPath("${srcDir}/lighting")
260 addPath("${srcDir}/lighting/common")
261 addPath("${srcDir}/renderInstance")
262 addPath("${srcDir}/scene")
263 addPath("${srcDir}/scene/culling")
264 addPath("${srcDir}/scene/zones")
265 addPath("${srcDir}/scene/mixin")
266 addPath("${srcDir}/shaderGen")
267 addPath("${srcDir}/terrain")
268 addPath("${srcDir}/environment")
269 addPath("${srcDir}/forest")
270 addPath("${srcDir}/forest/ts")
271 addPath("${srcDir}/ts")
272 addPath("${srcDir}/ts/arch")
273 addPath("${srcDir}/physics")
274 addPath("${srcDir}/gui/3d")
275 addPath("${srcDir}/postFx")
277 if(NOT TORQUE_EXPERIMENTAL_EC)
278    set(BLACKLIST "entity.cpp;entity.h" )
279 endif()
280 addPath("${srcDir}/T3D")
281 set(BLACKLIST "" )
283 addPath("${srcDir}/T3D/examples")
284 addPath("${srcDir}/T3D/fps")
285 addPath("${srcDir}/T3D/fx")
286 addPath("${srcDir}/T3D/vehicles")
287 addPath("${srcDir}/T3D/physics")
288 addPath("${srcDir}/T3D/decal")
289 addPath("${srcDir}/T3D/sfx")
290 addPath("${srcDir}/T3D/gameBase")
291 addPath("${srcDir}/T3D/turret")
293 if( TORQUE_EXPERIMENTAL_EC )
294         addPath("${srcDir}/T3D/components/")
295         addPath("${srcDir}/T3D/components/animation")
296         addPath("${srcDir}/T3D/components/camera")
297         addPath("${srcDir}/T3D/components/collision")
298         addPath("${srcDir}/T3D/components/game")
299         addPath("${srcDir}/T3D/components/physics")
300         addPath("${srcDir}/T3D/components/render")
301 endif()
303 addPath("${srcDir}/main/")
304 addPath("${srcDir}/assets")
305 addPath("${srcDir}/module")
306 addPath("${srcDir}/T3D/assets")
307 addPathRec("${srcDir}/persistence")
308 addPathRec("${srcDir}/ts/collada")
309 addPathRec("${srcDir}/ts/loader")
310 addPathRec("${projectSrcDir}")
312 ###############################################################################
313 # modular paths
314 ###############################################################################
315 # lighting
316 if(TORQUE_ADVANCED_LIGHTING)
317     addPath("${srcDir}/lighting/advanced")
318     addPathRec("${srcDir}/lighting/shadowMap")
319     if(WIN32)
320                 addPathRec("${srcDir}/lighting/advanced/hlsl")
321         endif()
322         if(TORQUE_OPENGL)
323                 addPathRec("${srcDir}/lighting/advanced/glsl")
324         endif()
325     addDef(TORQUE_ADVANCED_LIGHTING)
326 endif()
327 if(TORQUE_BASIC_LIGHTING)
328     addPathRec("${srcDir}/lighting/basic")
329     addPathRec("${srcDir}/lighting/shadowMap")
330     addDef(TORQUE_BASIC_LIGHTING)
331 endif()
333 # DirectX Sound
334 if(TORQUE_SFX_DirectX)
335     addLib(x3daudio.lib)
336     addPathRec("${srcDir}/sfx/dsound")
337     addPathRec("${srcDir}/sfx/xaudio")
338 endif()
340 # OpenAL
341 if(TORQUE_SFX_OPENAL AND NOT TORQUE_DEDICATED)
342     addPath("${srcDir}/sfx/openal")
343     if(WIN32)
344              addPath("${srcDir}/sfx/openal/win32")
345                  addInclude("${libDir}/openal-soft/include")
346     endif()
347           if(UNIX AND NOT APPLE)
348                    addPath("${srcDir}/sfx/openal/linux")
349           endif()
350     if(APPLE)
351        addPath("${srcDir}/sfx/openal/mac")
352        addFramework("OpenAL")
353     endif()
354 endif()
356 # Vorbis
357 if(TORQUE_SFX_VORBIS)
358     addInclude(${libDir}/libvorbis/include)
359     addDef(TORQUE_OGGVORBIS)
360     addLib(libvorbis)
361     addLib(libogg)
362 endif()
364 # Theora
365 if(TORQUE_THEORA)
366     addPath("${srcDir}/core/ogg")
367     addPath("${srcDir}/gfx/video")
368     addPath("${srcDir}/gui/theora")
370     addDef(TORQUE_OGGTHEORA)
371     addDef(TORQUE_OGGVORIBS)
372     addInclude(${libDir}/libtheora/include)
373     addLib(libtheora)
374 endif()
376 # Include tools for non-tool builds (or define player if a tool build)
377 if(TORQUE_TOOLS)
378     addPath("${srcDir}/gui/worldEditor")
379     addPath("${srcDir}/environment/editors")
380     addPath("${srcDir}/forest/editor")
381     addPath("${srcDir}/gui/editor")
382     if(NOT TORQUE_EXPERIMENTAL_EC)
383         set(BLACKLIST "entityGroup.cpp;entityGroup.h;mountingGroup.cpp;mountingGroup.h;componentGroup.cpp;componentGroup.h" )
384     endif()
385     addPath("${srcDir}/gui/editor/inspector")
386     set(BLACKLIST "" )
387 endif()
389 if(TORQUE_HIFI)
390     addPath("${srcDir}/T3D/gameBase/hifi")
391     addDef(TORQUE_HIFI_NET)
392 endif()
394 if(TORQUE_EXTENDED_MOVE)
395     addPath("${srcDir}/T3D/gameBase/extended")
396     addDef(TORQUE_EXTENDED_MOVE)
397 else()
398     addPath("${srcDir}/T3D/gameBase/std")
399 endif()
401 if(TORQUE_SDL)
402     addPathRec("${srcDir}/windowManager/sdl")
403     addPathRec("${srcDir}/platformSDL")
405     if(TORQUE_OPENGL)
406       addPathRec("${srcDir}/gfx/gl/sdl")
407     endif()
409     if(UNIX AND NOT APPLE)
410        #set(CMAKE_SIZEOF_VOID_P 4) #force 32 bit
411        set(ENV{CFLAGS} "${CXX_FLAG32} -g -O3")
412        if("${TORQUE_ADDITIONAL_LINKER_FLAGS}" STREQUAL "")
413          set(ENV{LDFLAGS} "${CXX_FLAG32}")
414        else()
415          set(ENV{LDFLAGS} "${CXX_FLAG32} ${TORQUE_ADDITIONAL_LINKER_FLAGS}")
416        endif()
418        find_package(PkgConfig REQUIRED)
419        pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
421        # Setup CMake to use GTK+, tell the compiler where to look for headers
422        # and to the linker where to look for libraries
423        include_directories(${GTK3_INCLUDE_DIRS})
424        link_directories(${GTK3_LIBRARY_DIRS})
426        # Add other flags to the compiler
427        add_definitions(${GTK3_CFLAGS_OTHER})
429        set(BLACKLIST "nfd_win.cpp" "nfd_cocoa.m"  )
430        addLib(nativeFileDialogs)
432        set(BLACKLIST ""  )
433        target_link_libraries(nativeFileDialogs ${GTK3_LIBRARIES})
434   elseif(APPLE)
435       set(BLACKLIST "nfd_gtk.c" "nfd_win.cpp" )
436       addLib(nativeFileDialogs)
437       set(BLACKLIST ""  )
438         else()
439            set(BLACKLIST "nfd_gtk.c" "nfd_cocoa.m" )
440            addLib(nativeFileDialogs)
441      set(BLACKLIST ""  )
442            addLib(comctl32)
443   endif()
445     #override and hide SDL2 cache variables
446     #set apple to sue sdl static lib, other platforms use dynamic
447     if(APPLE)
448       set(SDL_SHARED OFF CACHE BOOL "Build a shared version of the library" FORCE)
449       set(SDL_STATIC ON CACHE BOOL "Build a static version of the library" FORCE)
450     else()
451       set(SDL_SHARED ON CACHE BOOL "Build a shared version of the library" FORCE)
452       set(SDL_STATIC OFF CACHE BOOL "Build a static version of the library" FORCE)
453     endif()
454     add_subdirectory( ${libDir}/sdl ${CMAKE_CURRENT_BINARY_DIR}/sdl2)
455     link_directories( ${libDir}/sdl ${CMAKE_CURRENT_BINARY_DIR}/sdl2)
456 endif()
458 if(TORQUE_DEDICATED)
459     addDef(TORQUE_DEDICATED)
460 endif()
462 if(TORQUE_EXPERIMENTAL_EC)
463         addDef(TORQUE_EXPERIMENTAL_EC)
464 endif()
466 #modules dir
467 file(GLOB modules "modules/*.cmake")
468 foreach(module ${modules})
469         include(${module})
470 endforeach()
472 ###############################################################################
473 # platform specific things
474 ###############################################################################
475 if(WIN32)
476     addPath("${srcDir}/platformWin32")
477     if(TORQUE_SDL)
478                 set(BLACKLIST "fileDialog.cpp" )
479         endif()
480     addPath("${srcDir}/platformWin32/nativeDialogs")
481     set(BLACKLIST "" )
482     addPath("${srcDir}/platformWin32/menus")
483     if(NOT TORQUE_SDL)
484        addPath("${srcDir}/platformWin32/threads")
485     endif()
486     addPath("${srcDir}/platformWin32/videoInfo")
487     addPath("${srcDir}/platformWin32/minidump")
488     addPath("${srcDir}/windowManager/win32")
489         if(TORQUE_D3D11)
490                 addPath("${srcDir}/gfx/D3D11")
491         endif()
492     addPath("${srcDir}/gfx/D3D9")
493     addPath("${srcDir}/gfx/D3D9/pc")
494     addPath("${srcDir}/shaderGen/HLSL")
495     addPath("${srcDir}/terrain/hlsl")
496     addPath("${srcDir}/forest/hlsl")
497     # add windows rc file for the icon
498     addFile("${projectSrcDir}/torque.rc")
499 endif()
501 if(APPLE)
502     addPath("${srcDir}/platformMac")
503     addPath("${srcDir}/platformPOSIX")
504 endif()
506 if(UNIX AND NOT APPLE)
507     # linux_dedicated
508     if(TORQUE_DEDICATED)
509                 addPath("${srcDir}/windowManager/dedicated")
510                 # ${srcDir}/platformX86UNIX/*.client.* files are not needed
511                 # @todo: move to separate file
512                 file( GLOB tmp_files
513              ${srcDir}/platformX86UNIX/*.cpp
514              ${srcDir}/platformX86UNIX/*.c
515              ${srcDir}/platformX86UNIX/*.cc
516              ${srcDir}/platformX86UNIX/*.h )
517         file( GLOB tmp_remove_files ${srcDir}/platformX86UNIX/*client.* )
518         LIST( REMOVE_ITEM tmp_files ${tmp_remove_files} )
519         foreach( f ${tmp_files} )
520             addFile( ${f} )
521         endforeach()
522     else()
523         addPath("${srcDir}/platformX86UNIX")
524         addPath("${srcDir}/platformX86UNIX/nativeDialogs")
525     endif()
526     # linux
527     addPath("${srcDir}/platformPOSIX")
528 endif()
530 if( TORQUE_OPENGL )
531     addPath("${srcDir}/shaderGen/GLSL")
532     if( TORQUE_OPENGL AND NOT TORQUE_DEDICATED )
533         addPath("${srcDir}/gfx/gl")
534         addPath("${srcDir}/gfx/gl/tGL")
535         addPath("${srcDir}/shaderGen/GLSL")
536         addPath("${srcDir}/terrain/glsl")
537         addPath("${srcDir}/forest/glsl")
538     endif()
540     if(WIN32 AND NOT TORQUE_SDL)
541       addPath("${srcDir}/gfx/gl/win32")
542     endif()
543 endif()
545 ###############################################################################
546 ###############################################################################
547 finishExecutable()
548 ###############################################################################
549 ###############################################################################
551 # Set Visual Studio startup project
552 if((${CMAKE_VERSION} VERSION_EQUAL 3.6.0) OR (${CMAKE_VERSION} VERSION_GREATER 3.6.0) AND MSVC)
553 set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${TORQUE_APP_NAME})
554 endif()
556 message(STATUS "writing ${projectSrcDir}/torqueConfig.h")
557 CONFIGURE_FILE("${cmakeDir}/torqueConfig.h.in" "${projectSrcDir}/torqueConfig.h")
559 # configure the relevant files only once
561 if(APPLE)
562   #icon
563   if(NOT EXISTS "${projectSrcDir}/torque.icns")
564       CONFIGURE_FILE("${cmakeDir}/torque.icns" "${projectSrcDir}/torque.icns" COPYONLY)
565   endif()
566   #plist
567   if(NOT EXISTS "${projectSrcDir}/Info.plist")
568       CONFIGURE_FILE("${cmakeDir}/Info.plist.in" "${projectSrcDir}/Info.plist" COPYONLY)
569   endif()
570   #target properties for mac
571   set_target_properties("${PROJECT_NAME}" PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${projectSrcDir}/Info.plist")
572 else()
573   if(NOT EXISTS "${projectSrcDir}/torque.ico")
574       CONFIGURE_FILE("${cmakeDir}/torque.ico" "${projectSrcDir}/torque.ico" COPYONLY)
575   endif()
576 endif()
578 if(NOT EXISTS "${projectOutDir}/${PROJECT_NAME}.torsion")
579     CONFIGURE_FILE("${cmakeDir}/template.torsion.in" "${projectOutDir}/${PROJECT_NAME}.torsion")
580 endif()
581 if(EXISTS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/main.cs.in" AND NOT EXISTS "${projectOutDir}/main.cs")
582     CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/main.cs.in" "${projectOutDir}/main.cs")
583 endif()
584 if(WIN32)
585     if(NOT EXISTS "${projectSrcDir}/torque.rc")
586         CONFIGURE_FILE("${cmakeDir}/torque-win.rc.in" "${projectSrcDir}/torque.rc")
587     endif()
588     if(NOT EXISTS "${projectOutDir}/${PROJECT_NAME}-debug.bat")
589         CONFIGURE_FILE("${cmakeDir}/app-debug-win.bat.in" "${projectOutDir}/${PROJECT_NAME}-debug.bat")
590     endif()
591     if(NOT EXISTS "${projectOutDir}/cleanup.bat")
592         CONFIGURE_FILE("${cmakeDir}/cleanup-win.bat.in" "${projectOutDir}/cleanup.bat")
593     endif()
594 endif()
596 ###############################################################################
597 # Common Libraries
598 ###############################################################################
599 addLib(lmng)
600 addLib(lpng)
601 addLib(lungif)
602 addLib(ljpeg)
603 addLib(zlib)
604 addLib(tinyxml)
605 addLib(opcode)
606 addLib(squish)
607 addLib(collada)
608 addLib(pcre)
609 addLib(convexDecomp)
610 if (TORQUE_OPENGL)
611    addLib(glad)
612 endif()
614 if(WIN32)
615     # copy pasted from T3D build system, some might not be needed
616     set(TORQUE_EXTERNAL_LIBS "COMCTL32.LIB;COMDLG32.LIB;USER32.LIB;ADVAPI32.LIB;GDI32.LIB;WINMM.LIB;WS2_32.LIB;vfw32.lib;Imm32.lib;d3d9.lib;d3dx9.lib;DxErr.lib;ole32.lib;shell32.lib;oleaut32.lib;version.lib" CACHE STRING "external libs to link against")
617     mark_as_advanced(TORQUE_EXTERNAL_LIBS)
618     addLib("${TORQUE_EXTERNAL_LIBS}")
620    if(TORQUE_OPENGL)
621       addLib(OpenGL32.lib)
622    endif()
624    # JTH: DXSDK is compiled with older runtime, and MSVC 2015+ is when __vsnprintf is undefined.
625    # This is a workaround by linking with the older legacy library functions.
626    # See this for more info: http://stackoverflow.com/a/34230122
627    if (MSVC14)
628       addLib(legacy_stdio_definitions.lib)
629    endif()
630 endif()
632 if (APPLE)
633         addFramework("Cocoa")
634         addFramework("OpenGL")
635   #These are needed by sdl2 static lib
636   addFramework("CoreAudio")
637   addFramework("AudioUnit")
638   addFramework("ForceFeedback")
639   addFramework("IOKit")
640   addFramework("CoreVideo")
641   #grrr damn you sdl!
642   addFramework("Carbon")
643   addLib("iconv")
644   #set a few arch defaults
645   set(CMAKE_OSX_ARCHITECTURES "x86_64" CACHE STRING "OSX Architecture" FORCE)
646   set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "OSX Deployment target" FORCE)
647 endif()
649 if(UNIX AND NOT APPLE)
650     # copy pasted from T3D build system, some might not be needed
651         set(TORQUE_EXTERNAL_LIBS "dl Xxf86vm Xext X11 Xft stdc++ pthread GL" CACHE STRING "external libs to link against")
652         mark_as_advanced(TORQUE_EXTERNAL_LIBS)
654     string(REPLACE " " ";" TORQUE_EXTERNAL_LIBS_LIST ${TORQUE_EXTERNAL_LIBS})
655     addLib( "${TORQUE_EXTERNAL_LIBS_LIST}" )
656 endif()
658 ###############################################################################
659 # Always enabled Definitions
660 ###############################################################################
661 addDef(TORQUE_DEBUG Debug)
662 addDef(TORQUE_ENABLE_ASSERTS "Debug;RelWithDebInfo")
663 addDef(TORQUE_DEBUG_GFX_MODE "RelWithDebInfo")
664 addDef(TORQUE_SHADERGEN)
665 addDef(INITGUID)
666 addDef(NTORQUE_SHARED)
667 addDef(UNICODE)
668 addDef(_UNICODE) # for VS
669 addDef(TORQUE_UNICODE)
670 #addDef(TORQUE_SHARED) # not used anymore as the game is the executable directly
671 addDef(LTC_NO_PROTOTYPES) # for libTomCrypt
672 addDef(BAN_OPCODE_AUTOLINK)
673 addDef(ICE_NO_DLL)
674 addDef(TORQUE_OPCODE)
675 addDef(TORQUE_COLLADA)
676 addDef(DOM_INCLUDE_TINYXML)
677 addDef(PCRE_STATIC)
678 addDef(_CRT_SECURE_NO_WARNINGS)
679 addDef(_CRT_SECURE_NO_DEPRECATE)
681 if(UNIX AND NOT APPLE)
682         addDef(LINUX)
683 endif()
685 if(TORQUE_OPENGL)
686         addDef(TORQUE_OPENGL)
687 endif()
689 if(TORQUE_SDL)
690     addDef(TORQUE_SDL)
691     addInclude(${libDir}/sdl/include)
692     addLib(SDL2)
693 endif()
695 if(TORQUE_STATIC_CODE_ANALYSIS)
696     addDef( "ON_FAIL_ASSERTFATAL=exit(1)" )
697 endif()
699 ###############################################################################
700 # Include Paths
701 ###############################################################################
702 addInclude("${projectSrcDir}")
703 addInclude("${srcDir}/")
704 addInclude("${libDir}/lmpg")
705 addInclude("${libDir}/lpng")
706 addInclude("${libDir}/ljpeg")
707 addInclude("${libDir}/lungif")
708 addInclude("${libDir}/zlib")
709 addInclude("${libDir}/") # for tinyxml
710 addInclude("${libDir}/tinyxml")
711 addInclude("${libDir}/squish")
712 addInclude("${libDir}/convexDecomp")
713 addInclude("${libDir}/libogg/include")
714 addInclude("${libDir}/opcode")
715 addInclude("${libDir}/collada/include")
716 addInclude("${libDir}/collada/include/1.4")
717 if(TORQUE_SDL)
718    addInclude("${libDir}/nativeFileDialogs/include")
719 endif()
720 if(TORQUE_OPENGL)
721         addInclude("${libDir}/glad/include")
722 endif()
724 if(UNIX AND NOT APPLE)
725         addInclude("/usr/include/freetype2/freetype")
726         addInclude("/usr/include/freetype2")
727 endif()
729 # external things
730 if(WIN32)
731     set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY INCLUDE_DIRECTORIES $ENV{DXSDK_DIR}/Include)
732 endif()
734 if(MSVC)
735     # Match projectGenerator naming for executables
736     set(OUTPUT_CONFIG DEBUG MINSIZEREL RELWITHDEBINFO)
737     set(OUTPUT_SUFFIX DEBUG MINSIZE    OPTIMIZEDDEBUG)
738     foreach(INDEX RANGE 2)
739         list(GET OUTPUT_CONFIG ${INDEX} CONF)
740         list(GET OUTPUT_SUFFIX ${INDEX} SUFFIX)
741         set_property(TARGET ${PROJECT_NAME} PROPERTY OUTPUT_NAME_${CONF} ${PROJECT_NAME}_${SUFFIX})
742     endforeach()
743 endif()
745 ###############################################################################
746 # Project-specific configuration:
747 ###############################################################################
749 include(${TORQUE_APP_DIR}/${PROJECT_NAME}.cmake OPTIONAL)
751 ###############################################################################
752 # Installation
753 ###############################################################################
755 if(TORQUE_TEMPLATE)
756     message("Prepare Template(${TORQUE_TEMPLATE}) install...")
757     file(GLOB_RECURSE INSTALL_FILES_AND_DIRS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/*")
759     IF( NOT TORQUE_EXPERIMENTAL_EC)
760         list(REMOVE_ITEM INSTALL_FILES_AND_DIRS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/art/art.module.taml")
761         list(REMOVE_ITEM INSTALL_FILES_AND_DIRS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/art/shapes/actors/Soldier/soldier.asset.taml")
762         list(REMOVE_ITEM INSTALL_FILES_AND_DIRS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/scripts/scripts.module.taml")
764         foreach(ITEM ${INSTALL_FILES_AND_DIRS})
765             get_filename_component( dir ${ITEM} DIRECTORY )
766             get_filename_component( fileName ${ITEM} NAME )
767             if( ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/scripts/server/components
768                 OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/scripts/server/components/game
769                 OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/scripts/server/components/input
770                 OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/scripts/server/gameObjects
771                 OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/tools/componentEditor
772                 OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/tools/componentEditor/gui
773                 OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/tools/componentEditor/scripts )
774                 list(REMOVE_ITEM INSTALL_FILES_AND_DIRS ${dir}/${fileName})
775             ENDIF()
776         endforeach()
777     ENDIF()
779     foreach(ITEM ${INSTALL_FILES_AND_DIRS})
780         get_filename_component( dir ${ITEM} DIRECTORY )
781         STRING(REGEX REPLACE "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/" "${TORQUE_APP_DIR}/" INSTALL_DIR ${dir})
782         install( FILES ${ITEM} DESTINATION ${INSTALL_DIR} )
783     endforeach()
785     if(WIN32)
786         INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/cleanShaders.bat"     DESTINATION "${TORQUE_APP_DIR}")
787         INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/DeleteCachedDTSs.bat" DESTINATION "${TORQUE_APP_DIR}")
788         INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/DeleteDSOs.bat"       DESTINATION "${TORQUE_APP_DIR}")
789         INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/DeletePrefs.bat"      DESTINATION "${TORQUE_APP_DIR}")
790     endif()
791 endif()