build: create separate targets for nvim with and without runtime files

This distinction is important for correct dependency management, as the
nvim binary is used to create some runtime files. The nvim binary (and
the target to build it) is thus called `nvim_bin` and the target to
build all of nvim (binary+runtime) is called `nvim`.
This commit is contained in:
dundargoc
2024-01-19 13:21:25 +01:00
committed by dundargoc
parent ed103cde28
commit f936a962d0
7 changed files with 72 additions and 68 deletions

View File

@@ -37,13 +37,8 @@ include(Util)
# Variables # Variables
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
set(FUNCS_DATA ${PROJECT_BINARY_DIR}/funcs_data.mpack) set(FUNCS_DATA ${PROJECT_BINARY_DIR}/funcs_data.mpack)
set(GENERATED_RUNTIME_DIR ${PROJECT_BINARY_DIR}/runtime)
set(TOUCHES_DIR ${PROJECT_BINARY_DIR}/touches) set(TOUCHES_DIR ${PROJECT_BINARY_DIR}/touches)
# GENERATED_RUNTIME_DIR
set(GENERATED_HELP_TAGS ${GENERATED_RUNTIME_DIR}/doc/tags)
set(GENERATED_SYN_VIM ${GENERATED_RUNTIME_DIR}/syntax/vim/generated.vim)
set_directory_properties(PROPERTIES set_directory_properties(PROPERTIES
EP_PREFIX "${DEPS_BUILD_DIR}") EP_PREFIX "${DEPS_BUILD_DIR}")
@@ -60,6 +55,12 @@ if(${CMAKE_VERSION} VERSION_LESS 3.20)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
endif() endif()
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.26)
set(COPY_DIRECTORY copy_directory_if_different)
else()
set(COPY_DIRECTORY copy_directory)
endif()
# Prefer our bundled versions of dependencies. # Prefer our bundled versions of dependencies.
if(DEFINED ENV{DEPS_BUILD_DIR}) if(DEFINED ENV{DEPS_BUILD_DIR})
set(DEPS_PREFIX "$ENV{DEPS_BUILD_DIR}/usr" CACHE PATH "Path prefix for finding dependencies") set(DEPS_PREFIX "$ENV{DEPS_BUILD_DIR}/usr" CACHE PATH "Path prefix for finding dependencies")
@@ -231,7 +232,7 @@ set(STYLUA_DIRS runtime scripts src test)
add_glob_target( add_glob_target(
TARGET lintlua-luacheck TARGET lintlua-luacheck
COMMAND $<TARGET_FILE:nvim> COMMAND $<TARGET_FILE:nvim_bin>
FLAGS -ll ${PROJECT_SOURCE_DIR}/test/lua_runner.lua ${CMAKE_BINARY_DIR}/usr luacheck -q FLAGS -ll ${PROJECT_SOURCE_DIR}/test/lua_runner.lua ${CMAKE_BINARY_DIR}/usr luacheck -q
GLOB_DIRS runtime scripts src test GLOB_DIRS runtime scripts src test
GLOB_PAT *.lua GLOB_PAT *.lua
@@ -258,8 +259,8 @@ add_glob_target(
TOUCH_STRATEGY PER_DIR) TOUCH_STRATEGY PER_DIR)
add_custom_target(lintcommit add_custom_target(lintcommit
COMMAND $<TARGET_FILE:nvim> -u NONE -l ${PROJECT_SOURCE_DIR}/scripts/lintcommit.lua main) COMMAND $<TARGET_FILE:nvim_bin> -u NONE -l ${PROJECT_SOURCE_DIR}/scripts/lintcommit.lua main)
add_dependencies(lintcommit nvim) add_dependencies(lintcommit nvim_bin)
add_custom_target(lint) add_custom_target(lint)
add_dependencies(lint lintc lintlua lintsh lintcommit) add_dependencies(lint lintc lintlua lintsh lintcommit)
@@ -280,6 +281,9 @@ install_helper(
FILES ${CMAKE_SOURCE_DIR}/src/man/nvim.1 FILES ${CMAKE_SOURCE_DIR}/src/man/nvim.1
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
add_custom_target(nvim ALL)
add_dependencies(nvim nvim_bin nvim_runtime_deps nvim_runtime)
add_subdirectory(src/nvim) add_subdirectory(src/nvim)
add_subdirectory(cmake.config) add_subdirectory(cmake.config)
add_subdirectory(runtime) add_subdirectory(runtime)

View File

@@ -148,7 +148,7 @@ foreach(BUILD_TYPE Debug Release RelWithDebInfo MinSizeRel)
set(GEN_RHS "${CMAKE_C_FLAGS_${BUILD_TYPE_UPPER}} ") set(GEN_RHS "${CMAKE_C_FLAGS_${BUILD_TYPE_UPPER}} ")
string(APPEND VERSION_STRING "$<${GEN_CONFIG}:${GEN_RHS}>") string(APPEND VERSION_STRING "$<${GEN_CONFIG}:${GEN_RHS}>")
set(GEN_RHS "$<$<BOOL:$<TARGET_PROPERTY:nvim,INTERPROCEDURAL_OPTIMIZATION_${BUILD_TYPE_UPPER}>>:${CMAKE_C_COMPILE_OPTIONS_IPO}>") set(GEN_RHS "$<$<BOOL:$<TARGET_PROPERTY:nvim_bin,INTERPROCEDURAL_OPTIMIZATION_${BUILD_TYPE_UPPER}>>:${CMAKE_C_COMPILE_OPTIONS_IPO}>")
string(APPEND VERSION_STRING "$<${GEN_CONFIG}:${GEN_RHS}>") string(APPEND VERSION_STRING "$<${GEN_CONFIG}:${GEN_RHS}>")
endforeach() endforeach()
@@ -161,7 +161,7 @@ function(append_target_expression)
"" ""
${ARGN}) ${ARGN})
set(TARGET_EXPRESSION "$<TARGET_PROPERTY:nvim,${ARG_PROPERTY}>") set(TARGET_EXPRESSION "$<TARGET_PROPERTY:nvim_bin,${ARG_PROPERTY}>")
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.15) if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.15)
set(TARGET_EXPRESSION "$<REMOVE_DUPLICATES:${TARGET_EXPRESSION}>") set(TARGET_EXPRESSION "$<REMOVE_DUPLICATES:${TARGET_EXPRESSION}>")
endif() endif()

