neovim/cmake.deps/cmake/LibvtermCMakeLists.txt
Wei Tang 8f0b94b36d
build(deps): disable shared library for libvterm. (#20566)
build(deps): disable shared library for libvterm

Problem:
Cannot build both static and share libraries for libvterm under Windows.
The static and shared library would have the same name "vterm.lib", thus there would be multiple rules to build the same target.

Solution:
Disable shared library for libvterm.

This makes it possible to use Ninja on Windows to build dependencies (2x speedup!).
But not for Release builds yet.

Co-authored-by: Wei Tang <gauchyler@uestc.edu.cn>
2022-10-10 17:46:34 -07:00

85 lines
2.9 KiB
CMake

cmake_minimum_required(VERSION 3.10)
project(libvterm LANGUAGES C)
include(GNUInstallDirs)
find_package(Perl)
if(MSVC)
add_compile_options(/W3)
add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE)
else()
add_compile_options(-Wall -std=c99)
endif()
# Generate includes from tables
file(GLOB TBL_FILES ${CMAKE_SOURCE_DIR}/src/encoding/*.tbl)
set(TBL_FILES_HEADERS)
foreach(file ${TBL_FILES})
get_filename_component(basename ${file} NAME_WE)
set(tname encoding/${basename}.inc)
add_custom_command(OUTPUT
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/encoding/
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/tbl2inc_c.cmake ${file} ${CMAKE_BINARY_DIR}/${tname}
COMMENT "Generating ${tname}"
OUTPUT ${CMAKE_BINARY_DIR}/${tname}
)
list(APPEND TBL_FILES_HEADERS ${tname})
# Only used for verifying that the output of tbl2inc_c.cmake is correct
set(tname encoding-test/${basename}.inc)
add_custom_command(OUTPUT
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/encoding-test/
COMMAND ${PERL_EXECUTABLE} -CSD ${CMAKE_SOURCE_DIR}/tbl2inc_c.pl ${file} > ${CMAKE_BINARY_DIR}/${tname}
COMMENT "Generating ${tname}"
OUTPUT ${CMAKE_BINARY_DIR}/${tname}
)
endforeach()
include_directories(${CMAKE_SOURCE_DIR}/include)
include_directories(${CMAKE_BINARY_DIR})
file(GLOB VTERM_SOURCES ${CMAKE_SOURCE_DIR}/src/*.c)
add_library(vterm ${VTERM_SOURCES} ${TBL_FILES_HEADERS})
install(TARGETS vterm ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(FILES include/vterm.h include/vterm_keycodes.h
DESTINATION include)
if(NOT WIN32)
file(GLOB BIN_SOURCES ${CMAKE_SOURCE_DIR}/bin/*.c)
foreach(EXE_C ${BIN_SOURCES})
get_filename_component(target_name ${EXE_C} NAME_WE)
add_executable(${target_name} ${EXE_C})
target_link_libraries(${target_name} vterm)
install(TARGETS ${target_name} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endforeach()
endif()
# Tests
add_executable(harness EXCLUDE_FROM_ALL t/harness.c)
target_link_libraries(harness vterm)
set_target_properties(harness PROPERTIES
# run-test.pl expects to find the harness in t/.libs/
RUNTIME_OUTPUT_DIRECTORY t/.libs)
if(Perl_FOUND)
file(GLOB TESTFILES ${CMAKE_SOURCE_DIR}/t/*.test)
add_custom_target(check)
foreach(testfile ${TESTFILES})
get_filename_component(target_name ${testfile} NAME_WE)
add_custom_target(${target_name}
COMMAND ${PERL_EXECUTABLE} ${CMAKE_SOURCE_DIR}/t/run-test.pl ${testfile}
COMMENT "**${target_name} **"
DEPENDS harness)
add_dependencies(check ${target_name})
endforeach()
foreach(header_path ${TBL_FILES_HEADERS})
get_filename_component(header_name ${header_path} NAME)
set(perl_header_path ${CMAKE_BINARY_DIR}/encoding-test/${header_name})
add_custom_target(test-${header_name}
COMMAND ${CMAKE_COMMAND} -E compare_files
${header_path} ${perl_header_path}
DEPENDS ${header_path} ${perl_header_path})
endforeach()
endif()