if (NOT ENABLE_LIBRARIES)
  set(DEFAULT_ENABLE_RUST FALSE)
else()
  list (APPEND CMAKE_MODULE_PATH "${ClickHouse_SOURCE_DIR}/contrib/corrosion/cmake")
  find_package(Rust)
  set(DEFAULT_ENABLE_RUST ${Rust_FOUND})
endif()

option(ENABLE_RUST "Enable rust" ${DEFAULT_ENABLE_RUST})
if(NOT ENABLE_RUST)
  message(STATUS "Not using rust")
  return()
endif()

message(STATUS "Checking Rust toolchain for current target")

# See https://doc.rust-lang.org/nightly/rustc/platform-support.html

if(DEFINED CMAKE_TOOLCHAIN_FILE)
    if(CMAKE_TOOLCHAIN_FILE MATCHES "ppc64le")
        set(Rust_CARGO_TARGET "powerpc64le-unknown-linux-gnu")
    elseif((CMAKE_TOOLCHAIN_FILE MATCHES "linux/toolchain-x86_64") AND (CMAKE_TOOLCHAIN_FILE MATCHES "musl"))
        set(Rust_CARGO_TARGET "x86_64-unknown-linux-musl")
    elseif(CMAKE_TOOLCHAIN_FILE MATCHES "linux/toolchain-x86_64")
        set(Rust_CARGO_TARGET "x86_64-unknown-linux-gnu")
    elseif((CMAKE_TOOLCHAIN_FILE MATCHES "linux/toolchain-aarch64") AND (CMAKE_TOOLCHAIN_FILE MATCHES "musl"))
        set(Rust_CARGO_TARGET "aarch64-unknown-linux-musl")
    elseif(CMAKE_TOOLCHAIN_FILE MATCHES "linux/toolchain-aarch64")
        set(Rust_CARGO_TARGET "aarch64-unknown-linux-gnu")
    elseif((CMAKE_TOOLCHAIN_FILE MATCHES "darwin") AND (CMAKE_TOOLCHAIN_FILE MATCHES "x86_64"))
        set(Rust_CARGO_TARGET "x86_64-apple-darwin")
    elseif((CMAKE_TOOLCHAIN_FILE MATCHES "darwin") AND (CMAKE_TOOLCHAIN_FILE MATCHES "aarch64"))
        set(Rust_CARGO_TARGET "aarch64-apple-darwin")
    elseif((CMAKE_TOOLCHAIN_FILE MATCHES "freebsd") AND (CMAKE_TOOLCHAIN_FILE MATCHES "x86_64"))
        set(Rust_CARGO_TARGET "x86_64-unknown-freebsd")
    elseif(CMAKE_TOOLCHAIN_FILE MATCHES "linux/toolchain-riscv64")
        set(Rust_CARGO_TARGET "riscv64gc-unknown-linux-gnu")
    else()
        message(FATAL_ERROR "Unsupported rust target")
    endif()
    message(STATUS "Switched Rust target to ${Rust_CARGO_TARGET}")
endif ()

# FindRust.cmake
list(APPEND CMAKE_MODULE_PATH "${ClickHouse_SOURCE_DIR}/contrib/corrosion/cmake")
# Define function corrosion_import_crate()
include ("${ClickHouse_SOURCE_DIR}/contrib/corrosion/cmake/Corrosion.cmake")
