CMakeLists.txt 7.2 KB
Newer Older
1 2 3 4 5
if(DISABLE_UI)
	message(STATUS "UI disabled")
	return()
elseif(ENABLE_UI)
	set(FIND_MODE REQUIRED)
B
BtbN 已提交
6
else()
7
	set(FIND_MODE QUIET)
B
BtbN 已提交
8 9
endif()

J
jp9000 已提交
10 11 12 13 14 15
add_subdirectory(obs-frontend-api)

# ----------------------------------------------------------------------------

project(obs)

16
set(DISABLE_UPDATE_MODULE TRUE CACHE BOOL "Disables building the update module")
J
jp9000 已提交
17

18 19 20 21 22
if(DEFINED QTDIR${_lib_suffix})
	list(APPEND CMAKE_PREFIX_PATH "${QTDIR${_lib_suffix}}")
elseif(DEFINED QTDIR)
	list(APPEND CMAKE_PREFIX_PATH "${QTDIR}")
elseif(DEFINED ENV{QTDIR${_lib_suffix}})
B
BtbN 已提交
23 24 25 26 27 28 29 30
	list(APPEND CMAKE_PREFIX_PATH "$ENV{QTDIR${_lib_suffix}}")
elseif(DEFINED ENV{QTDIR})
	list(APPEND CMAKE_PREFIX_PATH "$ENV{QTDIR}")
endif()

set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
set(CMAKE_AUTOMOC TRUE)

31 32 33 34 35 36 37
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
	set(_lib_suffix 64)
else()
	set(_lib_suffix 32)
endif()

find_package(Qt5Widgets ${FIND_MODE})
J
jp9000 已提交
38
find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat)
39

C
Colin Edwards 已提交
40 41 42 43
if(APPLE)
	find_package(Qt5MacExtras REQUIRED)
endif(APPLE)

J
jp9000 已提交
44
if(NOT Qt5Widgets_FOUND)
45 46 47 48 49 50 51 52
	if (ENABLE_UI)
		message(FATAL_ERROR "Failed to find Qt5")
	else()
		message(STATUS "Qt5 not found - UI disabled")
		return()
	endif()
endif()

J
jp9000 已提交
53 54

include_directories(${FFMPEG_INCLUDE_DIRS})
J
jp9000 已提交
55
include_directories(SYSTEM "obs-frontend-api")
56
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/libobs")
J
jp9000 已提交
57
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/deps/libff")
J
jp9000 已提交
58 59
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/deps/json11")
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/plugins/obs-browser/panel")
B
BtbN 已提交
60

J
jp9000 已提交
61 62 63 64
find_package(Libcurl REQUIRED)
include_directories(${LIBCURL_INCLUDE_DIRS})
add_definitions(${LIBCURL_DEFINITIONS})

B
BtbN 已提交
65
if(WIN32)
J
jp9000 已提交
66
	include_directories(${OBS_JANSSON_INCLUDE_DIRS})
67
	include_directories(${BLAKE2_INCLUDE_DIR})
J
jp9000 已提交
68

B
BtbN 已提交
69
	set(obs_PLATFORM_SOURCES
J
jp9000 已提交
70
		platform-windows.cpp
J
jp9000 已提交
71 72 73
		win-update/update-window.cpp
		win-update/win-update.cpp
		win-update/win-update-helpers.cpp
J
jp9000 已提交
74
		obs.rc)
J
jp9000 已提交
75 76 77 78 79 80
	set(obs_PLATFORM_HEADERS
		win-update/update-window.hpp
		win-update/win-update.hpp
		win-update/win-update-helpers.hpp)
	set(obs_PLATFORM_LIBRARIES
		crypt32
81
		blake2
J
jp9000 已提交
82
		${OBS_JANSSON_IMPORT})
B
BtbN 已提交
83 84 85
elseif(APPLE)
	set(obs_PLATFORM_SOURCES
		platform-osx.mm)
86 87

	find_package(AppKit REQUIRED)
B
BtbN 已提交
88
	set(obs_PLATFORM_LIBRARIES ${APPKIT_LIBRARIES})
89

B
BtbN 已提交
90
	add_definitions(-fobjc-arc)
P
Palana 已提交
91 92 93 94 95 96 97 98 99 100 101 102 103 104

	option(ENABLE_SPARKLE_UPDATER "Enables updates via the Sparkle framework (don't forget to update the Info.plist for your .app)" OFF)
	if(ENABLE_SPARKLE_UPDATER)
		find_library(SPARKLE Sparkle)
		include_directories(${SPARKLE})
		set(obs_PLATFORM_SOURCES
			${obs_PLATFORM_SOURCES}
			sparkle-updater.mm)
		set(obs_PLATFORM_LIBRARIES
			${obs_PLATFORM_LIBRARIES}
			${SPARKLE})
		add_definitions(-DUPDATE_SPARKLE=1)
	endif()

B
BtbN 已提交
105
elseif(UNIX)
106 107
        find_package(Qt5X11Extras REQUIRED)

