-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathCMakeLists.txt
155 lines (121 loc) · 3.89 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
cmake_minimum_required(VERSION 3.18)
project(hypercurve LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake/Modules/)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
if(${CMAKE_BUILD_TYPE} MATCHES "Release")
message(STATUS "Release")
#add_compile_definitions($<$<CONFIG:Release>:_ITERATOR_DEBUG_LEVEL=0>)
else()
message(STATUS "Debug")
#add_compile_definitions($<$<CONFIG:Debug>:_ITERATOR_DEBUG_LEVEL=1>)
endif()
set(CMAKE_CXX_FLAGS_DEBUG "-g")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )
#############################################
##### Options
#############################################
option(BUILD_CSOUND_OPCODE "Build Csound opcodes" ON)
option(BUILD_LUA_MODULE "Build Lua module" OFF)
option(BUILD_LUAJIT "Build Luajit" OFF)
option(BUILD_FAUST_LIB "Build Faust library" ON)
option(BUILD_ALL "Build all libraries" OFF)
option(SSE, "SSE support for FPNG" ON)
option(MACOS_ARM "Support for MacOS Universal build - both x86_64 and ARM64" ON)
option(BUILD_TESTS "Build tests for different targets" ON)
if(MACOS_ARM)
set(CMAKE_OSX_ARCHITECTURES "arm64")
endif()
#############################################
##### Build Hypercurve library
#############################################
set(HYPERCURVE_SOURCES
src/core.h
src/curve_lib.h
src/utilities.h
src/cubic_spline.h
src/modulator_lib.h
src/extra.h
src/hypercurve.h
# fpng library
src/fpng/src/fpng.h
src/fpng/src/fpng.cpp
# asciiplot library
src/asciiplot/asciiplotter.h
src/asciiplot/asciiplotter.cpp
)
add_library(hypercurve SHARED
${HYPERCURVE_SOURCES}
)
set_target_properties(hypercurve PROPERTIES LINKER_LANGUAGE CXX)
# To disable SSE use the following and remove -msse4.1 -mpclmul
set(HYPERCURVE_OPTIONS -fPIC)
if(SSE)
list(APPEND HYPERCURVE_OPTIONS -msse4.1 -mpclmul)
endif()
target_compile_options(hypercurve
PRIVATE
${HYPERCURVE_OPTIONS}
)
# Static version
add_library(hypercurve_static STATIC
${HYPERCURVE_SOURCES}
)
set_target_properties(hypercurve_static PROPERTIES LINKER_LANGUAGE CXX)
# To disable SSE use the following and remove -msse4.1 -mpclmul
target_compile_definitions(hypercurve_static PUBLIC FPNG_NO_SSE)
target_compile_options(hypercurve_static
PRIVATE
${HYPERCURVE_OPTIONS}
)
if(NOT SSE)
target_compile_definitions(hypercurve PUBLIC FPNG_NO_SSE)
target_compile_definitions(hypercurve_static PUBLIC FPNG_NO_SSE)
endif()
#############################################
##### Build Test
#############################################
add_executable(hypercurve_test
tests/test.cpp
)
target_include_directories(hypercurve_test PUBLIC
src/
src/asciiplot
src/fpng/src
)
target_link_libraries(hypercurve_test
hypercurve_static
)
#############################################
##### Build Lua Module
#############################################
if(BUILD_LUA_MODULE OR BUILD_ALL)
if(BUILD_LUAJIT)
add_subdirectory(LuaJIT)
target_compile_options(libluajit PRIVATE -fPIC)
set(LUA_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/LuaJIT/src)
set(LUA_LIBRARIES libluajit)
endif()
message(STATUS "Building Lua module ON")
add_subdirectory(lua_module)
endif()
#############################################
##### Build Csound Opcode
#############################################
if(BUILD_CSOUND_OPCODE OR BUILD_ALL)
message(STATUS "Building Csound opcode ON")
add_subdirectory(csound_opcode)
target_link_libraries(csound_hypercurve PUBLIC hypercurve_static)
endif()
#############################################
##### Build Faust lib
#############################################
if(BUILD_FAUST_LIB OR BUILD_ALL)
message(STATUS "Building Faust library ON")
add_subdirectory(faust_lib)
endif()