diff --git a/rust/platform/cpu/BUILD b/rust/platform/cpu/BUILD index 476f8cf392..4bcdef9200 100644 --- a/rust/platform/cpu/BUILD +++ b/rust/platform/cpu/BUILD @@ -3,3 +3,15 @@ constraint_value( constraint_setting = "@platforms//cpu", visibility = ["//visibility:public"], ) + +constraint_value( + name = "riscv32imac", + constraint_setting = "@platforms//cpu", + visibility = ["//visibility:public"], +) + +constraint_value( + name = "riscv64imac", + constraint_setting = "@platforms//cpu", + visibility = ["//visibility:public"], +) diff --git a/rust/platform/platform.bzl b/rust/platform/platform.bzl index 978e645d9b..ed993f0574 100644 --- a/rust/platform/platform.bzl +++ b/rust/platform/platform.bzl @@ -30,10 +30,13 @@ _SUPPORTED_T2_PLATFORM_TRIPLES = [ "aarch64-apple-ios", "aarch64-linux-android", "aarch64-unknown-linux-gnu", + "aarch64-unknown-none", "arm-unknown-linux-gnueabi", "i686-linux-android", "i686-unknown-freebsd", "powerpc-unknown-linux-gnu", + "riscv32imac-unknown-none-elf", + "riscv64imac-unknown-none-elf", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", "wasm32-wasi", @@ -49,6 +52,8 @@ _SUPPORTED_CPU_ARCH = [ "powerpc", "s390x", "x86_64", + "riscv32imac", + "riscv64imac", ] _SUPPORTED_SYSTEMS = [ diff --git a/rust/platform/triple_mappings.bzl b/rust/platform/triple_mappings.bzl index f686416eb4..90d38399ce 100644 --- a/rust/platform/triple_mappings.bzl +++ b/rust/platform/triple_mappings.bzl @@ -30,6 +30,7 @@ _SYSTEM_TO_BUILTIN_SYS_SUFFIX = { "windows": "windows", "ios": "ios", "android": "android", + "none": "none", "emscripten": None, "unknown": None, "wasi": None, @@ -53,6 +54,7 @@ _SYSTEM_TO_BINARY_EXT = { # windows target "unknown": ".wasm", "wasi": ".wasm", + "none": "", } _SYSTEM_TO_STATICLIB_EXT = { @@ -64,6 +66,9 @@ _SYSTEM_TO_STATICLIB_EXT = { "emscripten": ".js", "unknown": "", "wasi": "", + # This reflects Rust's behavior for the aarch64-unknown-none target, + # which produces .a files when invoked to build a staticlib. + "none": ".a", } _SYSTEM_TO_DYLIB_EXT = { @@ -73,8 +78,12 @@ _SYSTEM_TO_DYLIB_EXT = { "ios": ".dylib", "windows": ".dll", "emscripten": ".js", + # This is currently a hack allowing us to have the proper + # generated extension for the wasm target, similarly to the + # windows target "unknown": ".wasm", "wasi": ".wasm", + "none": "", } # See https://github.com/rust-lang/rust/blob/master/src/libstd/build.rs @@ -116,15 +125,21 @@ _SYSTEM_TO_STDLIB_LINKFLAGS = { "cloudabi": ["-lunwind", "-lc", "-lcompiler_rt"], "unknown": [], "wasi": [], + # We don't actually expect the stdlib to build for the "none" system, + # but we don't need extra flags for it. + "none": [], } def cpu_arch_to_constraints(cpu_arch): - plat_suffix = _CPU_ARCH_TO_BUILTIN_PLAT_SUFFIX[cpu_arch] + plat_suffix = _CPU_ARCH_TO_BUILTIN_PLAT_SUFFIX.get(cpu_arch) + + if plat_suffix: + return ["@platforms//cpu:{}".format(plat_suffix)] - if not plat_suffix: - fail("CPU architecture \"{}\" is not supported by rules_rust".format(cpu_arch)) + if cpu_arch.startswith("riscv"): + return ["@io_bazel_rules_rust//rust/platform/cpu:{}".format(cpu_arch)] - return ["@platforms//cpu:{}".format(plat_suffix)] + fail("CPU architecture \"{}\" is not supported by rules_rust".format(cpu_arch)) def vendor_to_constraints(vendor): # TODO(acmcarther): Review: