]> git.sesse.net Git - casparcg/blob - CMakeLists.txt
Fixed compilation problem on Linux.
[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 configure_file("${PROJECT_SOURCE_DIR}/version.tmpl" "${PROJECT_SOURCE_DIR}/version.h")
19
20 set(DEPENDENCIES_FOLDER                 "${PROJECT_SOURCE_DIR}/dependencies64")
21
22 set(BOOST_INCLUDE_PATH                  "${DEPENDENCIES_FOLDER}/boost")
23 set(RXCPP_INCLUDE_PATH                  "${DEPENDENCIES_FOLDER}/RxCpp/include")
24 set(TBB_INCLUDE_PATH                    "${DEPENDENCIES_FOLDER}/tbb/include")
25 set(GLEW_INCLUDE_PATH                   "${DEPENDENCIES_FOLDER}/glew/include")
26 set(SFML_INCLUDE_PATH                   "${DEPENDENCIES_FOLDER}/sfml/include")
27 set(FREETYPE_INCLUDE_PATH               "${DEPENDENCIES_FOLDER}/freetype/include")
28
29 if (MSVC)
30         set(FFMPEG_INCLUDE_PATH         "${DEPENDENCIES_FOLDER}/ffmpeg/include" "${DEPENDENCIES_FOLDER}/ffmpeg/include-win32")
31 else ()
32         set(FFMPEG_INCLUDE_PATH         "${DEPENDENCIES_FOLDER}/ffmpeg/include")
33 endif ()
34
35 set(ASMLIB_INCLUDE_PATH                 "${DEPENDENCIES_FOLDER}/asmlib")
36 set(FREEIMAGE_INCLUDE_PATH              "${DEPENDENCIES_FOLDER}/freeimage/include")
37 set(OPENAL_INCLUDE_PATH                 "${DEPENDENCIES_FOLDER}/openal/include")
38 set(BLUEFISH_INCLUDE_PATH               "${DEPENDENCIES_FOLDER}/bluefish/include")
39 set(CEF_INCLUDE_PATH                    "${DEPENDENCIES_FOLDER}/cef/include")
40 set(GTEST_INCLUDE_PATH                  "${DEPENDENCIES_FOLDER}/gtest/include")
41
42 if (MSVC)
43         set(PLATFORM_FOLDER_NAME        "win32")
44 elseif (CMAKE_COMPILER_IS_GNUCXX)
45         set(PLATFORM_FOLDER_NAME        "linux")
46 endif ()
47
48 set(FFMPEG_BIN_PATH                             "${DEPENDENCIES_FOLDER}/ffmpeg/bin/${PLATFORM_FOLDER_NAME}")
49 set(FREEIMAGE_BIN_PATH                  "${DEPENDENCIES_FOLDER}/freeimage/bin/${PLATFORM_FOLDER_NAME}")
50 set(GLEW_BIN_PATH                               "${DEPENDENCIES_FOLDER}/glew/bin/${PLATFORM_FOLDER_NAME}")
51 set(OPENAL_BIN_PATH                             "${DEPENDENCIES_FOLDER}/openal/bin/${PLATFORM_FOLDER_NAME}")
52 set(TBB_BIN_PATH                                "${DEPENDENCIES_FOLDER}/tbb/bin/${PLATFORM_FOLDER_NAME}")
53 set(LIBERATION_FONTS_BIN_PATH   "${DEPENDENCIES_FOLDER}/liberation-fonts")
54 set(CEF_PATH                                    "${DEPENDENCIES_FOLDER}/cef")
55 set(CEF_BIN_PATH                                "${DEPENDENCIES_FOLDER}/cef/bin/${PLATFORM_FOLDER_NAME}")
56
57 link_directories("${DEPENDENCIES_FOLDER}/boost/stage/lib/${PLATFORM_FOLDER_NAME}")
58 link_directories("${DEPENDENCIES_FOLDER}/tbb/lib/${PLATFORM_FOLDER_NAME}")
59 link_directories("${DEPENDENCIES_FOLDER}/glew/lib/${PLATFORM_FOLDER_NAME}")
60 link_directories("${DEPENDENCIES_FOLDER}/sfml/lib/${PLATFORM_FOLDER_NAME}")
61 link_directories("${DEPENDENCIES_FOLDER}/sfml/extlibs/lib")
62 link_directories("${DEPENDENCIES_FOLDER}/freetype/objs/win32/vc2010")
63 link_directories("${DEPENDENCIES_FOLDER}/ffmpeg/lib/${PLATFORM_FOLDER_NAME}")
64 link_directories("${DEPENDENCIES_FOLDER}/asmlib")
65 link_directories("${DEPENDENCIES_FOLDER}/freeimage/lib/${PLATFORM_FOLDER_NAME}")
66 link_directories("${DEPENDENCIES_FOLDER}/openal/lib/${PLATFORM_FOLDER_NAME}")
67 link_directories("${DEPENDENCIES_FOLDER}/bluefish/lib")
68 link_directories("${DEPENDENCIES_FOLDER}/zlib/lib")
69 link_directories("${DEPENDENCIES_FOLDER}/cef/lib/${PLATFORM_FOLDER_NAME}")
70 link_directories("${DEPENDENCIES_FOLDER}/gtest/lib/${PLATFORM_FOLDER_NAME}")
71
72 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
73
74 add_definitions( -DSFML_STATIC )
75 add_definitions( -DBOOST_THREAD_VERSION=4 )
76 add_definitions( -DTBB_USE_CAPTURED_EXCEPTION=0 )
77 add_definitions( -DUNICODE )
78 add_definitions( -D_UNICODE )
79 add_definitions( -DGLEW_NO_GLU )
80 add_definitions( "-DBOOST_ASIO_ERROR_CATEGORY_NOEXCEPT=noexcept(true)" ) # Workaround macro redefinition in boost
81 add_definitions( -D_GLIBCXX_USE_CXX11_ABI=0 ) # Allow compilation in GCC 5 while keeping old dependencies
82 add_definitions( -DCASPAR_SOURCE_PREFIX="${CMAKE_CURRENT_SOURCE_DIR}" )
83
84 if (MSVC)
85         set(CMAKE_CXX_FLAGS                                     "${CMAKE_CXX_FLAGS}                                     /EHa /Zi /W4 /WX /MP /fp:fast /Zm192 /FIcommon/compiler/vs/disable_silly_warnings.h")
86         set(CMAKE_CXX_FLAGS_DEBUG                       "${CMAKE_CXX_FLAGS_DEBUG}                       /D TBB_USE_ASSERT=1 /D TBB_USE_DEBUG /bigobj")
87         set(CMAKE_CXX_FLAGS_RELEASE                     "${CMAKE_CXX_FLAGS_RELEASE}                     /Oi /Ot /Gy /bigobj")
88         set(CMAKE_CXX_FLAGS_RELWITHDEBINFO      "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}      /Oi /Ot /Gy /bigobj /Ob2")
89 elseif (CMAKE_COMPILER_IS_GNUCXX)
90         set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g")
91         add_compile_options( -std=c++11 )
92         add_compile_options( -msse3 )
93         add_compile_options( -mssse3 )
94         add_compile_options( -msse4.1 )
95         add_compile_options( -pthread )
96         add_compile_options( -fPIC )
97         add_compile_options( -fnon-call-exceptions ) # Allow signal handler to throw exception
98         add_definitions( -DBOOST_NO_SWPRINTF ) # swprintf on Linux seems to always use , as decimal point regardless of C-locale or C++-locale
99 endif ()
100
101 if (POLICY CMP0045)
102         cmake_policy(SET CMP0045 OLD)
103 endif ()
104
105 include(CMake/PrecompiledHeader.cmake)
106
107 set(CASPARCG_MODULE_INCLUDE_STATEMENTS                                                  "" CACHE INTERNAL "")
108 set(CASPARCG_MODULE_INIT_STATEMENTS                                                             "" CACHE INTERNAL "")
109 set(CASPARCG_MODULE_UNINIT_STATEMENTS                                                   "" CACHE INTERNAL "")
110 set(CASPARCG_MODULE_COMMAND_LINE_ARG_INTERCEPTORS_STATEMENTS    "" CACHE INTERNAL "")
111 set(CASPARCG_MODULE_PROJECTS                                                                    "" CACHE INTERNAL "")
112 set(CASPARCG_RUNTIME_DEPENDENCIES                                                               "" CACHE INTERNAL "")
113
114 function(casparcg_add_include_statement HEADER_FILE_TO_INCLUDE)
115         set(CASPARCG_MODULE_INCLUDE_STATEMENTS "${CASPARCG_MODULE_INCLUDE_STATEMENTS}"
116                         "#include <${HEADER_FILE_TO_INCLUDE}>"
117                         CACHE INTERNAL "")
118 endfunction()
119
120 function(casparcg_add_init_statement INIT_FUNCTION_NAME NAME_TO_LOG)
121         set(CASPARCG_MODULE_INIT_STATEMENTS "${CASPARCG_MODULE_INIT_STATEMENTS}"
122                         "       ${INIT_FUNCTION_NAME}(dependencies)\;"
123                         "       CASPAR_LOG(info) << L\"Initialized ${NAME_TO_LOG} module.\"\;"
124                         ""
125                         CACHE INTERNAL "")
126 endfunction()
127
128 function(casparcg_add_uninit_statement UNINIT_FUNCTION_NAME)
129         set(CASPARCG_MODULE_UNINIT_STATEMENTS
130                         "       ${UNINIT_FUNCTION_NAME}()\;"
131                         "${CASPARCG_MODULE_UNINIT_STATEMENTS}"
132                         CACHE INTERNAL "")
133 endfunction()
134
135 function(casparcg_add_command_line_arg_interceptor INTERCEPTOR_FUNCTION_NAME)
136         set(CASPARCG_MODULE_COMMAND_LINE_ARG_INTERCEPTORS_STATEMENTS "${CASPARCG_MODULE_COMMAND_LINE_ARG_INTERCEPTORS_STATEMENTS}"
137                         "       if (${INTERCEPTOR_FUNCTION_NAME}(argc, argv))"
138                         "               return true\;"
139                         ""
140                         CACHE INTERNAL "")
141 endfunction()
142
143 function(casparcg_add_module_project PROJECT)
144         set(CASPARCG_MODULE_PROJECTS "${CASPARCG_MODULE_PROJECTS}" "${PROJECT}" CACHE INTERNAL "")
145 endfunction()
146
147 # http://stackoverflow.com/questions/7172670/best-shortest-way-to-join-a-list-in-cmake
148 function(join_list VALUES GLUE OUTPUT)
149         string (REGEX REPLACE "([^\\]|^);" "\\1${GLUE}" _TMP_STR "${VALUES}")
150         string (REGEX REPLACE "[\\](.)" "\\1" _TMP_STR "${_TMP_STR}") #fixes escaping
151         set (${OUTPUT} "${_TMP_STR}" PARENT_SCOPE)
152 endfunction()
153
154 function(casparcg_add_runtime_dependency FILE_TO_COPY)
155         set(CASPARCG_RUNTIME_DEPENDENCIES "${CASPARCG_RUNTIME_DEPENDENCIES}" "${FILE_TO_COPY}" CACHE INTERNAL "")
156 endfunction()
157
158 add_subdirectory(accelerator)
159 add_subdirectory(common)
160 add_subdirectory(core)
161 add_subdirectory(modules)
162
163 add_subdirectory(protocol)
164 add_subdirectory(shell)
165 add_subdirectory(unit-test)