CMakeLists.txt 8.9 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()

10
if(BROWSER_AVAILABLE_INTERNAL)
11 12 13
	add_definitions(-DBROWSER_AVAILABLE)
endif()

J
jp9000 已提交
14 15 16 17 18 19
add_subdirectory(obs-frontend-api)

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

project(obs)

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

J
jp9000 已提交
22 23 24 25 26 27 28 29 30 31
if(NOT DEFINED TWITCH_CLIENTID OR "${TWITCH_CLIENTID}" STREQUAL "" OR
   NOT DEFINED TWITCH_HASH     OR "${TWITCH_HASH}"     STREQUAL "" OR
   NOT BROWSER_AVAILABLE_INTERNAL)
	set(TWITCH_ENABLED FALSE)
	set(TWITCH_CLIENTID "")
	set(TWITCH_HASH "0")
else()
	set(TWITCH_ENABLED TRUE)
endif()

J
jp9000 已提交
32 33 34 35 36 37 38 39 40 41
if(NOT DEFINED MIXER_CLIENTID OR "${MIXER_CLIENTID}" STREQUAL "" OR
   NOT DEFINED MIXER_HASH     OR "${MIXER_HASH}"     STREQUAL "" OR
   NOT BROWSER_AVAILABLE_INTERNAL)
	set(MIXER_ENABLED FALSE)
	set(MIXER_CLIENTID "")
	set(MIXER_HASH "0")
else()
	set(MIXER_ENABLED TRUE)
endif()

S
SoftArch 已提交
42 43 44 45 46 47 48 49 50 51
if(NOT DEFINED RESTREAM_CLIENTID OR "${RESTREAM_CLIENTID}" STREQUAL "" OR
   NOT DEFINED RESTREAM_HASH     OR "${RESTREAM_HASH}"     STREQUAL "" OR
   NOT BROWSER_AVAILABLE_INTERNAL)
	set(RESTREAM_ENABLED FALSE)
	set(RESTREAM_CLIENTID "")
	set(RESTREAM_HASH "0")
else()
	set(RESTREAM_ENABLED TRUE)
endif()

J
jp9000 已提交
52 53 54 55
configure_file(
	"${CMAKE_CURRENT_SOURCE_DIR}/ui-config.h.in"
	"${CMAKE_CURRENT_BINARY_DIR}/ui-config.h")

B
BtbN 已提交
56 57 58
set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
set(CMAKE_AUTOMOC TRUE)

C
Clayton Groeneveld 已提交
59 60
find_package(Qt5Svg ${FIND_MODE})

J
jp9000 已提交
61
find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat)
62

C
Colin Edwards 已提交
63 64 65 66
if(APPLE)
	find_package(Qt5MacExtras REQUIRED)
endif(APPLE)

J
jp9000 已提交
67
if(NOT Qt5Widgets_FOUND)
68 69 70 71 72 73 74 75
	if (ENABLE_UI)
		message(FATAL_ERROR "Failed to find Qt5")
	else()
		message(STATUS "Qt5 not found - UI disabled")
		return()
	endif()
endif()

J
jp9000 已提交
76 77

include_directories(${FFMPEG_INCLUDE_DIRS})
J
jp9000 已提交
78
include_directories(${CMAKE_CURRENT_BINARY_DIR})
J
jp9000 已提交
79
include_directories(SYSTEM "obs-frontend-api")
80
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/libobs")
J
jp9000 已提交
81
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/deps/libff")
J
jp9000 已提交
82
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/deps/json11")
83 84 85
if(BROWSER_AVAILABLE_INTERNAL)
	include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/plugins/obs-browser/panel")
endif()
B
BtbN 已提交
86

J
jp9000 已提交
87 88 89 90
find_package(Libcurl REQUIRED)
include_directories(${LIBCURL_INCLUDE_DIRS})
add_definitions(${LIBCURL_DEFINITIONS})

B
BtbN 已提交
91
if(WIN32)
J
jp9000 已提交
92
	include_directories(${OBS_JANSSON_INCLUDE_DIRS})
93
	include_directories(${BLAKE2_INCLUDE_DIR})
J
jp9000 已提交
94

