-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathCMakeLists.txt
178 lines (151 loc) · 6.84 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
cmake_minimum_required(VERSION 3.13.0 FATAL_ERROR)
project(TD-JUCE VERSION 0.0.1)
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT TD-JUCE)
################################################################################
# Set target arch type if empty. Visual studio solution generator provides it.
################################################################################
if(NOT CMAKE_VS_PLATFORM_NAME)
set(CMAKE_VS_PLATFORM_NAME "x64")
endif()
message("${CMAKE_VS_PLATFORM_NAME} architecture in use")
if(NOT ("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64"))
message(FATAL_ERROR "${CMAKE_VS_PLATFORM_NAME} arch is not supported!")
endif()
################################################################################
# Global configuration types
################################################################################
set(CMAKE_CONFIGURATION_TYPES
"Debug"
"Release"
CACHE STRING "" FORCE
)
################################################################################
# Global compiler options
################################################################################
if(MSVC)
# remove default flags provided with CMake for MSVC
set(CMAKE_CXX_FLAGS "")
set(CMAKE_CXX_FLAGS_DEBUG "")
set(CMAKE_CXX_FLAGS_RELEASE "")
endif()
# https://github.com/OpenShot/libopenshot-audio/blob/7b76f1de9c6a111f1aba2979eeb4a847a93aeeb4/CMakeLists.txt#L112
# Juce requires either DEBUG or NDEBUG to be defined on MacOS.
# -DNDEBUG is set by cmake for all release configs, so add
# -DDEBUG for debug builds. We'll do this for all OSes, even
# though only MacOS requires it.
# set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG")
# # Make sure we've picked some build type, default to debug
# if(NOT DEFINED CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "")
# set(CMAKE_BUILD_TYPE "Debug")
# endif()
################################################################################
# Global linker options
################################################################################
# if(MSVC)
# # remove default flags provided with CMake for MSVC
# set(CMAKE_EXE_LINKER_FLAGS "")
# set(CMAKE_MODULE_LINKER_FLAGS "")
# set(CMAKE_SHARED_LINKER_FLAGS "")
# set(CMAKE_STATIC_LINKER_FLAGS "")
# set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS}")
# set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS}")
# set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS}")
# set(CMAKE_STATIC_LINKER_FLAGS_DEBUG "${CMAKE_STATIC_LINKER_FLAGS}")
# set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS}")
# set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS}")
# set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS}")
# set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS}")
# endif()
set(cxx_no_exception_flags "-EHs-c- -D_HAS_EXCEPTIONS=1")
################################################################################
# Nuget packages function stub.
################################################################################
function(use_package TARGET PACKAGE VERSION)
message(WARNING "No implementation of use_package. Create yours. "
"Package \"${PACKAGE}\" with version \"${VERSION}\" "
"for target \"${TARGET}\" is ignored!")
endfunction()
################################################################################
# Common utils
################################################################################
include(CMake/Utils.cmake)
################################################################################
# Additional Global Settings(add specific info there)
################################################################################
include(CMake/GlobalSettingsInclude.cmake OPTIONAL)
################################################################################
# Use solution folders feature
################################################################################
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
################################################################################
# Sub-projects
################################################################################
project(TD-JUCE VERSION 0.0.1)
set(JUCE_MODULES_PATH "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/JUCE_6/modules")
message(STATUS "Using JUCE module path: ${JUCE_MODULES_PATH}")
# Default extension for source files
if(UNIX AND APPLE)
set(SOURCE_EXTENSION "mm")
else ()
set(SOURCE_EXTENSION "cpp")
endif()
# List of modules to build
set(JUCE_MODULES
juce_audio_basics
juce_audio_devices
juce_audio_formats
juce_audio_processors
juce_audio_utils
juce_core
juce_cryptography
juce_data_structures
juce_dsp
juce_events
juce_graphics
juce_gui_basics
juce_gui_extra
juce_opengl
juce_video)
# Convert to list of source files (extension based on OS)
foreach(j_module IN LISTS JUCE_MODULES)
list(APPEND JUCE_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/JuceLibraryCode/include_${j_module}.${SOURCE_EXTENSION} )
endforeach()
list(APPEND JUCE_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/JuceLibraryCode/AppConfig.h")
list(APPEND JUCE_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/JuceLibraryCode/JuceHeader.h")
add_library(TD-JUCE SHARED ${JUCE_SOURCES} )
target_compile_definitions(TD-JUCE
PUBLIC
JUCE_STANDALONE_APPLICATION=1
JUCE_WEB_BROWSER=0
JUCE_USE_CURL=0
PRIVATE
JUCE_DLL_BUILD=1
)
# Include header directories
target_include_directories(TD-JUCE PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/JuceLibraryCode>
$<BUILD_INTERFACE:${JUCE_MODULES_PATH}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/JUCE_6/modules/juce_audio_processors/format_types/VST3_SDK>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/JUCE_5/modules/juce_audio_processors/format_types/VST3_SDK>
$<INSTALL_INTERFACE:TD-JUCE> )
# Install library
INSTALL(TARGETS TD-JUCE
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} )
set_target_properties(${PROJECT_NAME} PROPERTIES
VS_DEBUGGER_COMMAND "C:\\Program Files\\Derivative\\TouchDesigner\\bin\\TouchDesigner.exe"
VS_DEBUGGER_COMMAND_ARGUMENTS "..\\$(ProjectName).toe")
target_compile_options(TD-JUCE PRIVATE /EHsc /GR)
#The following step will create a post-build event that copies the custom DLL to
#the Documents/Derivative/Plugins folder.
if (MSVC)
add_custom_command(TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"$<TARGET_FILE:TD-JUCE>"
${CMAKE_SOURCE_DIR}/Plugins)
endif (MSVC)
### add all projects for DLLs that can be used inside TouchDesigner
add_subdirectory(TD-JUCE)