forked from projectM-visualizer/gst-projectm
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
135 lines (118 loc) · 5.03 KB
/
Copy pathCMakeLists.txt
File metadata and controls
135 lines (118 loc) · 5.03 KB
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
cmake_minimum_required(VERSION 3.21 FATAL_ERROR)
include(CMakeDependentOption)
include(CheckSymbolExists)
set(OpenGL_GL_PREFERENCE "GLVND")
project(gstprojectm VERSION 0.0.1)
# ── Plugin version string ──────────────────────────────────────────
# Override via: cmake -DGSTPROJECTM_VERSION=1.2.3
# CI sets this to the tag version or commit hash for PR builds.
set(GSTPROJECTM_VERSION "unspecified" CACHE STRING
"Plugin version string embedded in the GStreamer plugin metadata")
# ── Vendor metadata for static builds ─────────────────────────────
# When projectM is statically linked, these record which projectM
# source was used. CI passes these; local builds default to empty.
set(PROJECTM_VENDOR_REF "" CACHE STRING
"projectM git ref (tag/branch) used for static builds")
set(PROJECTM_VENDOR_COMMIT "" CACHE STRING
"projectM short commit hash used for static builds")
set(PROJECTM_VENDOR_TIMESTAMP "" CACHE STRING
"Build timestamp of the vendored projectM (ISO 8601)")
set(PROJECTM_VENDOR_GL_VARIANT "" CACHE STRING
"GL API variant of the vendored projectM (e.g. gl or gles)")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
find_package(projectM4 4.1.0 REQUIRED Playlist)
find_package(OpenGL REQUIRED)
find_package(GStreamer REQUIRED COMPONENTS gstreamer-audio gstreamer-gl gstreamer-pbutils gstreamer-video)
find_package(GLIB2 REQUIRED)
# On Windows, GStreamer GL headers #include <GL/glext.h> which comes from
# the Khronos OpenGL Registry, not the platform SDK. Locate it explicitly.
if(WIN32)
find_path(GL_EXTENSION_INCLUDE_DIR GL/glext.h)
if(GL_EXTENSION_INCLUDE_DIR)
message(STATUS "Found GL/glext.h in: ${GL_EXTENSION_INCLUDE_DIR}")
else()
message(WARNING "GL/glext.h not found — GStreamer GL headers may fail to compile")
endif()
endif()
add_library(gstprojectm MODULE
src/bufferdisposal.h
src/bufferdisposal.c
src/debug.h
src/debug.c
src/gstglbaseaudiovisualizer.h
src/gstglbaseaudiovisualizer.c
src/gstpmaudiovisualizer.h
src/gstpmaudiovisualizer.c
src/gstprojectm.h
src/gstprojectm.c
src/gstprojectmbase.h
src/gstprojectmbase.c
src/gstprojectmcaps.h
src/gstprojectmcaps.c
src/gstprojectmconfig.h
src/pushbuffer.h
src/pushbuffer.c
src/register.c
src/renderbuffer.h
src/renderbuffer.c
)
target_include_directories(gstprojectm
PUBLIC
${GSTREAMER_INCLUDE_DIRS}
${GSTREAMER_BASE_INCLUDE_DIRS}
${GSTREAMER_AUDIO_INCLUDE_DIRS}
${GSTREAMER_GL_INCLUDE_DIRS}
${GLIB2_INCLUDE_DIR}
${OPENGL_INCLUDE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
)
if(WIN32 AND GL_EXTENSION_INCLUDE_DIR)
target_include_directories(gstprojectm PUBLIC ${GL_EXTENSION_INCLUDE_DIR})
endif()
message(STATUS "GSTREAMER_INCLUDE_DIRS: ${GSTREAMER_INCLUDE_DIRS}")
message(STATUS "GSTREAMER_LIBRARIES: ${GSTREAMER_LIBRARIES}")
message(STATUS "GSTREAMER_BASE_INCLUDE_DIRS: ${GSTREAMER_BASE_INCLUDE_DIRS}")
message(STATUS "GSTREAMER_BASE_LIBRARIES: ${GSTREAMER_BASE_LIBRARIES}")
message(STATUS "GSTREAMER_AUDIO_INCLUDE_DIRS: ${GSTREAMER_AUDIO_INCLUDE_DIRS}")
message(STATUS "GSTREAMER_AUDIO_LIBRARIES: ${GSTREAMER_AUDIO_LIBRARIES}")
message(STATUS "GSTREAMER_GL_INCLUDE_DIRS: ${GSTREAMER_GL_INCLUDE_DIRS}")
message(STATUS "GSTREAMER_GL_LIBRARIES: ${GSTREAMER_GL_LIBRARIES}")
message(STATUS "GLIB2_INCLUDE_DIR: ${GLIB2_INCLUDE_DIR}")
message(STATUS "GLIB2_LIBRARIES: ${GLIB2_LIBRARIES}")
message(STATUS "CMAKE_CURRENT_SOURCE_DIR: ${CMAKE_CURRENT_SOURCE_DIR}")
# GLEW needs to be initialized if libprojectM depends on it.
if(TARGET GLEW::glew OR TARGET GLEW::glew_s)
target_compile_definitions(gstprojectm
PRIVATE
USE_GLEW
)
endif()
target_compile_definitions(gstprojectm
PRIVATE
PACKAGE_VERSION="${GSTPROJECTM_VERSION}"
)
# Pass vendor metadata as compile definitions (static builds only).
if(NOT PROJECTM_VENDOR_REF STREQUAL "")
target_compile_definitions(gstprojectm PRIVATE
HAVE_PROJECTM_VENDOR_INFO
PROJECTM_VENDOR_REF="${PROJECTM_VENDOR_REF}"
PROJECTM_VENDOR_COMMIT="${PROJECTM_VENDOR_COMMIT}"
PROJECTM_VENDOR_TIMESTAMP="${PROJECTM_VENDOR_TIMESTAMP}"
PROJECTM_VENDOR_GL_VARIANT="${PROJECTM_VENDOR_GL_VARIANT}"
)
message(STATUS "projectM vendor: ref=${PROJECTM_VENDOR_REF} commit=${PROJECTM_VENDOR_COMMIT} timestamp=${PROJECTM_VENDOR_TIMESTAMP} gl=${PROJECTM_VENDOR_GL_VARIANT}")
endif()
target_link_libraries(gstprojectm
PRIVATE
libprojectM::projectM
libprojectM::playlist
PUBLIC
${GSTREAMER_LIBRARIES}
${GSTREAMER_BASE_LIBRARIES}
${GSTREAMER_AUDIO_LIBRARIES}
${GSTREAMER_VIDEO_LIBRARIES}
${GSTREAMER_GL_LIBRARIES}
${GSTREAMER_PBUTILS_LIBRARIES}
${GLIB2_LIBRARIES}
${GLIB2_GOBJECT_LIBRARIES}
)