B
BtbN 已提交
95
	set(obs_PLATFORM_SOURCES
J
jp9000 已提交
96
		platform-windows.cpp
J
jp9000 已提交
97 98 99
		win-update/update-window.cpp
		win-update/win-update.cpp
		win-update/win-update-helpers.cpp
100
		${obs-studio_BINARY_DIR}/obs.rc)
J
jp9000 已提交
101 102 103 104 105 106
	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
107
		blake2
J
jp9000 已提交
108
		${OBS_JANSSON_IMPORT})
109 110 111 112

	if(CMAKE_SIZEOF_VOID_P EQUAL 4)
		set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
	endif()
B
BtbN 已提交
113 114 115
elseif(APPLE)
	set(obs_PLATFORM_SOURCES
		platform-osx.mm)
116 117

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

B
BtbN 已提交
120
	add_definitions(-fobjc-arc)
P
Palana 已提交
121 122 123 124 125 126 127 128 129 130 131 132 133 134

	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 已提交
135
elseif(UNIX)
136 137
        find_package(Qt5X11Extras REQUIRED)

B
BtbN 已提交
138 139 140
	set(obs_PLATFORM_SOURCES
		platform-x11.cpp)

141
        set(obs_PLATFORM_LIBRARIES
B
BtbN 已提交
142
                Qt5::X11Extras)
B
BtbN 已提交
143 144
endif()

J
jp9000 已提交
145 146
if(BROWSER_AVAILABLE_INTERNAL)
	list(APPEND obs_PLATFORM_SOURCES
J
jp9000 已提交
147
		obf.c
J
jp9000 已提交
148
		auth-oauth.cpp
149
		window-dock-browser.cpp
150
		window-extra-browsers.cpp
J
jp9000 已提交
151 152
		)
	list(APPEND obs_PLATFORM_HEADERS
J
jp9000 已提交
153
		obf.h
J
jp9000 已提交
154
		auth-oauth.hpp
155
		window-dock-browser.hpp
156
		window-extra-browsers.hpp
J
jp9000 已提交
157
		)
J
jp9000 已提交
158

J
jp9000 已提交
159 160 161 162 163 164 165 166 167
	if(TWITCH_ENABLED)
		list(APPEND obs_PLATFORM_SOURCES
			auth-twitch.cpp
			)
		list(APPEND obs_PLATFORM_HEADERS
			auth-twitch.hpp
			)
	endif()

J
jp9000 已提交
168 169 170 171 172 173 174 175
	if(MIXER_ENABLED)
		list(APPEND obs_PLATFORM_SOURCES
			auth-mixer.cpp
			)
		list(APPEND obs_PLATFORM_HEADERS
			auth-mixer.hpp
			)
	endif()
S
SoftArch 已提交
176 177 178 179 180 181 182 183 184

	if(RESTREAM_ENABLED)
		list(APPEND obs_PLATFORM_SOURCES
			auth-restream.cpp
			)
		list(APPEND obs_PLATFORM_HEADERS
			auth-restream.hpp
			)
	endif()
J
jp9000 已提交
185 186
endif()

J
jp9000 已提交
187 188 189 190 191 192 193 194 195 196 197 198
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
		)
V
VodBox 已提交
199 200 201
	set(obs_PLATFORM_LIBRARIES
		${obs_PLATFORM_LIBRARIES}
		w32-pthreads)
J
jp9000 已提交
202 203
endif()

