-
Notifications
You must be signed in to change notification settings - Fork 11
/
OBSTemplate.cmake
170 lines (135 loc) · 5.5 KB
/
OBSTemplate.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
cmake_minimum_required(VERSION 3.16...3.21)
################################################################################
# OBS Plugin Template
################################################################################
# Change obs-plugintemplate to your plugin's name in a machine-readable format (e.g.:
# obs-myawesomeplugin) and set
add_library(${CMAKE_PROJECT_NAME} MODULE)
# Replace `Your Name Here` with the name (yours or your organization's) you want to see as the
# author of the plugin (in the plugin's metadata itself and in the installers)
set(PLUGIN_AUTHOR "${PROJECT_AUTHORS}")
# Replace `com.example.obs-plugin-template` with a unique Bundle ID for macOS releases (used both in
# the installer and when submitting the installer for notarization)
set(MACOS_BUNDLEID "com.elgato.ElgatoRemoteControlOBS")
# Replace `me@contoso.com` with the maintainer email address you want to put in Linux packages
set(LINUX_MAINTAINER_EMAIL "")
set(PROJECT_DEFINITIONS )
list(APPEND PROJECT_DEFINITIONS
-DASIO_STANDALONE
-D_WEBSOCKETPP_CPP11_STL_
)
list(APPEND PROJECT_DEFINITIONS
-DVERSION_STR=\"${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}\"
)
target_compile_definitions(${PROJECT_NAME} PRIVATE ${PROJECT_DEFINITIONS})
# Add your custom source files here - header files are optional and only required for visibility
# e.g. in Xcode or Visual Studio
if(NOT BUILD_LOADER)
target_sources(${CMAKE_PROJECT_NAME} PRIVATE
"source/module.hpp"
"source/module.cpp"
"source/json-rpc.hpp"
"source/json-rpc.cpp"
"source/server.hpp"
"source/server.cpp"
"source/handlers/handler-system.hpp"
"source/handlers/handler-system.cpp"
"source/handlers/handler-obs-frontend.hpp"
"source/handlers/handler-obs-frontend.cpp"
"source/handlers/handler-obs-source.hpp"
"source/handlers/handler-obs-source.cpp"
"source/handlers/handler-obs-scene.hpp"
"source/handlers/handler-obs-scene.cpp"
"source/details-popup.cpp"
"source/details-popup.hpp"
"${PROJECT_BINARY_DIR}/generated/module.cpp"
)
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
"${PROJECT_BINARY_DIR}/generated"
"${PROJECT_SOURCE_DIR}/source"
"third-party/nlohmann-json/single_include/"
"third-party/websocketpp/"
"${ASIO_PATH}/asio/include"
)
else()
target_sources(${CMAKE_PROJECT_NAME} PRIVATE
"source/loader/module.cpp"
)
#set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES LINKER_LANGUAGE CXX)
endif()
# Import libobs as main plugin dependency
find_package(libobs REQUIRED)
include(cmake/ObsPluginHelpers.cmake)
if(NOT BUILD_LOADER)
# Uncomment these lines if you want to use the OBS Frontend API in your plugin
find_package(obs-frontend-api REQUIRED)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE OBS::obs-frontend-api)
find_qt(COMPONENTS Widgets Core)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE Qt::Core Qt::Widgets)
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
AUTOMOC ON
AUTOUIC ON
AUTORCC ON
AUTOUIC_SEARCH_PATHS "${PROJECT_SOURCE_DIR};${PROJECT_SOURCE_DIR}/ui"
)
endif()
set_target_properties(${PROJECT_NAME} PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF
)
# Configure Files
configure_file(
"templates/config.hpp.in"
"generated/config.hpp"
)
configure_file(
"templates/version.hpp.in"
"generated/version.hpp"
)
configure_file(
"templates/module.cpp.in"
"generated/module.cpp"
)
if(D_PLATFORM_WINDOWS) # Windows Support
set(PROJECT_PRODUCT_NAME "${PROJECT_FULL_NAME}")
set(PROJECT_COMPANY_NAME "${PROJECT_AUTHORS}")
set(PROJECT_COPYRIGHT "${PROJECT_COPYRIGHT_YEARS}, ${PROJECT_AUTHORS}")
set(PROJECT_LEGAL_TRADEMARKS_1 "")
set(PROJECT_LEGAL_TRADEMARKS_2 "")
configure_file(
"templates/version.rc.in"
"generated/version.rc"
@ONLY
)
endif()
# /!\ TAKE NOTE: No need to edit things past this point /!\
# --- Platform-independent build settings ---
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE OBS::libobs)
# --- End of section ---
# --- Windows-specific build settings and tasks ---
if(OS_WINDOWS)
configure_file(cmake/bundle/windows/installer-Windows.iss.in
${CMAKE_BINARY_DIR}/installer-Windows.generated.iss)
configure_file(cmake/bundle/windows/resource.rc.in ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.rc)
target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.rc)
if(MSVC)
target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE /W4)
endif()
# --- End of section ---
# -- macOS specific build settings and tasks --
elseif(OS_MACOS)
configure_file(cmake/bundle/macos/installer-macos.pkgproj.in
${CMAKE_BINARY_DIR}/installer-macos.generated.pkgproj)
set(MACOSX_PLUGIN_GUI_IDENTIFIER "${MACOS_BUNDLEID}")
set(MACOSX_PLUGIN_BUNDLE_VERSION "${CMAKE_PROJECT_VERSION}")
set(MACOSX_PLUGIN_SHORT_VERSION_STRING "1")
target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE -Wall)
# --- End of section ---
# --- Linux-specific build settings and tasks ---
else()
target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE -Wall)
endif()
# --- End of section ---
setup_plugin_target(${CMAKE_PROJECT_NAME})