monostep/CMakeLists.txt

130 lines
4.3 KiB
Text
Raw Normal View History

cmake_minimum_required(VERSION 3.22)
2026-08-05 23:12:17 +02:00
project(Monostep VERSION 1.0.0 LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_OSX_DEPLOYMENT_TARGET "12.0")
set(CMAKE_OSX_ARCHITECTURES "arm64")
# --- build metadata (git info + build date) ----------------------------------
set(MONOSTEP_GIT_STRING "no-vcs")
find_package(Git QUIET)
if(Git_FOUND)
execute_process(
COMMAND ${GIT_EXECUTABLE} -C "${CMAKE_CURRENT_LIST_DIR}" rev-parse --short HEAD
OUTPUT_VARIABLE MONOSTEP_GIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
execute_process(
COMMAND ${GIT_EXECUTABLE} -C "${CMAKE_CURRENT_LIST_DIR}" status --porcelain
OUTPUT_VARIABLE MONOSTEP_GIT_PORCELAIN
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
if(MONOSTEP_GIT_HASH)
set(MONOSTEP_GIT_STRING "${MONOSTEP_GIT_HASH}")
if(NOT MONOSTEP_GIT_PORCELAIN STREQUAL "")
string(APPEND MONOSTEP_GIT_STRING "-dirty")
endif()
endif()
endif()
if(NOT DEFINED JUCE_DIR)
set(JUCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../juce")
endif()
if(NOT EXISTS "${JUCE_DIR}/CMakeLists.txt")
if(Git_FOUND)
set(JUCE_CLONE_DIR "${CMAKE_CURRENT_BINARY_DIR}/juce")
if(EXISTS "${JUCE_CLONE_DIR}/CMakeLists.txt")
message(STATUS "Using JUCE from previous clone at ${JUCE_CLONE_DIR}")
set(JUCE_DIR "${JUCE_CLONE_DIR}")
elseif(EXISTS "${JUCE_CLONE_DIR}")
message(FATAL_ERROR "${JUCE_CLONE_DIR} exists but is not a JUCE checkout. Remove it and re-run, or pass -DJUCE_DIR=<path>.")
else()
message(STATUS "JUCE not found at ${JUCE_DIR}; cloning into ${JUCE_CLONE_DIR}...")
execute_process(
COMMAND ${GIT_EXECUTABLE} clone --depth 1 https://github.com/juce-framework/JUCE.git "${JUCE_CLONE_DIR}"
RESULT_VARIABLE JUCE_CLONE_RESULT
)
if(NOT JUCE_CLONE_RESULT EQUAL 0)
message(FATAL_ERROR "Failed to clone JUCE. Pass -DJUCE_DIR=<path> to point at an existing checkout.")
endif()
set(JUCE_DIR "${JUCE_CLONE_DIR}")
endif()
else()
message(FATAL_ERROR "JUCE not found at ${JUCE_DIR} and Git is unavailable. Pass -DJUCE_DIR=<path> or install Git.")
endif()
endif()
add_subdirectory("${JUCE_DIR}" juce_build)
2026-08-05 23:12:17 +02:00
juce_add_plugin(Monostep
VERSION 1.0.0
COMPANY_NAME "armin"
BUNDLE_ID "com.armin.monostep"
FORMATS VST3
2026-08-05 23:12:17 +02:00
PRODUCT_NAME "Monostep"
PLUGIN_MANUFACTURER_CODE Armn
PLUGIN_CODE MStp
DESCRIPTION "Monophonic 2-oscillator step-sequencer synth"
2026-08-05 23:12:17 +02:00
EDITOR_NAME MonostepAudioProcessorEditor
IS_SYNTH TRUE
NEEDS_MIDI_INPUT TRUE
VST3_AUTO_MANIFEST TRUE
)
2026-08-05 23:12:17 +02:00
juce_generate_juce_header(Monostep)
2026-08-05 23:12:17 +02:00
target_sources(Monostep PRIVATE
Source/PluginProcessor.cpp
Source/PluginEditor.cpp
Source/ui/SequencerMatrix.cpp
Source/dsp/FxProcessor.cpp
)
2026-08-05 23:12:17 +02:00
target_include_directories(Monostep PRIVATE Source)
# Regenerate BuildStamp.h on every build so the UI's build date is always fresh.
set(MONOSTEP_BUILD_STAMP_HEADER "${CMAKE_CURRENT_BINARY_DIR}/generated/BuildStamp.h")
add_custom_target(MonostepBuildStamp ALL
COMMAND ${CMAKE_COMMAND}
-DMONOSTEP_BUILD_STAMP_HEADER="${MONOSTEP_BUILD_STAMP_HEADER}"
-P "${CMAKE_CURRENT_SOURCE_DIR}/cmake/WriteBuildStamp.cmake"
COMMENT "Writing build stamp"
)
add_dependencies(Monostep MonostepBuildStamp)
target_include_directories(Monostep PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/generated")
2026-08-05 23:12:17 +02:00
target_compile_definitions(Monostep PRIVATE
JUCE_WEB_BROWSER=0
JUCE_VST3_CAN_REPLACE_VST2=0
MONOSTEP_GIT_INFO="${MONOSTEP_GIT_STRING}"
)
option(MONOSTEP_BUILD_TESTS "Build the headless host test" ON)
if(MONOSTEP_BUILD_TESTS)
2026-08-05 23:12:17 +02:00
juce_add_console_app(MonostepTestHost
PRODUCT_NAME MonostepTestHost
)
2026-08-05 23:12:17 +02:00
juce_generate_juce_header(MonostepTestHost)
target_link_libraries(MonostepTestHost PRIVATE
juce::juce_audio_processors
juce::juce_audio_formats
)
2026-08-05 23:12:17 +02:00
target_include_directories(MonostepTestHost PRIVATE Source)
target_sources(MonostepTestHost PRIVATE
Source/PluginProcessor.cpp
Source/dsp/FxProcessor.cpp
tests/TestHost.cpp
)
2026-08-05 23:12:17 +02:00
target_compile_definitions(MonostepTestHost PRIVATE
MONOSTEP_HEADLESS=1
JUCE_PLUGINHOST_VST3=1
)
endif()