forked from Noizefield/audio-plugin-coder
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
95 lines (82 loc) · 3.04 KB
/
CMakeLists.txt
File metadata and controls
95 lines (82 loc) · 3.04 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
cmake_minimum_required(VERSION 3.22)
project(APC_System VERSION 1.0.0 LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# ============================================
# OPTIONAL FEATURES
# ============================================
option(APC_ENABLE_VISAGE "Enable Visage UI framework support" OFF)
# ============================================
# PLATFORM DETECTION
# ============================================
if(WIN32)
set(APC_PLATFORM "Windows")
set(APC_PLATFORM_WINDOWS TRUE)
elseif(APPLE)
set(APC_PLATFORM "macOS")
set(APC_PLATFORM_MACOS TRUE)
elseif(UNIX)
set(APC_PLATFORM "Linux")
set(APC_PLATFORM_LINUX TRUE)
else()
set(APC_PLATFORM "Unknown")
endif()
message(STATUS "--- APC BUILD SYSTEM ---")
message(STATUS "Platform: ${APC_PLATFORM}")
message(STATUS "Root Directory: ${CMAKE_CURRENT_SOURCE_DIR}")
# ============================================
# GLOBAL DEFINITIONS (Platform-Specific)
# ============================================
if(APC_PLATFORM_WINDOWS)
# Windows-specific: WebView2
set(JUCE_USE_WIN_WEBVIEW2 ON CACHE BOOL "" FORCE)
add_definitions(-DJUCE_USE_WIN_WEBVIEW2=1)
message(STATUS "WebView2: Enabled")
elseif(APC_PLATFORM_MACOS)
# macOS-specific: WKWebView (system framework)
set(JUCE_USE_WIN_WEBVIEW2 OFF CACHE BOOL "" FORCE)
message(STATUS "WebView: WKWebView (macOS)")
elseif(APC_PLATFORM_LINUX)
# Linux-specific: WebKitGTK
set(JUCE_USE_WIN_WEBVIEW2 OFF CACHE BOOL "" FORCE)
message(STATUS "WebView: WebKitGTK (Linux)")
endif()
# ============================================
# EXTERNAL TOOLS
# ============================================
set(JUCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/_tools/JUCE")
set(VISAGE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/_tools/visage")
if(NOT EXISTS "${JUCE_DIR}")
message(FATAL_ERROR "JUCE missing at ${JUCE_DIR}")
endif()
add_subdirectory("${JUCE_DIR}")
# Visage is only needed for Visage UI framework plugins
if(APC_ENABLE_VISAGE)
if(NOT EXISTS "${VISAGE_DIR}")
message(FATAL_ERROR "Visage missing at ${VISAGE_DIR}")
endif()
add_subdirectory("${VISAGE_DIR}")
if(TARGET visage AND NOT TARGET visage::visage)
add_library(visage::visage ALIAS visage)
endif()
endif()
# ============================================
# PLUGIN DISCOVERY
# ============================================
message(STATUS "Scanning for plugins in: ${CMAKE_CURRENT_SOURCE_DIR}/plugins")
file(GLOB PLUGIN_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/plugins/*")
set(APC_PLUGIN_COUNT 0)
foreach(PLUGIN_DIR ${PLUGIN_DIRS})
get_filename_component(DIR_NAME ${PLUGIN_DIR} NAME)
if(IS_DIRECTORY "${PLUGIN_DIR}")
if(EXISTS "${PLUGIN_DIR}/CMakeLists.txt")
message(STATUS " -> FOUND: ${DIR_NAME}")
add_subdirectory("${PLUGIN_DIR}")
math(EXPR APC_PLUGIN_COUNT "${APC_PLUGIN_COUNT} + 1")
else()
message(STATUS " -> SKIPPING: ${DIR_NAME} (No CMakeLists.txt)")
endif()
endif()
endforeach()
message(STATUS "Total plugins found: ${APC_PLUGIN_COUNT}")
message(STATUS "--- END ---")