Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/presentation3/src/CMakeLists.txt @ 7144

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

Static linking to the libraries in src/external should work now (at least on Windows with MSVC).
There are no STATIC/SHARED options anymore. Instead all of our own libraries get linked dynamically anyway because it simply doesn't work otherwise (there is really no way to link them statically).
The linking behaviour for external libraries can be changed with the CMake cache variable ORXONOX_EXTERNAL_LINK_MODE, but it defaults to SHARED.
Also, I had to revert the DEFINE_SYMBOL changes.

  • Property svn:eol-style set to native
File size: 5.6 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)
40ADD_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("-DOGRE_GUIRENDERER_STATIC_LIB" WIN32 NOT _external_shared_link)
64ADD_COMPILER_FLAGS("-DOIS_STATIC_LIB"              WIN32 NOT _external_shared_link)
65ADD_COMPILER_FLAGS("-DTOLUA_STATIC_BUILD"          WIN32 NOT _external_shared_link)
66
67############## Include Directories ##############
68
69# Set the search paths for include files
70INCLUDE_DIRECTORIES(
71  # External
72  ${OGRE_INCLUDE_DIR}
73  ${CEGUI_INCLUDE_DIR}
74  ${ENET_INCLUDE_DIR}
75  ${Boost_INCLUDE_DIRS}
76  ${OPENAL_INCLUDE_DIRS}
77  ${ALUT_INCLUDE_DIR}
78  ${VORBIS_INCLUDE_DIR}
79  ${OGG_INCLUDE_DIR}
80  ${LUA_INCLUDE_DIR}
81  ${TCL_INCLUDE_PATH}
82  ${DIRECTX_INCLUDE_DIR}
83  ${ZLIB_INCLUDE_DIR}
84  ${VLD_INCLUDE_DIR}
85
86  # All includes in "externals" should be prefixed with the path
87  # relative to "external" to avoid conflicts
88  ${CMAKE_CURRENT_SOURCE_DIR}/external
89  # Include directories needed even if only included by Orxonox
90  ${CMAKE_CURRENT_SOURCE_DIR}/external/bullet
91  ${CMAKE_CURRENT_SOURCE_DIR}/external/ois
92
93  # OrxonoxConfig.h
94  ${CMAKE_CURRENT_BINARY_DIR}
95)
96
97IF(CEGUILUA_USE_INTERNAL_LIBRARY)
98  INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/external/ceguilua/ceguilua-${CEGUI_VERSION})
99ENDIF()
100
101################### Tolua Bind ##################
102
103# Create directory because the tolua application doesn't work otherwise
104IF(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/toluabind/${CMAKE_CFG_INTDIR})
105  FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/toluabind/${CMAKE_CFG_INTDIR})
106ENDIF()
107
108INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/toluabind/${CMAKE_CFG_INTDIR})
109
110################ Sub Directories ################
111
112ADD_SUBDIRECTORY(external)
113ADD_SUBDIRECTORY(libraries)
114ADD_SUBDIRECTORY(orxonox)
115ADD_SUBDIRECTORY(modules)
116
117################ Executable ################
118
119INCLUDE_DIRECTORIES(
120  ${CMAKE_CURRENT_SOURCE_DIR}/libraries
121  ${CMAKE_CURRENT_SOURCE_DIR}/orxonox
122)
123
124# Translate argument
125IF(ORXONOX_USE_WINMAIN)
126  SET(ORXONOX_WIN32 WIN32)
127ENDIF()
128
129ORXONOX_ADD_EXECUTABLE(orxonox-main
130  # When defined as WIN32 this removes the console window on Windows
131  ${ORXONOX_WIN32}
132  LINK_LIBRARIES
133    orxonox
134  SOURCE_FILES
135    Orxonox.cc
136  OUTPUT_NAME orxonox
137)
138
139# Get name to configure the run scripts
140GET_TARGET_PROPERTY(_exec_loc orxonox-main LOCATION)
141GET_FILENAME_COMPONENT(_exec_name ${_exec_loc} NAME)
142SET(ORXONOX_EXECUTABLE_NAME ${_exec_name} CACHE INTERNAL "")
143
144
145# When using Visual Studio we want to use the output directory as working
146# directory and we also want to specify where the external dlls
147# (lua, ogre, etc.) are. The problem hereby is that these information cannot
148# be specified in CMake because they are not stored in the actual project file.
149# This workaround will create a configured *.vcproj.user file that holds the
150# right values. When starting the solution for the first time,
151# these get written to the *vcproj.yourPCname.yourname.user
152IF(MSVC)
153  IF(CMAKE_CL_64)
154    SET(MSVC_PLATFORM "x64")
155  ELSE()
156    SET(MSVC_PLATFORM "Win32")
157  ENDIF()
158  STRING(REGEX REPLACE "^Visual Studio ([0-9][0-9]?) .*$" "\\1"
159         VISUAL_STUDIO_VERSION_SIMPLE "${CMAKE_GENERATOR}")
160  CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/orxonox-main.vcproj.user.in" "${CMAKE_CURRENT_BINARY_DIR}/orxonox-main.vcproj.user")
161ENDIF(MSVC)
Note: See TracBrowser for help on using the repository browser.