B
BtbN 已提交
204 205
set(obs_SOURCES
	${obs_PLATFORM_SOURCES}
J
jp9000 已提交
206
	${obs_libffutil_SOURCES}
J
jp9000 已提交
207
	../deps/json11/json11.cpp
B
BtbN 已提交
208
	obs-app.cpp
209
	window-dock.cpp
J
jp9000 已提交
210
	api-interface.cpp
B
BtbN 已提交
211
	window-basic-main.cpp
J
jp9000 已提交
212
	window-basic-stats.cpp
J
jp9000 已提交
213
	window-basic-filters.cpp
J
jp9000 已提交
214
	window-basic-settings.cpp
J
John Bradley 已提交
215
	window-basic-interaction.cpp
216
	window-basic-properties.cpp
J
jp9000 已提交
217
	window-basic-auto-config.cpp
J
jp9000 已提交
218
	window-basic-main-outputs.cpp
J
jp9000 已提交
219
	window-basic-source-select.cpp
220
	window-basic-settings-stream.cpp
J
jp9000 已提交
221
	window-basic-auto-config-test.cpp
J
jp9000 已提交
222
	window-basic-main-scene-collections.cpp
223
	window-basic-main-transitions.cpp
J
jp9000 已提交
224
	window-basic-main-dropfiles.cpp
J
jp9000 已提交
225
	window-basic-main-profiles.cpp
226
	window-basic-main-browser.cpp
C
Clayton Groeneveld 已提交
227
	window-basic-main-icons.cpp
J
jp9000 已提交
228
	window-basic-status-bar.cpp
J
jp9000 已提交
229
	window-basic-adv-audio.cpp
J
jp9000 已提交
230 231
	window-basic-transform.cpp
	window-basic-preview.cpp
C
cg2121 已提交
232
	window-basic-about.cpp
B
BtbN 已提交
233
	window-namedialog.cpp
J
jp9000 已提交
234
	window-log-reply.cpp
J
jp9000 已提交
235
	window-projector.cpp
P
Palana 已提交
236
	window-remux.cpp
J
jp9000 已提交
237
	auth-base.cpp
J
jp9000 已提交
238
	source-tree.cpp
V
VodBox 已提交
239
	scene-tree.cpp
240
	properties-view.cpp
241
	focus-list.cpp
242
	menu-button.cpp
J
jp9000 已提交
243
	double-slider.cpp
A
akapar 已提交
244
	slider-ignorewheel.cpp
J
jp9000 已提交
245 246
	combobox-ignorewheel.cpp
	spinbox-ignorewheel.cpp
J
jp9000 已提交
247
	record-button.cpp
J
JohannMG 已提交
248
	ui-validation.cpp
249
	url-push-button.cpp
250
	volume-control.cpp
J
jp9000 已提交
251
	adv-audio-control.cpp
J
jp9000 已提交
252
	item-widget-helpers.cpp
S
Shaolin 已提交
253
	horizontal-scroll-area.cpp
J
jp9000 已提交
254
	vertical-scroll-area.cpp
255
	visibility-item-widget.cpp
H
HomeWorld 已提交
256
	slider-absoluteset-style.cpp
257
	qt-display.cpp
J
jp9000 已提交
258
	crash-report.cpp
P
Palana 已提交
259
	hotkey-edit.cpp
P
Palana 已提交
260
	source-label.cpp
J
jp9000 已提交
261
	remote-text.cpp
262
	audio-encoders.cpp
B
BtbN 已提交
263 264 265
	qt-wrappers.cpp)

set(obs_HEADERS
J
jp9000 已提交
266
	${obs_PLATFORM_HEADERS}
J
jp9000 已提交
267
	${obs_libffutil_HEADERS}
J
jp9000 已提交
268
	../deps/json11/json11.hpp
B
BtbN 已提交
269 270
	obs-app.hpp
	platform.hpp
271
	window-dock.hpp
272
	window-main.hpp
B
BtbN 已提交
273
	window-basic-main.hpp
J
jp9000 已提交
274
	window-basic-stats.hpp
J
jp9000 已提交
275
	window-basic-filters.hpp
J
jp9000 已提交
276
	window-basic-settings.hpp
J
John Bradley 已提交
277
	window-basic-interaction.hpp
278
	window-basic-properties.hpp
J
jp9000 已提交
279
	window-basic-auto-config.hpp
J
jp9000 已提交
280
	window-basic-main-outputs.hpp
J
jp9000 已提交
281
	window-basic-source-select.hpp
C
cg2121 已提交
282
	window-basic-about.hpp
J
jp9000 已提交
283
	window-basic-status-bar.hpp
J
jp9000 已提交
284
	window-basic-adv-audio.hpp
J
jp9000 已提交
285 286
	window-basic-transform.hpp
	window-basic-preview.hpp
B
BtbN 已提交
287
	window-namedialog.hpp
J
jp9000 已提交
288
	window-log-reply.hpp
J
jp9000 已提交
289
	window-projector.hpp
P
Palana 已提交
290
	window-remux.hpp
J
jp9000 已提交
291
	auth-base.hpp
J
jp9000 已提交
292
	source-tree.hpp
V
VodBox 已提交
293
	scene-tree.hpp
294
	properties-view.hpp
295
	properties-view.moc.hpp
296
	display-helpers.hpp
297
	balance-slider.hpp
J
jp9000 已提交
298
	double-slider.hpp
A
akapar 已提交
299
	slider-ignorewheel.hpp
J
jp9000 已提交
300 301
	combobox-ignorewheel.hpp
	spinbox-ignorewheel.hpp
302
	focus-list.hpp
303
	menu-button.hpp
J
jp9000 已提交
304
	mute-checkbox.hpp
J
jp9000 已提交
305
	record-button.hpp
J
JohannMG 已提交
306
	ui-validation.hpp
307
	url-push-button.hpp
308
	volume-control.hpp
J
jp9000 已提交
309
	adv-audio-control.hpp
J
jp9000 已提交
310
	item-widget-helpers.hpp
J
jp9000 已提交
311
	visibility-checkbox.hpp
312
	locked-checkbox.hpp
S
Shaolin 已提交
313
	horizontal-scroll-area.hpp
J
jp9000 已提交
314
	expand-checkbox.hpp
J
jp9000 已提交
315
	vertical-scroll-area.hpp
316
	visibility-item-widget.hpp
H
HomeWorld 已提交
317
	slider-absoluteset-style.hpp
B
BtbN 已提交
318
	qt-display.hpp
J
jp9000 已提交
319
	crash-report.hpp
P
Palana 已提交
320
	hotkey-edit.hpp
P
Palana 已提交
321
	source-label.hpp
J
jp9000 已提交
322
	remote-text.hpp
323
	audio-encoders.hpp
C
cg2121 已提交
324 325
	qt-wrappers.hpp
	clickable-label.hpp)
