Skip to content

Commit ebe6430

Browse files
committed
Merge branch 'gem-canvas-test' into develop
2 parents cdeef10 + f60de67 commit ebe6430

12 files changed

Lines changed: 911 additions & 138 deletions

File tree

CMakeLists.txt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ if(NOT CMAKE_BUILD_TYPE)
9494
endif()
9595

9696
set(HARDENED_RUNTIME_ENABLED YES)
97-
set(HARDENED_RUNTIME_OPTIONS com.apple.security.device.audio-input com.apple.security.device.camera com.apple.security.cs.disable-library-validation)
97+
set(HARDENED_RUNTIME_OPTIONS com.apple.security.device.audio-input com.apple.security.device.camera com.apple.security.cs.disable-library-validation com.apple.security.cs.allow-jit com.apple.security.cs.allow-unsigned-executable-memory)
9898

9999
if("${CMAKE_SYSTEM_NAME}" MATCHES "iOS")
100100
list(APPEND HARDENED_RUNTIME_OPTIONS com.apple.developer.networking.multicast)
@@ -395,6 +395,7 @@ set(libs
395395
nanovg
396396
webpdecoder
397397
liblzma
398+
luajit
398399
)
399400

400401
if(UNIX AND NOT APPLE)
@@ -413,12 +414,12 @@ endif()
413414

414415
list(APPEND PLUGDATA_COMPILE_DEFINITIONS JUCE_MODAL_LOOPS_PERMITTED=1)
415416

