cmake_minimum_required(VERSION 3.22) project(SM26 VERSION 1.0.0 LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) if(NOT DEFINED JUCE_ROOT) set(JUCE_ROOT "${CMAKE_CURRENT_BINARY_DIR}/juce") endif() if(NOT DEFINED CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() if(NOT EXISTS "${JUCE_ROOT}/CMakeLists.txt") message(FATAL_ERROR "JUCE not found at ${JUCE_ROOT}. Run 'make deps' first (clones JUCE into build/).") endif() add_subdirectory("${JUCE_ROOT}" juce_build) if(APPLE) set(SM26_FORMATS Standalone AU VST3) elseif(UNIX) set(SM26_FORMATS Standalone VST3) else() set(SM26_FORMATS VST3) endif() juce_add_plugin(SM-26 VENDOR_NAME "SM" VENDOR_WEBSITE "https://example.org/sm-26" VENDOR_EMAIL "dev@example.org" VENDOR_VERSION_CODE 0x0100 PLUGIN_MANUFACTURER_CODE "SM26" PLUGIN_CODE "SM26" PRODUCT_NAME "SM-26" PRODUCT_DESCRIPTION "SM-26 synthesizer" VERSION "1.0.0" IS_SYNTH TRUE NEEDS_MIDI_INPUT TRUE NEEDS_MIDI_OUTPUT FALSE IS_MIDI_EFFECT FALSE EDITOR_NAME "SM26AudioProcessorEditor" EDITOR_NEEDS_KEYBOARD_FOCUS TRUE FORMATS ${SM26_FORMATS} ) target_sources(SM-26 PRIVATE Source/PluginProcessor.cpp Source/PluginEditor.cpp Source/SynthParams.cpp Source/SynthEngine.cpp Source/Presets.cpp Source/LcdDisplay.cpp Source/MenuSystem.cpp Source/JoystickPad.cpp ) target_include_directories(SM-26 PRIVATE Source) target_compile_definitions(SM-26 PRIVATE JUCE_WEB_BROWSER=0 JUCE_USE_CURL=0 JUCE_ENABLE_GUI_TELNET_CONSOLE=0 JUCE_VST3_CAN_REPLACE_VST2=0 JUCE_MODAL_LOOPS_PERMITTED=1 ) juce_generate_juce_header(SM-26) target_link_libraries (SM-26 PRIVATE juce::juce_audio_utils juce::juce_audio_devices) add_custom_target(gen_buildinfo ALL COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tools/gen_buildinfo.sh" "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/gen/BuildInfo_generated.h" COMMENT "Generating build info header (git version + build time)" ) add_dependencies(SM-26 gen_buildinfo) target_include_directories(SM-26 PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/gen") set_target_properties(SM-26 PROPERTIES OUTPUT_NAME "SM-26") if(APPLE) set_target_properties(SM-26 PROPERTIES MICROPHONE_PERMISSION_ENABLED FALSE WEBKIT_PERMISSION_ENABLED FALSE ) endif()