Ensuring all names are the correct casing for Linux
[Torque-3d.git] / Tools / CMake / torque3d.cmake
blobfc7e2a920977523edb9ca7d87aade57eb120e23e
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
30     
31     # default compiler flags
32         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_FLAG32} -Wundef -msse -pipe -Wfatal-errors ${TORQUE_ADDITIONAL_LINKER_FLAGS} -Wl,-rpath,'$$ORIGIN'")
33         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CXX_FLAG32} -Wundef -msse -pipe -Wfatal-errors ${TORQUE_ADDITIONAL_LINKER_FLAGS} -Wl,-rpath,'$$ORIGIN'")
35         # for asm files
36         SET (CMAKE_ASM_NASM_OBJECT_FORMAT "elf")
37         ENABLE_LANGUAGE (ASM_NASM)
38 endif()
40 # TODO: fmod support
42 ###############################################################################
43 # modules
44 ###############################################################################
45 option(TORQUE_SFX_VORBIS "Vorbis Sound" ON)
46 mark_as_advanced(TORQUE_SFX_VORBIS)
47 option(TORQUE_THEORA "Theora Video Support" ON)
48 mark_as_advanced(TORQUE_THEORA)
49 option(TORQUE_ADVANCED_LIGHTING "Advanced Lighting" ON)
50 mark_as_advanced(TORQUE_ADVANCED_LIGHTING)
51 option(TORQUE_BASIC_LIGHTING "Basic Lighting" ON)
52 mark_as_advanced(TORQUE_BASIC_LIGHTING)
53 if(WIN32)
54         option(TORQUE_SFX_DirectX "DirectX Sound" ON)
55         mark_as_advanced(TORQUE_SFX_DirectX)
56 else()
57         set(TORQUE_SFX_DirectX OFF)
58 endif()
59 option(TORQUE_SFX_OPENAL "OpenAL Sound" ON)
60 mark_as_advanced(TORQUE_SFX_OPENAL)
61 option(TORQUE_HIFI "HIFI? support" OFF)
62 mark_as_advanced(TORQUE_HIFI)
63 option(TORQUE_EXTENDED_MOVE "Extended move support" OFF)
64 mark_as_advanced(TORQUE_EXTENDED_MOVE)
65 if(WIN32)
66         option(TORQUE_SDL "Use SDL for window and input" OFF)
67 else()
68         set(TORQUE_SDL ON) # we need sdl to work on Linux/Mac
69 endif()
70 if(WIN32)
71         option(TORQUE_OPENGL "Allow OpenGL render" OFF)
72         #mark_as_advanced(TORQUE_OPENGL)
73 else()
74         set(TORQUE_OPENGL ON) # we need OpenGL to render on Linux/Mac
75 endif()
77 if(WIN32)
78         option(TORQUE_OPENGL "Allow OpenGL render" OFF)
79         #mark_as_advanced(TORQUE_OPENGL)
80 else()
81         set(TORQUE_OPENGL ON) # we need OpenGL to render on Linux/Mac
82         option(TORQUE_DEDICATED "Torque dedicated" OFF)
83 endif()
85 if(WIN32)
86         option(TORQUE_D3D11 "Allow Direct3D 11 render" OFF)
87 endif()
89 option(TORQUE_EXPERIMENTAL_EC "Experimental Entity/Component systems" OFF)
90 mark_as_advanced(TORQUE_EXPERIMENTAL_EC)
92 ###############################################################################
93 # options
94 ###############################################################################
95 if(NOT MSVC) # handle single-configuration generator
96     set(TORQUE_BUILD_TYPE "Debug" CACHE STRING "Select one of Debug, Release and RelWithDebInfo")
97     set_property(CACHE TORQUE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "RelWithDebInfo")
98     
99     set(TORQUE_ADDITIONAL_LINKER_FLAGS "" CACHE STRING "Additional linker flags")
100     mark_as_advanced(TORQUE_ADDITIONAL_LINKER_FLAGS)
101 endif()
103 option(TORQUE_MULTITHREAD "Multi Threading" ON)
104 mark_as_advanced(TORQUE_MULTITHREAD)
106 option(TORQUE_DISABLE_MEMORY_MANAGER "Disable memory manager" ON)
107 mark_as_advanced(TORQUE_DISABLE_MEMORY_MANAGER)
109 option(TORQUE_DISABLE_VIRTUAL_MOUNT_SYSTEM "Disable virtual mount system" OFF)
110 mark_as_advanced(TORQUE_DISABLE_VIRTUAL_MOUNT_SYSTEM)
112 option(TORQUE_PLAYER "Playback only?" OFF)
113 mark_as_advanced(TORQUE_PLAYER)
115 option(TORQUE_TOOLS "Enable or disable the tools" ON)
116 mark_as_advanced(TORQUE_TOOLS)
118 option(TORQUE_ENABLE_PROFILER "Enable or disable the profiler" OFF)
119 mark_as_advanced(TORQUE_ENABLE_PROFILER)
121 option(TORQUE_DEBUG "T3D Debug mode" OFF)
122 mark_as_advanced(TORQUE_DEBUG)
124 option(TORQUE_SHIPPING "T3D Shipping build?" OFF)
125 mark_as_advanced(TORQUE_SHIPPING)
127 option(TORQUE_DEBUG_NET "debug network" OFF)
128 mark_as_advanced(TORQUE_DEBUG_NET)
130 option(TORQUE_DEBUG_NET_MOVES "debug network moves" OFF)
131 mark_as_advanced(TORQUE_DEBUG_NET_MOVES)
133 option(TORQUE_ENABLE_ASSERTS "enables or disable asserts" OFF)
134 mark_as_advanced(TORQUE_ENABLE_ASSERTS)
136 option(TORQUE_DEBUG_GFX_MODE "triggers graphics debug mode" OFF)
137 mark_as_advanced(TORQUE_DEBUG_GFX_MODE)
139 #option(DEBUG_SPEW "more debug" OFF)
140 set(TORQUE_NO_DSO_GENERATION ON)
142 if(WIN32)
143     # warning C4800: 'XXX' : forcing value to bool 'true' or 'false' (performance warning)
144     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd4800")
145     # warning C4018: '<' : signed/unsigned mismatch
146     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd4018")
147     # warning C4244: 'initializing' : conversion from 'XXX' to 'XXX', possible loss of data
148     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd4244")
150     if( TORQUE_CPU_X64 )
151         link_directories($ENV{DXSDK_DIR}/Lib/x64)
152     else()
153         link_directories($ENV{DXSDK_DIR}/Lib/x86)
154     endif()
155 endif()
157 # build types
158 if(NOT MSVC) # handle single-configuration generator
159         set(CMAKE_BUILD_TYPE ${TORQUE_BUILD_TYPE})
160         if(CMAKE_BUILD_TYPE STREQUAL "Debug")
161         set(TORQUE_DEBUG TRUE)
162     elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
163         set(TORQUE_RELEASE TRUE)
164     elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
165         set(TORQUE_RELEASE TRUE)
166     else()
167                 message(FATAL_ERROR "Please select Debug, Release or RelWithDebInfo for TORQUE_BUILD_TYPE")
168         endif()
169 endif()
171 ###############################################################################
172 # Always enabled paths first
173 ###############################################################################
174 addPath("${srcDir}/") # must come first :)
175 addPathRec("${srcDir}/app")
176 addPath("${srcDir}/sfx/media")
177 addPath("${srcDir}/sfx/null")
178 addPath("${srcDir}/sfx")
179 addPath("${srcDir}/console")
180 addPath("${srcDir}/core")
181 addPath("${srcDir}/core/stream")
182 addPath("${srcDir}/core/strings")
183 addPath("${srcDir}/core/util")
184 addPath("${srcDir}/core/util/test")
185 addPath("${srcDir}/core/util/journal")
186 addPath("${srcDir}/core/util/journal/test")
187 addPath("${srcDir}/core/util/zip")
188 addPath("${srcDir}/core/util/zip/test")
189 addPath("${srcDir}/core/util/zip/compressors")
190 addPath("${srcDir}/i18n")
191 addPath("${srcDir}/sim")
192 addPath("${srcDir}/util")
193 addPath("${srcDir}/windowManager")
194 addPath("${srcDir}/windowManager/torque")
195 addPath("${srcDir}/windowManager/test")
196 addPath("${srcDir}/math")
197 addPath("${srcDir}/math/util")
198 addPath("${srcDir}/math/test")
200 addPath("${srcDir}/platform")
201 if(NOT TORQUE_SDL) 
202    set(BLACKLIST "fileDialog.cpp" )
203 endif()
204 addPath("${srcDir}/platform/nativeDialogs")
205 set(BLACKLIST "" )
207 addPath("${srcDir}/cinterface")
209 if( NOT TORQUE_DEDICATED )
210     addPath("${srcDir}/platform/menus")
211 endif()
212 addPath("${srcDir}/platform/test")
213 addPath("${srcDir}/platform/threads")
214 addPath("${srcDir}/platform/threads/test")
215 addPath("${srcDir}/platform/async")
216 addPath("${srcDir}/platform/async/test")
217 addPath("${srcDir}/platform/input")
218 addPath("${srcDir}/platform/output")
219 addPath("${srcDir}/app")
220 addPath("${srcDir}/app/net")
221 addPath("${srcDir}/util/messaging")
222 addPath("${srcDir}/gfx/Null")
223 addPath("${srcDir}/gfx/test")
224 addPath("${srcDir}/gfx/bitmap")
225 addPath("${srcDir}/gfx/bitmap/loaders")
226 addPath("${srcDir}/gfx/util")
227 addPath("${srcDir}/gfx/video")
228 addPath("${srcDir}/gfx")
229 addPath("${srcDir}/shaderGen")
230 addPath("${srcDir}/gfx/sim")
231 addPath("${srcDir}/gui/buttons")
232 addPath("${srcDir}/gui/containers")
233 addPath("${srcDir}/gui/controls")
234 addPath("${srcDir}/gui/core")
235 addPath("${srcDir}/gui/game")
236 addPath("${srcDir}/gui/shiny")
237 addPath("${srcDir}/gui/utility")
238 addPath("${srcDir}/gui")
239 addPath("${srcDir}/collision")
240 addPath("${srcDir}/materials")
241 addPath("${srcDir}/lighting")
242 addPath("${srcDir}/lighting/common")
243 addPath("${srcDir}/renderInstance")
244 addPath("${srcDir}/scene")
245 addPath("${srcDir}/scene/culling")
246 addPath("${srcDir}/scene/zones")
247 addPath("${srcDir}/scene/mixin")
248 addPath("${srcDir}/shaderGen")
249 addPath("${srcDir}/terrain")
250 addPath("${srcDir}/environment")
251 addPath("${srcDir}/forest")
252 addPath("${srcDir}/forest/ts")
253 addPath("${srcDir}/ts")
254 addPath("${srcDir}/ts/arch")
255 addPath("${srcDir}/physics")
256 addPath("${srcDir}/gui/3d")
257 addPath("${srcDir}/postFx")
259 if(NOT TORQUE_EXPERIMENTAL_EC) 
260    set(BLACKLIST "Entity.cpp;Entity.h" )
261 endif()
262 addPath("${srcDir}/T3D")
263 set(BLACKLIST "" )
265 addPath("${srcDir}/T3D/examples")
266 addPath("${srcDir}/T3D/fps")
267 addPath("${srcDir}/T3D/fx")
268 addPath("${srcDir}/T3D/vehicles")
269 addPath("${srcDir}/T3D/physics")
270 addPath("${srcDir}/T3D/decal")
271 addPath("${srcDir}/T3D/sfx")
272 addPath("${srcDir}/T3D/gameBase")
273 addPath("${srcDir}/T3D/turret")
275 if( TORQUE_EXPERIMENTAL_EC )
276         addPath("${srcDir}/T3D/components/")
277         addPath("${srcDir}/T3D/components/Animation")
278         addPath("${srcDir}/T3D/components/Camera")
279         addPath("${srcDir}/T3D/components/Collision")
280         addPath("${srcDir}/T3D/components/Game")
281         addPath("${srcDir}/T3D/components/Physics")
282         addPath("${srcDir}/T3D/components/Render")
283 endif()
285 addPath("${srcDir}/main/")
286 addPath("${srcDir}/assets")
287 addPath("${srcDir}/module")
288 addPath("${srcDir}/T3D/assets")
289 addPathRec("${srcDir}/persistence")
290 addPathRec("${srcDir}/ts/collada")
291 addPathRec("${srcDir}/ts/loader")
292 addPathRec("${projectSrcDir}")
294 ###############################################################################
295 # modular paths
296 ###############################################################################
297 # lighting
298 if(TORQUE_ADVANCED_LIGHTING)
299     addPath("${srcDir}/lighting/advanced")
300     addPathRec("${srcDir}/lighting/shadowMap")
301     if(WIN32)
302                 addPathRec("${srcDir}/lighting/advanced/hlsl")
303         endif()
304         if(TORQUE_OPENGL)
305                 addPathRec("${srcDir}/lighting/advanced/glsl")
306         endif()
307     addDef(TORQUE_ADVANCED_LIGHTING)
308 endif()
309 if(TORQUE_BASIC_LIGHTING)
310     addPathRec("${srcDir}/lighting/basic")
311     addPathRec("${srcDir}/lighting/shadowMap")
312     addDef(TORQUE_BASIC_LIGHTING)
313 endif()
315 # DirectX Sound
316 if(TORQUE_SFX_DirectX)
317     addLib(x3daudio.lib)
318     addPathRec("${srcDir}/sfx/dsound")
319     addPathRec("${srcDir}/sfx/xaudio")
320 endif()
322 # OpenAL
323 if(TORQUE_SFX_OPENAL AND NOT TORQUE_DEDICATED)
324     addPath("${srcDir}/sfx/openal")
325     #addPath("${srcDir}/sfx/openal/mac")
326     if(WIN32)
327                 addPath("${srcDir}/sfx/openal/win32")
328                 addInclude("${libDir}/openal/win32")
329     endif()
330         if(UNIX)
331                 addPath("${srcDir}/sfx/openal/linux")
332         endif()
333     
334 endif()
336 # Vorbis
337 if(TORQUE_SFX_VORBIS)
338     addInclude(${libDir}/libvorbis/include)
339     addDef(TORQUE_OGGVORBIS)
340     addLib(libvorbis)
341     addLib(libogg)
342 endif()
344 # Theora
345 if(TORQUE_THEORA)
346     addPath("${srcDir}/core/ogg")
347     addPath("${srcDir}/gfx/video")
348     addPath("${srcDir}/gui/theora")
349     
350     addDef(TORQUE_OGGTHEORA)
351     addDef(TORQUE_OGGVORIBS)
352     addInclude(${libDir}/libtheora/include)
353     addLib(libtheora)
354 endif()
356 # Include tools for non-tool builds (or define player if a tool build)
357 if(TORQUE_TOOLS)
358     addPath("${srcDir}/gui/worldEditor")
359     addPath("${srcDir}/environment/editors")
360     addPath("${srcDir}/forest/editor")
361     addPath("${srcDir}/gui/editor")
362     if(NOT TORQUE_EXPERIMENTAL_EC) 
363         set(BLACKLIST "entityGroup.cpp;entityGroup.h;mountingGroup.cpp;mountingGroup.h" )
364     endif()
365     addPath("${srcDir}/gui/editor/inspector")
366     set(BLACKLIST "" )
367 endif()
369 if(TORQUE_HIFI)
370     addPath("${srcDir}/T3D/gameBase/hifi")
371     addDef(TORQUE_HIFI_NET)
372 endif()
373     
374 if(TORQUE_EXTENDED_MOVE)
375     addPath("${srcDir}/T3D/gameBase/extended")
376     addDef(TORQUE_EXTENDED_MOVE)
377 else()
378     addPath("${srcDir}/T3D/gameBase/std")
379 endif()
381 if(TORQUE_SDL)
382     addPathRec("${srcDir}/windowManager/sdl")
383     addPathRec("${srcDir}/platformSDL")
384     
385     if(TORQUE_OPENGL)
386       addPathRec("${srcDir}/gfx/gl/sdl")
387     endif()
388     
389     if(UNIX)
390        #set(CMAKE_SIZEOF_VOID_P 4) #force 32 bit
391        set(ENV{CFLAGS} "${CXX_FLAG32} -g -O3")
392        if("${TORQUE_ADDITIONAL_LINKER_FLAGS}" STREQUAL "")
393          set(ENV{LDFLAGS} "${CXX_FLAG32}")
394        else()
395          set(ENV{LDFLAGS} "${CXX_FLAG32} ${TORQUE_ADDITIONAL_LINKER_FLAGS}")
396        endif()
398        find_package(PkgConfig REQUIRED)
399        pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
401        # Setup CMake to use GTK+, tell the compiler where to look for headers
402        # and to the linker where to look for libraries
403        include_directories(${GTK3_INCLUDE_DIRS})
404        link_directories(${GTK3_LIBRARY_DIRS})
406        # Add other flags to the compiler
407        add_definitions(${GTK3_CFLAGS_OTHER})
409        set(BLACKLIST "nfd_win.cpp"  )
410        addLib(nativeFileDialogs)
412        set(BLACKLIST ""  )
413        target_link_libraries(nativeFileDialogs ${GTK3_LIBRARIES})
414         else()
415            set(BLACKLIST "nfd_gtk.c" )
416            addLib(nativeFileDialogs)
417        set(BLACKLIST ""  )
418            addLib(comctl32)        
419     endif()
420     
421     #override and hide SDL2 cache variables
422     set(SDL_SHARED ON CACHE INTERNAL "" FORCE)
423     set(SDL_STATIC OFF CACHE INTERNAL "" FORCE)
424     add_subdirectory( ${libDir}/sdl ${CMAKE_CURRENT_BINARY_DIR}/sdl2)
425 endif()
427 if(TORQUE_DEDICATED)
428     addDef(TORQUE_DEDICATED)
429 endif()
431 if(TORQUE_EXPERIMENTAL_EC)
432         addDef(TORQUE_EXPERIMENTAL_EC)
433 endif()
435 #modules dir
436 file(GLOB modules "modules/*.cmake")
437 foreach(module ${modules})
438         include(${module})
439 endforeach()
441 ###############################################################################
442 # platform specific things
443 ###############################################################################
444 if(WIN32)
445     addPath("${srcDir}/platformWin32")
446     if(TORQUE_SDL) 
447                 set(BLACKLIST "fileDialog.cpp" )
448         endif()
449     addPath("${srcDir}/platformWin32/nativeDialogs")
450     set(BLACKLIST "" )
451     addPath("${srcDir}/platformWin32/menus")
452     addPath("${srcDir}/platformWin32/threads")
453     addPath("${srcDir}/platformWin32/videoInfo")
454     addPath("${srcDir}/platformWin32/minidump")
455     addPath("${srcDir}/windowManager/win32")
456         if(TORQUE_D3D11)
457                 addPath("${srcDir}/gfx/D3D11")
458         endif()
459     addPath("${srcDir}/gfx/D3D9")
460     addPath("${srcDir}/gfx/D3D9/pc")
461     addPath("${srcDir}/shaderGen/HLSL")    
462     addPath("${srcDir}/terrain/hlsl")
463     addPath("${srcDir}/forest/hlsl")
464     # add windows rc file for the icon
465     addFile("${projectSrcDir}/torque.rc")
466 endif()
468 if(APPLE)
469     addPath("${srcDir}/platformMac")
470     addPath("${srcDir}/platformMac/menus")
471     addPath("${srcDir}/platformPOSIX")
472     addPath("${srcDir}/windowManager/mac")
473     addPath("${srcDir}/gfx/gl")
474     addPath("${srcDir}/gfx/gl/ggl")
475     addPath("${srcDir}/gfx/gl/ggl/mac")
476     addPath("${srcDir}/gfx/gl/ggl/generated")
477     addPath("${srcDir}/shaderGen/GLSL")
478     addPath("${srcDir}/terrain/glsl")
479     addPath("${srcDir}/forest/glsl")    
480 endif()
482 if(XBOX360)
483     addPath("${srcDir}/platformXbox")
484     addPath("${srcDir}/platformXbox/threads")
485     addPath("${srcDir}/windowManager/360")
486     addPath("${srcDir}/gfx/D3D9")
487     addPath("${srcDir}/gfx/D3D9/360")
488     addPath("${srcDir}/shaderGen/HLSL")
489     addPath("${srcDir}/shaderGen/360")
490     addPath("${srcDir}/ts/arch/360")
491     addPath("${srcDir}/terrain/hlsl")
492     addPath("${srcDir}/forest/hlsl")
493 endif()
495 if(PS3)
496     addPath("${srcDir}/platformPS3")
497     addPath("${srcDir}/platformPS3/threads")
498     addPath("${srcDir}/windowManager/ps3")
499     addPath("${srcDir}/gfx/gl")
500     addPath("${srcDir}/gfx/gl/ggl")
501     addPath("${srcDir}/gfx/gl/ggl/ps3")
502     addPath("${srcDir}/gfx/gl/ggl/generated")
503     addPath("${srcDir}/shaderGen/GLSL")
504     addPath("${srcDir}/ts/arch/ps3")
505     addPath("${srcDir}/terrain/glsl")
506     addPath("${srcDir}/forest/glsl")    
507 endif()
509 if(UNIX)
510     # linux_dedicated
511     if(TORQUE_DEDICATED)
512                 addPath("${srcDir}/windowManager/dedicated")
513                 # ${srcDir}/platformX86UNIX/*.client.* files are not needed     
514                 # @todo: move to separate file
515                 file( GLOB tmp_files
516              ${srcDir}/platformX86UNIX/*.cpp
517              ${srcDir}/platformX86UNIX/*.c
518              ${srcDir}/platformX86UNIX/*.cc
519              ${srcDir}/platformX86UNIX/*.h )
520         file( GLOB tmp_remove_files ${srcDir}/platformX86UNIX/*client.* )
521         LIST( REMOVE_ITEM tmp_files ${tmp_remove_files} )
522         foreach( f ${tmp_files} )
523             addFile( ${f} )
524         endforeach()
525     else()
526         addPath("${srcDir}/platformX86UNIX")
527         addPath("${srcDir}/platformX86UNIX/nativeDialogs")
528     endif()    
529     # linux
530     addPath("${srcDir}/platformX86UNIX/threads")
531     addPath("${srcDir}/platformPOSIX")
532 endif()
534 if( TORQUE_OPENGL )
535     addPath("${srcDir}/shaderGen/GLSL")
536     if( TORQUE_OPENGL AND NOT TORQUE_DEDICATED )
537         addPath("${srcDir}/gfx/gl")
538         addPath("${srcDir}/gfx/gl/tGL")        
539         addPath("${srcDir}/shaderGen/GLSL")
540         addPath("${srcDir}/terrain/glsl")
541         addPath("${srcDir}/forest/glsl")    
542     endif()
543     
544     if(WIN32 AND NOT TORQUE_SDL)
545       addPath("${srcDir}/gfx/gl/win32")
546     endif()
547 endif()
549 ###############################################################################
550 ###############################################################################
551 finishExecutable()
552 ###############################################################################
553 ###############################################################################
555 message(STATUS "writing ${projectSrcDir}/torqueConfig.h")
556 CONFIGURE_FILE("${cmakeDir}/torqueConfig.h.in" "${projectSrcDir}/torqueConfig.h")
558 # configure the relevant files only once
559 if(NOT EXISTS "${projectSrcDir}/torque.ico")
560     CONFIGURE_FILE("${cmakeDir}/torque.ico" "${projectSrcDir}/torque.ico" COPYONLY)
561 endif()
562 if(NOT EXISTS "${projectOutDir}/${PROJECT_NAME}.torsion")
563     CONFIGURE_FILE("${cmakeDir}/template.torsion.in" "${projectOutDir}/${PROJECT_NAME}.torsion")
564 endif()
565 if(EXISTS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/main.cs.in" AND NOT EXISTS "${projectOutDir}/main.cs")
566     CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/main.cs.in" "${projectOutDir}/main.cs")
567 endif()
568 if(WIN32)
569     if(NOT EXISTS "${projectSrcDir}/torque.rc")
570         CONFIGURE_FILE("${cmakeDir}/torque-win.rc.in" "${projectSrcDir}/torque.rc")
571     endif()
572     if(NOT EXISTS "${projectOutDir}/${PROJECT_NAME}-debug.bat")
573         CONFIGURE_FILE("${cmakeDir}/app-debug-win.bat.in" "${projectOutDir}/${PROJECT_NAME}-debug.bat")
574     endif()
575     if(NOT EXISTS "${projectOutDir}/cleanup.bat")
576         CONFIGURE_FILE("${cmakeDir}/cleanup-win.bat.in" "${projectOutDir}/cleanup.bat")
577     endif()
578 endif()
580 ###############################################################################
581 # Common Libraries
582 ###############################################################################
583 addLib(lmng)
584 addLib(lpng)
585 addLib(lungif)
586 addLib(ljpeg)
587 addLib(zlib)
588 addLib(tinyxml)
589 addLib(opcode)
590 addLib(squish)
591 addLib(collada)
592 addLib(pcre)
593 addLib(convexDecomp)
594 if (TORQUE_OPENGL)
595    addLib(epoxy)
596 endif()
598 if(WIN32)
599     # copy pasted from T3D build system, some might not be needed
600     set(TORQUE_EXTERNAL_LIBS "COMCTL32.LIB;COMDLG32.LIB;USER32.LIB;ADVAPI32.LIB;GDI32.LIB;WINMM.LIB;WSOCK32.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")
601     mark_as_advanced(TORQUE_EXTERNAL_LIBS)
602     addLib("${TORQUE_EXTERNAL_LIBS}")
603    
604    if(TORQUE_OPENGL)
605       addLib(OpenGL32.lib)
606    endif()
607                 
608    # JTH: DXSDK is compiled with older runtime, and MSVC 2015+ is when __vsnprintf is undefined.
609    # This is a workaround by linking with the older legacy library functions.
610    # See this for more info: http://stackoverflow.com/a/34230122
611    if (MSVC14)
612       addLib(legacy_stdio_definitions.lib)
613    endif()
614 endif()
616 if(UNIX)
617     # copy pasted from T3D build system, some might not be needed
618         set(TORQUE_EXTERNAL_LIBS "dl Xxf86vm Xext X11 Xft stdc++ pthread GL" CACHE STRING "external libs to link against")
619         mark_as_advanced(TORQUE_EXTERNAL_LIBS)
620     
621     string(REPLACE " " ";" TORQUE_EXTERNAL_LIBS_LIST ${TORQUE_EXTERNAL_LIBS})
622     addLib( "${TORQUE_EXTERNAL_LIBS_LIST}" )
623 endif()
625 if(UNIX)
626     # copy pasted from T3D build system, some might not be needed
627         set(TORQUE_EXTERNAL_LIBS "rt dl Xxf86vm Xext X11 Xft stdc++ pthread GL" CACHE STRING "external libs to link against")
628         mark_as_advanced(TORQUE_EXTERNAL_LIBS)
629     
630     string(REPLACE " " ";" TORQUE_EXTERNAL_LIBS_LIST ${TORQUE_EXTERNAL_LIBS})
631     addLib( "${TORQUE_EXTERNAL_LIBS_LIST}" )
632 endif()
634 ###############################################################################
635 # Always enabled Definitions
636 ###############################################################################
637 addDef(TORQUE_DEBUG Debug)
638 addDef(TORQUE_ENABLE_ASSERTS "Debug;RelWithDebInfo")
639 addDef(TORQUE_DEBUG_GFX_MODE "RelWithDebInfo")
640 addDef(TORQUE_SHADERGEN)
641 addDef(INITGUID)
642 addDef(NTORQUE_SHARED)
643 addDef(UNICODE)
644 addDef(_UNICODE) # for VS
645 addDef(TORQUE_UNICODE)
646 #addDef(TORQUE_SHARED) # not used anymore as the game is the executable directly
647 addDef(LTC_NO_PROTOTYPES) # for libTomCrypt
648 addDef(BAN_OPCODE_AUTOLINK)
649 addDef(ICE_NO_DLL)
650 addDef(TORQUE_OPCODE)
651 addDef(TORQUE_COLLADA)
652 addDef(DOM_INCLUDE_TINYXML)
653 addDef(PCRE_STATIC)
654 addDef(_CRT_SECURE_NO_WARNINGS)
655 addDef(_CRT_SECURE_NO_DEPRECATE)
657 if(UNIX)
658         addDef(LINUX)   
659 endif()
661 if(TORQUE_OPENGL)
662         addDef(TORQUE_OPENGL)
663 endif()
665 if(TORQUE_SDL)
666     addDef(TORQUE_SDL)
667     addInclude(${libDir}/sdl/include)
668     addLib(SDL2)
669 endif()
671 if(TORQUE_STATIC_CODE_ANALYSIS)
672     addDef( "ON_FAIL_ASSERTFATAL=exit(1)" )
673 endif()
675 ###############################################################################
676 # Include Paths
677 ###############################################################################
678 addInclude("${projectSrcDir}")
679 addInclude("${srcDir}/")
680 addInclude("${libDir}/lmpg")
681 addInclude("${libDir}/lpng")
682 addInclude("${libDir}/ljpeg")
683 addInclude("${libDir}/lungif")
684 addInclude("${libDir}/zlib")
685 addInclude("${libDir}/") # for tinyxml
686 addInclude("${libDir}/tinyxml")
687 addInclude("${libDir}/squish")
688 addInclude("${libDir}/convexDecomp")
689 addInclude("${libDir}/libogg/include")
690 addInclude("${libDir}/opcode")
691 addInclude("${libDir}/collada/include")
692 addInclude("${libDir}/collada/include/1.4")
693 if(TORQUE_SDL)
694    addInclude("${libDir}/nativeFileDialogs/include")
695 endif()
696 if(TORQUE_OPENGL)
697         addInclude("${libDir}/epoxy/include")
698         addInclude("${libDir}/epoxy/src")
699 endif()
701 if(UNIX)
702         addInclude("/usr/include/freetype2/freetype")
703         addInclude("/usr/include/freetype2")
704 endif()
706 # external things
707 if(WIN32)
708     set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY INCLUDE_DIRECTORIES $ENV{DXSDK_DIR}/Include)
709 endif()
711 if(UNIX)
712         addInclude("/usr/include/freetype2/freetype")
713         addInclude("/usr/include/freetype2")
714 endif()
716 if(MSVC)
717     # Match projectGenerator naming for executables
718     set(OUTPUT_CONFIG DEBUG MINSIZEREL RELWITHDEBINFO)
719     set(OUTPUT_SUFFIX DEBUG MINSIZE    OPTIMIZEDDEBUG)
720     foreach(INDEX RANGE 2)
721         list(GET OUTPUT_CONFIG ${INDEX} CONF)
722         list(GET OUTPUT_SUFFIX ${INDEX} SUFFIX)
723         set_property(TARGET ${PROJECT_NAME} PROPERTY OUTPUT_NAME_${CONF} ${PROJECT_NAME}_${SUFFIX})
724     endforeach()
725 endif()
727 ###############################################################################
728 # Installation
729 ###############################################################################
731 if(TORQUE_TEMPLATE)
732     message("Prepare Template(${TORQUE_TEMPLATE}) install...")
733     file(GLOB_RECURSE INSTALL_FILES_AND_DIRS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/*")
734     
735     IF( NOT TORQUE_EXPERIMENTAL_EC)
736         list(REMOVE_ITEM INSTALL_FILES_AND_DIRS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/art/art.module.taml")
737         list(REMOVE_ITEM INSTALL_FILES_AND_DIRS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/art/shapes/actors/Soldier/soldier.asset.taml")
738         list(REMOVE_ITEM INSTALL_FILES_AND_DIRS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/scripts/scripts.module.taml")
739         
740         foreach(ITEM ${INSTALL_FILES_AND_DIRS})
741             get_filename_component( dir ${ITEM} DIRECTORY )
742             get_filename_component( fileName ${ITEM} NAME )
743             if( ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/scripts/server/components 
744                 OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/scripts/server/components/game
745                 OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/scripts/server/components/input
746                 OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/scripts/server/gameObjects
747                 OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/tools/componentEditor
748                 OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/tools/componentEditor/gui
749                 OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/tools/componentEditor/scripts )
750                 list(REMOVE_ITEM INSTALL_FILES_AND_DIRS ${dir}/${fileName})
751             ENDIF()
752         endforeach()
753     ENDIF()
754     
755     foreach(ITEM ${INSTALL_FILES_AND_DIRS})
756         get_filename_component( dir ${ITEM} DIRECTORY )
757         STRING(REGEX REPLACE "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/" "${TORQUE_APP_DIR}/" INSTALL_DIR ${dir})
758         install( FILES ${ITEM} DESTINATION ${INSTALL_DIR} )
759     endforeach()
760     
761     if(WIN32)
762         INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/cleanShaders.bat"     DESTINATION "${TORQUE_APP_DIR}")
763         INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/DeleteCachedDTSs.bat" DESTINATION "${TORQUE_APP_DIR}")
764         INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/DeleteDSOs.bat"       DESTINATION "${TORQUE_APP_DIR}")
765         INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/DeletePrefs.bat"      DESTINATION "${TORQUE_APP_DIR}")
766     endif()
767 endif()