B
BtbN 已提交
108 109 110
	set(obs_PLATFORM_SOURCES
		platform-x11.cpp)

111
        set(obs_PLATFORM_LIBRARIES
B
BtbN 已提交
112
                Qt5::X11Extras)
B
BtbN 已提交
113 114
endif()

J
jp9000 已提交
115 116 117 118 119 120 121 122 123 124 125 126 127 128
set(obs_libffutil_SOURCES
	../deps/libff/libff/ff-util.c
	)
set(obs_libffutil_HEADERS
	../deps/libff/libff/ff-util.h
	)

if(MSVC)
	set_source_files_properties(
		../deps/libff/libff/ff-util.c
		PROPERTIES COMPILE_FLAGS -Dinline=__inline
		)
endif()

B
BtbN 已提交
129 130
set(obs_SOURCES
	${obs_PLATFORM_SOURCES}
J
jp9000 已提交
131
	${obs_libffutil_SOURCES}
J
jp9000 已提交
132
	../deps/json11/json11.cpp
B
BtbN 已提交
133
	obs-app.cpp
J
jp9000 已提交
134
	api-interface.cpp
B
BtbN 已提交
135
	window-basic-main.cpp
J
jp9000 已提交
136
	window-basic-stats.cpp
J
jp9000 已提交
137
	window-basic-filters.cpp
J
jp9000 已提交
138
	window-basic-settings.cpp
J
John Bradley 已提交
139
	window-basic-interaction.cpp
140
	window-basic-properties.cpp
J
jp9000 已提交
141
	window-basic-auto-config.cpp
J
jp9000 已提交
142
	window-basic-main-outputs.cpp
J
jp9000 已提交
143
	window-basic-source-select.cpp
J
jp9000 已提交
144
	window-basic-auto-config-test.cpp
J
jp9000 已提交
145
	window-basic-main-scene-collections.cpp
146
	window-basic-main-transitions.cpp
J
jp9000 已提交
147
	window-basic-main-dropfiles.cpp
J
jp9000 已提交
148
	window-basic-main-profiles.cpp
J
jp9000 已提交
149
	window-license-agreement.cpp
J
jp9000 已提交
150
	window-basic-status-bar.cpp
J
jp9000 已提交
151
	window-basic-adv-audio.cpp
J
jp9000 已提交
152 153
	window-basic-transform.cpp
	window-basic-preview.cpp
B
BtbN 已提交
154
	window-namedialog.cpp
J
jp9000 已提交
155
	window-log-reply.cpp
J
jp9000 已提交
156
	window-projector.cpp
P
Palana 已提交
157
	window-remux.cpp
J
jp9000 已提交
158
	source-tree.cpp
159
	properties-view.cpp
160
	focus-list.cpp
161
	menu-button.cpp
J
jp9000 已提交
162
	double-slider.cpp
163
	volume-control.cpp
J
jp9000 已提交
164
	adv-audio-control.cpp
J
jp9000 已提交
165
	item-widget-helpers.cpp
J
jp9000 已提交
166
	visibility-checkbox.cpp
167
	locked-checkbox.cpp
S
Shaolin 已提交
168
	horizontal-scroll-area.cpp
J
jp9000 已提交
169
	vertical-scroll-area.cpp
170
	visibility-item-widget.cpp
H
HomeWorld 已提交
171
	slider-absoluteset-style.cpp
172
	source-list-widget.cpp
173
	qt-display.cpp
J
jp9000 已提交
174
	crash-report.cpp
P
Palana 已提交
175
	hotkey-edit.cpp
P
Palana 已提交
176
	source-label.cpp
J
jp9000 已提交
177
	remote-text.cpp
178
	audio-encoders.cpp
B
BtbN 已提交
179 180 181
	qt-wrappers.cpp)

