Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/environment/src/CMakeLists.txt @ 8416

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

Generalized and cleaned up the creation of the Apple Dev Bundle. No more desktop icon now, but you still can\'t start it via Xcode. You\'ll have to use the symlink in the project build directory root instead.

  • Property svn:eol-style set to native
File size: 7.5 KB
Line 
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 #
19 #
20 #  Author:
21 #    Reto Grieder
22 #  Description:
23 #    Configures the compilers and sets build options.
24 #
25
26# Required macros and functions
27INCLUDE(FlagUtilities)
28INCLUDE(TargetUtilities)
29
30# Configure the two headers and set some options
31INCLUDE(OrxonoxConfig.cmake)
32
33####### Library Behaviour (dependencies) ########
34
35# Disable Boost auto linking completely
36ADD_COMPILER_FLAGS("-DBOOST_ALL_NO_LIB")
37
38# If no defines are specified, these libs get linked statically
39ADD_COMPILER_FLAGS("-DBOOST_ALL_DYN_LINK" WIN32 LINK_BOOST_DYNAMIC)
40#ADD_COMPILER_FLAGS("-DENET_DLL"           WIN32 LINK_ENET_DYNAMIC)
41ADD_COMPILER_FLAGS("-DLUA_BUILD_AS_DLL"   WIN32 LINK_LUA_DYNAMIC)
42ADD_COMPILER_FLAGS("-DZLIB_DLL"           WIN32 LINK_ZLIB_DYNAMIC)
43# If no defines are specified, these libs get linked dynamically
44ADD_COMPILER_FLAGS("-DCEGUI_STATIC"       WIN32 NOT LINK_CEGUI_DYNAMIC)
45ADD_COMPILER_FLAGS("-DOGRE_STATIC_LIB"    WIN32 NOT LINK_OGRE_DYNAMIC)
46ADD_COMPILER_FLAGS("-DSTATIC_BUILD"       WIN32 NOT LINK_TCL_DYNAMIC)
47
48######### Library Behaviour (external) ##########
49
50# Use TinyXML++
51ADD_COMPILER_FLAGS("-DTIXML_USE_TICPP")
52
53# Default linking for externals is SHARED
54SET(ORXONOX_EXTERNAL_LINK_MODE SHARED CACHE STRING "Link mode for external libraries that we build ourselves. Note: on Windows, some libraries cannot be linked shared.")
55
56IF(ORXONOX_EXTERNAL_LINK_MODE STREQUAL "SHARED")
57  SET(_external_shared_link TRUE)
58ELSE()
59  SET(_external_shared_link FALSE)
60ENDIF()
61# If no defines are specified, these libs get linked dynamically
62ADD_COMPILER_FLAGS("-DCEGUILUA_STATIC"             WIN32 NOT _external_shared_link)
63ADD_COMPILER_FLAGS("-DENET_DLL"                    WIN32     _external_shared_link)
64ADD_COMPILER_FLAGS("-DOGRE_GUIRENDERER_STATIC_LIB" WIN32 NOT _external_shared_link)
65ADD_COMPILER_FLAGS("-DOIS_STATIC_LIB"              WIN32 NOT _external_shared_link)
66ADD_COMPILER_FLAGS("-DTOLUA_STATIC_BUILD"          WIN32 NOT _external_shared_link)
67
68############## Include Directories ##############
69
70# Set the search paths for include files
71INCLUDE_DIRECTORIES(
72  # OrxonoxConfig.h
73  ${CMAKE_CURRENT_BINARY_DIR}
74
75  # All includes in "externals" should be prefixed with the path
76  # relative to "external" to avoid conflicts
77  ${CMAKE_CURRENT_SOURCE_DIR}/external
78  # Include directories needed even if only included by Orxonox
79  ${CMAKE_CURRENT_SOURCE_DIR}/external/bullet
80  ${CMAKE_CURRENT_SOURCE_DIR}/external/ois
81
82  # External
83  ${OGRE_INCLUDE_DIR}
84  ${CEGUI_INCLUDE_DIR}
85  #${ENET_INCLUDE_DIR}
86  ${Boost_INCLUDE_DIRS}
87  ${POCO_INCLUDE_DIR}
88  ${OPENAL_INCLUDE_DIRS}
89  ${ALUT_INCLUDE_DIR}
90  ${VORBIS_INCLUDE_DIR}
91  ${OGG_INCLUDE_DIR}
92  ${LUA_INCLUDE_DIR}
93  ${TCL_INCLUDE_PATH}
94  ${DIRECTX_INCLUDE_DIR}
95  ${ZLIB_INCLUDE_DIR}
96  ${VLD_INCLUDE_DIR}
97)
98
99IF(CEGUILUA_USE_INTERNAL_LIBRARY)
100  INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/external/ceguilua/ceguilua-${CEGUI_VERSION})
101ENDIF()
102
103IF (DBGHELP_FOUND)
104  INCLUDE_DIRECTORIES(${DBGHELP_INCLUDE_DIR})
105ENDIF()
106
107################### Tolua Bind ##################
108
109# Create directory because the tolua application doesn't work otherwise
110IF(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/toluabind/${CMAKE_CFG_INTDIR})
111  FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/toluabind/${CMAKE_CFG_INTDIR})
112ENDIF()
113
114INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/toluabind/${CMAKE_CFG_INTDIR})
115
116################ Sub Directories ################
117
118ADD_SUBDIRECTORY(external)
119ADD_SUBDIRECTORY(libraries)
120ADD_SUBDIRECTORY(orxonox)
121ADD_SUBDIRECTORY(modules)
122
123################## Executable ###################
124
125INCLUDE_DIRECTORIES(
126  ${CMAKE_CURRENT_SOURCE_DIR}/libraries
127  ${CMAKE_CURRENT_SOURCE_DIR}/orxonox
128)
129
130# Translate argument
131IF(ORXONOX_USE_WINMAIN)
132  SET(ORXONOX_WIN32 WIN32)
133ENDIF()
134
135ORXONOX_ADD_EXECUTABLE(orxonox-main
136  # When defined as WIN32 this removes the console window on Windows
137  ${ORXONOX_WIN32}
138  LINK_LIBRARIES
139    orxonox
140  SOURCE_FILES
141    Orxonox.cc
142    OrxonoxMac.mm
143  OUTPUT_NAME orxonox
144)
145
146# Main executable should depend on all modules
147ADD_DEPENDENCIES(orxonox-main ${ORXONOX_MODULES})
148
149# Get name to configure the run scripts
150GET_TARGET_PROPERTY(_exec_loc orxonox-main LOCATION)
151GET_FILENAME_COMPONENT(_exec_name ${_exec_loc} NAME)
152SET(ORXONOX_EXECUTABLE_NAME ${_exec_name} CACHE INTERNAL "")
153
154
155# When using Visual Studio we want to use the output directory as working
156# directory and we also want to specify where the external dlls
157# (lua, ogre, etc.) are. The problem hereby is that these information cannot
158# be specified in CMake because they are not stored in the actual project file.
159# This workaround will create a configured *.vcproj.user file that holds the
160# right values. When starting the solution for the first time,
161# these get written to the *vcproj.yourPCname.yourname.user
162IF(MSVC)
163  IF(CMAKE_CL_64)
164    SET(MSVC_PLATFORM "x64")
165  ELSE()
166    SET(MSVC_PLATFORM "Win32")
167  ENDIF()
168  STRING(REGEX REPLACE "^Visual Studio ([0-9][0-9]?) .*$" "\\1"
169         VISUAL_STUDIO_VERSION_SIMPLE "${CMAKE_GENERATOR}")
170  CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/orxonox-main.vcproj.user.in" "${CMAKE_CURRENT_BINARY_DIR}/orxonox-main.vcproj.user")
171ENDIF(MSVC)
172
173# Apple Mac OS X specific build settings
174IF(APPLE)
175  # On Apple we need to link to AppKit and Foundation frameworks
176  TARGET_LINK_LIBRARIES(orxonox-main
177    "-framework AppKit"
178    "-framework Foundation"
179  )
180
181  # Post-build step for the creation of the Dev-App bundle
182  INCLUDE(PrepareDevBundle)
183  ADD_CUSTOM_COMMAND(
184    TARGET orxonox-main
185    POST_BUILD
186    # Copy the executable into the Orxonox.app
187    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"
188    # Copy the dev-build marker file to Orxonox.app
189    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"
190    # Create a shortcut of the application to the root of the build tree
191    COMMAND ${CMAKE_COMMAND} -E create_symlink "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/${PROJECT_NAME}.app" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app"
192  )
193ENDIF(APPLE)
194
195#################### Doxygen ####################
196
197# Prepare include paths for Doxygen. This is necessary to display
198# the correct path to use when including a file, e.g.
199# core/XMLPort.h instead of src/core/XMLPort.h
200
201INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/modules)
202GET_DIRECTORY_PROPERTY(_temp INCLUDE_DIRECTORIES)
203# Replace ';' by spaces
204STRING(REPLACE ";" " " _temp "${_temp}")
205SET(DOXYGEN_INCLUDE_DIRECTORIES "${_temp}" PARENT_SCOPE)
Note: See TracBrowser for help on using the repository browser.