-
Notifications
You must be signed in to change notification settings - Fork 36
/
CMakeLists.txt
206 lines (175 loc) · 8.42 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
# This script has been adapted from the example script that comes with JUCE in the cmake example dir.
# Original closed-source Stochas code used the projucer
#
# To build stochas:
# git submodule update --init --recursive
# cmake -B build -DSTOCHAS_VERSION=xxx, etc.
# cmake --build build --config Release
#
cmake_minimum_required(VERSION 3.16)
# always statically link c runtime on windows
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# default to 10.11 (earlier versions will fail)
if (NOT DEFINED STOCHAS_MAC_SDK_VER)
set(STOCHAS_MAC_SDK_VER 10.11)
endif()
set(CMAKE_OSX_DEPLOYMENT_TARGET ${STOCHAS_MAC_SDK_VER} CACHE STRING "Build for ${STOCHAS_MAC_SDK_VER}")
if (NOT DEFINED STOCHAS_VERSION)
set (STOCHAS_VERSION 1.3.10)
endif()
project(Stochas VERSION ${STOCHAS_VERSION})
option(STOCHAS_COPY_AFTER_BUILD FALSE "Copy after build")
set(CMAKE_CXX_STANDARD 17)
message( STATUS "Building Stochas with version ${STOCHAS_VERSION}" )
if( APPLE )
message( STATUS "Building using ${CMAKE_OSX_DEPLOYMENT_TARGET}" )
endif()
# synth defaults to true
if (NOT DEFINED STOCHAS_IS_SYNTH)
set(STOCHAS_IS_SYNTH "TRUE")
endif()
# midi effect defaults to true
# TRUE is needed for AU and AUv3 in order for proper functioning in Logic
# but may have issues with other daw's. Specifically:
# I had some problems in cubase when this was turned on.
# Intermittent. It seems that when there are no output buffers it
# can sometimes get garbage in its buffer. Turning this off, while it
# causes the plugin to have a stereo out bus, seems to alleviate the problem.
# to rep the problem start cubase, hit F11 add stochas as an instrument. right away
# it starts producing a buzz (although not always)
if (NOT DEFINED STOCHAS_IS_MIDI_EFFECT)
set(STOCHAS_IS_MIDI_EFFECT "TRUE")
endif()
message( STATUS "Is Synth: ${STOCHAS_IS_SYNTH}, Is Midi Effect: ${STOCHAS_IS_MIDI_EFFECT}")
# I'm not sure at this point whether this has any effect. I know etting it to "Instrument" causes it to show as
# VSTi in reaper whereas setting it to "Effect" causes it to show as VST
set(STOCHAS_CATEGORY "Effect") # original was "Instrument"
add_subdirectory(lib/JUCE)
add_custom_target( git-info BYPRODUCTS ${CMAKE_BINARY_DIR}/geninclude/version.cpp
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMAND ${CMAKE_COMMAND} -D PROJECT_VERSION_MAJOR=${PROJECT_VERSION_MAJOR}
-D PROJECT_VERSION_MINOR=${PROJECT_VERSION_MINOR}
-D PROJECT_VERSION_PATCH=${PROJECT_VERSION_PATCH}
-D STOCHASSRC=${CMAKE_SOURCE_DIR} -D STOCHASBLD=${CMAKE_BINARY_DIR}
-D AZURE_PIPELINE=${AZURE_PIPELINE}
-P ${CMAKE_SOURCE_DIR}/cmake/versiontools.cmake
)
# if you want vst2, you need to specify VST2_PATH in your environment
if (DEFINED VST2_PATH)
message( STATUS "Building VST2. SDK at ${VST2_PATH}")
juce_set_vst2_sdk_path(${VST2_PATH})
set(VST2 "VST")
endif()
# `juce_add_plugin` adds a static library target with the name passed as the first argument
# (AudioPluginExample here). This target is a normal CMake target, but has a lot of extra properties set
# up by default. As well as this shared code static library, this function adds targets for each of
# the formats specified by the FORMATS arguments. This function accepts many optional arguments.
# Check the readme at `docs/CMake API.md` in the JUCE repo for the full list.
juce_add_plugin(stochas
COMPANY_NAME "Surge Synth Team"
BUNDLE_ID "org.surge-synth-team.stochas"
DESCRIPTION "Stochas Randomization Enabled Step Sequencer"
ICON_BIG "${CMAKE_CURRENT_SOURCE_DIR}/image/app_logo_512.png"
IS_SYNTH ${STOCHAS_IS_SYNTH}
NEEDS_MIDI_INPUT TRUE
NEEDS_MIDI_OUTPUT TRUE
IS_MIDI_EFFECT ${STOCHAS_IS_MIDI_EFFECT}
# EDITOR_WANTS_KEYBOARD_FOCUS TRUE/FALSE # Does the editor need keyboard focus?
COPY_PLUGIN_AFTER_BUILD ${STOCHAS_COPY_AFTER_BUILD} # Should the plugin be installed to a default location after building?
PLUGIN_MANUFACTURER_CODE AuVi # allows compatibility with older patches from AV days
PLUGIN_CODE Stoc
FORMATS VST3 ${VST2} AU Standalone # The formats to build. Other valid formats are: AAX Unity VST AU AUv3
VST3_CATEGORIES ${STOCHAS_CATEGORY}
USE_LEGACY_COMPATIBILITY_PLUGIN_CODE TRUE #needed to maintain plugin code compatibility with what we've released
VST3_CAN_REPLACE_VST2 TRUE #hopefully this will allow old projects to load
PRODUCT_NAME "Stochas") # The name of the final executable, which can differ from the target name
add_subdirectory(lib/clap-juce-extensions EXCLUDE_FROM_ALL)
clap_juce_extensions_plugin(TARGET stochas
CLAP_ID "org.surge-synth-team.stochas"
CLAP_FEATURES "note-effect" "sequencer" "stochastic")
add_dependencies( stochas git-info )
include_directories( src )
juce_generate_juce_header(stochas)
target_sources(stochas PRIVATE
src/ChainDialog.cpp
src/CommonComponents.cpp
src/EditDialog.cpp
src/EditorState.cpp
src/FileDialog.cpp
src/HelpBanner.cpp
src/InfoDialog.cpp
src/MidiDialog.cpp
src/NotePanel.cpp
src/OptionsPanel.cpp
src/pcg_basic.c
src/Persist.cpp
src/PlayPanel.cpp
src/PluginEditor.cpp
src/PluginProcessor.cpp
src/Scale.cpp
src/SeqRandom.cpp
src/SequenceData.cpp
src/SettingsTab.cpp
src/StepPanel.cpp
src/StochaEngine.cpp
${CMAKE_BINARY_DIR}/geninclude/version.cpp
)
# `target_compile_definitions` adds some preprocessor definitions to our target. In a Projucer
# project, these might be passed in the 'Preprocessor Definitions' field. JUCE modules also make use
# of compile definitions to switch certain features on/off, so if there's a particular feature you
# need that's not on by default, check the module header for the correct flag to set here. These
# definitions will be visible both to your code, and also the JUCE module code, so for new
# definitions, pick unique names that are unlikely to collide! This is a standard CMake command.
target_compile_definitions(stochas
PUBLIC
# JUCE_WEB_BROWSER and JUCE_USE_CURL would be on by default, but you might not need them.
JUCE_WEB_BROWSER=0 # If you remove this, add `NEEDS_WEB_BROWSER TRUE` to the `juce_add_plugin` call
JUCE_USE_CURL=0 # If you remove this, add `NEEDS_CURL TRUE` to the `juce_add_plugin` call
JUCE_VST3_CAN_REPLACE_VST2=0
# GPL3 Plugs can disable splash screen
JUCE_DISPLAY_SPLASH_SCREEN=0
JUCE_REPORT_APP_USAGE=0
# Some linux options
JUCE_JACK=1
JUCE_ALSA=1
)
# If your target needs extra binary assets, you can add them here. The first argument is the name of
# a new static library target that will include all the binary resources. There is an optional
# `NAMESPACE` argument that can specify the namespace of the generated binary data class. Finally,
# the SOURCES argument should be followed by a list of source files that should be built into the
# static library. These source files can be of any kind (wav data, images, fonts, icons etc.).
# Conversion to binary-data will happen when your target is built.
juce_add_binary_data(assets NAMESPACE SeqImageX SOURCES
image/exclamation-64.png
image/not.png
image/play.png
image/play2.png
image/logo_no_bg.png
image/x-mark-4-64.png
text/infobox.txt
)
set_target_properties(assets PROPERTIES
POSITION_INDEPENDENT_CODE TRUE)
# `target_link_libraries` links libraries and JUCE modules to other libraries or executables. Here,
# we're linking our executable target to the `juce::juce_audio_utils` module. Inter-module
# dependencies are resolved automatically, so `juce_core`, `juce_events` and so on will also be
# linked automatically. If we'd generated a binary data target above, we would need to link to it
# here too. This is a standard CMake command.
target_link_libraries(stochas PRIVATE
assets # to include our images
juce::juce_audio_utils
juce::juce_audio_plugin_client
)
if( APPLE )
add_custom_target( install-au-local )
add_dependencies( install-au-local stochas_AU )
add_custom_command(
TARGET install-au-local
POST_BUILD
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND echo "Installing audio unit locally"
COMMAND rsync -r --delete "${ZIP_FROM_DIR}/AU/Stochas.component/" "\${HOME}/Library/Audio/Plug-Ins/Components/Stochas.component/"
COMMAND auval -vt aumi AuVi
)
endif()