Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/libraries/cmake/BuildConfig.cmake @ 5633

Last change on this file since 5633 was 5626, checked in by landauf, 15 years ago

Added a dynamic library loader (more or less a copy of Ogre::DynLibManager but with some adjustments for Orxonox). This allows us to load plugins at runtime. Plugin-libraries must be declared with the "PLUGIN" switch in ORXONOX_ADD_LIBRARY in CMake.

  • Property svn:eol-style set to native
File size: 8.7 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 #    This also includes handling the OGRE plugins and the media directory.
25 #
26
27################# Misc Settings #################
28
29# Standard path suffixes, might not hold everywhere though
30SET(DEFAULT_RUNTIME_PATH bin)
31SET(DEFAULT_LIBRARY_PATH lib)
32SET(DEFAULT_ARCHIVE_PATH lib/static)
33SET(DEFAULT_PLUGIN_PATH  lib/plugins)
34SET(DEFAULT_DOC_PATH     doc)
35SET(DEFAULT_MEDIA_PATH   media)
36SET(DEFAULT_CONFIG_PATH  config)
37SET(DEFAULT_LOG_PATH     log)
38
39# Set output directories
40SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${DEFAULT_RUNTIME_PATH})
41SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${DEFAULT_LIBRARY_PATH})
42SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${DEFAULT_ARCHIVE_PATH})
43SET(CMAKE_PLUGIN_OUTPUT_DIRECTORY  ${CMAKE_BINARY_DIR}/${DEFAULT_PLUGIN_PATH})
44# Do not set doc and media, rather check in the two subdirectories
45# whether they concur with the DEFAULT_..._PATH
46SET(CMAKE_CONFIG_OUTPUT_DIRECTORY  ${CMAKE_BINARY_DIR}/${DEFAULT_CONFIG_PATH})
47SET(CMAKE_LOG_OUTPUT_DIRECTORY     ${CMAKE_BINARY_DIR}/${DEFAULT_LOG_PATH})
48
49# Take care of some CMake 2.6.0 leftovers
50MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
51
52# Sets where to find the external libraries like OgreMain.dll at runtime
53# On Unix you should not have to change this at all.
54IF(NOT ORXONOX_RUNTIME_LIBRARY_DIRECTORY)
55  SET(ORXONOX_RUNTIME_LIBRARY_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
56ENDIF()
57
58# Set Debug build to default when not having multi-config generator like msvc
59IF(NOT CMAKE_CONFIGURATION_TYPES)
60  IF(NOT CMAKE_BUILD_TYPE)
61    SET(CMAKE_BUILD_TYPE Debug CACHE STRING
62        "Build types are: Debug, Release, MinSizeRel, RelWithDebInfo" FORCE)
63  ENDIF()
64  MARK_AS_ADVANCED(CLEAR CMAKE_BUILD_TYPE)
65
66  MESSAGE(STATUS "*** Build type is ${CMAKE_BUILD_TYPE} ***")
67ELSE()
68  IF(CMAKE_BUILD_TYPE)
69    SET(CMAKE_BUILD_TYPE CACHE STRING FORCE)
70  ENDIF()
71  MARK_AS_ADVANCED(CMAKE_BUILD_TYPE)
72ENDIF()
73
74
75################# OGRE Plugins ##################
76
77# More plugins: Plugin_BSPSceneManager, Plugin_OctreeSceneManager
78SET(OGRE_PLUGINS_INT Plugin_ParticleFX)
79IF(WIN32)
80  # CG program manager is probably DirectX related (not available under unix)
81  LIST(APPEND OGRE_PLUGINS_INT Plugin_CgProgramManager)
82ENDIF(WIN32)
83SET(OGRE_PLUGINS ${OGRE_PLUGINS_INT} CACHE STRING
84   "Specify which OGRE plugins to load. Existance check is performed.")
85
86# Check the plugins and determine the plugin folder
87# You can give a hint by setting the environment variable ENV{OGRE_PLUGIN_DIR}
88INCLUDE(CheckOGREPlugins)
89CHECK_OGRE_PLUGINS(${OGRE_PLUGINS})
90
91
92################ Compiler Config ################
93
94OPTION(EXTRA_COMPILER_WARNINGS "Enable some extra warnings (heavily pollutes the output)" FALSE)
95
96INCLUDE(FlagUtilities)
97
98# Configure the compiler specific build options
99IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUC)
100  INCLUDE(BuildConfigGCC)
101ELSEIF(MSVC)
102  INCLUDE(BuildConfigMSVC)
103ELSE()
104  MESSAGE(STATUS "Warning: Your compiler is not officially supported.")
105ENDIF()
106
107SET(USER_SCRIPT_BUILD_CONFIG "" CACHE FILEPATH
108    "Specify a CMake script if you wish to write your own build config.
109     See BuildConfigGCC.cmake or BuildConfigMSVC.cmake for examples.")
110IF(USER_SCRIPT_BUILD_CONFIG)
111  IF(EXISTS ${CMAKE_MODULE_PATH}/${USER_SCRIPT_BUILD_CONFIG}.cmake)
112    INCLUDE(${USER_SCRIPT_BUILD_CONFIG})
113  ELSEIF(EXISTS ${USER_SCRIPT_BUILD_CONFIG})
114    INCLUDE(${USER_SCRIPT_BUILD_CONFIG})
115  ELSEIF(EXISTS ${CMAKE_MODULE_PATH}/${USER_SCRIPT_BUILD_CONFIG})
116    INCLUDE(${CMAKE_MODULE_PATH}/${USER_SCRIPT_BUILD_CONFIG})
117  ENDIF()
118ENDIF(USER_SCRIPT_BUILD_CONFIG)
119
120
121############# Installation Settings #############
122
123SET(_info_text "Puts all installed files in subfolders of the install prefix path. That root folder can then be moved, copied and renamed as you wish. The executable will not write to folders like ~/.orxonox or \"Applictation Data\"")
124IF(UNIX)
125  OPTION(INSTALL_COPYABLE "${_info_text}" FALSE)
126ELSE()
127  OPTION(INSTALL_COPYABLE "${_info_text}" TRUE)
128ENDIF()
129
130IF(INSTALL_COPYABLE)
131  # Note the relative paths. They will be resolved at runtime.
132  # For CMake operations CMAKE_INSTALL_PREFIX is always appended.
133  SET(ORXONOX_RUNTIME_INSTALL_PATH ${DEFAULT_RUNTIME_PATH})
134  SET(ORXONOX_LIBRARY_INSTALL_PATH ${DEFAULT_LIBRARY_PATH})
135  SET(ORXONOX_ARCHIVE_INSTALL_PATH ${DEFAULT_ARCHIVE_PATH})
136  SET(ORXONOX_PLUGIN_INSTALL_PATH  ${DEFAULT_PLUGIN_PATH})
137  SET(ORXONOX_DOC_INSTALL_PATH     ${DEFAULT_DOC_PATH})
138  SET(ORXONOX_MEDIA_INSTALL_PATH   ${DEFAULT_MEDIA_PATH})
139  SET(ORXONOX_CONFIG_INSTALL_PATH  ${DEFAULT_CONFIG_PATH})
140  SET(ORXONOX_LOG_INSTALL_PATH     ${DEFAULT_LOG_PATH})
141
142ELSEIF(UNIX) # Apple too?
143  # Using absolute paths
144  SET(ORXONOX_RUNTIME_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/bin)
145  SET(ORXONOX_LIBRARY_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/lib/orxonox)
146  SET(ORXONOX_ARCHIVE_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/lib/orxonox/static)
147  SET(ORXONOX_PLUGIN_INSTALL_PATH  ${CMAKE_INSTALL_PREFIX}/lib/orxonox/plugins)
148  SET(ORXONOX_DOC_INSTALL_PATH     ${CMAKE_INSTALL_PREFIX}/share/doc/orxonox)
149  SET(ORXONOX_MEDIA_INSTALL_PATH   ${CMAKE_INSTALL_PREFIX}/share/orxonox)
150  # These two paths are user and therefore runtime dependent --> only set relatively
151  SET(ORXONOX_CONFIG_INSTALL_PATH  ${DEFAULT_CONFIG_PATH})
152  SET(ORXONOX_LOG_INSTALL_PATH     ${DEFAULT_LOG_PATH})
153
154ELSEIF(WIN32)
155  SET(ORXONOX_RUNTIME_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/${DEFAULT_RUNTIME_PATH})
156  SET(ORXONOX_LIBRARY_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/${DEFAULT_LIBRARY_PATH})
157  SET(ORXONOX_ARCHIVE_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/${DEFAULT_ARCHIVE_PATH})
158  SET(ORXONOX_PLUGIN_INSTALL_PATH  ${CMAKE_INSTALL_PREFIX}/${DEFAULT_PLUGIN_PATH})
159  SET(ORXONOX_DOC_INSTALL_PATH     ${CMAKE_INSTALL_PREFIX}/${DEFAULT_DOC_PATH})
160  SET(ORXONOX_MEDIA_INSTALL_PATH   ${CMAKE_INSTALL_PREFIX}/${DEFAULT_MEDIA_PATH})
161  # Leave empty because it is user and therefore runtime dependent
162  SET(ORXONOX_CONFIG_INSTALL_PATH  ${DEFAULT_CONFIG_PATH})
163  SET(ORXONOX_LOG_INSTALL_PATH     ${DEFAULT_LOG_PATH})
164ENDIF()
165
166
167################## Unix rpath ###################
168
169# use, i.e. don't skip the full RPATH for the build tree
170SET(CMAKE_SKIP_BUILD_RPATH  FALSE)
171
172# when building, don't use the install RPATH already
173# (but later on when installing)
174SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
175
176# the RPATH to be used when installing
177SET(CMAKE_INSTALL_RPATH ${ORXONOX_LIBRARY_INSTALL_PATH})
178
179# add the automatically determined parts of the RPATH
180# which point to directories outside the build tree to the install RPATH
181SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
182
183
184################ Various options ################
185
186# Enable expensive optimisations: Use this for a binary release build
187OPTION(ORXONOX_RELEASE "Enable when building restributable releases" FALSE)
188
189# Use WinMain() or main()?
190IF(WIN32)
191  OPTION(ORXONOX_USE_WINMAIN "Use WinMain (doesn't show console) or main" FALSE)
192ENDIF()
193
194# Global switch to disable Precompiled Header Files
195IF(PCH_COMPILER_SUPPORT)
196  OPTION(PCH_ENABLE "Global PCH switch" TRUE)
197ENDIF()
198
199
200############ Static/Dynamic linking #############
201
202# Default linking is SHARED
203SET(ORXONOX_DEFAULT_LINK SHARED)
204
205# Disable Boost auto linking completely
206ADD_COMPILER_FLAGS("-DBOOST_ALL_NO_LIB")
207
208# If no defines are specified, these libs get linked statically
209ADD_COMPILER_FLAGS("-DBOOST_ALL_DYN_LINK" WIN32 LINK_BOOST_DYNAMIC)
210ADD_COMPILER_FLAGS("-DENET_DLL"           WIN32 LINK_ENET_DYNAMIC)
211ADD_COMPILER_FLAGS("-DLUA_BUILD_AS_DLL"   WIN32 LINK_LUA_DYNAMIC)
212ADD_COMPILER_FLAGS("-DZLIB_DLL"           WIN32 LINK_ZLIB_DYNAMIC)
213
214# If no defines are specified, these libs get linked dynamically
215# You can change that optionally in the Cache.
216ADD_COMPILER_FLAGS("-DCEGUI_STATIC"       WIN32 NOT LINK_CEGUI_DYNAMIC)
217ADD_COMPILER_FLAGS("-DOGRE_STATIC_LIB"    WIN32 NOT LINK_OGRE_DYNAMIC)
218ADD_COMPILER_FLAGS("-DSTATIC_BUILD"       WIN32 NOT LINK_TCL_DYNAMIC)
Note: See TracBrowser for help on using the repository browser.