diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-18 02:49:50 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-18 02:49:50 +0000 |
commit | 9835e2ae736235810b4ea1c162ca5e65c547e770 (patch) | |
tree | 3fcebf40ed70e581d776a8a4c65923e8ec20e026 /vendor/cxx/tools | |
parent | Releasing progress-linux version 1.70.0+dfsg2-1~progress7.99u1. (diff) | |
download | rustc-9835e2ae736235810b4ea1c162ca5e65c547e770.tar.xz rustc-9835e2ae736235810b4ea1c162ca5e65c547e770.zip |
Merging upstream version 1.71.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/cxx/tools')
-rw-r--r-- | vendor/cxx/tools/bazel/BUILD | 7 | ||||
-rw-r--r-- | vendor/cxx/tools/bazel/rust_cxx_bridge.bzl | 49 | ||||
-rw-r--r-- | vendor/cxx/tools/buck/buildscript.bzl | 17 | ||||
-rw-r--r-- | vendor/cxx/tools/buck/rust_cxx_bridge.bzl | 35 | ||||
-rw-r--r-- | vendor/cxx/tools/buck/third_party.bzl | 5 | ||||
-rw-r--r-- | vendor/cxx/tools/buck/toolchains/BUCK | 25 | ||||
-rw-r--r-- | vendor/cxx/tools/cargo/build.rs | 73 |
7 files changed, 211 insertions, 0 deletions
diff --git a/vendor/cxx/tools/bazel/BUILD b/vendor/cxx/tools/bazel/BUILD new file mode 100644 index 000000000..d42fc71c8 --- /dev/null +++ b/vendor/cxx/tools/bazel/BUILD @@ -0,0 +1,7 @@ +load("@bazel_skylib//:bzl_library.bzl", "bzl_library") + +bzl_library( + name = "bzl_srcs", + srcs = glob(["**/*.bzl"]), + visibility = ["//visibility:public"], +) diff --git a/vendor/cxx/tools/bazel/rust_cxx_bridge.bzl b/vendor/cxx/tools/bazel/rust_cxx_bridge.bzl new file mode 100644 index 000000000..c7d07e8a1 --- /dev/null +++ b/vendor/cxx/tools/bazel/rust_cxx_bridge.bzl @@ -0,0 +1,49 @@ +# buildifier: disable=module-docstring +load("@bazel_skylib//rules:run_binary.bzl", "run_binary") +load("@rules_cc//cc:defs.bzl", "cc_library") + +def rust_cxx_bridge(name, src, deps = []): + """A macro defining a cxx bridge library + + Args: + name (string): The name of the new target + src (string): The rust source file to generate a bridge for + deps (list, optional): A list of dependencies for the underlying cc_library. Defaults to []. + """ + native.alias( + name = "%s/header" % name, + actual = src + ".h", + ) + + native.alias( + name = "%s/source" % name, + actual = src + ".cc", + ) + + run_binary( + name = "%s/generated" % name, + srcs = [src], + outs = [ + src + ".h", + src + ".cc", + ], + args = [ + "$(location %s)" % src, + "-o", + "$(location %s.h)" % src, + "-o", + "$(location %s.cc)" % src, + ], + tool = "@cxx.rs//:codegen", + ) + + cc_library( + name = name, + srcs = [src + ".cc"], + deps = deps + [":%s/include" % name], + ) + + cc_library( + name = "%s/include" % name, + hdrs = [src + ".h"], + ) diff --git a/vendor/cxx/tools/buck/buildscript.bzl b/vendor/cxx/tools/buck/buildscript.bzl new file mode 100644 index 000000000..e4d5e1e4e --- /dev/null +++ b/vendor/cxx/tools/buck/buildscript.bzl @@ -0,0 +1,17 @@ +def buildscript_args( + name: str.type, + package_name: str.type, + buildscript_rule: str.type, + outfile: str.type, + version: str.type, + cfgs: [str.type] = [], + features: [str.type] = []): + _ = package_name + _ = version + _ = cfgs + _ = features + native.genrule( + name = name, + out = outfile, + cmd = "env RUSTC=rustc TARGET= $(exe %s) | sed -n s/^cargo:rustc-cfg=/--cfg=/p > ${OUT}" % buildscript_rule, + ) diff --git a/vendor/cxx/tools/buck/rust_cxx_bridge.bzl b/vendor/cxx/tools/buck/rust_cxx_bridge.bzl new file mode 100644 index 000000000..18bb24585 --- /dev/null +++ b/vendor/cxx/tools/buck/rust_cxx_bridge.bzl @@ -0,0 +1,35 @@ +def rust_cxx_bridge( + name: str.type, + src: str.type, + deps: [str.type] = []): + native.genrule( + name = "%s/header" % name, + out = src + ".h", + cmd = "cp $(location :%s/generated)/generated.h ${OUT}" % name, + ) + + native.genrule( + name = "%s/source" % name, + out = src + ".cc", + cmd = "cp $(location :%s/generated)/generated.cc ${OUT}" % name, + ) + + native.genrule( + name = "%s/generated" % name, + srcs = [src], + out = ".", + cmd = "$(exe //:codegen) ${SRCS} -o ${OUT}/generated.h -o ${OUT}/generated.cc", + type = "cxxbridge", + ) + + native.cxx_library( + name = name, + srcs = [":%s/source" % name], + preferred_linkage = "static", + exported_deps = deps + [":%s/include" % name], + ) + + native.cxx_library( + name = "%s/include" % name, + exported_headers = [":%s/header" % name], + ) diff --git a/vendor/cxx/tools/buck/third_party.bzl b/vendor/cxx/tools/buck/third_party.bzl new file mode 100644 index 000000000..84e5ca8f9 --- /dev/null +++ b/vendor/cxx/tools/buck/third_party.bzl @@ -0,0 +1,5 @@ +def third_party_rust_library(**kwargs): + native.rust_library( + doctests = False, + **kwargs + ) diff --git a/vendor/cxx/tools/buck/toolchains/BUCK b/vendor/cxx/tools/buck/toolchains/BUCK new file mode 100644 index 000000000..6984a86b6 --- /dev/null +++ b/vendor/cxx/tools/buck/toolchains/BUCK @@ -0,0 +1,25 @@ +load("@prelude//toolchains:cxx.bzl", "system_cxx_toolchain") +load("@prelude//toolchains:genrule.bzl", "system_genrule_toolchain") +load("@prelude//toolchains:python.bzl", "system_python_bootstrap_toolchain") +load("@prelude//toolchains:rust.bzl", "system_rust_toolchain") + +system_cxx_toolchain( + name = "cxx", + visibility = ["PUBLIC"], +) + +system_genrule_toolchain( + name = "genrule", + visibility = ["PUBLIC"], +) + +system_python_bootstrap_toolchain( + name = "python_bootstrap", + visibility = ["PUBLIC"], +) + +system_rust_toolchain( + name = "rust", + default_edition = None, + visibility = ["PUBLIC"], +) diff --git a/vendor/cxx/tools/cargo/build.rs b/vendor/cxx/tools/cargo/build.rs new file mode 100644 index 000000000..401c74186 --- /dev/null +++ b/vendor/cxx/tools/cargo/build.rs @@ -0,0 +1,73 @@ +use std::io::{self, Write}; +#[cfg(windows)] +use std::os::windows::fs as windows; +use std::path::Path; +use std::process; +#[cfg(windows)] +use std::{env, fs}; + +const MISSING: &str = " +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +When building `cxx` from a git clone, git's symlink support needs +to be enabled on platforms that have it off by default (Windows). +Either use: + + $ git config --global core.symlinks true + +prior to cloning, or else use: + + $ git clone -c core.symlinks=true https://github.com/dtolnay/cxx + +for the clone. + +Symlinks are only required when compiling locally from a clone of +the git repository---they are NOT required when building `cxx` as +a Cargo-managed (possibly transitive) build dependency downloaded +through crates.io. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +"; + +#[cfg(windows)] +const DENIED: &str = " +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +When building `cxx` from a git clone on Windows we need Developer +Mode enabled for symlink support. + +To enable Developer Mode: go under Settings to Update & Security, +then 'For developers', and turn on the toggle for Developer Mode. + +For more explanation of symlinks in Windows, see these resources: +> https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/ +> https://docs.microsoft.com/windows/uwp/get-started/enable-your-device-for-development + +Symlinks are only required when compiling locally from a clone of +the git repository---they are NOT required when building `cxx` as +a Cargo-managed (possibly transitive) build dependency downloaded +through crates.io. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +"; + +fn main() { + if Path::new("src/syntax/mod.rs").exists() { + return; + } + + #[allow(unused_mut)] + let mut message = MISSING; + + #[cfg(windows)] + if let Some(out_dir) = env::var_os("OUT_DIR") { + let parent_dir = Path::new(&out_dir).join("symlink"); + let original_dir = parent_dir.join("original"); + let link_dir = parent_dir.join("link"); + if fs::create_dir_all(&original_dir).is_ok() + && (!link_dir.exists() || fs::remove_dir(&link_dir).is_ok()) + && windows::symlink_dir(&original_dir, &link_dir).is_err() + { + message = DENIED; + } + } + + let _ = io::stderr().write_all(message.as_bytes()); + process::exit(1); +} |