@@ -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,33 +263,68 @@ include_directories(pd-cyclone/)
261263include_directories (pd-cyclone/shared/ )
262264source_group (pd-cyclone FILES ${CYCLONE_SOURCES} )
263265
266+ include (ExternalProject )
267+ find_program (MAKE_EXECUTABLE NAMES gmake make REQUIRED )
268+
269+ if (WIN32 )
270+ set (LUAJIT_LIB_NAME libluajit-5.1.dll.a)
271+ set (LUAJIT_MAKE_ARGS SHELL=cmd)
272+ elseif (APPLE )
273+ set (LUAJIT_LIB_NAME libluajit.a)
274+ set (LUAJIT_MAKE_ARGS MACOSX_DEPLOYMENT_TARGET=10.11)
275+ else ()
276+ set (LUAJIT_LIB_NAME libluajit.a)
277+ set (LUAJIT_MAKE_ARGS CFLAGS=-fPIC)
278+ endif ()
279+
280+ ExternalProject_Add (luajit_build
281+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /pd-lua/luas/luajit
282+ BUILD_IN_SOURCE TRUE
283+ CONFIGURE_COMMAND ""
284+ BUILD_COMMAND ${MAKE_EXECUTABLE} -C src ${LUAJIT_MAKE_ARGS}
285+ INSTALL_COMMAND ""
286+ BUILD_BYPRODUCTS ${CMAKE_CURRENT_SOURCE_DIR} /pd-lua/luas/luajit/src/${LUAJIT_LIB_NAME}
287+ )
288+
289+ add_library (luajit STATIC IMPORTED GLOBAL )
290+
264291# pdlua sources
265292set (PDLUA_PATH "${CMAKE_CURRENT_SOURCE_DIR} /pd-lua" )
266- set (PDLUA_SOURCES ${PDLUA_PATH} /pdlua.c )
293+ set (PDLUA_SOURCES )
267294
268- set (LUA_PATH "${PDLUA_PATH} /lua" )
269- set (LUA_INCLUDE_DIR ${LUA_PATH} )
295+ set (LUA_INCLUDE_DIR "${PDLUA_PATH} /luas/lua" "${PDLUA_PATH} /luas/lua-compat-5.3" )
296+
297+ add_library (pdlua STATIC ${PDLUA_PATH} /luas/lua.c ${PDLUA_PATH} /luas/luajit.c )
298+ add_library (pdlua-multi STATIC ${PDLUA_PATH} /luas/lua.c ${PDLUA_PATH} /luas/luajit.c )
299+ target_link_libraries (pdlua PUBLIC luajit )
300+ target_link_libraries (pdlua-multi PUBLIC luajit )
301+
302+ add_dependencies (luajit luajit_build )
303+ set_target_properties (luajit PROPERTIES
304+ IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR} /pd-lua/luas/luajit/src/${LUAJIT_LIB_NAME}
305+ INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR} /pd-lua/luas/luajit/src
306+ )
270307
271- add_library ( lua STATIC ${LUA_PATH} /onelua.c )
272- add_library ( lua -multi STATIC ${PDLUA_PATH} /onelua_multi.c )
308+ target_compile_definitions ( pdlua PRIVATE PLUGDATA=1 )
309+ target_compile_definitions ( pdlua -multi PRIVATE PLUGDATA=1 PDINSTANCE=1 )
273310
274311if ("${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 )
312+ target_compile_definitions (pdlua PRIVATE MAKE_LIB=1 LUA_USE_LINUX=1 )
313+ target_compile_definitions (pdlua -multi PRIVATE MAKE_LIB=1 LUA_USE_LINUX=1 )
277314elseif (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 )
315+ target_compile_definitions (pdlua PRIVATE MAKE_LIB=1 LUA_USE_WINDOWS=1 )
316+ target_compile_definitions (pdlua -multi PRIVATE MAKE_LIB=1 LUA_USE_WINDOWS=1 )
280317elseif (APPLE )
281318 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 )
319+ target_compile_definitions (pdlua PRIVATE LUA_USE_IOS=1 PRIVATE MAKE_LIB=1 )
320+ target_compile_definitions (pdlua -multi PRIVATE LUA_USE_IOS=1 PRIVATE MAKE_LIB=1 )
284321 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 )
322+ target_compile_definitions (pdlua PRIVATE MAKE_LIB=1 LUA_USE_MACOSX=1 )
323+ target_compile_definitions (pdlua -multi PRIVATE MAKE_LIB=1 LUA_USE_MACOSX=1 )
287324 endif ()
288325else ()
289- target_compile_definitions (lua PRIVATE MAKE_LIB=1 )
290- target_compile_definitions (lua -multi PRIVATE MAKE_LIB=1 )
326+ target_compile_definitions (pdlua PRIVATE MAKE_LIB=1 )
327+ target_compile_definitions (pdlua -multi PRIVATE MAKE_LIB=1 )
291328endif ()
292329
293330source_group (pdlua FILES ${PDLUA_SOURCES} )
@@ -538,23 +575,23 @@ if("${CMAKE_SYSTEM}" MATCHES "Linux")
538575 add_library (pd INTERFACE )
539576 add_library (pd-multi INTERFACE )
540577 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 )
578+ target_link_libraries (externals PUBLIC ${externals_libs} ${GEM_LIBS} pdlua )
579+ target_link_libraries (externals-multi PUBLIC ${externals_libs} ${GEM_LIBS_MULTI} pdlua -multi )
543580elseif (MSVC )
544581 add_library (pd SHARED $<TARGET_OBJECTS :externals > $<TARGET_OBJECTS :pd -src >)
545582 add_library (pd-multi STATIC $<TARGET_OBJECTS :externals -multi > $<TARGET_OBJECTS :pd -src -multi >)
546583
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 )
584+ target_link_libraries (pd PUBLIC pthreadVC3 ws2_32 ${externals_libs} ${GEM_LIBS} pdlua )
585+ target_link_libraries (pd-multi PUBLIC pthreadVC3 ws2_32 ${externals_libs} ${GEM_LIBS_MULTI} pdlua -multi )
549586
550587 add_custom_command (TARGET pd POST_BUILD
551588 COMMAND ${CMAKE_COMMAND} -E copy_if_different
552589 "$<TARGET_FILE :pd >"
553590 ${CMAKE_SOURCE_DIR} /Plugins/Standalone/pd.dll
554591 )
555592elseif (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 )
593+ target_link_libraries (externals PUBLIC ${externals_libs} ${GEM_LIBS} pdlua )
594+ target_link_libraries (externals-multi PUBLIC ${externals_libs} ${GEM_LIBS_MULTI} pdlua -multi )
558595endif ()
559596
560597if (MSVC )
0 commit comments