-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCMakeLists.txt
174 lines (136 loc) · 5.82 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
cmake_minimum_required(VERSION 3.2)
project(hvcc VERSION 0.0.1 LANGUAGES C CXX)
set(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY true)
set (CMAKE_CXX_STANDARD 17)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
include(${CMAKE_CURRENT_SOURCE_DIR}/Libraries/pd.build/pd.cmake)
option(ENABLE_LIBCLANG OFF)
set(JUCE_ENABLE_MODULE_SOURCE_GROUPS OFF CACHE BOOL "" FORCE)
set_property(GLOBAL PROPERTY USE_FOLDERS YES)
if(APPLE)
set(CMAKE_XCODE_BUILD_SYSTEM "12" CACHE STRING "" FORCE)
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.11" CACHE STRING "Minimum OS X deployment version")
if(RUN_CLANG_TIDY)
set(CMAKE_OSX_ARCHITECTURES "arm64;" CACHE STRING "" FORCE)
else()
set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE)
endif()
endif()
# configure build system for external libraries
add_subdirectory(Libraries/JUCE EXCLUDE_FROM_ALL)
set(pd_dir ${CMAKE_CURRENT_SOURCE_DIR}/Libraries/pure-data/src)
# HVCC GUI
add_executable (hvcc_gui)
# libclang switch
if(ENABLE_LIBCLANG)
set (CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/cmake")
find_package (LibClang REQUIRED)
link_directories(${LIBCLANG_LIBDIR})
set(CLANG_LIBS clang clangFrontend clangDriver clangSerialization clangParse
clangCodeGen clangSema clangAnalysis clangEdit clangAST clangLex
clangBasic )
string(REPLACE " " ";" __LIST ${LIBCLANG_CXXFLAGS})
target_compile_options(hvcc_gui PRIVATE ${__LIST})
endif()
if(ENABLE_LIBCLANG)
file(GLOB hvcc_gui_sources
${CMAKE_CURRENT_SOURCE_DIR}/Source/GUI/*.h
${CMAKE_CURRENT_SOURCE_DIR}/Source/GUI/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Source/JIT/*.h
${CMAKE_CURRENT_SOURCE_DIR}/Source/JIT/*.cpp
)
else()
file(GLOB hvcc_gui_sources
${CMAKE_CURRENT_SOURCE_DIR}/Source/GUI/*.h
${CMAKE_CURRENT_SOURCE_DIR}/Source/GUI/*.cpp
)
endif()
add_compile_definitions(JUCER_ENABLE_GPL_MODE=1 JUCE_DISPLAY_SPLASH_SCREEN=0)
target_compile_definitions(hvcc_gui PUBLIC JUCE_MODAL_LOOPS_PERMITTED=1 ENABLE_LIBCLANG=${ENABLE_LIBCLANG})
target_include_directories(hvcc_gui PUBLIC "/Libraries/JUCE/modules" ${pd_dir} ${CMAKE_CURRENT_BINARY_DIR}/juce_binarydata_hvcc_binary_data/JuceLibraryCode/)
# HVCC External
set(hvcc_interface_dir ${CMAKE_CURRENT_SOURCE_DIR}/Libraries/hvcc_interface)
file(GLOB hvcc_interface
${CMAKE_CURRENT_SOURCE_DIR}/Source/Interface.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Source/Interface.h
${hvcc_interface_dir}/HeavyContext.cpp
${hvcc_interface_dir}/HvControlBinop.c
${hvcc_interface_dir}/HvControlCast.c
${hvcc_interface_dir}/HvControlDelay.c
${hvcc_interface_dir}/HvControlIf.c
${hvcc_interface_dir}/HvControlPack.c
${hvcc_interface_dir}/HvControlPrint.c
${hvcc_interface_dir}/HvControlRandom.c
${hvcc_interface_dir}/HvControlSlice.c
${hvcc_interface_dir}/HvControlSystem.c
${hvcc_interface_dir}/HvControlTabhead.c
${hvcc_interface_dir}/HvControlTabread.c
${hvcc_interface_dir}/HvControlTabwrite.c
${hvcc_interface_dir}/HvControlUnop.c
${hvcc_interface_dir}/HvControlVar.c
${hvcc_interface_dir}/HvHeavy.cpp
${hvcc_interface_dir}/HvLightPipe.c
${hvcc_interface_dir}/HvMessage.c
${hvcc_interface_dir}/HvMessagePool.c
${hvcc_interface_dir}/HvMessageQueue.c
${hvcc_interface_dir}/HvSignalBiquad.c
${hvcc_interface_dir}/HvSignalConvolution.c
${hvcc_interface_dir}/HvSignalCPole.c
${hvcc_interface_dir}/HvSignalDel1.c
${hvcc_interface_dir}/HvSignalEnvelope.c
${hvcc_interface_dir}/HvSignalLine.c
${hvcc_interface_dir}/HvSignalLorenz.c
${hvcc_interface_dir}/HvSignalPhasor.c
${hvcc_interface_dir}/HvSignalRPole.c
${hvcc_interface_dir}/HvSignalSamphold.c
${hvcc_interface_dir}/HvSignalSample.c
${hvcc_interface_dir}/HvSignalTabread.c
${hvcc_interface_dir}/HvSignalTabwrite.c
${hvcc_interface_dir}/HvSignalVar.c
${hvcc_interface_dir}/HvTable.c
${hvcc_interface_dir}/HvUtils.c
)
file(GLOB utility_sources
${CMAKE_CURRENT_SOURCE_DIR}/Source/Utility/whereami.c
${CMAKE_CURRENT_SOURCE_DIR}/Source/Utility/whereami.h
${CMAKE_CURRENT_SOURCE_DIR}/Source/Utility/concurrentqueue.h
)
file(GLOB hvcc_binary_sources
${CMAKE_CURRENT_SOURCE_DIR}/Resources/DejaVuSansMono.ttf
)
juce_add_binary_data(hvcc_binary_data SOURCES ${hvcc_binary_sources})
set_target_properties(hvcc_binary_data PROPERTIES POSITION_INDEPENDENT_CODE ON)
target_sources(hvcc_gui PRIVATE ${hvcc_gui_sources} ${utility_sources})
set_pd_sources(${pd_dir})
set_pd_external_path(${CMAKE_CURRENT_SOURCE_DIR}/External/)
add_pd_external(hvcc "hvcc~" Source/hvcc.c)
target_sources(hvcc PUBLIC ${hvcc_interface} ${utility_sources})
target_include_directories(hvcc PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/Libraries/JUCE/modules ${hvcc_interface_dir})
target_link_libraries(hvcc PUBLIC juce::juce_core juce::juce_events juce::juce_data_structures)
source_group("GUI Sources" FILES ${hvcc_gui_sources})
source_group("Utility Sources" FILES $${utility_sources})
source_group("External Sources" FILES Source/hvcc.c)
target_link_libraries(hvcc_gui PUBLIC hvcc_binary_data juce::juce_core juce::juce_gui_basics juce::juce_graphics ${CLANG_LIBS})
if(UNIX AND NOT APPLE)
target_link_libraries (hvcc_gui PRIVATE curl)
target_link_libraries (hvcc PRIVATE curl)
endif()
add_dependencies(hvcc_gui hvcc_binary_data)
add_dependencies(hvcc hvcc_gui)
set(PD_LIB_DIR "~/Documents/Pd/externals/hvcc~")
# make a setup in the hvcc build dir for debugging
add_custom_command(TARGET hvcc POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:hvcc_gui> $<TARGET_FILE_DIR:hvcc>/$<TARGET_FILE_NAME:hvcc_gui>
)
add_custom_command(TARGET hvcc POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/Resources/run_hvcc.py $<TARGET_FILE_DIR:hvcc>/run_hvcc.py
)
set(INSTALL_FILES
$<TARGET_FILE:hvcc>
$<TARGET_FILE:hvcc_gui>
${CMAKE_CURRENT_SOURCE_DIR}/Resources/run_hvcc.py
)
install(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/Resources/run_hvcc.py $<TARGET_FILE:hvcc_gui> $<TARGET_FILE:hvcc> DESTINATION ${PD_LIB_DIR})
if(UNIX)
target_compile_definitions(hvcc PUBLIC HAVE_LIBDL=1 HVCC_PATH="${HVCC_PATH}")
endif()