1 cmake_minimum_required (VERSION 2.6)
2 project ("CasparCG Server")
9 exec_program("${GIT_EXECUTABLE}" "${PROJECT_SOURCE_DIR}"
10 ARGS rev-parse --verify --short HEAD
11 OUTPUT_VARIABLE GIT_REV)
14 configure_file("${PROJECT_SOURCE_DIR}/version.tmpl" "${PROJECT_SOURCE_DIR}/version.h")
16 set(DEPENDENCIES_FOLDER "${PROJECT_SOURCE_DIR}/dependencies64")
18 set(BOOST_INCLUDE_PATH "${DEPENDENCIES_FOLDER}/boost")
19 set(RXCPP_INCLUDE_PATH "${DEPENDENCIES_FOLDER}/RxCpp/include")
20 set(TBB_INCLUDE_PATH "${DEPENDENCIES_FOLDER}/tbb/include")
21 set(GLEW_INCLUDE_PATH "${DEPENDENCIES_FOLDER}/glew/include")
22 set(SFML_INCLUDE_PATH "${DEPENDENCIES_FOLDER}/sfml/include")
23 set(FREETYPE_INCLUDE_PATH "${DEPENDENCIES_FOLDER}/freetype/include")
26 set(FFMPEG_INCLUDE_PATH "${DEPENDENCIES_FOLDER}/ffmpeg/include" "${DEPENDENCIES_FOLDER}/ffmpeg/include-win32")
28 set(FFMPEG_INCLUDE_PATH "${DEPENDENCIES_FOLDER}/ffmpeg/include")
31 set(ASMLIB_INCLUDE_PATH "${DEPENDENCIES_FOLDER}/asmlib")
32 set(FREEIMAGE_INCLUDE_PATH "${DEPENDENCIES_FOLDER}/freeimage/include")
33 set(OPENAL_INCLUDE_PATH "${DEPENDENCIES_FOLDER}/openal/include")
34 set(BLUEFISH_INCLUDE_PATH "${DEPENDENCIES_FOLDER}/bluefish/include")
35 set(CEF_INCLUDE_PATH "${DEPENDENCIES_FOLDER}/cef/include")
38 set(PLATFORM_FOLDER_NAME "win32")
39 elseif (CMAKE_COMPILER_IS_GNUCXX)
40 set(PLATFORM_FOLDER_NAME "linux")
43 set(FFMPEG_BIN_PATH "${DEPENDENCIES_FOLDER}/ffmpeg/bin/${PLATFORM_FOLDER_NAME}")
44 set(FREEIMAGE_BIN_PATH "${DEPENDENCIES_FOLDER}/freeimage/bin/${PLATFORM_FOLDER_NAME}")
45 set(GLEW_BIN_PATH "${DEPENDENCIES_FOLDER}/glew/bin")
46 set(OPENAL_BIN_PATH "${DEPENDENCIES_FOLDER}/openal/bin/${PLATFORM_FOLDER_NAME}")
47 set(TBB_BIN_PATH "${DEPENDENCIES_FOLDER}/tbb/bin/${PLATFORM_FOLDER_NAME}")
48 set(LIBERATION_FONTS_BIN_PATH "${DEPENDENCIES_FOLDER}/liberation-fonts")
49 set(CEF_PATH "${DEPENDENCIES_FOLDER}/cef")
50 set(CEF_BIN_PATH "${DEPENDENCIES_FOLDER}/cef/bin/${PLATFORM_FOLDER_NAME}")
52 link_directories("${DEPENDENCIES_FOLDER}/boost/stage/lib/${PLATFORM_FOLDER_NAME}")
53 link_directories("${DEPENDENCIES_FOLDER}/tbb/lib/${PLATFORM_FOLDER_NAME}")
54 link_directories("${DEPENDENCIES_FOLDER}/glew/lib")
55 link_directories("${DEPENDENCIES_FOLDER}/sfml/lib/${PLATFORM_FOLDER_NAME}")
56 link_directories("${DEPENDENCIES_FOLDER}/sfml/extlibs/lib")
57 link_directories("${DEPENDENCIES_FOLDER}/freetype/objs/win32/vc2010")
58 link_directories("${DEPENDENCIES_FOLDER}/ffmpeg/lib/${PLATFORM_FOLDER_NAME}")
59 link_directories("${DEPENDENCIES_FOLDER}/asmlib")
60 link_directories("${DEPENDENCIES_FOLDER}/freeimage/lib/${PLATFORM_FOLDER_NAME}")
61 link_directories("${DEPENDENCIES_FOLDER}/openal/lib/${PLATFORM_FOLDER_NAME}")
62 link_directories("${DEPENDENCIES_FOLDER}/bluefish/lib")
63 link_directories("${DEPENDENCIES_FOLDER}/zlib/lib")
64 link_directories("${DEPENDENCIES_FOLDER}/cef/lib/${PLATFORM_FOLDER_NAME}")
66 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
68 add_definitions( -DSFML_STATIC )
69 add_definitions( -DBOOST_THREAD_VERSION=4 )
70 add_definitions( -DTBB_USE_CAPTURED_EXCEPTION=0 )
71 add_definitions( -DUNICODE )
72 add_definitions( -D_UNICODE )
75 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHa /Zi /W4 /WX /MP /fp:fast /FIcommon/compiler/vs/disable_silly_warnings.h")
76 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /D TBB_USE_ASSERT=1 /D TBB_USE_DEBUG /bigobj")
77 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /Ot /Gy")
78 elseif (CMAKE_COMPILER_IS_GNUCXX)
79 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g")
80 add_compile_options( -std=c++11 )
81 add_compile_options( -msse3 )
82 add_compile_options( -mssse3 )
83 add_compile_options( -msse4.1 )
84 add_compile_options( -pthread )
85 add_compile_options( -fPIC )
86 add_compile_options( -fnon-call-exceptions ) # Allow signal handler to throw exception
90 cmake_policy(SET CMP0045 OLD)
93 include(CMake/PrecompiledHeader.cmake)
95 set(CASPARCG_MODULE_INCLUDE_STATEMENTS "" CACHE INTERNAL "")
96 set(CASPARCG_MODULE_INIT_STATEMENTS "" CACHE INTERNAL "")
97 set(CASPARCG_MODULE_UNINIT_STATEMENTS "" CACHE INTERNAL "")
98 set(CASPARCG_MODULE_COMMAND_LINE_ARG_INTERCEPTORS_STATEMENTS "" CACHE INTERNAL "")
99 set(CASPARCG_MODULE_PROJECTS "" CACHE INTERNAL "")
100 set(CASPARCG_RUNTIME_DEPENDENCIES "" CACHE INTERNAL "")
102 function(casparcg_add_include_statement HEADER_FILE_TO_INCLUDE)
103 set(CASPARCG_MODULE_INCLUDE_STATEMENTS "${CASPARCG_MODULE_INCLUDE_STATEMENTS}"
104 "#include <${HEADER_FILE_TO_INCLUDE}>"
108 function(casparcg_add_init_statement INIT_FUNCTION_NAME NAME_TO_LOG)
109 set(CASPARCG_MODULE_INIT_STATEMENTS "${CASPARCG_MODULE_INIT_STATEMENTS}"
110 " ${INIT_FUNCTION_NAME}(dependencies)\;"
111 " CASPAR_LOG(info) << L\"Initialized ${NAME_TO_LOG} module.\"\;"
116 function(casparcg_add_uninit_statement UNINIT_FUNCTION_NAME)
117 set(CASPARCG_MODULE_UNINIT_STATEMENTS
118 " ${UNINIT_FUNCTION_NAME}()\;"
119 "${CASPARCG_MODULE_UNINIT_STATEMENTS}"
123 function(casparcg_add_command_line_arg_interceptor INTERCEPTOR_FUNCTION_NAME)
124 set(CASPARCG_MODULE_COMMAND_LINE_ARG_INTERCEPTORS_STATEMENTS "${CASPARCG_MODULE_COMMAND_LINE_ARG_INTERCEPTORS_STATEMENTS}"
125 " if (${INTERCEPTOR_FUNCTION_NAME}(argc, argv))"
131 function(casparcg_add_module_project PROJECT)
132 set(CASPARCG_MODULE_PROJECTS "${CASPARCG_MODULE_PROJECTS}" "${PROJECT}" CACHE INTERNAL "")
135 # http://stackoverflow.com/questions/7172670/best-shortest-way-to-join-a-list-in-cmake
136 function(join_list VALUES GLUE OUTPUT)
137 string (REGEX REPLACE "([^\\]|^);" "\\1${GLUE}" _TMP_STR "${VALUES}")
138 string (REGEX REPLACE "[\\](.)" "\\1" _TMP_STR "${_TMP_STR}") #fixes escaping
139 set (${OUTPUT} "${_TMP_STR}" PARENT_SCOPE)
142 function(casparcg_add_runtime_dependency FILE_TO_COPY)
143 set(CASPARCG_RUNTIME_DEPENDENCIES "${CASPARCG_RUNTIME_DEPENDENCIES}" "${FILE_TO_COPY}" CACHE INTERNAL "")
146 add_subdirectory(accelerator)
147 add_subdirectory(common)
148 add_subdirectory(core)
149 add_subdirectory(modules)
151 add_subdirectory(protocol)
152 add_subdirectory(shell)