From acfec942f483823e7b1f34ee2619abde09ac5301 Mon Sep 17 00:00:00 2001 From: ankitaS11 Date: Thu, 7 Jul 2022 14:37:30 +0530 Subject: [PATCH] make rapidjson and lsp optional --- CMakeLists.txt | 7 ++-- src/bin/lpython.cpp | 13 +++++-- src/libasr/CMakeLists.txt | 14 ++++++-- src/libasr/config.h.in | 3 ++ src/libasr/lsp/CMakeLists.txt | 65 +++++++++++++++++++++++++++++++++++ 5 files changed, 94 insertions(+), 8 deletions(-) create mode 100644 src/libasr/lsp/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 1aed07cbac..b498c8ac79 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -167,10 +167,12 @@ if (WITH_XEUS) PATTERN "*.in" EXCLUDE) endif() -# JSON +# JSON OR LSP (`conda install rapidjson`) set(WITH_JSON no CACHE BOOL "Build with JSON support") -if (WITH_JSON) +set(WITH_LSP no CACHE BOOL "Build with LSP support") +if (WITH_JSON OR WITH_LSP) find_package(RapidJSON REQUIRED) + set(HAVE_LFORTRAN_RAPIDJSON yes) endif() set(HAVE_LFORTRAN_DEMANGLE yes @@ -262,6 +264,7 @@ message("HAVE_LFORTRAN_DEMANGLE: ${HAVE_LFORTRAN_DEMANGLE}") message("WITH_LLVM: ${WITH_LLVM}") message("WITH_XEUS: ${WITH_XEUS}") message("WITH_JSON: ${WITH_JSON}") +message("WITH_LSP: ${WITH_LSP}") message("WITH_FMT: ${WITH_FMT}") message("WITH_LFORTRAN_BINARY_MODFILES: ${WITH_LFORTRAN_BINARY_MODFILES}") message("WITH_RUNTIME_LIBRARY: ${WITH_RUNTIME_LIBRARY}") diff --git a/src/bin/lpython.cpp b/src/bin/lpython.cpp index c2f62ebd49..1583f38740 100644 --- a/src/bin/lpython.cpp +++ b/src/bin/lpython.cpp @@ -26,7 +26,10 @@ #include #include #include -#include + +#ifdef HAVE_LFORTRAN_RAPIDJSON + #include +#endif #include #include @@ -762,8 +765,12 @@ int main(int argc, char *argv[]) } if (lsp) { - LPythonServer().run(arg_lsp_filename); - return 0; + #ifdef HAVE_LFORTRAN_RAPIDJSON + LPythonServer().run(arg_lsp_filename); + return 0; + #endif + } else { + std::cerr << "Compiler was not built with LSP support (-DWITH_LSP), please build it again.\n"; } if (arg_backend == "llvm") { diff --git a/src/libasr/CMakeLists.txt b/src/libasr/CMakeLists.txt index eb821c5496..dc3d23f98f 100644 --- a/src/libasr/CMakeLists.txt +++ b/src/libasr/CMakeLists.txt @@ -46,9 +46,6 @@ set(SRC pass/loop_unroll.cpp pass/dead_code_removal.cpp - lsp/JSONRPC2Connection.cpp - lsp/LPythonServer.cpp - asr_verify.cpp asr_utils.cpp diagnostics.cpp @@ -79,6 +76,14 @@ if (WITH_LLVM) COMPILE_FLAGS -Wno-deprecated-declarations) endif() endif() + +if (WITH_LSP) + set (SRC ${SRC} + lsp/JSONRPC2Connection.cpp + lsp/LPythonServer.cpp + ) +endif() + add_library(asr ${SRC}) target_include_directories(asr BEFORE PUBLIC ${libasr_SOURCE_DIR}/..) target_include_directories(asr BEFORE PUBLIC ${libasr_BINARY_DIR}/..) @@ -94,3 +99,6 @@ endif() if (WITH_LLVM) target_link_libraries(asr p::llvm) endif() +if (WITH_LSP) + add_subdirectory(lsp) +endif() diff --git a/src/libasr/config.h.in b/src/libasr/config.h.in index 0de5d0a161..cc0e058a02 100644 --- a/src/libasr/config.h.in +++ b/src/libasr/config.h.in @@ -10,6 +10,9 @@ /* Define if LLVM is enabled */ #cmakedefine HAVE_LFORTRAN_LLVM +/* Define if RAPIDJSON is found */ +#cmakedefine HAVE_LFORTRAN_RAPIDJSON + /* Define if stacktrace is enabled */ #cmakedefine HAVE_LFORTRAN_STACKTRACE #cmakedefine HAVE_LFORTRAN_BFD diff --git a/src/libasr/lsp/CMakeLists.txt b/src/libasr/lsp/CMakeLists.txt new file mode 100644 index 0000000000..ffb44d3a06 --- /dev/null +++ b/src/libasr/lsp/CMakeLists.txt @@ -0,0 +1,65 @@ +project(lsp) +add_library(lsp ${lsp_SOURCE_DIR}) + +if (NOT HAVE_LFORTRAN_RAPIDJSON) + message(FATAL_ERROR "Expected RapidJSON to be found, but couldn't find it in the path.") +endif() +# TODO: Removing all the following commented out code for now, @certik - can you please confirm if none of this is required? +# target_include_directories(lsp PRIVATE "tpl") +# target_link_libraries(lsp lpython_lib) +# find_package(RapidJSON REQUIRED) +# # message(STATUS "Found RapidJSON version: ${RapidJSON_PACKAGE_VERSION}") + +# if (lsp_STATIC_BIN) +# if (CMAKE_SYSTEM_NAME STREQUAL "Linux") +# # Link statically on Linux with gcc or clang +# if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR +# CMAKE_CXX_COMPILER_ID MATCHES Clang) +# target_link_options(lsp PRIVATE -static) +# endif() +# endif() +# endif() + +# if (CMAKE_SYSTEM_NAME STREQUAL "Linux") +# target_link_options(lsp PRIVATE "LINKER:--export-dynamic") +# endif() + +# set_target_properties(lsp PROPERTIES RUNTIME_OUTPUT_DIRECTORY $<0:>) + +# set_target_properties(lsp PROPERTIES +# INSTALL_RPATH_USE_LINK_PATH TRUE +# ) + +# install(TARGETS lsp +# RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +# ARCHIVE DESTINATION share/lpython_lib/lib +# LIBRARY DESTINATION share/lpython_lib/lib +# ) + +# set_target_properties(lsp PROPERTIES +# RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/$<0:> +# LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/$<0:> +# ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/$<0:>) + +# target_link_libraries(lsp asr lpython_runtime_static ZLIB::ZLIB) +# target_include_directories(lsp PRIVATE ${lsp_SOURCE_DIR}/src/bin/tpl) +# target_include_directories(lsp BEFORE PUBLIC ${lsp_SOURCE_DIR}/src) +# target_include_directories(lsp BEFORE PUBLIC ${lsp_BINARY_DIR}/src) + +# target_link_libraries(lsp p::rapidjson) + +if (WITH_XEUS) + target_link_libraries(lsp xeus) +endif() +if (WITH_BFD) + target_link_libraries(lsp p::bfd) +endif() +if (WITH_LINK) + target_link_libraries(lsp p::link) +endif() +if (WITH_EXECINFO) + target_link_libraries(lsp p::execinfo) +endif() +if (WITH_LLVM) + target_link_libraries(lsp p::llvm) +endif()