View File

@@ -1,5 +1,9 @@
set(SYN_VIM_GENERATOR ${PROJECT_SOURCE_DIR}/src/nvim/generators/gen_vimvim.lua) set(GENERATED_RUNTIME_DIR ${PROJECT_BINARY_DIR}/runtime)
set(GENERATED_HELP_TAGS ${GENERATED_RUNTIME_DIR}/doc/tags)
set(GENERATED_PACKAGE_DIR ${GENERATED_RUNTIME_DIR}/pack/dist/opt) set(GENERATED_PACKAGE_DIR ${GENERATED_RUNTIME_DIR}/pack/dist/opt)
set(GENERATED_SYN_VIM ${GENERATED_RUNTIME_DIR}/syntax/vim/generated.vim)
set(SYN_VIM_GENERATOR ${PROJECT_SOURCE_DIR}/src/nvim/generators/gen_vimvim.lua)
file(MAKE_DIRECTORY ${GENERATED_RUNTIME_DIR}/syntax/vim) file(MAKE_DIRECTORY ${GENERATED_RUNTIME_DIR}/syntax/vim)
@@ -32,7 +36,7 @@ foreach(PACKAGE ${PACKAGES})
COMMAND "${PROJECT_BINARY_DIR}/bin/nvim" COMMAND "${PROJECT_BINARY_DIR}/bin/nvim"
-u NONE -i NONE -e --headless -c "helptags doc" -c quit -u NONE -i NONE -e --headless -c "helptags doc" -c quit
DEPENDS DEPENDS
nvim nvim_bin
nvim_runtime_deps nvim_runtime_deps
WORKING_DIRECTORY "${GENERATED_PACKAGE_DIR}/${PACKNAME}" WORKING_DIRECTORY "${GENERATED_PACKAGE_DIR}/${PACKNAME}"
) )
@@ -66,7 +70,7 @@ add_custom_command(OUTPUT ${GENERATED_HELP_TAGS}
COMMAND "${PROJECT_BINARY_DIR}/bin/nvim" COMMAND "${PROJECT_BINARY_DIR}/bin/nvim"
-u NONE -i NONE -e --headless -c "helptags ++t doc" -c quit -u NONE -i NONE -e --headless -c "helptags ++t doc" -c quit
DEPENDS DEPENDS
nvim nvim_bin
nvim_runtime_deps nvim_runtime_deps
WORKING_DIRECTORY "${GENERATED_RUNTIME_DIR}" WORKING_DIRECTORY "${GENERATED_RUNTIME_DIR}"
) )
@@ -81,7 +85,7 @@ add_custom_target(doc_html
) )
add_custom_target( add_custom_target(
runtime ALL nvim_runtime
DEPENDS DEPENDS
${GENERATED_SYN_VIM} ${GENERATED_SYN_VIM}
${GENERATED_HELP_TAGS} ${GENERATED_HELP_TAGS}

View File

@@ -1,7 +1,11 @@
add_library(main_lib INTERFACE) add_library(main_lib INTERFACE)
add_executable(nvim)
set_target_properties(nvim # Internally we need to make a distinction between "nvim without runtime files"
# (nvim_bin) and "nvim with runtime files" (nvim).
add_executable(nvim_bin EXCLUDE_FROM_ALL)
set_target_properties(nvim_bin PROPERTIES OUTPUT_NAME nvim)
set_target_properties(nvim_bin
PROPERTIES PROPERTIES
EXPORT_COMPILE_COMMANDS ON EXPORT_COMPILE_COMMANDS ON
ENABLE_EXPORTS TRUE) ENABLE_EXPORTS TRUE)
@@ -115,7 +119,7 @@ elseif(MINGW)
target_compile_definitions(main_lib INTERFACE __USE_MINGW_ANSI_STDIO) target_compile_definitions(main_lib INTERFACE __USE_MINGW_ANSI_STDIO)
# Enable wmain # Enable wmain
target_link_libraries(nvim PRIVATE -municode) target_link_libraries(nvim_bin PRIVATE -municode)
elseif(CMAKE_C_COMPILER_ID STREQUAL "GNU") elseif(CMAKE_C_COMPILER_ID STREQUAL "GNU")
if(CMAKE_C_COMPILER_VERSION VERSION_LESS 10) if(CMAKE_C_COMPILER_VERSION VERSION_LESS 10)
target_compile_options(main_lib INTERFACE -Wno-conversion) target_compile_options(main_lib INTERFACE -Wno-conversion)
@@ -134,7 +138,7 @@ elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
# workaround for clang-11 on macOS, supported on later versions # workaround for clang-11 on macOS, supported on later versions
if(NOT APPLE) if(NOT APPLE)
target_link_libraries(nvim PRIVATE -Wl,--no-undefined) target_link_libraries(nvim_bin PRIVATE -Wl,--no-undefined)
endif() endif()
endif() endif()
@@ -150,16 +154,16 @@ if(CMAKE_SYSTEM_NAME MATCHES "Windows")
target_compile_definitions(main_lib INTERFACE _WIN32_WINNT=0x0602 MSWIN) target_compile_definitions(main_lib INTERFACE _WIN32_WINNT=0x0602 MSWIN)
target_link_libraries(main_lib INTERFACE netapi32) target_link_libraries(main_lib INTERFACE netapi32)
elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
target_link_libraries(nvim PRIVATE "-framework CoreServices") target_link_libraries(nvim_bin PRIVATE "-framework CoreServices")
# Actually export symbols - symbols may not be visible even though # Actually export symbols - symbols may not be visible even though
# ENABLE_EXPORTS is set to true. See # ENABLE_EXPORTS is set to true. See
# https://github.com/neovim/neovim/issues/25295 # https://github.com/neovim/neovim/issues/25295
target_link_options(nvim PRIVATE "-Wl,-export_dynamic") target_link_options(nvim_bin PRIVATE "-Wl,-export_dynamic")
elseif(CMAKE_SYSTEM_NAME MATCHES "OpenBSD") elseif(CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
target_link_libraries(main_lib INTERFACE pthread c++abi) target_link_libraries(main_lib INTERFACE pthread c++abi)
elseif(CMAKE_SYSTEM_NAME STREQUAL "SunOS") elseif(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
target_link_libraries(nvim PRIVATE -lsocket) target_link_libraries(nvim_bin PRIVATE -lsocket)
endif() endif()
check_c_compiler_flag(-Wimplicit-fallthrough HAVE_WIMPLICIT_FALLTHROUGH_FLAG) check_c_compiler_flag(-Wimplicit-fallthrough HAVE_WIMPLICIT_FALLTHROUGH_FLAG)
@@ -205,35 +209,35 @@ if(ENABLE_ASAN_UBSAN)
if(NOT MSVC) if(NOT MSVC)
if(CI_BUILD) if(CI_BUILD)
# Try to recover from all sanitize issues so we get reports about all failures # Try to recover from all sanitize issues so we get reports about all failures
target_compile_options(nvim PRIVATE -fsanitize-recover=all) target_compile_options(nvim_bin PRIVATE -fsanitize-recover=all)
else() else()
target_compile_options(nvim PRIVATE -fno-sanitize-recover=all) target_compile_options(nvim_bin PRIVATE -fno-sanitize-recover=all)
endif() endif()
target_compile_options(nvim PRIVATE target_compile_options(nvim_bin PRIVATE
-fno-omit-frame-pointer -fno-omit-frame-pointer
-fno-optimize-sibling-calls -fno-optimize-sibling-calls
-fsanitize=undefined) -fsanitize=undefined)
endif() endif()
target_compile_options(nvim PRIVATE -fsanitize=address) target_compile_options(nvim_bin PRIVATE -fsanitize=address)
target_link_libraries(nvim PRIVATE -fsanitize=address -fsanitize=undefined) target_link_libraries(nvim_bin PRIVATE -fsanitize=address -fsanitize=undefined)
target_compile_definitions(nvim PRIVATE ENABLE_ASAN_UBSAN) target_compile_definitions(nvim_bin PRIVATE ENABLE_ASAN_UBSAN)
endif() endif()
if(ENABLE_MSAN) if(ENABLE_MSAN)
message(STATUS "Enabling memory sanitizer for nvim.") message(STATUS "Enabling memory sanitizer for nvim.")
target_compile_options(nvim PRIVATE target_compile_options(nvim_bin PRIVATE
-fsanitize=memory -fsanitize=memory
-fsanitize-memory-track-origins -fsanitize-memory-track-origins
-fno-omit-frame-pointer -fno-omit-frame-pointer
-fno-optimize-sibling-calls) -fno-optimize-sibling-calls)
target_link_libraries(nvim PRIVATE -fsanitize=memory -fsanitize-memory-track-origins) target_link_libraries(nvim_bin PRIVATE -fsanitize=memory -fsanitize-memory-track-origins)
endif() endif()
if(ENABLE_TSAN) if(ENABLE_TSAN)
message(STATUS "Enabling thread sanitizer for nvim.") message(STATUS "Enabling thread sanitizer for nvim.")
target_compile_options(nvim PRIVATE -fsanitize=thread -fPIE) target_compile_options(nvim_bin PRIVATE -fsanitize=thread -fPIE)
target_link_libraries(nvim PRIVATE -fsanitize=thread) target_link_libraries(nvim_bin PRIVATE -fsanitize=thread)
endif() endif()
option(CI_BUILD "CI, extra flags will be set" OFF) option(CI_BUILD "CI, extra flags will be set" OFF)
@@ -254,7 +258,7 @@ if(ENABLE_IWYU)
string(APPEND iwyu_flags "-Xiwyu;--no_fwd_decls;") string(APPEND iwyu_flags "-Xiwyu;--no_fwd_decls;")
string(APPEND iwyu_flags "-Xiwyu;--mapping_file=${PROJECT_SOURCE_DIR}/cmake.config/iwyu/mapping.imp") string(APPEND iwyu_flags "-Xiwyu;--mapping_file=${PROJECT_SOURCE_DIR}/cmake.config/iwyu/mapping.imp")
set_target_properties(nvim PROPERTIES C_INCLUDE_WHAT_YOU_USE "${iwyu_flags}") set_target_properties(nvim_bin PROPERTIES C_INCLUDE_WHAT_YOU_USE "${iwyu_flags}")
target_compile_definitions(main_lib INTERFACE EXITFREE) target_compile_definitions(main_lib INTERFACE EXITFREE)
endif() endif()
@@ -284,7 +288,7 @@ endif()
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
set(API_METADATA ${PROJECT_BINARY_DIR}/api_metadata.mpack) set(API_METADATA ${PROJECT_BINARY_DIR}/api_metadata.mpack)
set(BINARY_LIB_DIR ${PROJECT_BINARY_DIR}/lib/nvim/) set(BINARY_LIB_DIR ${PROJECT_BINARY_DIR}/lib/nvim)
set(GENERATED_DIR ${PROJECT_BINARY_DIR}/src/nvim/auto) set(GENERATED_DIR ${PROJECT_BINARY_DIR}/src/nvim/auto)
set(GENERATED_INCLUDES_DIR ${PROJECT_BINARY_DIR}/include) set(GENERATED_INCLUDES_DIR ${PROJECT_BINARY_DIR}/include)
set(GENERATOR_DIR ${CMAKE_CURRENT_LIST_DIR}/generators) set(GENERATOR_DIR ${CMAKE_CURRENT_LIST_DIR}/generators)
@@ -436,7 +440,7 @@ if(CI_BUILD)
# TODO(bfredl): debug log level also exposes some errors with EXITFREE in ASAN build. # TODO(bfredl): debug log level also exposes some errors with EXITFREE in ASAN build.
else() else()
# Minimize logging for release-type builds. # Minimize logging for release-type builds.
target_compile_definitions(nvim PRIVATE $<$<CONFIG:Debug>:NVIM_LOG_DEBUG>) target_compile_definitions(nvim_bin PRIVATE $<$<CONFIG:Debug>:NVIM_LOG_DEBUG>)
endif() endif()
if(ENABLE_ASAN_UBSAN OR ENABLE_MSAN OR ENABLE_TSAN) if(ENABLE_ASAN_UBSAN OR ENABLE_MSAN OR ENABLE_TSAN)
@@ -685,8 +689,8 @@ if(PREFER_LUA)
message(STATUS "luajit not used, skipping unit tests") message(STATUS "luajit not used, skipping unit tests")
else() else()
file(GLOB UNIT_TEST_FIXTURES CONFIGURE_DEPENDS ${PROJECT_SOURCE_DIR}/test/unit/fixtures/*.c) file(GLOB UNIT_TEST_FIXTURES CONFIGURE_DEPENDS ${PROJECT_SOURCE_DIR}/test/unit/fixtures/*.c)
target_sources(nvim PRIVATE ${UNIT_TEST_FIXTURES}) target_sources(nvim_bin PRIVATE ${UNIT_TEST_FIXTURES})
target_compile_definitions(nvim PRIVATE UNIT_TESTING) target_compile_definitions(nvim_bin PRIVATE UNIT_TESTING)
endif() endif()
target_sources(main_lib INTERFACE target_sources(main_lib INTERFACE
@@ -700,32 +704,33 @@ target_sources(main_lib INTERFACE
target_sources(nlua0 PUBLIC ${NLUA0_SOURCES}) target_sources(nlua0 PUBLIC ${NLUA0_SOURCES})
target_link_libraries(nvim PRIVATE main_lib PUBLIC libuv) target_link_libraries(nvim_bin PRIVATE main_lib PUBLIC libuv)
install_helper(TARGETS nvim) install_helper(TARGETS nvim_bin)
if(MSVC) if(MSVC)
install(FILES $<TARGET_PDB_FILE:nvim> DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL) install(FILES $<TARGET_PDB_FILE:nvim_bin> DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL)
endif() endif()
if(ENABLE_LTO) if(ENABLE_LTO)
include(CheckIPOSupported) include(CheckIPOSupported)
check_ipo_supported(RESULT IPO_SUPPORTED) check_ipo_supported(RESULT IPO_SUPPORTED)
if(IPO_SUPPORTED) if(IPO_SUPPORTED)
set_target_properties(nvim PROPERTIES set_target_properties(nvim_bin PROPERTIES
INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE
INTERPROCEDURAL_OPTIMIZATION_MINSIZEREL TRUE) INTERPROCEDURAL_OPTIMIZATION_MINSIZEREL TRUE)
endif() endif()
endif() endif()
add_custom_target(nvim_runtime_deps)
if(WIN32) if(WIN32)
# Copy DLLs and third-party tools to bin/ and install them along with nvim # Copy DLLs and third-party tools to bin/ and install them along with nvim
add_custom_target(nvim_runtime_deps ALL add_custom_command(TARGET nvim_runtime_deps
COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_BINARY_DIR}/windows_runtime_deps/ COMMAND ${CMAKE_COMMAND} -E ${COPY_DIRECTORY} ${PROJECT_BINARY_DIR}/windows_runtime_deps/
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
install(DIRECTORY ${PROJECT_BINARY_DIR}/windows_runtime_deps/ install(DIRECTORY ${PROJECT_BINARY_DIR}/windows_runtime_deps/
DESTINATION ${CMAKE_INSTALL_BINDIR}) DESTINATION ${CMAKE_INSTALL_BINDIR})
add_custom_target(nvim_dll_deps DEPENDS nvim add_custom_target(nvim_dll_deps DEPENDS nvim_bin
COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/windows_runtime_deps COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/windows_runtime_deps
COMMAND ${CMAKE_COMMAND} COMMAND ${CMAKE_COMMAND}
-D CMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH} -D CMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
@@ -755,18 +760,11 @@ if(WIN32)
add_custom_target(external_blobs add_custom_target(external_blobs
COMMAND ${CMAKE_COMMAND} -P ${PROJECT_BINARY_DIR}/external_blobs.cmake) COMMAND ${CMAKE_COMMAND} -P ${PROJECT_BINARY_DIR}/external_blobs.cmake)
add_dependencies(nvim_runtime_deps external_blobs) add_dependencies(nvim_runtime_deps external_blobs)
else()
add_custom_target(nvim_runtime_deps) # Stub target to avoid CMP0046.
endif() endif()
file(MAKE_DIRECTORY ${BINARY_LIB_DIR})
# install treesitter parser if bundled # install treesitter parser if bundled
if(EXISTS ${DEPS_PREFIX}/lib/nvim/parser) if(EXISTS ${DEPS_PREFIX}/lib/nvim/parser)
file(GLOB TREESITTER_PARSERS CONFIGURE_DEPENDS ${DEPS_PREFIX}/lib/nvim/parser/*) add_custom_command(TARGET nvim_runtime_deps COMMAND ${CMAKE_COMMAND} -E ${COPY_DIRECTORY} ${DEPS_PREFIX}/lib/nvim/parser ${BINARY_LIB_DIR}/parser)
foreach(parser_lib ${TREESITTER_PARSERS})
file(COPY ${parser_lib} DESTINATION ${BINARY_LIB_DIR}/parser)
endforeach()
endif() endif()
install(DIRECTORY ${BINARY_LIB_DIR} install(DIRECTORY ${BINARY_LIB_DIR}
@@ -842,7 +840,7 @@ add_glob_target(
add_custom_target(copy_compile_commands add_custom_target(copy_compile_commands
COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/compile_commands.json ${PROJECT_SOURCE_DIR}/compile_commands.json) COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/compile_commands.json ${PROJECT_SOURCE_DIR}/compile_commands.json)
add_dependencies(copy_compile_commands nvim) add_dependencies(copy_compile_commands nvim_bin)
add_dependencies(lintc-clang-tidy copy_compile_commands) add_dependencies(lintc-clang-tidy copy_compile_commands)
add_dependencies(clang-analyzer copy_compile_commands) add_dependencies(clang-analyzer copy_compile_commands)
@@ -926,7 +924,7 @@ add_custom_command(
OUTPUT ${MPACK_FILES} OUTPUT ${MPACK_FILES}
COMMAND ${PROJECT_SOURCE_DIR}/scripts/gen_vimdoc.py COMMAND ${PROJECT_SOURCE_DIR}/scripts/gen_vimdoc.py
DEPENDS DEPENDS
nvim nvim_bin
${API_SOURCES} ${API_SOURCES}
${LUA_SOURCES} ${LUA_SOURCES}
${VIMDOC_FILES} ${VIMDOC_FILES}
@@ -938,7 +936,7 @@ add_custom_command(
add_custom_command( add_custom_command(
OUTPUT ${GEN_EVAL_TOUCH} OUTPUT ${GEN_EVAL_TOUCH}
COMMAND ${CMAKE_COMMAND} -E touch ${GEN_EVAL_TOUCH} COMMAND ${CMAKE_COMMAND} -E touch ${GEN_EVAL_TOUCH}
COMMAND $<TARGET_FILE:nvim> -l ${PROJECT_SOURCE_DIR}/scripts/gen_eval_files.lua COMMAND $<TARGET_FILE:nvim_bin> -l ${PROJECT_SOURCE_DIR}/scripts/gen_eval_files.lua
DEPENDS DEPENDS
${API_METADATA} ${API_METADATA}
${NVIM_RUNTIME_DIR}/doc/api.mpack ${NVIM_RUNTIME_DIR}/doc/api.mpack

View File

@@ -53,16 +53,16 @@ if(HAVE_WORKING_LIBINTL AND GETTEXT_FOUND AND XGETTEXT_PRG AND ICONV_PRG)
list(SORT NVIM_RELATIVE_SOURCES) list(SORT NVIM_RELATIVE_SOURCES)
add_custom_command( add_custom_command(
OUTPUT ${NVIM_POT} OUTPUT ${NVIM_POT}
COMMAND $<TARGET_FILE:nvim> -u NONE -i NONE -n --headless --cmd "set cpo+=+" COMMAND $<TARGET_FILE:nvim_bin> -u NONE -i NONE -n --headless --cmd "set cpo+=+"
-S ${CMAKE_CURRENT_SOURCE_DIR}/tojavascript.vim ${NVIM_POT} ${PROJECT_SOURCE_DIR}/runtime/optwin.vim -S ${CMAKE_CURRENT_SOURCE_DIR}/tojavascript.vim ${NVIM_POT} ${PROJECT_SOURCE_DIR}/runtime/optwin.vim
COMMAND ${XGETTEXT_PRG} -o ${NVIM_POT} --default-domain=nvim COMMAND ${XGETTEXT_PRG} -o ${NVIM_POT} --default-domain=nvim
--add-comments --keyword=_ --keyword=N_ --keyword=NGETTEXT:1,2 --add-comments --keyword=_ --keyword=N_ --keyword=NGETTEXT:1,2
-D ${CMAKE_CURRENT_SOURCE_DIR} -D ${CMAKE_CURRENT_BINARY_DIR} -D ${CMAKE_CURRENT_SOURCE_DIR} -D ${CMAKE_CURRENT_BINARY_DIR}
${NVIM_RELATIVE_SOURCES} optwin.js ${NVIM_RELATIVE_SOURCES} optwin.js
COMMAND $<TARGET_FILE:nvim> -u NONE -i NONE -n --headless --cmd "set cpo+=+" COMMAND $<TARGET_FILE:nvim_bin> -u NONE -i NONE -n --headless --cmd "set cpo+=+"
-S ${CMAKE_CURRENT_SOURCE_DIR}/fixfilenames.vim ${NVIM_POT} ../../../runtime/optwin.vim -S ${CMAKE_CURRENT_SOURCE_DIR}/fixfilenames.vim ${NVIM_POT} ../../../runtime/optwin.vim
VERBATIM VERBATIM
DEPENDS ${NVIM_SOURCES} nvim nvim_runtime_deps) DEPENDS ${NVIM_SOURCES} nvim_bin nvim_runtime_deps)
set(LANGUAGE_MO_FILES) set(LANGUAGE_MO_FILES)
set(UPDATE_PO_TARGETS) set(UPDATE_PO_TARGETS)
@@ -88,7 +88,7 @@ if(HAVE_WORKING_LIBINTL AND GETTEXT_FOUND AND XGETTEXT_PRG AND ICONV_PRG)
set(poFile ${CMAKE_CURRENT_SOURCE_DIR}/${name}.po) set(poFile ${CMAKE_CURRENT_SOURCE_DIR}/${name}.po)
add_custom_target(check-po-${name} add_custom_target(check-po-${name}
COMMAND $<TARGET_FILE:nvim> -u NONE -n -e COMMAND $<TARGET_FILE:nvim_bin> -u NONE -n -e
-S ${CMAKE_CURRENT_SOURCE_DIR}/check.vim -S ${CMAKE_CURRENT_SOURCE_DIR}/check.vim
-c "if error == 0 | q | endif" -c cq ${poFile} || -c "if error == 0 | q | endif" -c cq ${poFile} ||
${CMAKE_COMMAND} -E echo "${name}.po failed the check." ${CMAKE_COMMAND} -E echo "${name}.po failed the check."
@@ -182,6 +182,6 @@ if(HAVE_WORKING_LIBINTL AND GETTEXT_FOUND AND XGETTEXT_PRG AND ICONV_PRG)
BuildMo(${LANGUAGE}) BuildMo(${LANGUAGE})
endforeach() endforeach()
add_custom_target(translations ALL DEPENDS ${LANGUAGE_MO_FILES}) add_custom_target(nvim_translations ALL DEPENDS ${LANGUAGE_MO_FILES})
add_custom_target(update-po DEPENDS ${UPDATE_PO_TARGETS}) add_custom_target(update-po DEPENDS ${UPDATE_PO_TARGETS})
endif() endif()

View File

@@ -7,7 +7,7 @@ set(TEST_OPTIONS
-D CIRRUS_CI=$ENV{CIRRUS_CI} -D CIRRUS_CI=$ENV{CIRRUS_CI}
-D CI_BUILD=${CI_BUILD} -D CI_BUILD=${CI_BUILD}
-D DEPS_INSTALL_DIR=${DEPS_INSTALL_DIR} -D DEPS_INSTALL_DIR=${DEPS_INSTALL_DIR}
-D NVIM_PRG=$<TARGET_FILE:nvim> -D NVIM_PRG=$<TARGET_FILE:nvim_bin>
-D TEST_DIR=${CMAKE_CURRENT_SOURCE_DIR} -D TEST_DIR=${CMAKE_CURRENT_SOURCE_DIR}
-D WORKING_DIR=${PROJECT_SOURCE_DIR}) -D WORKING_DIR=${PROJECT_SOURCE_DIR})
@@ -18,9 +18,8 @@ if(LUA_HAS_FFI)
-D TEST_TYPE=unit -D TEST_TYPE=unit
${TEST_OPTIONS} ${TEST_OPTIONS}
-P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake -P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake
DEPENDS nvim
USES_TERMINAL) USES_TERMINAL)
add_dependencies(unittest lua-dev-deps) add_dependencies(unittest lua-dev-deps nvim)
else() else()
message(WARNING "disabling unit tests: no Luajit FFI in ${LUA_PRG}") message(WARNING "disabling unit tests: no Luajit FFI in ${LUA_PRG}")
endif() endif()
@@ -34,16 +33,15 @@ add_custom_target(functionaltest
-D TEST_TYPE=functional -D TEST_TYPE=functional
${TEST_OPTIONS} ${TEST_OPTIONS}
-P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake -P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake
DEPENDS nvim printenv-test printargs-test shell-test pwsh-test streams-test tty-test ${GENERATED_HELP_TAGS} ${GENERATED_SYN_VIM} DEPENDS printenv-test printargs-test shell-test pwsh-test streams-test tty-test
USES_TERMINAL) USES_TERMINAL)
add_dependencies(functionaltest lua-dev-deps nvim)
add_custom_target(benchmark add_custom_target(benchmark
COMMAND ${CMAKE_COMMAND} COMMAND ${CMAKE_COMMAND}
-D TEST_TYPE=benchmark -D TEST_TYPE=benchmark
${TEST_OPTIONS} ${TEST_OPTIONS}
-P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake -P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake
DEPENDS nvim tty-test DEPENDS tty-test
USES_TERMINAL) USES_TERMINAL)
add_dependencies(benchmark lua-dev-deps nvim)
add_dependencies(functionaltest lua-dev-deps)
add_dependencies(benchmark lua-dev-deps)

View File

@@ -5,7 +5,7 @@ endif()
if(WIN32) if(WIN32)
target_compile_definitions(test_lib INTERFACE MSWIN) target_compile_definitions(test_lib INTERFACE MSWIN)
endif() endif()
target_link_libraries(test_lib INTERFACE nvim) target_link_libraries(test_lib INTERFACE nvim_bin)
add_executable(tty-test EXCLUDE_FROM_ALL tty-test.c) add_executable(tty-test EXCLUDE_FROM_ALL tty-test.c)
add_executable(shell-test EXCLUDE_FROM_ALL shell-test.c) add_executable(shell-test EXCLUDE_FROM_ALL shell-test.c)