Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/CMakeLists.txt @ 8416

Last change on this file since 8416 was 8416, checked in by rgrieder, 14 years ago

Default link mode for external dependencies should be STATIC for development builds to decrease link time.

  • Property svn:eol-style set to native
File size: 8.8 KB
RevLine 
[2710]1 #
2 #             ORXONOX - the hottest 3D action shooter ever to exist
3 #                             > www.orxonox.net <
4 #
5 #        This program is free software; you can redistribute it and/or
6 #         modify it under the terms of the GNU General Public License
7 #        as published by the Free Software Foundation; either version 2
8 #            of the License, or (at your option) any later version.
9 #
10 #       This program is distributed in the hope that it will be useful,
11 #        but WITHOUT ANY WARRANTY; without even the implied warranty of
12 #        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 #                 GNU General Public License for more details.
14 #
15 #   You should have received a copy of the GNU General Public License along
16 #      with this program; if not, write to the Free Software Foundation,
17 #     Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18 #
[5695]19 #
20 #  Author:
21 #    Reto Grieder
22 #  Description:
23 #    Configures the compilers and sets build options.
24 #
[1505]25
[5695]26# Required macros and functions
[2710]27INCLUDE(FlagUtilities)
[3196]28INCLUDE(TargetUtilities)
[2710]29
[5695]30# Configure the two headers and set some options
31INCLUDE(OrxonoxConfig.cmake)
[2710]32
[7163]33####### Library Behaviour (dependencies) ########
[2710]34
[7955]35# Disable auto linking completely for Boost and POCO
[5695]36ADD_COMPILER_FLAGS("-DBOOST_ALL_NO_LIB")
[7955]37ADD_COMPILER_FLAGS("-DPOCO_NO_AUTOMATIC_LIBS")
[2710]38
[8351]39IF(WIN32)
40  # If no defines are specified, these libs get linked statically
41  ADD_COMPILER_FLAGS("-DBOOST_ALL_DYN_LINK" LINK_BOOST_DYNAMIC)
42  #ADD_COMPILER_FLAGS("-DENET_DLL"           LINK_ENET_DYNAMIC)
43  ADD_COMPILER_FLAGS("-DLUA_BUILD_AS_DLL"   LINK_LUA5.1_DYNAMIC)
44  # If no defines are specified, these libs get linked dynamically
45  ADD_COMPILER_FLAGS("-DCEGUI_STATIC -DTOLUA_STATIC" NOT LINK_CEGUI_DYNAMIC)
46  ADD_COMPILER_FLAGS("-DOGRE_STATIC_LIB"    NOT LINK_OGRE_DYNAMIC)
47  ADD_COMPILER_FLAGS("-DSTATIC_BUILD"       NOT LINK_TCL_DYNAMIC)
[2710]48
[8351]49  # Target Windows XP as minimum Windows version
50  # And try to catch all the different macro defines for that...
51  ADD_COMPILER_FLAGS("-D_WIN32_WINNT=0x0501")
52  ADD_COMPILER_FLAGS("-D_WIN32_WINDOWS=0x0501")
53  ADD_COMPILER_FLAGS("-DWINVER=0x0501")
54  ADD_COMPILER_FLAGS("-DNTDDI_VERSION=0x05010000")
55ENDIF(WIN32)
56
[8412]57# Visual Leak Dectector configuration
58IF(MSVC AND VLD_FOUND)
59  OPTION(VISUAL_LEAK_DETECTOR_ENABLE "Memory leak detector" OFF)
60  IF(VISUAL_LEAK_DETECTOR_ENABLE)
61    # Force library linking by forcing the inclusion of a symbol
62    ADD_LINKER_FLAGS("-INCLUDE:__imp_?vld@@3VVisualLeakDetector@@A" Debug)
63    IF(MSVC90)
64      # VS 2008 incremental linker crashes with /INCLUDE most of the time
65      REMOVE_LINKER_FLAGS("-INCREMENTAL:YES" Debug)
66      ADD_LINKER_FLAGS   ("-INCREMENTAL:NO"  Debug)
67    ENDIF()
68  ENDIF()
69ENDIF()
70
[7163]71######### Library Behaviour (external) ##########
72
[5781]73# Use TinyXML++
74ADD_COMPILER_FLAGS("-DTIXML_USE_TICPP")
75
[8416]76# Default linking for externals
77IF(CMAKE_BUILD_TYPE MATCHES "(Debug|RelForDevs)")
78  SET(_default_link_mode "SHARED")
79ELSE()
80  SET(_default_link_mode "STATIC")
81ENDIF()
82SET(_message "Link mode for external libraries that we build ourselves. Note: on Windows, some libraries cannot be linked shared.")
83SET(ORXONOX_EXTERNAL_LINK_MODE "${_default_link_mode}" CACHE STRING "${_message}")
[7163]84
85IF(ORXONOX_EXTERNAL_LINK_MODE STREQUAL "SHARED")
86  SET(_external_shared_link TRUE)
87ELSE()
88  SET(_external_shared_link FALSE)
89ENDIF()
90# If no defines are specified, these libs get linked dynamically
[7459]91ADD_COMPILER_FLAGS("-DENET_DLL"                    WIN32     _external_shared_link)
[7163]92ADD_COMPILER_FLAGS("-DOGRE_GUIRENDERER_STATIC_LIB" WIN32 NOT _external_shared_link)
93ADD_COMPILER_FLAGS("-DOIS_STATIC_LIB"              WIN32 NOT _external_shared_link)
94
[2710]95############## Include Directories ##############
96
97# Set the search paths for include files
98INCLUDE_DIRECTORIES(
[8351]99  # OrxonoxConfig.h
100  ${CMAKE_CURRENT_BINARY_DIR}
101
102  # All includes in "externals" should be prefixed with the path
103  # relative to "external" to avoid conflicts
104  ${CMAKE_CURRENT_SOURCE_DIR}/external
105  # Include directories needed even if only included by Orxonox
106  ${CMAKE_CURRENT_SOURCE_DIR}/external/bullet
107  ${CMAKE_CURRENT_SOURCE_DIR}/external/ois
108
[2710]109  # External
110  ${OGRE_INCLUDE_DIR}
[5781]111  ${CEGUI_INCLUDE_DIR}
[8351]112  ${CEGUI_TOLUA_INCLUDE_DIR}
[7459]113  #${ENET_INCLUDE_DIR}
[2710]114  ${Boost_INCLUDE_DIRS}
[7224]115  ${POCO_INCLUDE_DIR}
[5781]116  ${OPENAL_INCLUDE_DIRS}
117  ${ALUT_INCLUDE_DIR}
118  ${VORBIS_INCLUDE_DIR}
119  ${OGG_INCLUDE_DIR}
[8351]120  ${LUA5.1_INCLUDE_DIR}
[5781]121  ${TCL_INCLUDE_PATH}
122  ${DIRECTX_INCLUDE_DIR}
123  ${ZLIB_INCLUDE_DIR}
[2710]124)
125
[8351]126IF(CEGUI_OLD_VERSION)
127  INCLUDE_DIRECTORIES(${CEGUILUA_INCLUDE_DIR})
[5781]128ENDIF()
129
[7451]130IF (DBGHELP_FOUND)
131  INCLUDE_DIRECTORIES(${DBGHELP_INCLUDE_DIR})
132ENDIF()
133
[8412]134IF(VISUAL_LEAK_DETECTOR_ENABLE)
135  INCLUDE_DIRECTORIES(${VLD_INCLUDE_DIR})
136ENDIF()
137
[8351]138############## CEGUI OGRE Renderer ##############
139
140IF(CEGUI_OGRE_RENDERER_BUILD_REQUIRED)
141  SET(CEGUI_OGRE_RENDERER_LIBRARY ogreceguirenderer_orxonox)
142ENDIF()
143
[5752]144################### Tolua Bind ##################
145
146# Create directory because the tolua application doesn't work otherwise
147IF(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/toluabind/${CMAKE_CFG_INTDIR})
148  FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/toluabind/${CMAKE_CFG_INTDIR})
149ENDIF()
150
151INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/toluabind/${CMAKE_CFG_INTDIR})
152
[2710]153################ Sub Directories ################
154
[5738]155ADD_SUBDIRECTORY(external)
156ADD_SUBDIRECTORY(libraries)
[5752]157ADD_SUBDIRECTORY(orxonox)
[8079]158SET(ORXONOX_MODULES CACHE INTERNAL "")
[5738]159ADD_SUBDIRECTORY(modules)
[1505]160
[7401]161################## Executable ###################
[1854]162
[5752]163INCLUDE_DIRECTORIES(
164  ${CMAKE_CURRENT_SOURCE_DIR}/libraries
165  ${CMAKE_CURRENT_SOURCE_DIR}/orxonox
166)
167
[5738]168# Translate argument
169IF(ORXONOX_USE_WINMAIN)
170  SET(ORXONOX_WIN32 WIN32)
[2710]171ENDIF()
[1810]172
[8351]173SET(ORXONOX_MAIN_FILES Orxonox.cc)
174
175# Add special source file for OS X
176IF(APPLE)
177  LIST(APPEND ORXONOX_MAIN_FILES OrxonoxMac.mm)
178ENDIF()
179
[5738]180ORXONOX_ADD_EXECUTABLE(orxonox-main
181  # When defined as WIN32 this removes the console window on Windows
182  ${ORXONOX_WIN32}
183  LINK_LIBRARIES
184    orxonox
185  SOURCE_FILES
[8351]186    ${ORXONOX_MAIN_FILES}
[5738]187  OUTPUT_NAME orxonox
188)
[7401]189# Main executable should depend on all modules
190ADD_DEPENDENCIES(orxonox-main ${ORXONOX_MODULES})
[1810]191
[5752]192# Get name to configure the run scripts
[5738]193GET_TARGET_PROPERTY(_exec_loc orxonox-main LOCATION)
194GET_FILENAME_COMPONENT(_exec_name ${_exec_loc} NAME)
195SET(ORXONOX_EXECUTABLE_NAME ${_exec_name} CACHE INTERNAL "")
[5744]196
197
198# When using Visual Studio we want to use the output directory as working
199# directory and we also want to specify where the external dlls
200# (lua, ogre, etc.) are. The problem hereby is that these information cannot
201# be specified in CMake because they are not stored in the actual project file.
202# This workaround will create a configured *.vcproj.user file that holds the
203# right values. When starting the solution for the first time,
204# these get written to the *vcproj.yourPCname.yourname.user
205IF(MSVC)
206  IF(CMAKE_CL_64)
207    SET(MSVC_PLATFORM "x64")
208  ELSE()
209    SET(MSVC_PLATFORM "Win32")
210  ENDIF()
[8351]211  IF(MSVC10)
212    CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/orxonox-main.vcxproj.user.in" "${CMAKE_CURRENT_BINARY_DIR}/orxonox-main.vcxproj.user")
213  ELSE()
214    STRING(REGEX REPLACE "^Visual Studio ([0-9][0-9]?).*$" "\\1"
215           VISUAL_STUDIO_VERSION_SIMPLE "${CMAKE_GENERATOR}")
216    CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/orxonox-main.vcproj.user.in" "${CMAKE_CURRENT_BINARY_DIR}/orxonox-main.vcproj.user")
217  ENDIF()
[5744]218ENDIF(MSVC)
[7401]219
[8351]220# Apple Mac OS X specific build settings
221IF(APPLE)
222  # On Apple we need to link to AppKit and Foundation frameworks
223  TARGET_LINK_LIBRARIES(orxonox-main
224    "-framework AppKit"
225    "-framework Foundation"
226  )
227
228  # Post-build step for the creation of the Dev-App bundle
229  INCLUDE(PrepareDevBundle)
230  ADD_CUSTOM_COMMAND(
231    TARGET orxonox-main
232    POST_BUILD
233    # Copy the executable into the Orxonox.app
234    COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/${ORXONOX_EXECUTABLE_NAME}" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/${PROJECT_NAME}.app/Contents/MacOS"
235    # Copy the dev-build marker file to Orxonox.app
236    COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/orxonox_dev_build.keep_me" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/${PROJECT_NAME}.app/Contents/MacOS"
237    # Create a shortcut of the application to the root of the build tree
238    COMMAND ${CMAKE_COMMAND} -E create_symlink "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/${PROJECT_NAME}.app" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app"
239  )
240ENDIF(APPLE)
241
[7401]242#################### Doxygen ####################
243
244# Prepare include paths for Doxygen. This is necessary to display
245# the correct path to use when including a file, e.g.
246# core/XMLPort.h instead of src/core/XMLPort.h
247
248INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/modules)
249GET_DIRECTORY_PROPERTY(_temp INCLUDE_DIRECTORIES)
250# Replace ';' by spaces
251STRING(REPLACE ";" " " _temp "${_temp}")
252SET(DOXYGEN_INCLUDE_DIRECTORIES "${_temp}" PARENT_SCOPE)
Note: See TracBrowser for help on using the repository browser.