pd4web 2.0.2__tar.gz → 2.0.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pd4web-2.0.2 → pd4web-2.0.4}/PKG-INFO +1 -1
- pd4web-2.0.4/Sources/Libraries/pd.cmake/pd.cmake +435 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/config.h +5 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web/Builder.py +14 -1
- pd4web-2.0.4/Sources/pd4web/Compilers.py +97 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web/Libraries.py +0 -1
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web/Pd4Web.py +62 -55
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web.cpp +10 -3
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web.gui.js +33 -9
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web.hpp +0 -4
- {pd4web-2.0.2 → pd4web-2.0.4}/pyproject.toml +5 -4
- pd4web-2.0.2/Sources/Libraries/pd.cmake/pd.cmake +0 -380
- pd4web-2.0.2/Sources/pd4web/Compilers.py +0 -78
- {pd4web-2.0.2 → pd4web-2.0.4}/LICENSE +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/README.md +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/.clang-format +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/.prettierrc +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/.yamlftm +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/Libraries.yaml +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/cyclone.cmake +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/earplug.cmake +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/else.cmake +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/libpd.cmake +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/o.scofo~.cmake +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/.git +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/.github/workflows/c-cpp.yml +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/.gitignore +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/CMakeLists.txt +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Examples/.clang-format +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Examples/CMakeLists.txt +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Examples/fft~/fft~-help.pd +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Examples/fft~/fft~.cpp +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Examples/simple/simple-help.pd +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Examples/simple/simple-patch.pd +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Examples/simple/simple.cpp +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Examples/simple~/simple~-help.pd +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Examples/simple~/simple~.cpp +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/LICENSE +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/README.md +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Tests/01.Deprecated-Functions/CMakeLists.txt +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Tests/CMakeLists.txt +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pmpd.cmake +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/timbreIDLib.cmake +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/__init__.py +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/cmake-format.yaml +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/externals.cpp +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/favicon.ico +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/index.html +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web/Emscripten.py +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web/Helpers.py +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web/Objects.py +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web/Patch.py +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web/__init__.py +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web.gitignore +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web.midi.js +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web.style.css +0 -0
- {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web.threads.js +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pd4web
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.4
|
|
4
4
|
Summary: pd4web compiles PureData patches with external objects for Wasm, allowing to run entire patches in web browsers.
|
|
5
5
|
Home-page: https://charlesneimog.github.io/pd4web
|
|
6
6
|
Author: Charles K. Neimog
|
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
# check if cmake version is higher than 3.19, we need cmake_language
|
|
2
|
+
if(${CMAKE_VERSION} VERSION_LESS "3.19")
|
|
3
|
+
message(FATAL_ERROR "pd.cmake requires Cmake Version 3.19 or newer")
|
|
4
|
+
endif()
|
|
5
|
+
|
|
6
|
+
# ╭──────────────────────────────────────╮
|
|
7
|
+
# │ Set pd.cmake variables │
|
|
8
|
+
# ╰──────────────────────────────────────╯
|
|
9
|
+
set(PDCMAKE_DIR
|
|
10
|
+
${CMAKE_CURRENT_LIST_DIR}
|
|
11
|
+
CACHE STRING "PATH where is located pd.cmake file")
|
|
12
|
+
|
|
13
|
+
set(PD_FLOATSIZE
|
|
14
|
+
32
|
|
15
|
+
CACHE STRING "the floatsize of Pd (32 or 64)")
|
|
16
|
+
|
|
17
|
+
set(PD_SOURCES_PATH
|
|
18
|
+
""
|
|
19
|
+
CACHE PATH "Path to Pd sources")
|
|
20
|
+
|
|
21
|
+
set(PD_ENABLE_TILDE_TARGET_WARNING
|
|
22
|
+
ON
|
|
23
|
+
CACHE BOOL "Warning for Target with tilde")
|
|
24
|
+
|
|
25
|
+
set(PD_INSTALL_LIBS
|
|
26
|
+
ON
|
|
27
|
+
CACHE BOOL "Install Pd Externals on PDLIBDIR")
|
|
28
|
+
|
|
29
|
+
set(PD_BUILD_STATIC_OBJECTS
|
|
30
|
+
OFF
|
|
31
|
+
CACHE
|
|
32
|
+
BOOL
|
|
33
|
+
"Enable building static objects. Useful when using self-contained objects with libpd, such as in embedded systems or standalone applications."
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
# ╭──────────────────────────────────────╮
|
|
37
|
+
# │ Get default PDLIBDIR │
|
|
38
|
+
# ╰──────────────────────────────────────╯
|
|
39
|
+
if(APPLE)
|
|
40
|
+
set(PDLIBDIR
|
|
41
|
+
"~/Library/Pd"
|
|
42
|
+
CACHE PATH "Path where lib will be installed")
|
|
43
|
+
elseif(UNIX)
|
|
44
|
+
set(PDLIBDIR
|
|
45
|
+
"/usr/local/lib/pd-externals"
|
|
46
|
+
CACHE PATH "Path where lib will be installed")
|
|
47
|
+
elseif(WIN32)
|
|
48
|
+
set(PDLIBDIR
|
|
49
|
+
"$ENV{APPDATA}/Pd"
|
|
50
|
+
CACHE PATH "Path where lib will be installed")
|
|
51
|
+
else()
|
|
52
|
+
message(FATAL_ERROR "Platform not supported")
|
|
53
|
+
endif()
|
|
54
|
+
|
|
55
|
+
if(PD_INSTALL_LIBS)
|
|
56
|
+
message(STATUS "Pd Install Libs Path: ${PDLIBDIR}")
|
|
57
|
+
endif()
|
|
58
|
+
|
|
59
|
+
# ╭──────────────────────────────────────╮
|
|
60
|
+
# │ ToolChain for Raspberry (others) │
|
|
61
|
+
# ╰──────────────────────────────────────╯
|
|
62
|
+
if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" AND CMAKE_SYSTEM_NAME MATCHES
|
|
63
|
+
"Linux")
|
|
64
|
+
set(CMAKE_SYSTEM_NAME Linux)
|
|
65
|
+
set(CMAKE_SYSTEM_PROCESSOR aarch64)
|
|
66
|
+
find_program(AARCH64_GCC NAMES aarch64-linux-gnu-gcc)
|
|
67
|
+
find_program(AARCH64_GXX NAMES aarch64-linux-gnu-g++)
|
|
68
|
+
if(AARCH64_GCC AND AARCH64_GXX)
|
|
69
|
+
set(CMAKE_C_COMPILER ${AARCH64_GCC})
|
|
70
|
+
set(CMAKE_CXX_COMPILER ${AARCH64_GXX})
|
|
71
|
+
else()
|
|
72
|
+
message(FATAL_ERROR "Cross-compilers for aarch64 architecture not found.")
|
|
73
|
+
endif()
|
|
74
|
+
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm" AND CMAKE_SYSTEM_NAME MATCHES
|
|
75
|
+
"Linux")
|
|
76
|
+
set(CMAKE_SYSTEM_NAME Linux)
|
|
77
|
+
set(CMAKE_SYSTEM_PROCESSOR arm)
|
|
78
|
+
find_program(ARM_GCC NAMES arm-linux-gnueabihf-gcc)
|
|
79
|
+
find_program(ARM_GXX NAMES arm-linux-gnueabihf-g++)
|
|
80
|
+
if(ARM_GCC AND ARM_GXX)
|
|
81
|
+
set(CMAKE_C_COMPILER ${ARM_GCC})
|
|
82
|
+
set(CMAKE_CXX_COMPILER ${ARM_GXX})
|
|
83
|
+
else()
|
|
84
|
+
message(
|
|
85
|
+
FATAL_ERROR "ERROR: Cross-compilers for ARM architecture not found.")
|
|
86
|
+
endif()
|
|
87
|
+
endif()
|
|
88
|
+
|
|
89
|
+
if(NOT PD_SOURCES_PATH)
|
|
90
|
+
if(WIN32 OR MINGW)
|
|
91
|
+
if(PD_FLOATSIZE EQUAL 64)
|
|
92
|
+
set(PD_SOURCES_PATH "C:/Program Files/Pd64/src")
|
|
93
|
+
if(NOT PDBINDIR)
|
|
94
|
+
set(PDBINDIR "C:/Program Files/Pd64/bin")
|
|
95
|
+
endif()
|
|
96
|
+
elseif(PD_FLOATSIZE EQUAL 32)
|
|
97
|
+
set(PD_SOURCES_PATH "C:/Program Files/Pd/src")
|
|
98
|
+
if(NOT PDBINDIR)
|
|
99
|
+
set(PDBINDIR "C:/Program Files/Pd/bin")
|
|
100
|
+
endif()
|
|
101
|
+
endif()
|
|
102
|
+
find_library(
|
|
103
|
+
PD_LIBRARY
|
|
104
|
+
NAMES pd
|
|
105
|
+
HINTS ${PDBINDIR})
|
|
106
|
+
find_path(PD_HEADER_PATH m_pd.h PATHS ${PD_SOURCES_PATH})
|
|
107
|
+
if(NOT PD_HEADER_PATH)
|
|
108
|
+
message(
|
|
109
|
+
FATAL_ERROR
|
|
110
|
+
"<m_pd.h> not found in C:\\Program Files\\Pd\\src, is Pd installed?")
|
|
111
|
+
endif()
|
|
112
|
+
|
|
113
|
+
elseif(APPLE)
|
|
114
|
+
file(GLOB PD_INSTALLER "/Applications/Pd*.app")
|
|
115
|
+
if(PD_INSTALLER)
|
|
116
|
+
foreach(app ${PD_INSTALLER})
|
|
117
|
+
get_filename_component(PD_SOURCES_PATH "${app}/Contents/Resources/src/"
|
|
118
|
+
ABSOLUTE)
|
|
119
|
+
endforeach()
|
|
120
|
+
else()
|
|
121
|
+
message(
|
|
122
|
+
FATAL_ERROR
|
|
123
|
+
"PD_SOURCES_PATH not set and no Pd.app found in /Applications, is Pd installed?"
|
|
124
|
+
)
|
|
125
|
+
endif()
|
|
126
|
+
|
|
127
|
+
find_path(PD_HEADER_PATH m_pd.h PATHS ${PD_SOURCES_PATH})
|
|
128
|
+
if(NOT PD_HEADER_PATH)
|
|
129
|
+
message(
|
|
130
|
+
FATAL_ERROR
|
|
131
|
+
"<m_pd.h> not found in /Applications/Pd.app/Contents/Resources/src/, is Pd installed?"
|
|
132
|
+
)
|
|
133
|
+
endif()
|
|
134
|
+
message(STATUS "PD_SOURCES_PATH not set, using ${PD_SOURCES_PATH}")
|
|
135
|
+
|
|
136
|
+
elseif(UNIX AND NOT APPLE)
|
|
137
|
+
if(NOT PD_SOURCES_PATH)
|
|
138
|
+
set(PD_SOURCES_PATH "/usr/include/pd/")
|
|
139
|
+
endif()
|
|
140
|
+
if(NOT PDBINDIR)
|
|
141
|
+
set(PDBINDIR ${PD_SOURCES_PATH}/../bin)
|
|
142
|
+
endif()
|
|
143
|
+
find_path(PD_HEADER_PATH m_pd.h PATHS ${PD_SOURCES_PATH})
|
|
144
|
+
if(NOT PD_HEADER_PATH AND NOT EMSCRIPTEN)
|
|
145
|
+
message(
|
|
146
|
+
WARNING "<m_pd.h> not found in /usr/include/pd/, is Pd installed?")
|
|
147
|
+
endif()
|
|
148
|
+
|
|
149
|
+
else()
|
|
150
|
+
message(
|
|
151
|
+
FATAL_ERROR "PD_SOURCES_PATH not set and no default path for the system")
|
|
152
|
+
endif()
|
|
153
|
+
set(PD_SOURCES_PATH ${PD_SOURCES_PATH})
|
|
154
|
+
endif()
|
|
155
|
+
|
|
156
|
+
# ╭──────────────────────────────────────╮
|
|
157
|
+
# │ Macros │
|
|
158
|
+
# ╰──────────────────────────────────────╯
|
|
159
|
+
macro(set_pd_external_path EXTERNAL_PATH)
|
|
160
|
+
message(
|
|
161
|
+
DEPRECATION
|
|
162
|
+
"set_pd_external_path was removed, you can set PDLIBDIR and run cmake with '-DPD_INSTALL_LIBS=ON' instead"
|
|
163
|
+
)
|
|
164
|
+
endmacro(set_pd_external_path)
|
|
165
|
+
|
|
166
|
+
# ──────────────────────────────────────
|
|
167
|
+
macro(set_pd_sources PD_SOURCES)
|
|
168
|
+
message(
|
|
169
|
+
DEPRECATION "set_pd_sources is deprecated, use pd_set_sources instead")
|
|
170
|
+
endmacro(set_pd_sources)
|
|
171
|
+
|
|
172
|
+
macro(pd_set_sources PD_SOURCES)
|
|
173
|
+
set(PD_SOURCES_PATH ${PD_SOURCES})
|
|
174
|
+
endmacro(pd_set_sources)
|
|
175
|
+
|
|
176
|
+
# ╭──────────────────────────────────────╮
|
|
177
|
+
# │ Functions │
|
|
178
|
+
# ╰──────────────────────────────────────╯
|
|
179
|
+
function(pd_add_datafile OBJ_TARGET DATA_FILE)
|
|
180
|
+
set(BOOLEAN_ARGS) # No args for now
|
|
181
|
+
set(ONE_ARGS) # Define optional arg for TARGET
|
|
182
|
+
set(MULTI_ARGS DESTINATION IGNORE_DIR)
|
|
183
|
+
cmake_parse_arguments(PD_DATAFILE "${BOOLEAN_ARGS}" "${ONE_ARGS}"
|
|
184
|
+
"${MULTI_ARGS}" ${ARGN})
|
|
185
|
+
if(${OBJ_TARGET} MATCHES "~$")
|
|
186
|
+
string(REGEX REPLACE "~$" "_tilde" OBJ_TARGET ${OBJ_TARGET})
|
|
187
|
+
endif()
|
|
188
|
+
|
|
189
|
+
foreach(DATA_FILE ${DATA_FILE})
|
|
190
|
+
if(IS_DIRECTORY ${DATA_FILE})
|
|
191
|
+
if(PD_DATAFILE_DESTINATION)
|
|
192
|
+
install(
|
|
193
|
+
DIRECTORY ${DATA_FILE}
|
|
194
|
+
DESTINATION ${PDLIBDIR}/${PROJECT_NAME}/${PD_DATAFILE_DESTINATION})
|
|
195
|
+
else()
|
|
196
|
+
install(DIRECTORY ${DATA_FILE} DESTINATION ${PDLIBDIR}/${PROJECT_NAME})
|
|
197
|
+
endif()
|
|
198
|
+
else()
|
|
199
|
+
if(PD_DATAFILE_DESTINATION)
|
|
200
|
+
install(
|
|
201
|
+
FILES ${DATA_FILE}
|
|
202
|
+
DESTINATION ${PDLIBDIR}/${PROJECT_NAME}/${PD_DATAFILE_DESTINATION})
|
|
203
|
+
else()
|
|
204
|
+
install(FILES ${DATA_FILE} DESTINATION ${PDLIBDIR}/${PROJECT_NAME})
|
|
205
|
+
endif()
|
|
206
|
+
endif()
|
|
207
|
+
endforeach()
|
|
208
|
+
|
|
209
|
+
endfunction(pd_add_datafile)
|
|
210
|
+
|
|
211
|
+
# ──────────────────────────────────────
|
|
212
|
+
macro(pd_set_lib_ext OBJ_TARGET_NAME)
|
|
213
|
+
if(EMSCRIPTEN)
|
|
214
|
+
return()
|
|
215
|
+
endif()
|
|
216
|
+
if(PD_EXTENSION)
|
|
217
|
+
set_target_properties(${OBJ_TARGET_NAME} PROPERTIES SUFFIX
|
|
218
|
+
".${PD_EXTENSION}")
|
|
219
|
+
else()
|
|
220
|
+
if(NOT (PD_FLOATSIZE EQUAL 64 OR PD_FLOATSIZE EQUAL 32))
|
|
221
|
+
message(FATAL_ERROR "PD_FLOATSIZE must be 32 or 64")
|
|
222
|
+
endif()
|
|
223
|
+
|
|
224
|
+
if(APPLE)
|
|
225
|
+
if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
|
|
226
|
+
set(PD_EXTENSION ".darwin-arm64-${PD_FLOATSIZE}.so")
|
|
227
|
+
else()
|
|
228
|
+
set(PD_EXTENSION ".darwin-amd64-${PD_FLOATSIZE}.so")
|
|
229
|
+
endif()
|
|
230
|
+
|
|
231
|
+
elseif(UNIX)
|
|
232
|
+
if(CMAKE_SIZEOF_VOID_P EQUAL 4) # 32-bit
|
|
233
|
+
if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
|
|
234
|
+
set(PD_EXTENSION ".linux-arm-${PD_FLOATSIZE}.so")
|
|
235
|
+
endif()
|
|
236
|
+
else()
|
|
237
|
+
if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
|
|
238
|
+
set(PD_EXTENSION ".linux-arm64-${PD_FLOATSIZE}.so")
|
|
239
|
+
else()
|
|
240
|
+
set(PD_EXTENSION ".linux-amd64-${PD_FLOATSIZE}.so")
|
|
241
|
+
endif()
|
|
242
|
+
endif()
|
|
243
|
+
elseif(WIN32)
|
|
244
|
+
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
245
|
+
set(PD_EXTENSION ".windows-i386-${PD_FLOATSIZE}.dll")
|
|
246
|
+
else()
|
|
247
|
+
set(PD_EXTENSION ".windows-amd64-${PD_FLOATSIZE}.dll")
|
|
248
|
+
endif()
|
|
249
|
+
endif()
|
|
250
|
+
|
|
251
|
+
if(NOT PD_EXTENSION)
|
|
252
|
+
message(
|
|
253
|
+
FATAL_ERROR
|
|
254
|
+
"Not possible to determine the extension of the library, please set PD_EXTENSION"
|
|
255
|
+
)
|
|
256
|
+
endif()
|
|
257
|
+
set_target_properties(${OBJ_TARGET_NAME} PROPERTIES SUFFIX ${PD_EXTENSION})
|
|
258
|
+
endif()
|
|
259
|
+
endmacro(pd_set_lib_ext)
|
|
260
|
+
|
|
261
|
+
# ──────────────────────────────────────
|
|
262
|
+
function(pd_add_external PD_EXTERNAL_NAME EXTERNAL_SOURCES)
|
|
263
|
+
|
|
264
|
+
set(BOOLEAN_ARGS) # No args for now
|
|
265
|
+
set(ONE_ARGS TARGET) # Define optional arg for TARGET
|
|
266
|
+
set(MULTI_ARGS CXX_FLAGS C_FLAGS LINK_LIBRARIES) # Define multi args,
|
|
267
|
+
# CXX_FLAGS C_FLAGS
|
|
268
|
+
cmake_parse_arguments(PD_EXTERNAL "${BOOLEAN_ARGS}" "${ONE_ARGS}"
|
|
269
|
+
"${MULTI_ARGS}" ${ARGN})
|
|
270
|
+
|
|
271
|
+
# Warning case external name contains ~ and TARGET IS NOT DEFINED
|
|
272
|
+
if(${PD_EXTERNAL_NAME} MATCHES "~$" AND "${PD_EXTERNAL_TARGET}" STREQUAL "")
|
|
273
|
+
string(REGEX REPLACE "~$" "_tilde" OBJ_TARGET_NAME ${PD_EXTERNAL_NAME})
|
|
274
|
+
if(${ENABLE_TILDE_TARGET_WARNING})
|
|
275
|
+
message(
|
|
276
|
+
WARNING "TARGET for the external ${PD_EXTERNAL_NAME} contains \"~\", "
|
|
277
|
+
"replacing with _tilde. Use TARGET keyword in pd_add_external "
|
|
278
|
+
"to define a custom target name.\n")
|
|
279
|
+
endif()
|
|
280
|
+
elseif(NOT ${PD_EXTERNAL_TARGET} STREQUAL "")
|
|
281
|
+
set(OBJ_TARGET_NAME ${PD_EXTERNAL_TARGET})
|
|
282
|
+
else()
|
|
283
|
+
set(OBJ_TARGET_NAME ${PD_EXTERNAL_NAME})
|
|
284
|
+
endif()
|
|
285
|
+
|
|
286
|
+
if(EMSCRIPTEN OR PD_BUILD_STATIC_OBJECTS)
|
|
287
|
+
add_library(${OBJ_TARGET_NAME} STATIC ${EXTERNAL_SOURCES})
|
|
288
|
+
set_target_properties(${OBJ_TARGET_NAME} PROPERTIES OUTPUT_NAME
|
|
289
|
+
${PD_EXTERNAL_NAME})
|
|
290
|
+
set_property(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_STATIC_LIBRARIES
|
|
291
|
+
${OBJ_TARGET_NAME})
|
|
292
|
+
else()
|
|
293
|
+
add_library(${OBJ_TARGET_NAME} SHARED ${EXTERNAL_SOURCES})
|
|
294
|
+
set_target_properties(${OBJ_TARGET_NAME} PROPERTIES PREFIX "")
|
|
295
|
+
set_target_properties(${OBJ_TARGET_NAME} PROPERTIES OUTPUT_NAME
|
|
296
|
+
${PD_EXTERNAL_NAME})
|
|
297
|
+
pd_set_lib_ext(${OBJ_TARGET_NAME})
|
|
298
|
+
get_property(
|
|
299
|
+
PD_EXTENSION
|
|
300
|
+
TARGET ${OBJ_TARGET_NAME}
|
|
301
|
+
PROPERTY SUFFIX)
|
|
302
|
+
endif()
|
|
303
|
+
|
|
304
|
+
# Check if CXX_FLAGS is defined, if true set the flags
|
|
305
|
+
if(DEFINED PD_EXTERNAL_CXX_FLAGS)
|
|
306
|
+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PD_EXTERNAL_CXX_FLAGS}")
|
|
307
|
+
endif()
|
|
308
|
+
|
|
309
|
+
# Check if C_FLAGS is defined, if true set the flags
|
|
310
|
+
if(DEFINED PD_EXTERNAL_C_FLAGS)
|
|
311
|
+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PD_EXTERNAL_C_FLAGS}")
|
|
312
|
+
endif()
|
|
313
|
+
|
|
314
|
+
# Check if LINK_LIBRARIES is defined, if true set the flags
|
|
315
|
+
if(DEFINED PD_EXTERNAL_LINK_LIBRARIES)
|
|
316
|
+
target_link_libraries(${OBJ_TARGET_NAME}
|
|
317
|
+
PRIVATE ${PD_EXTERNAL_LINK_LIBRARIES})
|
|
318
|
+
endif()
|
|
319
|
+
target_include_directories(${OBJ_TARGET_NAME} PRIVATE ${PD_SOURCES_PATH}
|
|
320
|
+
)# Add Pd Includes
|
|
321
|
+
if(WIN32)
|
|
322
|
+
if(PD_FLOATSIZE EQUAL 64)
|
|
323
|
+
target_link_libraries(${OBJ_TARGET_NAME} PRIVATE "${PDBINDIR}/pd64.lib")
|
|
324
|
+
elseif(PD_FLOATSIZE EQUAL 32)
|
|
325
|
+
target_link_libraries(${OBJ_TARGET_NAME} PRIVATE "${PDBINDIR}/pd.lib")
|
|
326
|
+
endif()
|
|
327
|
+
elseif(APPLE)
|
|
328
|
+
set_target_properties(${OBJ_TARGET_NAME}
|
|
329
|
+
PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
|
|
330
|
+
endif()
|
|
331
|
+
|
|
332
|
+
if(WIN32)
|
|
333
|
+
if(PD_FLOATSIZE EQUAL 64)
|
|
334
|
+
target_link_libraries(${OBJ_TARGET_NAME} PRIVATE "${PDBINDIR}/pd64.lib")
|
|
335
|
+
elseif(PD_FLOATSIZE EQUAL 32)
|
|
336
|
+
target_link_libraries(${OBJ_TARGET_NAME} PRIVATE "${PDBINDIR}/pd.lib")
|
|
337
|
+
endif()
|
|
338
|
+
elseif(APPLE)
|
|
339
|
+
set_target_properties(${OBJ_TARGET_NAME}
|
|
340
|
+
PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
|
|
341
|
+
endif()
|
|
342
|
+
|
|
343
|
+
if(PD_FLOATSIZE STREQUAL 64)
|
|
344
|
+
target_compile_definitions(${OBJ_TARGET_NAME} PRIVATE PD_FLOATSIZE=64)
|
|
345
|
+
endif()
|
|
346
|
+
|
|
347
|
+
set_target_properties(${OBJ_TARGET_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
|
348
|
+
set_target_properties(${OBJ_TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
|
349
|
+
set_target_properties(${OBJ_TARGET_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
|
350
|
+
foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
|
|
351
|
+
string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
|
|
352
|
+
set_target_properties(${OBJ_TARGET_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_CURRENT_BINARY_DIR})
|
|
353
|
+
set_target_properties(${OBJ_TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_CURRENT_BINARY_DIR})
|
|
354
|
+
set_target_properties(${OBJ_TARGET_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_CURRENT_BINARY_DIR})
|
|
355
|
+
endforeach(OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES)
|
|
356
|
+
|
|
357
|
+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PD_EXTERNAL_NAME}${PD_EXTENSION}
|
|
358
|
+
DESTINATION ${PDLIBDIR}/${PROJECT_NAME})
|
|
359
|
+
|
|
360
|
+
if(WIN32 AND CMAKE_GENERATOR MATCHES "Visual Studio")
|
|
361
|
+
string(FIND ${PD_EXTERNAL_NAME} "." NAME_HAS_DOT)
|
|
362
|
+
string(FIND ${PD_EXTERNAL_NAME} "~" NAME_HAS_TILDE)
|
|
363
|
+
if(NAME_HAS_DOT EQUAL -1)
|
|
364
|
+
string(REPLACE "~" "_tilde" EXPORT_FUNCTION "${PD_EXTERNAL_NAME}_setup")
|
|
365
|
+
else()
|
|
366
|
+
string(REPLACE "." "0x2e" TEMP_NAME "${PD_EXTERNAL_NAMEs}")
|
|
367
|
+
string(REPLACE "~" "_tilde" EXPORT_FUNCTION "setup_${TEMP_NAME}")
|
|
368
|
+
endif()
|
|
369
|
+
set_property(TARGET ${OBJ_TARGET_NAME} APPEND_STRING PROPERTY LINK_FLAGS "/export:${EXPORT_FUNCTION}")
|
|
370
|
+
endif()
|
|
371
|
+
|
|
372
|
+
endfunction(pd_add_external)
|
|
373
|
+
|
|
374
|
+
# ──────────────────────────────────────
|
|
375
|
+
function(add_pd_external PROJECT_NAME EXTERNAL_NAME EXTERNAL_SOURCES)
|
|
376
|
+
message(
|
|
377
|
+
WARNING "add_pd_external is deprecated, use pd_add_external instead.\n")
|
|
378
|
+
|
|
379
|
+
set(ALL_SOURCES ${EXTERNAL_SOURCES})
|
|
380
|
+
list(APPEND ALL_SOURCES ${ARGN})
|
|
381
|
+
source_group(src FILES ${ALL_SOURCES})
|
|
382
|
+
add_library(${PROJECT_NAME} SHARED ${ALL_SOURCES})
|
|
383
|
+
set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "")
|
|
384
|
+
set_property(TARGET ${PROJECT_NAME} PROPERTY EXTERNAL_DATA_FILES "")
|
|
385
|
+
|
|
386
|
+
target_include_directories(${PROJECT_NAME} PRIVATE ${PD_SOURCES_PATH})
|
|
387
|
+
set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME ${EXTERNAL_NAME})
|
|
388
|
+
|
|
389
|
+
# Defines the output path of the external.
|
|
390
|
+
set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY
|
|
391
|
+
${CMAKE_BINARY_DIR})
|
|
392
|
+
set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
|
|
393
|
+
${CMAKE_BINARY_DIR})
|
|
394
|
+
set_target_properties(${PROJECT_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY
|
|
395
|
+
${CMAKE_BINARY_DIR})
|
|
396
|
+
|
|
397
|
+
foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
|
|
398
|
+
string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
|
|
399
|
+
set_target_properties(
|
|
400
|
+
${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG}
|
|
401
|
+
${CMAKE_BINARY_DIR})
|
|
402
|
+
set_target_properties(
|
|
403
|
+
${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG}
|
|
404
|
+
${CMAKE_BINARY_DIR})
|
|
405
|
+
set_target_properties(
|
|
406
|
+
${PROJECT_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG}
|
|
407
|
+
${CMAKE_BINARY_DIR})
|
|
408
|
+
endforeach(OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES)
|
|
409
|
+
|
|
410
|
+
if(WIN32)
|
|
411
|
+
if(PD_FLOATSIZE EQUAL 64)
|
|
412
|
+
target_link_libraries(${PROJECT_NAME} PRIVATE "${PDBINDIR}/pd64.lib")
|
|
413
|
+
elseif(PD_FLOATSIZE EQUAL 32)
|
|
414
|
+
target_link_libraries(${PROJECT_NAME} PRIVATE "${PDBINDIR}/pd.lib")
|
|
415
|
+
endif()
|
|
416
|
+
elseif(APPLE)
|
|
417
|
+
set_target_properties(${PROJECT_NAME}
|
|
418
|
+
PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
|
|
419
|
+
endif()
|
|
420
|
+
|
|
421
|
+
get_property(
|
|
422
|
+
PD_EXTENSION
|
|
423
|
+
TARGET ${PROJECT_NAME}
|
|
424
|
+
PROPERTY SUFFIX) # set extension
|
|
425
|
+
|
|
426
|
+
if(PD_FLOATSIZE STREQUAL 64)
|
|
427
|
+
target_compile_definitions(${PROJECT_NAME} PRIVATE PD_FLOATSIZE=64)
|
|
428
|
+
endif()
|
|
429
|
+
|
|
430
|
+
pd_set_lib_ext(${PROJECT_NAME})
|
|
431
|
+
pd_add_datafile(
|
|
432
|
+
${PROJECT_NAME}
|
|
433
|
+
"${CMAKE_CURRENT_BINARY_DIR}/${PD_EXTERNAL_NAME}${PD_EXTENSION}")
|
|
434
|
+
|
|
435
|
+
endfunction(add_pd_external)
|
|
@@ -2,7 +2,7 @@ import os
|
|
|
2
2
|
import re
|
|
3
3
|
import shutil
|
|
4
4
|
import subprocess
|
|
5
|
-
import
|
|
5
|
+
import importlib.metadata as importlib_metadata
|
|
6
6
|
|
|
7
7
|
from .Helpers import pd4web_print
|
|
8
8
|
from .Patch import PatchLine
|
|
@@ -296,6 +296,16 @@ class GetAndBuildExternals:
|
|
|
296
296
|
|
|
297
297
|
f.write("// This is automatically generated code from pd4web.py script\n\n")
|
|
298
298
|
|
|
299
|
+
pd4web_version = importlib_metadata.version("pd4web")
|
|
300
|
+
numbers = pd4web_version.split(".")
|
|
301
|
+
major = numbers[0]
|
|
302
|
+
minor = numbers[1]
|
|
303
|
+
patch = numbers[2]
|
|
304
|
+
f.write(f"// Pd4Web Version\n")
|
|
305
|
+
f.write(f"#define PD4WEB_VERSION_MAJOR {major}\n")
|
|
306
|
+
f.write(f"#define PD4WEB_VERSION_MINOR {minor}\n")
|
|
307
|
+
f.write(f"#define PD4WEB_VERSION_PATCH {patch}\n\n")
|
|
308
|
+
|
|
299
309
|
f.write(f"// Project Name\n")
|
|
300
310
|
projectName = os.path.basename(self.Pd4Web.PROJECT_ROOT)
|
|
301
311
|
f.write(f'#define PD4WEB_PROJECT_NAME "{projectName}"\n\n')
|
|
@@ -356,6 +366,7 @@ class GetAndBuildExternals:
|
|
|
356
366
|
os.chdir(self.Pd4Web.PROJECT_ROOT)
|
|
357
367
|
emcmake = self.Pd4Web.Compiler.EMCMAKE
|
|
358
368
|
cmake = self.Pd4Web.Compiler.CMAKE
|
|
369
|
+
ninja = self.Pd4Web.Compiler.NINJA
|
|
359
370
|
command = [
|
|
360
371
|
emcmake,
|
|
361
372
|
cmake,
|
|
@@ -366,6 +377,8 @@ class GetAndBuildExternals:
|
|
|
366
377
|
"-DPD4WEB=ON",
|
|
367
378
|
"-G",
|
|
368
379
|
"Ninja",
|
|
380
|
+
f"-DCMAKE_MAKE_PROGRAM={ninja}",
|
|
381
|
+
|
|
369
382
|
]
|
|
370
383
|
if self.Pd4Web.verbose:
|
|
371
384
|
pd4web_print(" ".join(command), color="green", silence=self.Pd4Web.SILENCE, pd4web=self.Pd4Web.PD_EXTERNAL)
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import platform
|
|
3
|
+
import cmake
|
|
4
|
+
import ninja
|
|
5
|
+
import subprocess
|
|
6
|
+
import tarfile
|
|
7
|
+
|
|
8
|
+
import pygit2
|
|
9
|
+
|
|
10
|
+
from .Helpers import pd4web_print
|
|
11
|
+
from .Pd4Web import Pd4Web
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ExternalsCompiler:
|
|
15
|
+
def __init__(self, Pd4Web: Pd4Web):
|
|
16
|
+
self.Pd4Web = Pd4Web
|
|
17
|
+
self.InitVariables()
|
|
18
|
+
|
|
19
|
+
if not os.path.exists(Pd4Web.APPDATA + "/emsdk"):
|
|
20
|
+
pd4web_print("Cloning emsdk", color="yellow", silence=self.Pd4Web.SILENCE, pd4web=self.Pd4Web.PD_EXTERNAL)
|
|
21
|
+
emsdk_path = Pd4Web.APPDATA + "/emsdk"
|
|
22
|
+
emsdk_git = "https://github.com/emscripten-core/emsdk"
|
|
23
|
+
ok = pygit2.clone_repository(emsdk_git, emsdk_path)
|
|
24
|
+
if not ok:
|
|
25
|
+
raise Exception("Failed to clone emsdk")
|
|
26
|
+
libRepo: pygit2.Repository = pygit2.Repository(emsdk_path)
|
|
27
|
+
tag_name = Pd4Web.EMSDK_VERSION
|
|
28
|
+
|
|
29
|
+
# commit
|
|
30
|
+
tag_ref = libRepo.references.get(f"refs/tags/{tag_name}")
|
|
31
|
+
if isinstance(tag_ref.peel(), pygit2.Tag):
|
|
32
|
+
commit = tag_ref.peel().target
|
|
33
|
+
else:
|
|
34
|
+
commit = tag_ref.peel()
|
|
35
|
+
libRepo.set_head(commit.id)
|
|
36
|
+
libRepo.checkout_tree(commit)
|
|
37
|
+
libRepo.reset(commit.id, pygit2.GIT_RESET_HARD)
|
|
38
|
+
self.InstallEMCC()
|
|
39
|
+
|
|
40
|
+
def InitVariables(self):
|
|
41
|
+
self.EMSDK = self.Pd4Web.APPDATA + "/emsdk/emsdk"
|
|
42
|
+
if platform.system() == "Windows":
|
|
43
|
+
self.EMCMAKE = self.Pd4Web.APPDATA + "/emsdk/upstream/emscripten/emcmake.bat"
|
|
44
|
+
else:
|
|
45
|
+
self.EMCMAKE = self.Pd4Web.APPDATA + "/emsdk/upstream/emscripten/emcmake"
|
|
46
|
+
self.CMAKE = self.GetCmake()
|
|
47
|
+
self.EMCC = self.Pd4Web.APPDATA + "/emsdk/upstream/emscripten/emcc"
|
|
48
|
+
self.NINJA = ninja.BIN_DIR + "/ninja"
|
|
49
|
+
if platform.system() == "Windows":
|
|
50
|
+
self.NINJA += ".exe"
|
|
51
|
+
self.EMCC += ".bat"
|
|
52
|
+
|
|
53
|
+
def GetCmake(self):
|
|
54
|
+
cmake_dir = cmake.CMAKE_BIN_DIR
|
|
55
|
+
cmake_bin = os.path.join(cmake_dir, "cmake")
|
|
56
|
+
if platform.system() == "Windows":
|
|
57
|
+
cmake_bin += ".exe"
|
|
58
|
+
if not os.path.exists(cmake_bin):
|
|
59
|
+
raise Exception("Cmake (module) is not installed. Please install it.")
|
|
60
|
+
return cmake_bin
|
|
61
|
+
|
|
62
|
+
def InstallEMCC(self):
|
|
63
|
+
pd4web_print("Installing emcc", color="yellow", silence=self.Pd4Web.SILENCE, pd4web=self.Pd4Web.PD_EXTERNAL)
|
|
64
|
+
if platform.system() == "Windows":
|
|
65
|
+
os.system(f"cmd /C {self.EMSDK} install latest")
|
|
66
|
+
os.system(f"cmd /C {self.EMSDK} activate latest")
|
|
67
|
+
return
|
|
68
|
+
|
|
69
|
+
elif platform.system() == "Linux":
|
|
70
|
+
pass
|
|
71
|
+
|
|
72
|
+
os.environ["EMSDK_QUIET"] = "1"
|
|
73
|
+
result = subprocess.run(["chmod", "+x", self.EMSDK], capture_output=not self.Pd4Web.verbose, text=True)
|
|
74
|
+
if result.returncode != 0:
|
|
75
|
+
raise Exception("Failed to make emsdk executable")
|
|
76
|
+
|
|
77
|
+
# ──────────────────────────────────────
|
|
78
|
+
result = subprocess.run(
|
|
79
|
+
[self.EMSDK, "install", "latest"],
|
|
80
|
+
capture_output=not self.Pd4Web.verbose,
|
|
81
|
+
text=True,
|
|
82
|
+
)
|
|
83
|
+
if result.returncode != 0:
|
|
84
|
+
raise Exception(f"Failed to install emsdk, result {result.returncode}, cmd: " + " ".join(result.args))
|
|
85
|
+
|
|
86
|
+
# ──────────────────────────────────────
|
|
87
|
+
result = subprocess.run(
|
|
88
|
+
[self.EMSDK, "activate", self.Pd4Web.EMSDK_VERSION], capture_output=not self.Pd4Web.verbose, text=True
|
|
89
|
+
)
|
|
90
|
+
if result.returncode != 0:
|
|
91
|
+
raise Exception(f"Failed to install emsdk, result {result.returncode}, cmd: " + " ".join(result.args))
|
|
92
|
+
|
|
93
|
+
def __str__(self):
|
|
94
|
+
return "< Compiler >"
|
|
95
|
+
|
|
96
|
+
def __repr__(self):
|
|
97
|
+
return "< Compiler >"
|