forked from robotics-erlangen/framework
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
170 lines (150 loc) · 6.83 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
# ***************************************************************************
# * Copyright 2015 Michael Eischer, Philipp Nordhus *
# * Robotics Erlangen e.V. *
# * http://www.robotics-erlangen.de/ *
# * info@robotics-erlangen.de *
# * *
# * This program is free software: you can redistribute it and/or modify *
# * it under the terms of the GNU General Public License as published by *
# * the Free Software Foundation, either version 3 of the License, or *
# * any later version. *
# * *
# * This program is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU General Public License for more details. *
# * *
# * You should have received a copy of the GNU General Public License *
# * along with this program. If not, see <http://www.gnu.org/licenses/>. *
# ***************************************************************************
cmake_minimum_required(VERSION 2.8.9)
project(erforce)
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
if(POLICY CMP0020)
cmake_policy(SET CMP0020 NEW) # remove if CMake >= 2.8.11 required
endif()
if(POLICY CMP0043) # compatibility with CMake 3.0.1
cmake_policy(SET CMP0043 OLD)
endif()
if(POLICY CMP0058)
cmake_policy(SET CMP0058 NEW)
endif()
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=gnu++11")
if(NOT CMAKE_BUILD_TYPE)
message(STATUS "Setting build type to Release")
set(CMAKE_BUILD_TYPE "Release")
endif()
if(APPLE)
# the option "S" prevents execution of ranlib
SET(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Sqc <TARGET> <LINK_FLAGS> <OBJECTS>")
SET(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Sqc <TARGET> <LINK_FLAGS> <OBJECTS>")
# silence ranlib "has no symbols"-warning
SET(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols <TARGET>")
SET(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols <TARGET>")
endif()
find_package(OpenGL)
find_package(Threads)
find_package(Protobuf)
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt5Core REQUIRED)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5Network REQUIRED)
find_package(Qt5OpenGL REQUIRED)
set(QT_FOUND TRUE)
find_package(LuaJIT2)
find_package(USB)
find_package(SDL2)
if(POLICY CMP0058) # exist since cmake 3.3
set(BULLET_BUILD_BYPRODUCTS
"<INSTALL_DIR>/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletDynamics${CMAKE_STATIC_LIBRARY_SUFFIX}"
"<INSTALL_DIR>/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletCollision${CMAKE_STATIC_LIBRARY_SUFFIX}"
"<INSTALL_DIR>/lib/${CMAKE_STATIC_LIBRARY_PREFIX}LinearMath${CMAKE_STATIC_LIBRARY_SUFFIX}")
else()
set(BULLET_BUILD_BYPRODUCTS "")
endif()
include(ExternalProject)
ExternalProject_Add(bullet
URL http://www.robotics-erlangen.de/downloads/libraries/bullet3-2.83.6.tar.gz
URL_MD5 44cb2464336a2082b2c144194c2a2668
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
-DBUILD_BULLET2_DEMOS:BOOL=OFF
-DBUILD_BULLET3:BOOL=OFF
-DBUILD_CPU_DEMOS:BOOL=OFF
-DBUILD_EXTRAS:BOOL=OFF
-DBUILD_OPENGL3_DEMOS:BOOL=OFF
-DUSE_GLUT:BOOL=OFF
-DUSE_GRAPHICAL_BENCHMARK:BOOL=OFF
-DINSTALL_LIBS:BOOL=ON
BUILD_BYPRODUCTS ${BULLET_BUILD_BYPRODUCTS}
)
externalproject_get_property(bullet install_dir)
set_target_properties(bullet PROPERTIES EXCLUDE_FROM_ALL true)
set(BULLET_FOUND TRUE)
set(BULLET_INCLUDE_DIRS "${install_dir}/include/bullet")
set(BULLET_LIBRARIES
"${install_dir}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletDynamics${CMAKE_STATIC_LIBRARY_SUFFIX}"
"${install_dir}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletCollision${CMAKE_STATIC_LIBRARY_SUFFIX}"
"${install_dir}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}LinearMath${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
ExternalProject_Add(eigen
URL http://www.robotics-erlangen.de/downloads/libraries/eigen-eigen-c58038c56923.tar.bz2
URL_MD5 87274966745d2d3e7964fcc654d0a24b
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
)
externalproject_get_property(eigen install_dir)
set_target_properties(eigen PROPERTIES EXCLUDE_FROM_ALL true)
set(EIGEN_FOUND TRUE)
set(EIGEN_INCLUDE_DIR "${install_dir}/include/eigen3")
# sdl2 version 2.0.0 is broken :-( -> build manually
# sdl2 version 2.0.2 required for loading controller mappings from config file
if(NOT SDL2_FOUND OR SDL2_VERSION_STRING STREQUAL "2.0.0" OR SDL2_VERSION_STRING STREQUAL "2.0.1")
# use prebuilt binaries on windows
if (UNIX)
include(CheckIncludeFile)
check_include_file("libudev.h" LIBUDEV_FOUND)
if (LIBUDEV_FOUND)
ExternalProject_Add(sdl2
URL http://www.robotics-erlangen.de/downloads/libraries/SDL2-2.0.2.tar.gz
URL_MD5 e8070e8b6335def073a80cee78f3a7f0
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR>
)
externalproject_get_property(sdl2 install_dir)
set_target_properties(sdl2 PROPERTIES EXCLUDE_FROM_ALL true)
set(SDL2_FOUND TRUE)
set(SDL2_INCLUDE_DIR "${install_dir}/include/SDL2")
set(SDL2_LIBRARY "${install_dir}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}SDL2${CMAKE_SHARED_LIBRARY_SUFFIX}")
else()
message(WARNING "SDL2 requires libudev for game controller support")
# actually just for plug & play, but it won't work without ...
set(SDL2_FOUND FALSE)
endif()
else()
message(WARNING "Get libsdl2 with version >= 2.0.2 for game controller support")
set(SDL2_FOUND FALSE)
endif()
else()
add_library(sdl2 SHARED IMPORTED)
set_target_properties(sdl2 PROPERTIES IMPORTED_LOCATION ${SDL2_LIBRARY})
endif()
if(MINGW)
set(CMAKE_RC_COMPILER_INIT windres)
enable_language(RC)
set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -I${CMAKE_SOURCE_DIR}/data/pkg -i <SOURCE> -o <OBJECT>")
endif(MINGW)
include(FixCodeBlocks)
configure_file(src/config.h.in src/config.h)
include_directories(${CMAKE_BINARY_DIR}/src)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
add_subdirectory(src)
if(UNIX AND NOT APPLE)
configure_file(data/pkg/ra.desktop.in ra.desktop)
configure_file(data/pkg/ra-logplayer.desktop.in ra-logplayer.desktop)
add_custom_target(install-menu
COMMAND xdg-desktop-menu install --novendor ${CMAKE_BINARY_DIR}/ra.desktop ${CMAKE_BINARY_DIR}/ra-logplayer.desktop
COMMENT "Installing menu entries" VERBATIM
)
endif()
fixup_targets()