set(obs_HEADERS
J
jp9000 已提交
182
	${obs_PLATFORM_HEADERS}
J
jp9000 已提交
183
	${obs_libffutil_HEADERS}
J
jp9000 已提交
184
	../deps/json11/json11.hpp
B
BtbN 已提交
185 186
	obs-app.hpp
	platform.hpp
187
	window-main.hpp
B
BtbN 已提交
188
	window-basic-main.hpp
J
jp9000 已提交
189
	window-basic-stats.hpp
J
jp9000 已提交
190
	window-basic-filters.hpp
J
jp9000 已提交
191
	window-basic-settings.hpp
J
John Bradley 已提交
192
	window-basic-interaction.hpp
193
	window-basic-properties.hpp
J
jp9000 已提交
194
	window-basic-auto-config.hpp
J
jp9000 已提交
195
	window-basic-main-outputs.hpp
J
jp9000 已提交
196
	window-basic-source-select.hpp
J
jp9000 已提交
197
	window-license-agreement.hpp
J
jp9000 已提交
198
	window-basic-status-bar.hpp
J
jp9000 已提交
199
	window-basic-adv-audio.hpp
J
jp9000 已提交
200 201
	window-basic-transform.hpp
	window-basic-preview.hpp
B
BtbN 已提交
202
	window-namedialog.hpp
J
jp9000 已提交
203
	window-log-reply.hpp
J
jp9000 已提交
204
	window-projector.hpp
P
Palana 已提交
205
	window-remux.hpp
J
jp9000 已提交
206
	source-tree.hpp
207
	properties-view.hpp
208
	properties-view.moc.hpp
209
	display-helpers.hpp
J
jp9000 已提交
210
	double-slider.hpp
211
	focus-list.hpp
212
	menu-button.hpp
J
jp9000 已提交
213
	mute-checkbox.hpp
214
	volume-control.hpp
J
jp9000 已提交
215
	adv-audio-control.hpp
J
jp9000 已提交
216
	item-widget-helpers.hpp
J
jp9000 已提交
217
	visibility-checkbox.hpp
218
	locked-checkbox.hpp
S
Shaolin 已提交
219
	horizontal-scroll-area.hpp
J
jp9000 已提交
220
	expand-checkbox.hpp
J
jp9000 已提交
221
	vertical-scroll-area.hpp
222
	visibility-item-widget.hpp
H
HomeWorld 已提交
223
	slider-absoluteset-style.hpp
224
	source-list-widget.hpp
B
BtbN 已提交
225
	qt-display.hpp
J
jp9000 已提交
226
	crash-report.hpp
P
Palana 已提交
227
	hotkey-edit.hpp
P
Palana 已提交
228
	source-label.hpp
J
jp9000 已提交
229
	remote-text.hpp
230
	audio-encoders.hpp
B
BtbN 已提交
231 232 233 234
	qt-wrappers.hpp)

set(obs_UI
	forms/NameDialog.ui
J
jp9000 已提交
235 236 237 238
	forms/AutoConfigStartPage.ui
	forms/AutoConfigVideoPage.ui
	forms/AutoConfigStreamPage.ui
	forms/AutoConfigTestPage.ui
J
jp9000 已提交
239
	forms/OBSLicenseAgreement.ui
J
jp9000 已提交
240
	forms/OBSLogReply.ui
B
BtbN 已提交
241
	forms/OBSBasic.ui
J
jp9000 已提交
242
	forms/OBSBasicTransform.ui
J
jp9000 已提交
243
	forms/OBSBasicFilters.ui
244
	forms/OBSBasicSettings.ui
J
jp9000 已提交
245
	forms/OBSBasicSourceSelect.ui
J
John Bradley 已提交
246
	forms/OBSBasicInteraction.ui
J
jp9000 已提交
247
	forms/OBSUpdate.ui
P
Palana 已提交
248
	forms/OBSRemux.ui)
B
BtbN 已提交
249 250 251 252 253 254 255 256 257 258 259 260

set(obs_QRC
	forms/obs.qrc)

qt5_wrap_ui(obs_UI_HEADERS ${obs_UI})
qt5_add_resources(obs_QRC_SOURCES ${obs_QRC})

add_executable(obs WIN32
	${obs_SOURCES}
	${obs_HEADERS}
	${obs_UI_HEADERS}
	${obs_QRC_SOURCES})
261 262 263 264 265 266 267 268 269 270 271 272 273

if(WIN32)
	if(CMAKE_SIZEOF_VOID_P EQUAL 8)
		set(_output_suffix "64")
	else()
		set(_output_suffix "32")
	endif()

	set_target_properties(obs
		PROPERTIES
			OUTPUT_NAME "obs${_output_suffix}")
endif()

B
BtbN 已提交
274 275
target_link_libraries(obs
	libobs
B
BtbN 已提交
276
	Qt5::Widgets
J
jp9000 已提交
277
	obs-frontend-api
J
jp9000 已提交
278
	${FFMPEG_LIBRARIES}
J
jp9000 已提交
279
	${LIBCURL_LIBRARIES}
B
BtbN 已提交
280 281
	${obs_PLATFORM_LIBRARIES})

282
if (APPLE)
C
Colin Edwards 已提交
283 284
	target_link_libraries(obs
			Qt5::MacExtras)
285
	set_target_properties(obs PROPERTIES LINK_FLAGS "-pagezero_size 10000 -image_base 100000000")
286 287 288 289
	set_property(
		TARGET obs
		APPEND
		PROPERTY INSTALL_RPATH
C
Colin Edwards 已提交
290
		"/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/"
291 292 293 294 295
		"/Library/Frameworks/Python.framework/Versions/3.6/lib/"
		"/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/"
	)
endif()

296 297
define_graphic_modules(obs)

B
BtbN 已提交
298
install_obs_core(obs)
299
install_obs_data(obs data obs-studio)
300 301

if (UNIX AND UNIX_STRUCTURE AND NOT APPLE)
302
	install(FILES dist/obs.desktop DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/applications)
303
	install(FILES forms/images/obs.png
304
		DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/icons/hicolor/256x256/apps)
305
endif()
306 307

add_subdirectory(frontend-plugins)
J
jp9000 已提交
308 309 310
if(WIN32)
	add_subdirectory(win-update/updater)
endif()