]> git.sesse.net Git - casparcg/blob - CMakeLists.txt
Remove -D_GLIBCXX_USE_CXX11_ABI=0.
[casparcg] / CMakeLists.txt
1 cmake_minimum_required (VERSION 2.6)
2 project ("CasparCG Server")
3
4 find_package(Git)
5
6 set(GIT_REV "0")
7 set(GIT_HASH "N/A")
8
9 if (GIT_FOUND)
10         exec_program("${GIT_EXECUTABLE}" "${PROJECT_SOURCE_DIR}"
11                         ARGS rev-list --all --count
12                         OUTPUT_VARIABLE GIT_REV)
13         exec_program("${GIT_EXECUTABLE}" "${PROJECT_SOURCE_DIR}"
14                         ARGS rev-parse --verify --short HEAD
15                         OUTPUT_VARIABLE GIT_HASH)
16 endif ()
17
18 include(CMakeDependentOption)
19 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMake/")
20
21 CMAKE_DEPENDENT_OPTION(BUILD_MODULE_BLUEFISH "Build Bluefish module" ON "MSVC" OFF)
22 option(BUILD_MODULE_DECKLINK "Build Decklink module" ON)
23 option(BUILD_MODULE_HTML "Build HTML module" ON)
24 option(BUILD_MODULE_PSD "Build PSD module" ON)
25 CMAKE_DEPENDENT_OPTION(BUILD_MODULE_FLASH "Build Flash module" ON "MSVC" OFF)
26 CMAKE_DEPENDENT_OPTION(BUILD_MODULE_NEWTEK "Build Newtek module" ON "MSVC" OFF)
27
28 option(USE_SYSTEM_BOOST     "Compile against system boost instead of bundled one" OFF)
29 option(USE_SYSTEM_FFMPEG    "Compile against system FFmpeg instead of bundled one" OFF)
30 option(USE_SYSTEM_TBB       "Compile against system TBB instead of bundled one" OFF)
31 option(USE_SYSTEM_GLEW      "Compile against system GLEW instead of bundled one" OFF)
32 option(USE_SYSTEM_FREETYPE  "Compile against system FreeType instead of bundled one" OFF)
33 option(USE_SYSTEM_FREEIMAGE "Compile against system FreeImage instead of bundled one" OFF)
34 option(USE_SYSTEM_OPENAL    "Compile against system OpenAL instead of bundled one" OFF)
35 option(USE_SYSTEM_SFML      "Compile against system SFML instead of bundled one" OFF)
36 option(USE_SYSTEM_GTEST     "Compile against system GTest instead of bundled one" OFF)
37 option(USE_SYSTEM_FONTS     "Compile against system fonts instead of bundled ones" OFF)
38
39 configure_file("${PROJECT_SOURCE_DIR}/version.tmpl" "${PROJECT_SOURCE_DIR}/version.h")
40
41 set(DEPENDENCIES_FOLDER                 "${PROJECT_SOURCE_DIR}/dependencies64")
42
43 if (MSVC)
44         set(PLATFORM_FOLDER_NAME        "win32")
45 elseif (CMAKE_COMPILER_IS_GNUCXX)
46         set(PLATFORM_FOLDER_NAME        "linux")
47 endif ()
48
49 ## boost ##
50 if(USE_SYSTEM_BOOST)
51         find_package(Boost 1.56 REQUIRED COMPONENTS chrono date_time filesystem locale log regex system thread)
52         add_definitions(-DBOOST_ALL_DYN_LINK)
53 else()
54         set(Boost_INCLUDE_DIRS          "${DEPENDENCIES_FOLDER}/boost")
55         set(Boost_LIBRARIES boost_system boost_thread boost_chrono boost_filesystem boost_log boost_locale boost_regex boost_date_time)
56         link_directories("${DEPENDENCIES_FOLDER}/boost/stage/lib/${PLATFORM_FOLDER_NAME}")
57 endif()
58 add_definitions( -DBOOST_THREAD_VERSION=4 )
59 add_definitions( "-DBOOST_ASIO_ERROR_CATEGORY_NOEXCEPT=noexcept(true)" ) # Workaround macro redefinition in boost
60
61 ## TBB ##
62 if(USE_SYSTEM_TBB)
63         find_package(TBB REQUIRED)
64 else()
65         set(TBB_INCLUDE_DIRS            "${DEPENDENCIES_FOLDER}/tbb/include")
66         if(MSVC)
67                 set(TBB_LIBRARIES optimized tbb debug tbb_debug)
68         else()
69                 set(TBB_LIBRARIES tbb)
70         endif()
71         set(TBB_BIN_DIR                         "${DEPENDENCIES_FOLDER}/tbb/bin/${PLATFORM_FOLDER_NAME}")
72         link_directories("${DEPENDENCIES_FOLDER}/tbb/lib/${PLATFORM_FOLDER_NAME}")
73 endif()
74 add_definitions( -DTBB_USE_CAPTURED_EXCEPTION=0 )
75
76 ## GLEW ##
77 if(USE_SYSTEM_GLEW)
78         find_package(GLEW REQUIRED)
79         find_package(OpenGL REQUIRED)
80 else()
81         set(GLEW_INCLUDE_DIRS           "${DEPENDENCIES_FOLDER}/glew/include")
82         if(MSVC)
83                 set(GLEW_LIBRARIES glew32)
84                 set(OPENGL_gl_LIBRARY OpenGL32)
85         else()
86                 set(GLEW_LIBRARIES GLEW)
87                 set(OPENGL_gl_LIBRARY GL)
88         endif()
89         set(GLEW_BIN_DIR                        "${DEPENDENCIES_FOLDER}/glew/bin/${PLATFORM_FOLDER_NAME}")
90         link_directories("${DEPENDENCIES_FOLDER}/glew/lib/${PLATFORM_FOLDER_NAME}")
91 endif()
92 add_definitions( -DGLEW_NO_GLU )
93
94 set(RXCPP_INCLUDE_DIRS                  "${DEPENDENCIES_FOLDER}/RxCpp/include")
95
96 ## SFML ##
97 if(USE_SYSTEM_SFML)
98         find_package(SFML REQUIRED COMPONENTS graphics window system)
99 else()
100         set(SFML_INCLUDE_DIR            "${DEPENDENCIES_FOLDER}/sfml/include")
101         if(MSVC)
102                 set(SFML_LIBRARIES
103                         optimized sfml-system-2   debug sfml-system-d-2
104                         optimized sfml-window-2   debug sfml-window-d-2
105                         optimized sfml-graphics-2 debug sfml-graphics-d-2
106                 )
107         else()
108                 set(SFML_LIBRARIES
109                         sfml-graphics-s
110                         sfml-window-s
111                         sfml-system-s
112                 )
113         endif()
114         link_directories("${DEPENDENCIES_FOLDER}/sfml/lib/${PLATFORM_FOLDER_NAME}")
115         link_directories("${DEPENDENCIES_FOLDER}/sfml/extlibs/lib")
116         add_definitions( -DSFML_STATIC )
117 endif()
118
119 ## FreeType ##
120 if(USE_SYSTEM_FREETYPE)
121         find_package(Freetype REQUIRED)
122 else()
123         set(FREETYPE_INCLUDE_DIRS       "${DEPENDENCIES_FOLDER}/freetype/include")
124         set(FREETYPE_LIBRARIES freetype)
125         link_directories("${DEPENDENCIES_FOLDER}/freetype/objs/win32/vc2010")
126 endif()
127
128 ## FFmpeg ##
129 if(USE_SYSTEM_FFMPEG)
130         find_package(FFmpeg REQUIRED COMPONENTS
131                 avcodec
132                 avdevice
133                 avfilter
134                 avformat
135                 avutil
136                 postproc
137                 swresample
138                 swscale)
139 else()
140         set(FFmpeg_INCLUDE_DIRS         "${DEPENDENCIES_FOLDER}/ffmpeg/include")
141         if (MSVC)
142                 list(APPEND FFmpeg_INCLUDE_DIRS "${DEPENDENCIES_FOLDER}/ffmpeg/include-win32")
143         endif ()
144         set(FFmpeg_BIN_DIR                      "${DEPENDENCIES_FOLDER}/ffmpeg/bin/${PLATFORM_FOLDER_NAME}")
145         link_directories("${DEPENDENCIES_FOLDER}/ffmpeg/lib/${PLATFORM_FOLDER_NAME}")
146 endif()
147
148 ## FreeImage ##
149 if(USE_SYSTEM_FREEIMAGE)
150         find_package(FreeImage REQUIRED)
151 else()
152         set(FREEIMAGE_INCLUDE_DIRS      "${DEPENDENCIES_FOLDER}/freeimage/include")
153         if(MSVC)
154                 set(FREEIMAGE_LIBRARIES optimized FreeImage debug FreeImaged)
155         else()
156                 set(FREEIMAGE_LIBRARIES freeimage)
157         endif()
158         set(FREEIMAGE_BIN_DIR           "${DEPENDENCIES_FOLDER}/freeimage/bin/${PLATFORM_FOLDER_NAME}")
159         link_directories("${DEPENDENCIES_FOLDER}/freeimage/lib/${PLATFORM_FOLDER_NAME}")
160 endif()
161
162 ## OpenAL ##
163 if(USE_SYSTEM_OPENAL)
164         find_package(OpenAL REQUIRED)
165 else()
166         set(OPENAL_INCLUDE_DIR          "${DEPENDENCIES_FOLDER}/openal/include")
167         if(MSVC)
168                 set(OPENAL_LIBRARY OpenAL32)
169         else()
170                 set(OPENAL_LIBRARY openal)
171         endif()
172         set(OPENAL_BIN_DIR                      "${DEPENDENCIES_FOLDER}/openal/bin/${PLATFORM_FOLDER_NAME}")
173         link_directories("${DEPENDENCIES_FOLDER}/openal/lib/${PLATFORM_FOLDER_NAME}")
174 endif()
175
176 ## Bluefish ##
177 set(BLUEFISH_INCLUDE_DIRS               "${DEPENDENCIES_FOLDER}/bluefish/include")
178 link_directories("${DEPENDENCIES_FOLDER}/bluefish/lib")
179
180 ## CEF ##
181 set(CEF_INCLUDE_DIRS                    "${DEPENDENCIES_FOLDER}/cef/${PLATFORM_FOLDER_NAME}/include")
182 if(MSVC)
183         set(CEF_LIBRARIES
184                 optimized release/libcef
185                 optimized release/libcef_dll_wrapper
186                 debug debug/libcef
187                 debug debug/libcef_dll_wrapper
188         )
189 else()
190         set(CEF_LIBRARIES cef libcef_dll_wrapper)
191 endif()
192 set(CEF_PATH                                    "${DEPENDENCIES_FOLDER}/cef/${PLATFORM_FOLDER_NAME}")
193 set(CEF_BIN_PATH                                "${DEPENDENCIES_FOLDER}/cef/${PLATFORM_FOLDER_NAME}/Release")
194 set(CEF_RESOURCE_PATH                           "${DEPENDENCIES_FOLDER}/cef/${PLATFORM_FOLDER_NAME}/Resources")
195 link_directories("${CEF_BIN_PATH}")
196
197 ## GTest ##
198 if(USE_SYSTEM_GTEST)
199         find_package(GTest REQUIRED)
200 else()
201         set(GTEST_INCLUDE_DIRS          "${DEPENDENCIES_FOLDER}/gtest/include")
202         if(MSVC)
203                 set(GTEST_LIBRARIES optimized gtest debug gtestd)
204         else()
205                 set(GTEST_LIBRARIES gtest)
206         endif()
207         link_directories("${DEPENDENCIES_FOLDER}/gtest/lib/${PLATFORM_FOLDER_NAME}")
208 endif()
209
210 ## fonts ##
211 if(NOT USE_SYSTEM_FONTS)
212         set(LIBERATION_FONTS_BIN_DIR    "${DEPENDENCIES_FOLDER}/liberation-fonts")
213 endif()
214
215 link_directories("${DEPENDENCIES_FOLDER}/zlib/lib")
216
217 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
218
219 add_definitions( -DUNICODE )
220 add_definitions( -D_UNICODE )
221 add_definitions( -DCASPAR_SOURCE_PREFIX="${CMAKE_CURRENT_SOURCE_DIR}" )
222
223 if (MSVC)
224         set(CMAKE_CXX_FLAGS                                     "${CMAKE_CXX_FLAGS}                                     /EHa /Zi /W4 /WX /MP /fp:fast /Zm192 /FIcommon/compiler/vs/disable_silly_warnings.h")
225         set(CMAKE_CXX_FLAGS_DEBUG                       "${CMAKE_CXX_FLAGS_DEBUG}                       /D TBB_USE_ASSERT=1 /D TBB_USE_DEBUG /bigobj")
226         set(CMAKE_CXX_FLAGS_RELEASE                     "${CMAKE_CXX_FLAGS_RELEASE}                     /Oi /Ot /Gy /bigobj")
227         set(CMAKE_CXX_FLAGS_RELWITHDEBINFO      "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}      /Oi /Ot /Gy /bigobj /Ob2")
228 elseif (CMAKE_COMPILER_IS_GNUCXX)
229         set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g")
230         add_compile_options( -std=c++11 )
231         add_compile_options( -msse3 )
232         add_compile_options( -mssse3 )
233         add_compile_options( -msse4.1 )
234         add_compile_options( -pthread )
235         add_compile_options( -fPIC )
236         add_compile_options( -fnon-call-exceptions ) # Allow signal handler to throw exception
237         add_definitions( -DBOOST_NO_SWPRINTF ) # swprintf on Linux seems to always use , as decimal point regardless of C-locale or C++-locale
238 endif ()
239
240 if (POLICY CMP0045)
241         cmake_policy(SET CMP0045 OLD)
242 endif ()
243
244 include(CMake/PrecompiledHeader.cmake)
245
246 set(CASPARCG_MODULE_INCLUDE_STATEMENTS                                                  "" CACHE INTERNAL "")
247 set(CASPARCG_MODULE_INIT_STATEMENTS                                                             "" CACHE INTERNAL "")
248 set(CASPARCG_MODULE_UNINIT_STATEMENTS                                                   "" CACHE INTERNAL "")
249 set(CASPARCG_MODULE_COMMAND_LINE_ARG_INTERCEPTORS_STATEMENTS    "" CACHE INTERNAL "")
250 set(CASPARCG_MODULE_PROJECTS                                                                    "" CACHE INTERNAL "")
251 set(CASPARCG_RUNTIME_DEPENDENCIES                                                               "" CACHE INTERNAL "")
252
253 function(casparcg_add_include_statement HEADER_FILE_TO_INCLUDE)
254         set(CASPARCG_MODULE_INCLUDE_STATEMENTS "${CASPARCG_MODULE_INCLUDE_STATEMENTS}"
255                         "#include <${HEADER_FILE_TO_INCLUDE}>"
256                         CACHE INTERNAL "")
257 endfunction()
258
259 function(casparcg_add_init_statement INIT_FUNCTION_NAME NAME_TO_LOG)
260         set(CASPARCG_MODULE_INIT_STATEMENTS "${CASPARCG_MODULE_INIT_STATEMENTS}"
261                         "       ${INIT_FUNCTION_NAME}(dependencies)\;"
262                         "       CASPAR_LOG(info) << L\"Initialized ${NAME_TO_LOG} module.\"\;"
263                         ""
264                         CACHE INTERNAL "")
265 endfunction()
266
267 function(casparcg_add_uninit_statement UNINIT_FUNCTION_NAME)
268         set(CASPARCG_MODULE_UNINIT_STATEMENTS
269                         "       ${UNINIT_FUNCTION_NAME}()\;"
270                         "${CASPARCG_MODULE_UNINIT_STATEMENTS}"
271                         CACHE INTERNAL "")
272 endfunction()
273
274 function(casparcg_add_command_line_arg_interceptor INTERCEPTOR_FUNCTION_NAME)
275         set(CASPARCG_MODULE_COMMAND_LINE_ARG_INTERCEPTORS_STATEMENTS "${CASPARCG_MODULE_COMMAND_LINE_ARG_INTERCEPTORS_STATEMENTS}"
276                         "       if (${INTERCEPTOR_FUNCTION_NAME}(argc, argv))"
277                         "               return true\;"
278                         ""
279                         CACHE INTERNAL "")
280 endfunction()
281
282 function(casparcg_add_module_project PROJECT)
283         set(CASPARCG_MODULE_PROJECTS "${CASPARCG_MODULE_PROJECTS}" "${PROJECT}" CACHE INTERNAL "")
284 endfunction()
285
286 # http://stackoverflow.com/questions/7172670/best-shortest-way-to-join-a-list-in-cmake
287 function(join_list VALUES GLUE OUTPUT)
288         string (REGEX REPLACE "([^\\]|^);" "\\1${GLUE}" _TMP_STR "${VALUES}")
289         string (REGEX REPLACE "[\\](.)" "\\1" _TMP_STR "${_TMP_STR}") #fixes escaping
290         set (${OUTPUT} "${_TMP_STR}" PARENT_SCOPE)
291 endfunction()
292
293 function(casparcg_add_runtime_dependency FILE_TO_COPY)
294         set(CASPARCG_RUNTIME_DEPENDENCIES "${CASPARCG_RUNTIME_DEPENDENCIES}" "${FILE_TO_COPY}" CACHE INTERNAL "")
295 endfunction()
296
297 add_subdirectory(accelerator)
298 add_subdirectory(common)
299 add_subdirectory(core)
300 add_subdirectory(modules)
301
302 add_subdirectory(protocol)
303 add_subdirectory(shell)
304 add_subdirectory(unit-test)