summaryrefslogtreecommitdiffstats
path: root/vendor/cxx/tools
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-18 02:49:50 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-18 02:49:50 +0000
commit9835e2ae736235810b4ea1c162ca5e65c547e770 (patch)
tree3fcebf40ed70e581d776a8a4c65923e8ec20e026 /vendor/cxx/tools
parentReleasing progress-linux version 1.70.0+dfsg2-1~progress7.99u1. (diff)
downloadrustc-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/BUILD7
-rw-r--r--vendor/cxx/tools/bazel/rust_cxx_bridge.bzl49
-rw-r--r--vendor/cxx/tools/buck/buildscript.bzl17
-rw-r--r--vendor/cxx/tools/buck/rust_cxx_bridge.bzl35
-rw-r--r--vendor/cxx/tools/buck/third_party.bzl5
-rw-r--r--vendor/cxx/tools/buck/toolchains/BUCK25
-rw-r--r--vendor/cxx/tools/cargo/build.rs73
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);
+}