Home Explore Blog CI



neovim

7th chunk of `src/nvim/CMakeLists.txt`
78ee7cbf40d10a00ada44dd0066aaa85d61b2e3821d2a1180000000100000fa7
 ${NVIM_HEADERS})

# Log level (NVIM_LOG_DEBUG in log.h)
if(CI_BUILD)
  # Don't debug log on CI, it gets too verbose in the main build log.
  # TODO(bfredl): debug log level also exposes some errors with EXITFREE in ASAN build.
else()
  # Minimize logging for release-type builds.
  target_compile_definitions(nvim_bin PRIVATE $<$<CONFIG:Debug>:NVIM_LOG_DEBUG>)
endif()

if(ENABLE_ASAN_UBSAN OR ENABLE_MSAN OR ENABLE_TSAN)
  target_compile_definitions(main_lib INTERFACE EXITFREE)
endif()

#-------------------------------------------------------------------------------
# Header generation
#-------------------------------------------------------------------------------

get_target_property(prop main_lib INTERFACE_COMPILE_DEFINITIONS)
if(NOT "${prop}" STREQUAL "prop-NOTFOUND")
  foreach(gen_cdef ${prop})
    if(NOT ${gen_cdef} MATCHES "INCLUDE_GENERATED_DECLARATIONS")
      list(APPEND gen_cflags "-D${gen_cdef}")
    endif()
  endforeach()
endif()

get_directory_property(targets BUILDSYSTEM_TARGETS)
foreach(target ${targets})
  get_target_property(prop ${target} INTERFACE_INCLUDE_DIRECTORIES)
  if(NOT "${prop}" STREQUAL "prop-NOTFOUND")
    message(STATUS "${target} props '${prop}'")
    foreach(gen_include ${prop})
      list(APPEND gen_cflags "-I${gen_include}")
      list(APPEND TEST_INCLUDE_DIRS "${gen_include}")
    endforeach()
  endif()
endforeach()

list(REMOVE_DUPLICATES gen_cflags)
list(REMOVE_DUPLICATES TEST_INCLUDE_DIRS)

if(APPLE AND CMAKE_OSX_SYSROOT)
  list(APPEND gen_cflags "-isysroot" "${CMAKE_OSX_SYSROOT}")
endif()
if(MSVC)
  list(APPEND gen_cflags -wd4003)
endif()

set(NVIM_VERSION_GIT_H ${PROJECT_BINARY_DIR}/cmake.config/auto/versiondef_git.h)
add_custom_target(update_version_stamp
  COMMAND ${CMAKE_COMMAND}
    -D NVIM_VERSION_MAJOR=${NVIM_VERSION_MAJOR}
    -D NVIM_VERSION_MINOR=${NVIM_VERSION_MINOR}
    -D NVIM_VERSION_PATCH=${NVIM_VERSION_PATCH}
    -D NVIM_VERSION_PRERELEASE=${NVIM_VERSION_PRERELEASE}
    -D OUTPUT=${NVIM_VERSION_GIT_H}
    -D NVIM_SOURCE_DIR=${CMAKE_SOURCE_DIR}
    -P ${PROJECT_SOURCE_DIR}/cmake/GenerateVersion.cmake
  BYPRODUCTS ${NVIM_VERSION_GIT_H})

set(NVIM_VERSION_DEF_H ${PROJECT_BINARY_DIR}/cmake.config/auto/versiondef.h)
add_custom_command(
  OUTPUT "${NVIM_VERSION_DEF_H}"
  COMMAND "${CMAKE_COMMAND}"
    -E copy
    "${PROJECT_BINARY_DIR}/cmake.config/auto/versiondef-$<CONFIG>.h"
    "${NVIM_VERSION_DEF_H}"
  DEPENDS "${PROJECT_BINARY_DIR}/cmake.config/auto/versiondef-$<CONFIG>.h")

set(LUA_GEN ${LUA_GEN_PRG} ${GENERATOR_PRELOAD} ${PROJECT_SOURCE_DIR} $<TARGET_FILE:nlua0> ${PROJECT_BINARY_DIR})
set(LUA_GEN_DEPS ${GENERATOR_PRELOAD} $<TARGET_FILE:nlua0>)

# Like LUA_GEN but includes also vim.fn, vim.api, vim.uv, etc
set(NVIM_LUA $<TARGET_FILE:nvim_bin> -u NONE -l ${NVIM_LUA_PRELOAD} ${PROJECT_SOURCE_DIR})

# NVIM_GENERATED_FOR_HEADERS: generated headers to be included in headers
# NVIM_GENERATED_FOR_SOURCES: generated headers to be included in sources
# These lists must be mutually exclusive.
foreach(sfile ${NVIM_SOURCES}
              ${NVIM_HEADERS}
              ${GENERATED_API_DISPATCH}
              "${GENERATED_UI_EVENTS_CALL}"
              "${GENERATED_UI_EVENTS_REMOTE}"
              "${GENERATED_UI_EVENTS_CLIENT}"
              )
  get_filename_component(full_d ${sfile} DIRECTORY)
  file(RELATIVE_PATH d "${CMAKE_CURRENT_LIST_DIR}" "${full_d}")
  if(${d} MATCHES "^[.][.]|auto/")
    file(RELATIVE_PATH d "${GENERATED_DIR}" "${full_d}")
  endif()
  get_filename_component(f ${sfile} NAME)
  get_filename_component(r ${sfile} NAME_WE)
  get_filename_component(ext ${sfile} EXT)
  if(NOT ${d} EQUAL ".")
    set(f "${d}/${f}")
    set(r "${d}/${r}")
  endif()
  if ("${ext}" STREQUAL ".c.h")
    continue() # .c.h files are sussy baka, skip
  elseif(${sfile} IN_LIST NVIM_HEADERS)
    set(gf_basename "${r}.h.inline.generated.h")
    set(gf_c_h "${GENERATED_INCLUDES_DIR}/${r}.h.inline.generated.h")
    set(gf_h_h "SKIP")
    set(gf_h_h_out "")
  else()
    set(gf_basename "${r}.c.generated.h")

Title: Header Generation and Custom Commands
Summary
This section configures logging levels, adds compile definitions for sanitizers, and generates header files. It retrieves and appends interface include directories from target properties to compiler flags, removes duplicate flags, and sets flags specific to Apple and MSVC. It creates custom targets to update version information and copies version definition files. Lua generation commands are defined. Finally, it iterates through source and header files to set up file paths for header generation.