--- /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) +