aboutsummaryrefslogtreecommitdiff
path: root/cmake.deps/cmake/BuildLua.cmake
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2022-06-27 03:08:59 -0700
committerJustin M. Keyes <justinkz@gmail.com>2022-06-28 04:02:29 -0700
commitf05a2891d3da9f9fcd9c7457ca0c2a54ff65078b (patch)
treede382ef0008871d7e7a41b29172b41bd97a39e05 /cmake.deps/cmake/BuildLua.cmake
parent9ddb481d88d3926111e83d512921ebe98bb426ae (diff)
downloadrneovim-f05a2891d3da9f9fcd9c7457ca0c2a54ff65078b.tar.gz
rneovim-f05a2891d3da9f9fcd9c7457ca0c2a54ff65078b.tar.bz2
rneovim-f05a2891d3da9f9fcd9c7457ca0c2a54ff65078b.zip
build: rename build-related dirs
Problem: Dirs "config", "packaging", and "third-party" are all closely related but this is not obvious from the layout. This adds friction for new contributors. Solution: - rename config/ to cmake.config/ - rename test/config/ to test/cmakeconfig/ because it is used in Lua tests: require('test.cmakeconfig.paths'). - rename packaging/ to cmake.packaging/ - rename third-party/ to cmake.deps/ (parallel with .deps/)
Diffstat (limited to 'cmake.deps/cmake/BuildLua.cmake')
-rw-r--r--cmake.deps/cmake/BuildLua.cmake96
1 files changed, 96 insertions, 0 deletions
diff --git a/cmake.deps/cmake/BuildLua.cmake b/cmake.deps/cmake/BuildLua.cmake
new file mode 100644
index 0000000000..a40cb7dcb2
--- /dev/null
+++ b/cmake.deps/cmake/BuildLua.cmake
@@ -0,0 +1,96 @@
+# BuildLua(CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...)
+# Reusable function to build lua, wraps ExternalProject_Add.
+# Failing to pass a command argument will result in no command being run
+function(BuildLua)
+ cmake_parse_arguments(_lua
+ ""
+ ""
+ "CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND"
+ ${ARGN})
+
+ if(NOT _lua_CONFIGURE_COMMAND AND NOT _lua_BUILD_COMMAND
+ AND NOT _lua_INSTALL_COMMAND)
+ message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND")
+ endif()
+
+ ExternalProject_Add(lua
+ PREFIX ${DEPS_BUILD_DIR}
+ URL ${LUA_URL}
+ DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/lua
+ DOWNLOAD_COMMAND ${CMAKE_COMMAND}
+ -DPREFIX=${DEPS_BUILD_DIR}
+ -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/lua
+ -DURL=${LUA_URL}
+ -DEXPECTED_SHA256=${LUA_SHA256}
+ -DTARGET=lua
+ -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
+ CONFIGURE_COMMAND "${_lua_CONFIGURE_COMMAND}"
+ BUILD_IN_SOURCE 1
+ BUILD_COMMAND "${_lua_BUILD_COMMAND}"
+ INSTALL_COMMAND "${_lua_INSTALL_COMMAND}")
+endfunction()
+
+if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ set(LUA_TARGET linux)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+ set(LUA_TARGET macosx)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+ set(LUA_TARGET freebsd)
+elseif(CMAKE_SYSTEM_NAME MATCHES "BSD")
+ set(CMAKE_LUA_TARGET bsd)
+elseif(CMAKE_SYSTEM_NAME MATCHES "^MINGW")
+ set(CMAKE_LUA_TARGET mingw)
+else()
+ if(UNIX)
+ set(LUA_TARGET posix)
+ else()
+ set(LUA_TARGET generic)
+ endif()
+endif()
+
+set(LUA_CFLAGS "-O0 -g3 -fPIC")
+set(LUA_LDFLAGS "")
+
+if(CLANG_ASAN_UBSAN)
+ set(LUA_CFLAGS "${LUA_CFLAGS} -fsanitize=address")
+ set(LUA_CFLAGS "${LUA_CFLAGS} -fno-omit-frame-pointer")
+ set(LUA_CFLAGS "${LUA_CFLAGS} -fno-optimize-sibling-calls")
+
+ set(LUA_LDFLAGS "${LUA_LDFLAGS} -fsanitize=address")
+endif()
+
+set(LUA_CONFIGURE_COMMAND
+ sed -e "/^CC/s@gcc@${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}@"
+ -e "/^CFLAGS/s@-O2@${LUA_CFLAGS}@"
+ -e "/^MYLDFLAGS/s@$@${LUA_LDFLAGS}@"
+ -e "s@-lreadline@@g"
+ -e "s@-lhistory@@g"
+ -e "s@-lncurses@@g"
+ -i ${DEPS_BUILD_DIR}/src/lua/src/Makefile &&
+ sed -e "/#define LUA_USE_READLINE/d"
+ -e "s@\\(#define LUA_ROOT[ ]*\"\\)/usr/local@\\1${DEPS_INSTALL_DIR}@"
+ -i ${DEPS_BUILD_DIR}/src/lua/src/luaconf.h)
+set(LUA_INSTALL_TOP_ARG "INSTALL_TOP=${DEPS_INSTALL_DIR}")
+set(LUA_BUILD_COMMAND
+ ${MAKE_PRG} ${LUA_INSTALL_TOP_ARG} ${LUA_TARGET})
+set(LUA_INSTALL_COMMAND
+ ${MAKE_PRG} ${LUA_INSTALL_TOP_ARG} install)
+
+message(STATUS "Lua target is ${LUA_TARGET}")
+
+BuildLua(CONFIGURE_COMMAND ${LUA_CONFIGURE_COMMAND}
+ BUILD_COMMAND ${LUA_BUILD_COMMAND}
+ INSTALL_COMMAND ${LUA_INSTALL_COMMAND})
+list(APPEND THIRD_PARTY_DEPS lua)
+
+set(BUSTED ${DEPS_INSTALL_DIR}/bin/busted)
+set(BUSTED_LUA ${BUSTED}-lua)
+
+add_custom_command(OUTPUT ${BUSTED_LUA}
+ COMMAND sed -e 's/^exec/exec $$LUA_DEBUGGER/' -e 's/jit//g' < ${BUSTED} > ${BUSTED_LUA} && chmod +x ${BUSTED_LUA}
+ DEPENDS lua busted ${BUSTED})
+add_custom_target(busted-lua
+ DEPENDS ${DEPS_INSTALL_DIR}/bin/busted-lua)
+
+list(APPEND THIRD_PARTY_DEPS busted-lua)