mirror of
https://github.com/neovim/neovim.git
synced 2025-10-26 12:27:24 +00:00
Change the default build type to always be Debug, and allow only four predefined build types: Debug, Release, RelWithDebInfo and MinRelSize. Furthermore, flags meant for single-configuration generator (make, ninja) will not be used for multi-configuration generators (visual studio, Xcode), and flags meant for multi-configuration generators will not be used for single-configuration generators. This will allow Debug builds to be built with MSVC which requires that all dependencies are also built with the Debug build type to avoid runtime library mismatch. The correct way to specify build type (for example Release) for single-configuration generators (Make and Ninja) is to run cmake -B build -D CMAKE_BUILD_TYPE=Release cmake --build build while for multi-configuration generators (Visual Studio, Xcode and Ninja Multi-Config) is to run cmake -B build cmake --build build --config Release Passing CMAKE_BUILD_TYPE for multi-config generators will now not only not be used, but also generate a warning for the user. Co-authored-by: dundargoc <gocundar@gmail.com>
74 lines
3.1 KiB
CMake
74 lines
3.1 KiB
CMake
# BuildLibvterm(CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...)
|
|
# Failing to pass a command argument will result in no command being run
|
|
function(BuildLibvterm)
|
|
cmake_parse_arguments(_libvterm
|
|
""
|
|
""
|
|
"PATCH_COMMAND;CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND"
|
|
${ARGN})
|
|
|
|
if(NOT _libvterm_CONFIGURE_COMMAND AND NOT _libvterm_BUILD_COMMAND
|
|
AND NOT _libvterm_INSTALL_COMMAND)
|
|
message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND")
|
|
endif()
|
|
|
|
ExternalProject_Add(libvterm
|
|
PREFIX ${DEPS_BUILD_DIR}
|
|
URL ${LIBVTERM_URL}
|
|
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libvterm
|
|
DOWNLOAD_COMMAND ${CMAKE_COMMAND}
|
|
-DPREFIX=${DEPS_BUILD_DIR}
|
|
-DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/libvterm
|
|
-DURL=${LIBVTERM_URL}
|
|
-DEXPECTED_SHA256=${LIBVTERM_SHA256}
|
|
-DTARGET=libvterm
|
|
-DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
|
|
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
|
|
PATCH_COMMAND "${_libvterm_PATCH_COMMAND}"
|
|
BUILD_IN_SOURCE 1
|
|
CONFIGURE_COMMAND "${_libvterm_CONFIGURE_COMMAND}"
|
|
BUILD_COMMAND "${_libvterm_BUILD_COMMAND}"
|
|
INSTALL_COMMAND "${_libvterm_INSTALL_COMMAND}")
|
|
endfunction()
|
|
|
|
if(WIN32)
|
|
if(MSVC)
|
|
set(LIBVTERM_PATCH_COMMAND
|
|
${GIT_EXECUTABLE} -C ${DEPS_BUILD_DIR}/src/libvterm init
|
|
COMMAND ${GIT_EXECUTABLE} -C ${DEPS_BUILD_DIR}/src/libvterm apply --ignore-whitespace
|
|
${CMAKE_CURRENT_SOURCE_DIR}/patches/libvterm-Remove-VLAs-for-MSVC.patch)
|
|
endif()
|
|
set(LIBVTERM_CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy
|
|
${CMAKE_CURRENT_SOURCE_DIR}/cmake/LibvtermCMakeLists.txt
|
|
${DEPS_BUILD_DIR}/src/libvterm/CMakeLists.txt
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
${CMAKE_CURRENT_SOURCE_DIR}/cmake/Libvterm-tbl2inc_c.cmake
|
|
${DEPS_BUILD_DIR}/src/libvterm/tbl2inc_c.cmake
|
|
COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/libvterm
|
|
-DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR}
|
|
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
|
-DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM}
|
|
-DCMAKE_GENERATOR=${CMAKE_GENERATOR})
|
|
if(MSVC)
|
|
list(APPEND LIBVTERM_CONFIGURE_COMMAND "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_COMPILER_ARG1}")
|
|
else()
|
|
list(APPEND LIBVTERM_CONFIGURE_COMMAND "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_COMPILER_ARG1} -fPIC")
|
|
endif()
|
|
set(LIBVTERM_BUILD_COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG>)
|
|
set(LIBVTERM_INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config $<CONFIG>)
|
|
else()
|
|
set(LIBVTERM_INSTALL_COMMAND ${MAKE_PRG} CC=${DEPS_C_COMPILER}
|
|
PREFIX=${DEPS_INSTALL_DIR}
|
|
CFLAGS=-fPIC
|
|
LDFLAGS+=-static
|
|
${DEFAULT_MAKE_CFLAGS}
|
|
install)
|
|
endif()
|
|
|
|
BuildLibvterm(PATCH_COMMAND ${LIBVTERM_PATCH_COMMAND}
|
|
CONFIGURE_COMMAND ${LIBVTERM_CONFIGURE_COMMAND}
|
|
BUILD_COMMAND ${LIBVTERM_BUILD_COMMAND}
|
|
INSTALL_COMMAND ${LIBVTERM_INSTALL_COMMAND})
|
|
|
|
list(APPEND THIRD_PARTY_DEPS libvterm)
|