417+
list(APPEND PLUGDATA_INCLUDE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/Libraries/pd-lua/luas/luajit/src")
416418
list(APPEND PLUGDATA_INCLUDE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/Libraries/pd-else/Source/Audio/sfont~/")
417419
list(APPEND PLUGDATA_INCLUDE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/Libraries/pure-data/src")
418420
list(APPEND PLUGDATA_INCLUDE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/Libraries/JUCE/modules")
419421
list(APPEND PLUGDATA_INCLUDE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/Libraries/readerwriterqueue/")
420422
list(APPEND PLUGDATA_INCLUDE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/Libraries/concurrentqueue/")
421-
list(APPEND PLUGDATA_INCLUDE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/Libraries/BarelyML/")
422423
if(ENABLE_PERFETTO)
423424
list(APPEND PLUGDATA_INCLUDE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/_deps/perfetto-src/sdk")
424425
list(APPEND PLUGDATA_INCLUDE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/Libraries/melatonin_perfetto")
@@ -821,9 +822,9 @@ if(LINUX)
821822
target_link_libraries(plugdata PRIVATE plugdata_core pd-src-multi externals-multi)
822823
target_link_libraries(plugdata_fx PRIVATE plugdata_core pd-src-multi externals-multi)
823824
elseif(UNIX AND NOT APPLE) # BSD
824-
target_link_libraries(plugdata_standalone PRIVATE plugdata_core pd-src externals lua fluidlite "-Wl,-export-dynamic")
825-
target_link_libraries(plugdata PRIVATE plugdata_core pd-src-multi externals-multi lua fluidlite)
826-
target_link_libraries(plugdata_fx PRIVATE plugdata_core pd-src-multi externals-multi lua fluidlite)
825+
target_link_libraries(plugdata_standalone PRIVATE plugdata_core pd-src externals pdlua fluidlite "-Wl,-export-dynamic")
826+
target_link_libraries(plugdata PRIVATE plugdata_core pd-src-multi externals-multi pdlua fluidlite)
827+
target_link_libraries(plugdata_fx PRIVATE plugdata_core pd-src-multi externals-multi pdlua fluidlite)
827828
elseif(APPLE)
828829
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 15.0)
829830
set(MACOS_COMPAT_LINKER_FLAGS "-Wl,-ld_classic")

Libraries/CMakeLists.txt

Lines changed: 98 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ cmake_minimum_required(VERSION 3.15)
66
project(libpd VERSION 1.0.0 LANGUAGES C CXX)
77

88
cmake_policy(SET CMP0091 NEW)
9+
cmake_policy(SET CMP0114 NEW)
10+
911
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
1012

1113
set(MESSAGE_QUIET ON)
@@ -261,41 +263,69 @@ include_directories(pd-cyclone/)
261263
include_directories(pd-cyclone/shared/)
262264
source_group(pd-cyclone FILES ${CYCLONE_SOURCES})
263265

264-
# pdlua sources
265-
set(PDLUA_PATH "${CMAKE_CURRENT_SOURCE_DIR}/pd-lua")
266-
set(PDLUA_SOURCES ${PDLUA_PATH}/pdlua.c)
267-
268-
set(LUA_PATH "${PDLUA_PATH}/lua")
269-
set(LUA_INCLUDE_DIR ${LUA_PATH})
270266

271-
add_library(lua STATIC ${LUA_PATH}/onelua.c)
272-
add_library(lua-multi STATIC ${PDLUA_PATH}/onelua_multi.c)
273-
274-
if("${CMAKE_SYSTEM}" MATCHES "Linux")
275-
target_compile_definitions(lua PRIVATE MAKE_LIB=1 LUA_USE_LINUX=1)
276-
target_compile_definitions(lua-multi PRIVATE MAKE_LIB=1 LUA_USE_LINUX=1)
277-
elseif(MSVC)
278-
target_compile_definitions(lua PRIVATE MAKE_LIB=1 LUA_USE_WINDOWS=1)
279-
target_compile_definitions(lua-multi PRIVATE MAKE_LIB=1 LUA_USE_WINDOWS=1)
267+
include(ExternalProject)
268+
find_program(MAKE_EXECUTABLE NAMES gmake make REQUIRED)
269+
if(WIN32)
270+
set(LUAJIT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/pd-lua/luas/luajit/src)
271+
set(LUAJIT_BUILD_COMMAND cmd /c "set LJCOMPILE=cl /nologo /c /O2 /W3 /D_CRT_SECURE_NO_DEPRECATE /D_CRT_STDIO_INLINE=__declspec(dllexport)__inline /MT && msvcbuild.bat static")
272+
set(LUAJIT_LIBS
273+
${CMAKE_CURRENT_SOURCE_DIR}/pd-lua/luas/luajit/src/lua51.lib
274+
${CMAKE_CURRENT_SOURCE_DIR}/pd-lua/luas/luajit/src/luajit.lib
275+
)
280276
elseif(APPLE)
277+
set(LUAJIT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/pd-lua/luas/luajit/)
281278
if("${CMAKE_SYSTEM_NAME}" MATCHES "iOS")
282-
target_compile_definitions(lua PRIVATE LUA_USE_IOS=1 PRIVATE MAKE_LIB=1)
283-
target_compile_definitions(lua-multi PRIVATE LUA_USE_IOS=1 PRIVATE MAKE_LIB=1)
279+
set(LUAJIT_BUILD_COMMAND sh -c
280+
[=[
281+
cd src &&
282+
make clean TARGET_SYS=iOS &&
283+
ISDKP=$(xcrun --sdk iphoneos --show-sdk-path)
284+
ICC=$(xcrun --sdk iphoneos --find clang)
285+
ISDKF="-arch arm64 -isysroot $ISDKP"
286+
# Workaround: xcode's env variables makes it compile build tools for iOS, so we need to clear the environment and pass CC manually
287+
env -i PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin" \
288+
HOME="$HOME" \
289+
USER="$USER" \
290+
DEVELOPER_DIR="$(xcode-select -p)" \
291+
make CC="clang" \
292+
TARGET_SYS=iOS \
293+
TARGET_FLAGS="$ISDKF" \
294+
CROSS="$(dirname $ICC)/"
295+
]=]
296+
)
284297
else()
285-
target_compile_definitions(lua PRIVATE MAKE_LIB=1 LUA_USE_MACOSX=1)
286-
target_compile_definitions(lua-multi PRIVATE MAKE_LIB=1 LUA_USE_MACOSX=1)
298+
set(LUAJIT_BUILD_COMMAND
299+
sh -c
300+
[=[
301+
cd src &&
302+
make clean MACOSX_DEPLOYMENT_TARGET=10.15 &&
303+
make MACOSX_DEPLOYMENT_TARGET=10.15 BUILDMODE=static \
304+
CFLAGS="-arch x86_64" LDFLAGS="-arch x86_64" TARGET_FLAGS="-arch x86_64" &&
305+
cp libluajit.a libluajit-x86_64.a &&
306+
make clean MACOSX_DEPLOYMENT_TARGET=11.0 &&
307+
make MACOSX_DEPLOYMENT_TARGET=11.0 BUILDMODE=static \
308+
CFLAGS="-arch arm64" LDFLAGS="-arch arm64" TARGET_FLAGS="-arch arm64" &&
309+
cp libluajit.a libluajit-arm64.a &&
310+
lipo -create libluajit-x86_64.a libluajit-arm64.a -output libluajit.a
311+
]=]
312+
)
287313
endif()
314+
set(LUAJIT_LIBS ${CMAKE_CURRENT_SOURCE_DIR}/pd-lua/luas/luajit/src/libluajit.a)
288315
else()
289-
target_compile_definitions(lua PRIVATE MAKE_LIB=1)
290-
target_compile_definitions(lua-multi PRIVATE MAKE_LIB=1)
316+
set(LUAJIT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/pd-lua/luas/luajit/)
317+
set(LUAJIT_BUILD_COMMAND ${MAKE_EXECUTABLE} -C src CFLAGS=-fPIC BUILDMODE=static)
318+
set(LUAJIT_LIBS ${CMAKE_CURRENT_SOURCE_DIR}/pd-lua/luas/luajit/src/libluajit.a)
291319
endif()
292320

293-
source_group(pdlua FILES ${PDLUA_SOURCES})
294-
295-
# live version data for pdlua.c
296-
# set(PDLUA_VERSION 0.11.0)
297-
#execute_process(COMMAND git -C ${CMAKE_CURRENT_SOURCE_DIR}/pd-lua describe --tags OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE PDLUA_VERSION)
298-
#set_source_files_properties(${PDLUA_PATH}/pdlua.c PROPERTIES COMPILE_DEFINITIONS PDLUA_VERSION=${PDLUA_VERSION})
321+
ExternalProject_Add(luajit_build
322+
SOURCE_DIR ${LUAJIT_SOURCE_DIR}
323+
BUILD_IN_SOURCE TRUE
324+
CONFIGURE_COMMAND ""
325+
BUILD_COMMAND ${LUAJIT_BUILD_COMMAND}
326+
INSTALL_COMMAND ""
327+
BUILD_BYPRODUCTS ${LUAJIT_LIBS}
328+
)
299329

300330
# ------------------------------------------------------------------------------#
301331
# COMPILE DEFINITIONS
@@ -447,11 +477,43 @@ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/pd-else/Source/Shared/opus)
447477
target_compile_definitions(opus PRIVATE FLOAT_APPROX=1)
448478
unset(MESSAGE_QUIET)
449479

480+
# pdlua sources
481+
set(PDLUA_PATH "${CMAKE_CURRENT_SOURCE_DIR}/pd-lua")
482+
set(LUA_INCLUDE_DIR "${PDLUA_PATH}/luas/luajit/src")
483+
set(PDLUA_SOURCES "${PDLUA_PATH}/luas/lua.c" "${PDLUA_PATH}/luas/luajit.c")
484+
450485
# ------------------------------------------------------------------------------#
451486
# TARGETS
452487
# ------------------------------------------------------------------------------#
453488
add_library(externals STATIC ${ELSE_SOURCES} ${CYCLONE_SOURCES} ${PDLUA_SOURCES})
454-
add_library(externals-multi STATIC ${ELSE_SOURCES} ${CYCLONE_SOURCES} ${PDLUA_SOURCES} ${})
489+
add_library(externals-multi STATIC ${ELSE_SOURCES} ${CYCLONE_SOURCES} ${PDLUA_SOURCES})
490+
491+
add_library(luajit STATIC IMPORTED GLOBAL)
492+
list(GET LUAJIT_LIBS 0 LUAJIT_MAIN_LIB)
493+
set_target_properties(luajit PROPERTIES IMPORTED_LOCATION ${LUAJIT_MAIN_LIB})
494+
add_dependencies(luajit luajit_build)
495+
target_link_libraries(luajit INTERFACE ${LUAJIT_LIBS})
496+
target_include_directories(luajit INTERFACE
497+
${CMAKE_CURRENT_SOURCE_DIR}/pd-lua/luas/luajit/src
498+
)
499+
set(LUA_COMPILE_DEFINITIONS MAKE_LIB=1)
500+
501+
if("${CMAKE_SYSTEM}" MATCHES "Linux")
502+
list(APPEND LUA_COMPILE_DEFINITIONS LUA_USE_LINUX=1)
503+
elseif(MSVC)
504+
list(APPEND LUA_COMPILE_DEFINITIONS LUA_USE_WINDOWS=1)
505+
elseif(APPLE)
506+
if("${CMAKE_SYSTEM_NAME}" MATCHES "iOS")
507+
list(APPEND LUA_COMPILE_DEFINITIONS LUA_USE_IOS=1)
508+
else()
509+
list(APPEND LUA_COMPILE_DEFINITIONS LUA_USE_MACOSX=1)
510+
endif()
511+
endif()
512+
513+
# live version data for pdlua.c
514+
# set(PDLUA_VERSION 0.11.0)
515+
#execute_process(COMMAND git -C ${CMAKE_CURRENT_SOURCE_DIR}/pd-lua describe --tags OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE PDLUA_VERSION)
516+
#set_source_files_properties(${PDLUA_PATH}/pdlua.c PROPERTIES COMPILE_DEFINITIONS PDLUA_VERSION=${PDLUA_VERSION})
455517

456518
# Hide deprecation warnings on externals, it's noise and are outside of our control
457519
if(MSVC)
@@ -480,8 +542,8 @@ target_include_directories(externals PRIVATE ${ELSE_INCLUDES})
480542
target_include_directories(externals-multi PRIVATE ${ELSE_INCLUDES})
481543

482544
# ag: pdlua needs PLUGDATA symbol at compile time for plugdata integration.
483-
target_compile_definitions(externals PRIVATE ${LIBPD_COMPILE_DEFINITIONS} PLUGDATA=1)
484-
target_compile_definitions(externals-multi PRIVATE ${LIBPD_COMPILE_DEFINITIONS} PDINSTANCE=1 PDTHREADS=1 PLUGDATA=1)
545+
target_compile_definitions(externals PRIVATE ${LIBPD_COMPILE_DEFINITIONS} ${LUA_COMPILE_DEFINITIONS} PLUGDATA=1)
546+
target_compile_definitions(externals-multi PRIVATE ${LIBPD_COMPILE_DEFINITIONS} ${LUA_COMPILE_DEFINITIONS} PDINSTANCE=1 PDTHREADS=1 PLUGDATA=1)
485547

486548
add_library(pd-src STATIC ${SOURCE_FILES})
487549
target_compile_definitions(pd-src PRIVATE ${LIBPD_COMPILE_DEFINITIONS})
@@ -538,23 +600,23 @@ if("${CMAKE_SYSTEM}" MATCHES "Linux")
538600
add_library(pd INTERFACE)
539601
add_library(pd-multi INTERFACE)
540602
find_library(MATH_LIB m)
541-
target_link_libraries(externals PUBLIC ${externals_libs} ${GEM_LIBS} lua)
542-
target_link_libraries(externals-multi PUBLIC ${externals_libs} ${GEM_LIBS_MULTI} lua-multi)
603+
target_link_libraries(externals PUBLIC ${externals_libs} ${GEM_LIBS})
604+
target_link_libraries(externals-multi PUBLIC ${externals_libs} ${GEM_LIBS_MULTI})
543605
elseif(MSVC)
544606
add_library(pd SHARED $<TARGET_OBJECTS:externals> $<TARGET_OBJECTS:pd-src>)
545607
add_library(pd-multi STATIC $<TARGET_OBJECTS:externals-multi> $<TARGET_OBJECTS:pd-src-multi>)
546608

547-
target_link_libraries(pd PUBLIC pthreadVC3 ws2_32 ${externals_libs} ${GEM_LIBS} lua)
548-
target_link_libraries(pd-multi PUBLIC pthreadVC3 ws2_32 ${externals_libs} ${GEM_LIBS_MULTI} lua-multi)
609+
target_link_libraries(pd PUBLIC pthreadVC3 ws2_32 ${externals_libs} ${GEM_LIBS} luajit)
610+
target_link_libraries(pd-multi PUBLIC pthreadVC3 ws2_32 ${externals_libs} ${GEM_LIBS_MULTI} luajit)
549611

550612
add_custom_command(TARGET pd POST_BUILD
551613
COMMAND ${CMAKE_COMMAND} -E copy_if_different
552614
"$<TARGET_FILE:pd>"
553615
${CMAKE_SOURCE_DIR}/Plugins/Standalone/pd.dll
554616
)
555617
elseif(APPLE)
556-
target_link_libraries(externals PUBLIC ${externals_libs} ${GEM_LIBS} lua)
557-
target_link_libraries(externals-multi PUBLIC ${externals_libs} ${GEM_LIBS_MULTI} lua-multi)
618+
target_link_libraries(externals PUBLIC ${externals_libs} ${GEM_LIBS})
619+
target_link_libraries(externals-multi PUBLIC ${externals_libs} ${GEM_LIBS_MULTI})
558620
endif()
559621

560622
if(MSVC)

Libraries/Gem

0 commit comments

Comments
 (0)