diff options
Diffstat (limited to 'src/nvim/CMakeLists.txt')
-rw-r--r-- | src/nvim/CMakeLists.txt | 81 |
1 files changed, 67 insertions, 14 deletions
diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt index e956328061..dd5989f96f 100644 --- a/src/nvim/CMakeLists.txt +++ b/src/nvim/CMakeLists.txt @@ -5,16 +5,20 @@ set(DISPATCH_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/msgpack-gen.lua) file(GLOB API_HEADERS api/*.h) set(MSGPACK_RPC_HEADER ${PROJECT_SOURCE_DIR}/src/nvim/os/msgpack_rpc.h) set(MSGPACK_DISPATCH ${GENERATED_DIR}/msgpack_dispatch.c) +set(HEADER_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/gendeclarations.lua) +set(GENERATED_INCLUDES_DIR ${PROJECT_BINARY_DIR}/include) -file(MAKE_DIRECTORY ${GENERATED_DIR}) +include_directories(${GENERATED_DIR}) +include_directories(${GENERATED_INCLUDES_DIR}) -add_custom_command(OUTPUT ${MSGPACK_DISPATCH} - COMMAND ${LUA_PRG} ${DISPATCH_GENERATOR} ${API_HEADERS} ${MSGPACK_DISPATCH} - DEPENDS - ${API_HEADERS} - ${MSGPACK_RPC_HEADER} - ${DISPATCH_GENERATOR} - ) +file(MAKE_DIRECTORY ${GENERATED_DIR}) +file(MAKE_DIRECTORY ${GENERATED_DIR}/os) +file(MAKE_DIRECTORY ${GENERATED_DIR}/api) +file(MAKE_DIRECTORY ${GENERATED_DIR}/api/private) +file(MAKE_DIRECTORY ${GENERATED_INCLUDES_DIR}) +file(MAKE_DIRECTORY ${GENERATED_INCLUDES_DIR}/os) +file(MAKE_DIRECTORY ${GENERATED_INCLUDES_DIR}/api) +file(MAKE_DIRECTORY ${GENERATED_INCLUDES_DIR}/api/private) file( GLOB NEOVIM_SOURCES *.c ) @@ -26,8 +30,6 @@ foreach(sfile ${NEOVIM_SOURCES}) endforeach() list(REMOVE_ITEM NEOVIM_SOURCES ${to_remove}) -list(APPEND NEOVIM_SOURCES "${PROJECT_BINARY_DIR}/config/auto/pathdef.c") -list(APPEND NEOVIM_SOURCES "${MSGPACK_DISPATCH}") file( GLOB OS_SOURCES os/*.c ) file( GLOB API_SOURCES api/*.c ) @@ -78,6 +80,57 @@ if(CMAKE_C_COMPILER_ID MATCHES "Clang") endif() endif() +get_directory_property(gen_cdefs COMPILE_DEFINITIONS) +foreach(gen_cdef ${gen_cdefs}) + set(gen_cflags "${gen_cflags} -D${gen_cdef}") +endforeach() + +get_directory_property(gen_includes INCLUDE_DIRECTORIES) +foreach(gen_include ${gen_includes}) + set(gen_cflags "${gen_cflags} -I${gen_include}") +endforeach() +set(gen_cflags "${gen_cflags} ${CMAKE_C_FLAGS}") + +foreach(sfile ${NEOVIM_SOURCES} + "${PROJECT_SOURCE_DIR}/src/nvim/regexp_nfa.c" + ${OS_SOURCES} + ${API_SOURCES} + ${API_PRIV_SOURCES}) + get_filename_component(full_d ${sfile} PATH) + file(RELATIVE_PATH d "${PROJECT_SOURCE_DIR}/src/nvim" "${full_d}") + get_filename_component(f ${sfile} NAME) + get_filename_component(r ${sfile} NAME_WE) + if(NOT ${d} EQUAL ".") + set(f "${d}/${f}") + set(r "${d}/${r}") + endif() + set(gf1 "${GENERATED_DIR}/${r}.c.generated.h") + set(gf2 "${GENERATED_INCLUDES_DIR}/${r}.h.generated.h") + add_custom_command( + OUTPUT "${gf1}" "${gf2}" + COMMAND "${LUA_PRG}" "${HEADER_GENERATOR}" + "${sfile}" "${gf1}" "${gf2}" + "${CMAKE_C_COMPILER} ${gen_cflags} -E" + DEPENDS "${HEADER_GENERATOR}" "${sfile}" + ) + list(APPEND NEOVIM_GENERATED_SOURCES "${gf1}") + list(APPEND NEOVIM_GENERATED_SOURCES "${gf2}") + if(${d} MATCHES "^api$" AND NOT ${f} MATCHES "^api/helpers.c$") + list(APPEND API_HEADERS ${gf2}) + endif() +endforeach() + +add_custom_command(OUTPUT ${MSGPACK_DISPATCH} + COMMAND ${LUA_PRG} ${DISPATCH_GENERATOR} ${API_HEADERS} ${MSGPACK_DISPATCH} + DEPENDS + ${API_HEADERS} + ${MSGPACK_RPC_HEADER} + ${DISPATCH_GENERATOR} + ) + +list(APPEND NEOVIM_SOURCES "${PROJECT_BINARY_DIR}/config/auto/pathdef.c") +list(APPEND NEOVIM_SOURCES "${MSGPACK_DISPATCH}") + # Our dependencies come first. if (LibIntl_FOUND) @@ -106,14 +159,14 @@ list(APPEND NVIM_LINK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) if(NOT DEFINED ENV{SKIP_EXEC}) - add_executable(nvim ${NEOVIM_SOURCES} ${OS_SOURCES} ${API_SOURCES} - ${API_PRIV_SOURCES}) + add_executable(nvim ${NEOVIM_GENERATED_SOURCES} ${NEOVIM_SOURCES} + ${OS_SOURCES} ${API_SOURCES} ${API_PRIV_SOURCES}) target_link_libraries(nvim ${NVIM_LINK_LIBRARIES}) install(TARGETS nvim RUNTIME DESTINATION bin) endif() if(NOT DEFINED ENV{SKIP_UNITTEST}) - add_library(nvim-test MODULE EXCLUDE_FROM_ALL ${NEOVIM_SOURCES} - ${OS_SOURCES} ${API_SOURCES} ${API_PRIV_SOURCES}) + add_library(nvim-test MODULE EXCLUDE_FROM_ALL ${NEOVIM_GENERATED_SOURCES} + ${NEOVIM_SOURCES} ${OS_SOURCES} ${API_SOURCES} ${API_PRIV_SOURCES}) target_link_libraries(nvim-test ${NVIM_LINK_LIBRARIES}) endif() |