-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
187 lines (168 loc) · 8.56 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
set_property(GLOBAL PROPERTY USE_FOLDERS On)
cmake_minimum_required(VERSION 2.8.3)
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMakeModules;${CMAKE_MODULE_PATH}")
project(OmegaLib)
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install)
include(CPack)
if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
#cmake_policy(SET CMP0008 NEW)
endif(COMMAND cmake_policy)
message("CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
# Fin the current branch
execute_process(
COMMAND git rev-parse --abbrev-ref HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_BRANCH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(CMAKE_GENERATOR STREQUAL "Xcode")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libstdc++" CACHE STRING "" FORCE)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -stdlib=libstdc++" CACHE STRING "" FORCE)
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libstdc++" CACHE STRING "" FORCE)
SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -stdlib=libstdc++" CACHE STRING "" FORCE)
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -stdlib=libstdc++" CACHE STRING "" FORCE)
endif(CMAKE_GENERATOR STREQUAL "Xcode")
#-------------------------------------------------------------------------------
# Create a build name depending on the OS, Toolset and architecture.
if(CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008")
set(OMEGA_OS_WIN 1)
set(OMEGA_ARCH_32 1)
set(OMEGA_ARCH_WIN32 1)
set(OMEGA_TOOL_VS9 1)
elseif(CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008 Win64")
set(OMEGA_OS_WIN 1)
set(OMEGA_ARCH_64 1)
set(OMEGA_ARCH_WIN32 1)
set(OMEGA_TOOL_VS9 1)
elseif(CMAKE_GENERATOR STREQUAL "Visual Studio 10" OR CMAKE_GENERATOR STREQUAL "Visual Studio 10 2010")
set(OMEGA_OS_WIN 1)
set(OMEGA_ARCH_32 1)
set(OMEGA_ARCH_WIN32 1)
set(OMEGA_TOOL_VS10 1)
elseif(CMAKE_GENERATOR STREQUAL "Visual Studio 10 Win64" OR CMAKE_GENERATOR STREQUAL "Visual Studio 10 2010 Win64")
set(OMEGA_OS_WIN 1)
set(OMEGA_ARCH_64 1)
set(OMEGA_ARCH_WIN32 1)
set(OMEGA_TOOL_VS10 1)
elseif(CMAKE_GENERATOR STREQUAL "Visual Studio 11" OR CMAKE_GENERATOR STREQUAL "Visual Studio 11 2012")
set(OMEGA_OS_WIN 1)
set(OMEGA_ARCH_32 1)
set(OMEGA_ARCH_WIN32 1)
set(OMEGA_TOOL_VS11 1)
elseif(CMAKE_GENERATOR STREQUAL "Visual Studio 11 Win64" OR CMAKE_GENERATOR STREQUAL "Visual Studio 10 2012 Win64")
set(OMEGA_OS_WIN 1)
set(OMEGA_ARCH_64 1)
set(OMEGA_ARCH_WIN32 1)
set(OMEGA_TOOL_VS11 1)
elseif(CMAKE_GENERATOR STREQUAL "Visual Studio 12" OR CMAKE_GENERATOR STREQUAL "Visual Studio 12 2013")
set(OMEGA_OS_WIN 1)
set(OMEGA_ARCH_32 1)
set(OMEGA_ARCH_WIN32 1)
set(OMEGA_TOOL_VS12 1)
elseif(CMAKE_GENERATOR STREQUAL "Visual Studio 12 Win64" OR CMAKE_GENERATOR STREQUAL "Visual Studio 12 2013 Win64")
set(OMEGA_OS_WIN 1)
set(OMEGA_ARCH_64 1)
set(OMEGA_ARCH_WIN32 1)
set(OMEGA_TOOL_VS12 1)
elseif(CMAKE_GENERATOR STREQUAL "Unix Makefiles")
if(APPLE)
execute_process(COMMAND sw_vers -productVersion OUTPUT_VARIABLE _CURRENT_OSX_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
string(REGEX REPLACE "^([0-9]+\\.[0-9]+).*$" "\\1" CURRENT_OSX_VERSION "${_CURRENT_OSX_VERSION}" )
set(CMAKE_MACOSX_RPATH ON)
set(CMAKE_INSTALL_RPATH "@executable_path")
set(CMAKE_BUILD_WITH_INSTALL_RPATH True)
set(OMEGA_OS_OSX 1)
set(OMEGA_ARCH_64 1)
set(OMEGA_TOOL_GCC 1)
set(CMAKE_CXX_FLAGS "-Wno-ignored-qualifiers -Wno-enum-compare -Wno-deprecated-declarations -Wno-logical-op-parentheses -Wno-switch -Wno-c++11-compat-deprecated-writable-strings -Wno-return-type-c-linkage -Wno-unused-value -Wno-dynamic-class-memaccess -Wno-parentheses-equality -stdlib=libstdc++" CACHE STRING "compile flags" FORCE)
else(APPLE)
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
set(OMEGA_OS_LINUX 1)
set(OMEGA_ARCH_64 1)
set(OMEGA_ARCH_AMD64 1)
set(OMEGA_TOOL_GCC 1)
else()
set(OMEGA_OS_LINUX 1)
set(OMEGA_ARCH_32 1)
set(OMEGA_ARCH_I386 1)
set(OMEGA_TOOL_GCC 1)
endif()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -ldl -lrt")
# NOTE: If I add following line to disable some gcc warnings
# I will get failed link errors due to the -fPIC x86_64 invalid relocation
# on osgBullet. Maybe some CXX flags gets rewritten somewhat?
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wp,-w -Wno-int-to-pointer-cast -Wno-unused-value -Wno-enum-compare -Wno-write-strings")
# needed on Redhat-based ditros or you will get a link error for forkpty/openpty
# (move this to omega CmakeLists only?)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lutil -fPIC")
#set(CMAKE_POSITION_INDEPENDENT_CODE On)
endif()
elseif(CMAKE_GENERATOR STREQUAL "Xcode")
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
set(OMEGA_OS_OSX 1)
set(OMEGA_ARCH_32 1)
set(OMEGA_ARCH_I386 1)
set(OMEGA_TOOL_GCC 1)
endif(CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008")
# The default home directory is the omegalib source directoy. At runtime this
# will be replaced by the OMEGA_HOME environment variable when available.
set(OMEGA_HOME "${OmegaLib_SOURCE_DIR}")
if(OMEGA_OS_WIN)
add_definitions(-D_WIN32_WINNT=0x0600)
add_definitions(-DWINNT=0x600)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /DWIN32")
endif(OMEGA_OS_WIN)
#-------------------------------------------------------------------------------
# Set the output directories for libraries and binary files
if(MSVC OR CMAKE_GENERATOR STREQUAL "Xcode")
# Since visual studio builds are multiconfiguration, set two separate directories for debug and release builds
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${OmegaLib_BINARY_DIR}/bin/debug)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${OmegaLib_BINARY_DIR}/bin/release)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO ${OmegaLib_BINARY_DIR}/bin/release)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${OmegaLib_BINARY_DIR}/lib/debug)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${OmegaLib_BINARY_DIR}/lib/release)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO ${OmegaLib_BINARY_DIR}/lib/release)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${OmegaLib_BINARY_DIR}/bin/debug)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${OmegaLib_BINARY_DIR}/bin/release)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${OmegaLib_BINARY_DIR}/bin/release)
# Make sure the output bin directories exist, so the cmake scripts can copy
# third party dlls there if needed.
file(MAKE_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG})
file(MAKE_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE})
else(MSVC OR CMAKE_GENERATOR STREQUAL "Xcode")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OmegaLib_BINARY_DIR}/bin)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OmegaLib_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OmegaLib_BINARY_DIR}/bin)
file(MAKE_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
file(MAKE_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
endif(MSVC OR CMAKE_GENERATOR STREQUAL "Xcode")
#-------------------------------------------------------------------------------
# Visual studio specific options.
# if(MSVC)
# # Exclude libcmt when linking in visual studio
# set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NODEFAULTLIB:libcmt.lib")# set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} /NODEFAULTLIB:libcmt.lib")
# add_definitions(-D_CRT_SECURE_NO_WARNINGS /wd4244 /wd4018)
# endif(MSVC)
#-------------------------------------------------------------------------------
# Identify omegalib core version
file(STRINGS ${CMAKE_SOURCE_DIR}/include/version.h
OMEGALIB_VERSION_MAJOR
REGEX "^#define OMEGA_VERSION_MAJOR.*")
file(STRINGS ${CMAKE_SOURCE_DIR}/include/version.h
OMEGALIB_VERSION_MINOR
REGEX "^#define OMEGA_VERSION_MINOR.*")
file(STRINGS ${CMAKE_SOURCE_DIR}/include/version.h
OMEGALIB_VERSION_REVISION
REGEX "^#define OMEGA_VERSION_REVISION.*")
string(REGEX MATCH "[0-9]+" OMEGALIB_VERSION_MAJOR ${OMEGALIB_VERSION_MAJOR})
string(REGEX MATCH "[0-9]+" OMEGALIB_VERSION_MINOR ${OMEGALIB_VERSION_MINOR})
string(REGEX MATCH "[0-9]+" OMEGALIB_VERSION_REVISION ${OMEGALIB_VERSION_REVISION})
if(${OMEGALIB_VERSION_REVISION} GREATER 0)
set(OMEGALIB_VERSION ${OMEGALIB_VERSION_MAJOR}.${OMEGALIB_VERSION_MINOR}.${OMEGALIB_VERSION_REVISION})
else()
set(OMEGALIB_VERSION ${OMEGALIB_VERSION_MAJOR}.${OMEGALIB_VERSION_MINOR})
endif()
message("Omegalib version identified: ${OMEGALIB_VERSION} - ${GIT_BRANCH}")
# Add subdirectiories
add_subdirectory(src)