# Generate rust-project.json for rust-analyzer (LSP) support. # # This project has no Cargo manifest, so rust-analyzer cannot discover the # crate layout on its own. The generated file describes the three crates and # points at the toolchain sysroot so core/alloc resolve. It is regenerated on # every configure; the output is git-ignored. if(NOT RUSTC) find_program(RUSTC rustc REQUIRED) endif() execute_process( COMMAND "${RUSTC}" --print sysroot OUTPUT_VARIABLE RUST_SYSROOT_RAW RESULT_VARIABLE RUST_SYSROOT_RESULT OUTPUT_STRIP_TRAILING_WHITESPACE ) if(NOT RUST_SYSROOT_RESULT EQUAL 0 OR NOT RUST_SYSROOT_RAW) message(FATAL_ERROR "Failed to query the rustc sysroot") endif() # Use forward slashes so the JSON needs no backslash escaping. string(REPLACE "\\" "/" RUST_SYSROOT "${RUST_SYSROOT_RAW}") set(RUST_SYSROOT_SRC "${RUST_SYSROOT}/lib/rustlib/src/rust/library") if(NOT IS_DIRECTORY "${RUST_SYSROOT_SRC}") message(WARNING "rust-src not found at ${RUST_SYSROOT_SRC}. " "Run `rustup component add rust-src` for full LSP support.") endif() configure_file( "${CMAKE_CURRENT_LIST_DIR}/rust-project.json.in" "${CMAKE_CURRENT_SOURCE_DIR}/rust-project.json" @ONLY )