aports/testing/juce/cmake.patch
2026-04-13 21:58:53 +01:00

271 lines
10 KiB
Diff

--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,267 @@
+cmake_minimum_required(VERSION 3.15)
+project(JUCE VERSION 7.0.8)
+
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+
+# Find required packages
+find_package(PkgConfig REQUIRED)
+pkg_check_modules(FREETYPE REQUIRED freetype2)
+pkg_check_modules(ALSA REQUIRED alsa)
+
+# Each JUCE module has ONE main .cpp file (unity build)
+# These files include all other implementation files
+
+# juce_core - the foundation module
+add_library(juce_core STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_core/juce_core.cpp
+)
+target_include_directories(juce_core PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_definitions(juce_core PUBLIC
+ JUCE_WEB_BROWSER=0
+ JUCE_USE_CURL=0
+ JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1
+)
+target_compile_options(juce_core PRIVATE -w)
+target_link_libraries(juce_core PUBLIC dw pthread dl)
+
+# juce_events
+add_library(juce_events STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_events/juce_events.cpp
+)
+target_include_directories(juce_events PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_options(juce_events PRIVATE -w)
+target_link_libraries(juce_events PUBLIC juce_core)
+
+# juce_data_structures
+add_library(juce_data_structures STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_data_structures/juce_data_structures.cpp
+)
+target_include_directories(juce_data_structures PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_options(juce_data_structures PRIVATE -w)
+target_link_libraries(juce_data_structures PUBLIC juce_core)
+
+# juce_graphics
+add_library(juce_graphics STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_graphics/juce_graphics.cpp
+)
+target_include_directories(juce_graphics PUBLIC
+ ${CMAKE_SOURCE_DIR}/modules
+ ${FREETYPE_INCLUDE_DIRS}
+)
+target_compile_options(juce_graphics PRIVATE -w)
+target_link_libraries(juce_graphics PUBLIC juce_core ${FREETYPE_LIBRARIES} X11)
+
+# juce_gui_basics
+add_library(juce_gui_basics STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_gui_basics/juce_gui_basics.cpp
+)
+target_include_directories(juce_gui_basics PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_options(juce_gui_basics PRIVATE -w)
+target_link_libraries(juce_gui_basics PUBLIC juce_core juce_graphics juce_events X11 Xext Xrandr Xcomposite Xcursor)
+
+# juce_gui_extra
+add_library(juce_gui_extra STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_gui_extra/juce_gui_extra.cpp
+)
+target_include_directories(juce_gui_extra PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_options(juce_gui_extra PRIVATE -w)
+target_link_libraries(juce_gui_extra PUBLIC juce_gui_basics)
+
+# juce_audio_basics
+add_library(juce_audio_basics STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_audio_basics/juce_audio_basics.cpp
+)
+target_include_directories(juce_audio_basics PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_options(juce_audio_basics PRIVATE -w)
+target_link_libraries(juce_audio_basics PUBLIC juce_core)
+
+# juce_audio_devices
+add_library(juce_audio_devices STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_audio_devices/juce_audio_devices.cpp
+)
+target_include_directories(juce_audio_devices PUBLIC
+ ${CMAKE_SOURCE_DIR}/modules
+ ${ALSA_INCLUDE_DIRS}
+)
+target_compile_options(juce_audio_devices PRIVATE -w)
+target_link_libraries(juce_audio_devices PUBLIC juce_audio_basics juce_events ${ALSA_LIBRARIES})
+
+# juce_audio_formats
+add_library(juce_audio_formats STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_audio_formats/juce_audio_formats.cpp
+)
+target_include_directories(juce_audio_formats PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_options(juce_audio_formats PRIVATE -w)
+target_link_libraries(juce_audio_formats PUBLIC juce_audio_basics)
+
+# juce_audio_processors
+add_library(juce_audio_processors STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_audio_processors/juce_audio_processors.cpp
+)
+target_include_directories(juce_audio_processors PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_options(juce_audio_processors PRIVATE -w)
+target_link_libraries(juce_audio_processors PUBLIC juce_gui_basics juce_audio_basics)
+
+# juce_audio_utils
+add_library(juce_audio_utils STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_audio_utils/juce_audio_utils.cpp
+)
+target_include_directories(juce_audio_utils PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_options(juce_audio_utils PRIVATE -w)
+target_link_libraries(juce_audio_utils PUBLIC juce_gui_extra juce_audio_devices juce_audio_formats juce_audio_processors)
+
+# juce_audio_plugin_client (special module - only build if .cpp exists)
+if(EXISTS ${CMAKE_SOURCE_DIR}/modules/juce_audio_plugin_client/juce_audio_plugin_client.cpp)
+add_library(juce_audio_plugin_client STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_audio_plugin_client/juce_audio_plugin_client.cpp
+)
+target_include_directories(juce_audio_plugin_client PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_options(juce_audio_plugin_client PRIVATE -w)
+target_link_libraries(juce_audio_plugin_client PUBLIC juce_audio_processors juce_gui_basics)
+endif()
+
+# juce_dsp
+add_library(juce_dsp STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_dsp/juce_dsp.cpp
+)
+target_include_directories(juce_dsp PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_options(juce_dsp PRIVATE -w)
+target_link_libraries(juce_dsp PUBLIC juce_audio_basics)
+
+# juce_cryptography
+add_library(juce_cryptography STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_cryptography/juce_cryptography.cpp
+)
+target_include_directories(juce_cryptography PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_options(juce_cryptography PRIVATE -w)
+target_link_libraries(juce_cryptography PUBLIC juce_core)
+
+# juce_opengl
+add_library(juce_opengl STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_opengl/juce_opengl.cpp
+)
+target_include_directories(juce_opengl PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_options(juce_opengl PRIVATE -w)
+target_link_libraries(juce_opengl PUBLIC juce_gui_extra GL)
+
+# juce_osc
+add_library(juce_osc STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_osc/juce_osc.cpp
+)
+target_include_directories(juce_osc PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_options(juce_osc PRIVATE -w)
+target_link_libraries(juce_osc PUBLIC juce_core juce_events)
+
+# juce_video
+add_library(juce_video STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_video/juce_video.cpp
+)
+target_include_directories(juce_video PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_options(juce_video PRIVATE -w)
+target_link_libraries(juce_video PUBLIC juce_gui_extra)
+
+# juce_analytics
+add_library(juce_analytics STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_analytics/juce_analytics.cpp
+)
+target_include_directories(juce_analytics PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_options(juce_analytics PRIVATE -w)
+target_link_libraries(juce_analytics PUBLIC juce_core)
+
+# juce_animation (if exists - some versions may not have this)
+if(EXISTS ${CMAKE_SOURCE_DIR}/modules/juce_animation/juce_animation.cpp)
+add_library(juce_animation STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_animation/juce_animation.cpp
+)
+target_include_directories(juce_animation PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_options(juce_animation PRIVATE -w)
+target_link_libraries(juce_animation PUBLIC juce_gui_basics)
+endif()
+
+# juce_box2d
+add_library(juce_box2d STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_box2d/juce_box2d.cpp
+)
+target_include_directories(juce_box2d PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_options(juce_box2d PRIVATE -w)
+target_link_libraries(juce_box2d PUBLIC juce_graphics)
+
+# juce_javascript (if exists - depends on version)
+if(EXISTS ${CMAKE_SOURCE_DIR}/modules/juce_javascript/juce_javascript.cpp)
+add_library(juce_javascript STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_javascript/juce_javascript.cpp
+)
+target_include_directories(juce_javascript PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_options(juce_javascript PRIVATE -w)
+target_link_libraries(juce_javascript PUBLIC juce_core)
+endif()
+
+# juce_midi_ci (if exists - newer versions)
+if(EXISTS ${CMAKE_SOURCE_DIR}/modules/juce_midi_ci/juce_midi_ci.cpp)
+add_library(juce_midi_ci STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_midi_ci/juce_midi_ci.cpp
+)
+target_include_directories(juce_midi_ci PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_options(juce_midi_ci PRIVATE -w)
+target_link_libraries(juce_midi_ci PUBLIC juce_audio_basics)
+endif()
+
+# juce_product_unlocking
+add_library(juce_product_unlocking STATIC
+ ${CMAKE_SOURCE_DIR}/modules/juce_product_unlocking/juce_product_unlocking.cpp
+)
+target_include_directories(juce_product_unlocking PUBLIC ${CMAKE_SOURCE_DIR}/modules)
+target_compile_options(juce_product_unlocking PRIVATE -w)
+target_link_libraries(juce_product_unlocking PUBLIC juce_cryptography)
+
+# Install targets
+install(TARGETS
+ juce_core
+ juce_events
+ juce_data_structures
+ juce_graphics
+ juce_gui_basics
+ juce_gui_extra
+ juce_audio_basics
+ juce_audio_devices
+ juce_audio_formats
+ juce_audio_processors
+ juce_audio_utils
+ juce_dsp
+ juce_cryptography
+ juce_opengl
+ juce_osc
+ juce_video
+ juce_analytics
+ juce_box2d
+ juce_product_unlocking
+ ARCHIVE DESTINATION lib
+ LIBRARY DESTINATION lib
+)
+
+# Install conditional targets
+if(TARGET juce_audio_plugin_client)
+ install(TARGETS juce_audio_plugin_client ARCHIVE DESTINATION lib LIBRARY DESTINATION lib)
+endif()
+if(TARGET juce_animation)
+ install(TARGETS juce_animation ARCHIVE DESTINATION lib LIBRARY DESTINATION lib)
+endif()
+if(TARGET juce_javascript)
+ install(TARGETS juce_javascript ARCHIVE DESTINATION lib LIBRARY DESTINATION lib)
+endif()
+if(TARGET juce_midi_ci)
+ install(TARGETS juce_midi_ci ARCHIVE DESTINATION lib LIBRARY DESTINATION lib)
+endif()
+
+install(DIRECTORY modules/
+ DESTINATION include/JUCE-${PROJECT_VERSION}/modules
+ FILES_MATCHING PATTERN "*.h"
+)
+
+# Install manually created scripts
+install(PROGRAMS ${CMAKE_SOURCE_DIR}/juce-config DESTINATION bin)
+install(FILES ${CMAKE_SOURCE_DIR}/JUCEConfig.cmake DESTINATION lib/cmake/JUCE)
+install(FILES ${CMAKE_SOURCE_DIR}/juce.pc DESTINATION lib/pkgconfig)
+