aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/CMakeLists.txt')
-rw-r--r--src/nvim/CMakeLists.txt81
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()