@@ -6,6 +6,8 @@ cmake_minimum_required(VERSION 3.15)
66project (libpd VERSION 1.0.0 LANGUAGES C CXX )
77
88cmake_policy (SET CMP0091 NEW )
9+ cmake_policy (SET CMP0114 NEW )
10+
911set (CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG :Debug >:Debug >" )
1012
1113set (MESSAGE_QUIET ON )
@@ -261,41 +263,69 @@ include_directories(pd-cyclone/)
261263include_directories (pd-cyclone/shared/ )
262264source_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+ )
280276elseif (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)
288315else ()
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)
291319endif ()
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)
447477target_compile_definitions (opus PRIVATE FLOAT_APPROX=1 )
448478unset (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# ------------------------------------------------------------------------------#
453488add_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
457519if (MSVC )
@@ -480,8 +542,8 @@ target_include_directories(externals PRIVATE ${ELSE_INCLUDES})
480542target_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
486548add_library (pd-src STATIC ${SOURCE_FILES} )
487549target_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} )
543605elseif (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 )
555617elseif (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} )
558620endif ()
559621
560622if (MSVC )
0 commit comments