mirror of
https://codeberg.org/armin/monostep.git
synced 2026-09-01 04:10:46 +02:00
- Add delay and reverb Dry/Wet parameters and knobs, wired into presets - Add Accent/Slide/Fine/Rate toggles to the Randomize panel with new per-aspect pattern randomizers - Soften accent: modest volume lift plus small cutoff and filter-attack modulation instead of the heavy 5x gain boost - Halve reverb comb/allpass delays so the wet speaks sooner - Regenerate a fresh build stamp on every build
130 lines
4.3 KiB
CMake
130 lines
4.3 KiB
CMake
cmake_minimum_required(VERSION 3.22)
|
|
|
|
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)
|
|
|
|
juce_add_plugin(Monostep
|
|
VERSION 1.0.0
|
|
COMPANY_NAME "armin"
|
|
BUNDLE_ID "com.armin.monostep"
|
|
FORMATS VST3
|
|
PRODUCT_NAME "Monostep"
|
|
PLUGIN_MANUFACTURER_CODE Armn
|
|
PLUGIN_CODE MStp
|
|
DESCRIPTION "Monophonic 2-oscillator step-sequencer synth"
|
|
EDITOR_NAME MonostepAudioProcessorEditor
|
|
IS_SYNTH TRUE
|
|
NEEDS_MIDI_INPUT TRUE
|
|
VST3_AUTO_MANIFEST TRUE
|
|
)
|
|
|
|
juce_generate_juce_header(Monostep)
|
|
|
|
target_sources(Monostep PRIVATE
|
|
Source/PluginProcessor.cpp
|
|
Source/PluginEditor.cpp
|
|
Source/ui/SequencerMatrix.cpp
|
|
Source/dsp/FxProcessor.cpp
|
|
)
|
|
|
|
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")
|
|
|
|
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)
|
|
juce_add_console_app(MonostepTestHost
|
|
PRODUCT_NAME MonostepTestHost
|
|
)
|
|
juce_generate_juce_header(MonostepTestHost)
|
|
target_link_libraries(MonostepTestHost PRIVATE
|
|
juce::juce_audio_processors
|
|
juce::juce_audio_formats
|
|
)
|
|
target_include_directories(MonostepTestHost PRIVATE Source)
|
|
target_sources(MonostepTestHost PRIVATE
|
|
Source/PluginProcessor.cpp
|
|
Source/dsp/FxProcessor.cpp
|
|
tests/TestHost.cpp
|
|
)
|
|
target_compile_definitions(MonostepTestHost PRIVATE
|
|
MONOSTEP_HEADLESS=1
|
|
JUCE_PLUGINHOST_VST3=1
|
|
)
|
|
endif()
|