diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt --- a/clang/CMakeLists.txt +++ b/clang/CMakeLists.txt @@ -247,6 +247,9 @@ set(CLANG_SYSTEMZ_DEFAULT_ARCH "z10" CACHE STRING "SystemZ Default Arch") +set(CLANG_RISCV32_DEFAULT_CPU "generic-rv32" CACHE STRING "RISCV32 Default CPU") +set(CLANG_RISCV64_DEFAULT_CPU "generic-rv64" CACHE STRING "RISCV64 Default CPU") + set(CLANG_VENDOR ${PACKAGE_VENDOR} CACHE STRING "Vendor-specific text for showing with version information.") diff --git a/clang/include/clang/Config/config.h.cmake b/clang/include/clang/Config/config.h.cmake --- a/clang/include/clang/Config/config.h.cmake +++ b/clang/include/clang/Config/config.h.cmake @@ -32,6 +32,10 @@ /* Default architecture for SystemZ. */ #define CLANG_SYSTEMZ_DEFAULT_ARCH "${CLANG_SYSTEMZ_DEFAULT_ARCH}" +/* Default CPU for RISCV. */ +#define CLANG_RISCV32_DEFAULT_CPU "${CLANG_RISCV32_DEFAULT_CPU}" +#define CLANG_RISCV64_DEFAULT_CPU "${CLANG_RISCV64_DEFAULT_CPU}" + /* Multilib basename for libdir. */ #define CLANG_INSTALL_LIBDIR_BASENAME "${CLANG_INSTALL_LIBDIR_BASENAME}" diff --git a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp --- a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp +++ b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp @@ -10,6 +10,7 @@ #include "../Clang.h" #include "ToolChains/CommonArgs.h" #include "clang/Basic/CharInfo.h" +#include "clang/Config/config.h" #include "clang/Driver/Driver.h" #include "clang/Driver/DriverDiagnostic.h" #include "clang/Driver/Options.h" @@ -320,5 +321,11 @@ if (!CPU.empty()) return CPU; - return Triple.isRISCV64() ? "generic-rv64" : "generic-rv32"; + std::string DefaultCPU = Triple.isRISCV64() ? CLANG_RISCV64_DEFAULT_CPU + : CLANG_RISCV32_DEFAULT_CPU; + // Handle default CPU name is 'native'. + if (DefaultCPU == "native") + DefaultCPU = llvm::sys::getHostCPUName(); + + return DefaultCPU; }