B
BtbN 已提交
326 327 328

set(obs_UI
	forms/NameDialog.ui
J
jp9000 已提交
329 330 331 332
	forms/AutoConfigStartPage.ui
	forms/AutoConfigVideoPage.ui
	forms/AutoConfigStreamPage.ui
	forms/AutoConfigTestPage.ui
333
	forms/ColorSelect.ui
J
jp9000 已提交
334
	forms/OBSLogReply.ui
B
BtbN 已提交
335
	forms/OBSBasic.ui
J
jp9000 已提交
336
	forms/OBSBasicTransform.ui
J
jp9000 已提交
337
	forms/OBSBasicFilters.ui
338
	forms/OBSBasicSettings.ui
J
jp9000 已提交
339
	forms/OBSBasicSourceSelect.ui
J
John Bradley 已提交
340
	forms/OBSBasicInteraction.ui
341
	forms/OBSExtraBrowsers.ui
J
jp9000 已提交
342
	forms/OBSUpdate.ui
C
cg2121 已提交
343 344
	forms/OBSRemux.ui
	forms/OBSAbout.ui)
B
BtbN 已提交
345 346 347 348 349 350 351 352 353 354 355 356

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})
357 358 359 360 361 362 363 364 365 366 367 368 369

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 已提交
370 371
target_link_libraries(obs
	libobs
B
BtbN 已提交
372
	Qt5::Widgets
C
Clayton Groeneveld 已提交
373
	Qt5::Svg
J
jp9000 已提交
374
	obs-frontend-api
J
jp9000 已提交
375
	${FFMPEG_LIBRARIES}
J
jp9000 已提交
376
	${LIBCURL_LIBRARIES}
B
BtbN 已提交
377 378
	${obs_PLATFORM_LIBRARIES})

379
if (APPLE)
C
Colin Edwards 已提交
380 381
	target_link_libraries(obs
			Qt5::MacExtras)
382
	set_target_properties(obs PROPERTIES LINK_FLAGS "-pagezero_size 10000 -image_base 100000000")
383 384
endif()

385 386
define_graphic_modules(obs)

B
BtbN 已提交
387
install_obs_core(obs)
388
install_obs_data(obs data obs-studio)
C
cg2121 已提交
389
install_obs_data_file(obs ../AUTHORS obs-studio/authors)
390 391

if (UNIX AND UNIX_STRUCTURE AND NOT APPLE)
P
Peter Eszlari 已提交
392
	add_subdirectory(xdg-data)
393
endif()
394 395

add_subdirectory(frontend-plugins)
J
jp9000 已提交
396 397 398
if(WIN32)
	add_subdirectory(win-update/updater)
endif()