include(ExternalProject)
include(ProcessorCount)
ProcessorCount(NPROC)
set(LLVM_SOURCE_DIR "${ROOT_DIR}/llvm")
set(LLVM_BINARY_DIR "${PROJECT_BUILD_DIR}/llvm-build" CACHE PATH "LLVM build")
find_program(NINJA ninja)
find_program(MAKE make)
if(NINJA)
set(LLVM_GENERATOR "Ninja")
set(LLVM_BUILD_CMD ${NINJA} -j ${NPROC} lldb lldb-server runtime_stub)
if(LLDB_INCLUDE_TESTS)
list(APPEND LLVM_BUILD_CMD check-lldb-unit)
endif()
set(LLVM_INSTALL_CMD ${NINJA} install-msdebug)
elseif(MAKE)
set(LLVM_GENERATOR "Unix Makefiles")
set(LLVM_BUILD_CMD ${MAKE} -j ${NPROC} lldb lldb-server runtime_stub)
if(LLDB_INCLUDE_TESTS)
list(APPEND LLVM_BUILD_CMD check-lldb-unit)
endif()
set(LLVM_INSTALL_CMD ${MAKE} install-msdebug)
else()
message(FATAL_ERROR "Neither ninja nor make found!")
endif()
list(APPEND CMAKE_PREFIX_PATH "${LIBEDIT_INSTALL_DIR}")
list(APPEND CMAKE_PREFIX_PATH "${NCURSES_INSTALL_DIR}")
ExternalProject_Add(llvm_project
SOURCE_DIR ${LLVM_SOURCE_DIR}
BINARY_DIR ${LLVM_BINARY_DIR}
CMAKE_ARGS
-G "${LLVM_GENERATOR}"
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
-DLLVM_ENABLE_PROJECTS=clang
-DLLVM_ENABLE_ZSTD=OFF
-DLLDB_ENABLE_LIBXML2=OFF
-DLLDB_ENABLE_PYTHON=OFF
-DLLDB_ENABLE_LIBEDIT=ON
-DLLVM_BUILD_TOOLS=ON
-DLLDB_INCLUDE_TESTS=${LLDB_INCLUDE_TESTS}
-DROOT_DIR=${ROOT_DIR}
-DNCURSES_LIB_DIR=${NCURSES_LIB_DIR}
-DLIBEDIT_LIBRARY=${LIBEDIT_LIBRARY}
-DMS_DEBUGGER=1
-DLibEdit_LIBRARIES=${LIBEDIT_INSTALL_DIR}/lib/libedit.so.0
-DLibEdit_INCLUDE_DIRS=${LIBEDIT_INSTALL_DIR}/include
-DCMAKE_EXE_LINKER_FLAGS=-Wl,-rpath-link,${LIBEDIT_INSTALL_DIR}/lib
-DCURSES_NCURSES_LIBRARY=${NCURSES_INSTALL_DIR}/lib/libncurses.so
-DTerminfo_LIBRARIES=${NCURSES_INSTALL_DIR}/lib/libtinfo.so
-DCURSES_LIBRARY=${NCURSES_INSTALL_DIR}/lib/libtinfo.so
-DCURSES_INCLUDE_PATH=${NCURSES_INSTALL_DIR}/include
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
-DHISTEDIT_FILE=${LIBEDIT_INSTALL_DIR}/include/histedit.h
-DMS_DEBUGGER_LIBEDIT=${LIBEDIT_INSTALL_DIR}/lib
-DMS_DEBUGGER_NCURSES=${NCURSES_INSTALL_DIR}/lib
-DCMAKE_VERBOSE_MAKEFILE=OFF
CMAKE_CACHE_ARGS
-DLLVM_TARGETS_TO_BUILD:STRING=AArch64\;X86\;ARM
-DLLVM_ENABLE_PROJECT_LIST:STRING=clang\;lldb
-DLLVM_EXTERNAL_PROJECTS:STRING=lldb
-DLLVM_EXTERNAL_LLDB_SOURCE_DIR:PATH=${CMAKE_SOURCE_DIR}/lldb
-DCMAKE_BUILD_TYPE:STRING=Release
USES_TERMINAL_BUILD TRUE
BUILD_COMMAND ${LLVM_BUILD_CMD}
INSTALL_COMMAND ${LLVM_INSTALL_CMD}
BUILD_ALWAYS TRUE
DEPENDS libedit_project
)