diff options
| -rw-r--r-- | Cargo.toml | 3 | ||||
| -rw-r--r-- | WORKSPACE | 3 | ||||
| -rw-r--r-- | bazel/patch/BUILD | 1 | ||||
| -rw-r--r-- | bazel/patch/BUILD_script_patch | 69 | ||||
| -rw-r--r-- | bazel/patch/libsodium_sys_build_script_script_.rs (renamed from bazel/patch/libsodium_buildrs.rs) | 814 | ||||
| -rw-r--r-- | cargo/remote/BUILD.libsodium-sys-0.2.7.bazel | 73 |
6 files changed, 521 insertions, 442 deletions
@@ -46,5 +46,6 @@ compile_data_attr = "glob([\"*/**\"])" [package.metadata.raze.crates.libsodium-sys.'*']
buildrs_additional_environment_variables = { PATH = "/usr/sbin:/usr/bin:/sbin:/bin", "NUM_JOBS" = "2" }
compile_data_attr = "glob([\"*/**\"])"
+additional_build_file = "bazel/patch/BUILD_script_patch"
gen_buildrs = false
-additional_build_file = ["bazel/patch/libsodium_buildrs.rs"]
\ No newline at end of file +additional_deps = [":libsodium_sys_build_script"]
\ No newline at end of file @@ -1,6 +1,9 @@ +workspace(name = "nova") + #@unused load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + http_archive( name = "com_google_protobuf", sha256 = "d0f5f605d0d656007ce6c8b5a82df3037e1d8fe8b121ed42e536f569dec16113", diff --git a/bazel/patch/BUILD b/bazel/patch/BUILD new file mode 100644 index 0000000..8bef599 --- /dev/null +++ b/bazel/patch/BUILD @@ -0,0 +1 @@ +exports_files(["libsodium_sys_build_script_script_.rs"])
\ No newline at end of file diff --git a/bazel/patch/BUILD_script_patch b/bazel/patch/BUILD_script_patch new file mode 100644 index 0000000..5578907 --- /dev/null +++ b/bazel/patch/BUILD_script_patch @@ -0,0 +1,69 @@ +# buildifier: disable=load +load("@bazel_skylib//lib:selects.bzl", "selects") + +# Generated Targets +# buildifier: disable=out-of-order-load +# buildifier: disable=load-on-top +load( + "@rules_rust//cargo:cargo_build_script.bzl", + "cargo_build_script", +) + +cargo_build_script( + name = "libsodium_sys_build_script", + srcs = ["@nova//bazel/patch:libsodium_sys_build_script_script_.rs"], + build_script_env = { + "NUM_JOBS": "2", + "PATH": "/usr/sbin:/usr/bin:/sbin:/bin", + }, + data = glob(["**"]), + edition = "2015", + links = "sodium", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-raze", + "manual", + ], + version = "0.2.7", + visibility = ["//visibility:private"], + deps = [ + "@raze__pkg_config__0_3_19//:pkg_config", + "@raze__walkdir__2_3_2//:walkdir", + ] + selects.with_or({ + # cfg(not(target_env = "msvc")) + ( + "@rules_rust//rust/platform:aarch64-apple-darwin", + "@rules_rust//rust/platform:aarch64-apple-ios", + "@rules_rust//rust/platform:aarch64-linux-android", + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu", + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi", + "@rules_rust//rust/platform:i686-apple-darwin", + "@rules_rust//rust/platform:i686-linux-android", + "@rules_rust//rust/platform:i686-unknown-freebsd", + "@rules_rust//rust/platform:i686-unknown-linux-gnu", + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", + "@rules_rust//rust/platform:s390x-unknown-linux-gnu", + "@rules_rust//rust/platform:wasm32-unknown-unknown", + "@rules_rust//rust/platform:wasm32-wasi", + "@rules_rust//rust/platform:x86_64-apple-darwin", + "@rules_rust//rust/platform:x86_64-apple-ios", + "@rules_rust//rust/platform:x86_64-linux-android", + "@rules_rust//rust/platform:x86_64-unknown-freebsd", + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", + ): [ + "@raze__cc__1_0_70//:cc", + ], + "//conditions:default": [], + }) + selects.with_or({ + # cfg(target_env = "msvc") + ( + "@rules_rust//rust/platform:i686-pc-windows-msvc", + "@rules_rust//rust/platform:x86_64-pc-windows-msvc", + ): [ + "@raze__libc__0_2_101//:libc", + ], + "//conditions:default": [], + }), +) diff --git a/bazel/patch/libsodium_buildrs.rs b/bazel/patch/libsodium_sys_build_script_script_.rs index 1865f2c..1b0b775 100644 --- a/bazel/patch/libsodium_buildrs.rs +++ b/bazel/patch/libsodium_sys_build_script_script_.rs @@ -1,407 +1,407 @@ -#[cfg(not(windows))]
-extern crate cc;
-
-#[cfg(target_env = "msvc")]
-extern crate libc;
-
-extern crate pkg_config;
-extern crate walkdir;
-
-use std::{
- env,
- path::{Path, PathBuf},
-};
-
-static VERSION: &str = "1.0.18";
-
-fn main() {
- println!("cargo:rerun-if-env-changed=SODIUM_LIB_DIR");
- println!("cargo:rerun-if-env-changed=SODIUM_SHARED");
- println!("cargo:rerun-if-env-changed=SODIUM_USE_PKG_CONFIG");
-
- if cfg!(not(windows)) {
- println!("cargo:rerun-if-env-changed=SODIUM_DISABLE_PIE");
- }
-
- if env::var("SODIUM_STATIC").is_ok() {
- panic!("SODIUM_STATIC is deprecated. Use SODIUM_SHARED instead.");
- }
-
- let lib_dir_isset = env::var("SODIUM_LIB_DIR").is_ok();
- let use_pkg_isset = if cfg!(feature = "use-pkg-config") {
- true
- } else {
- env::var("SODIUM_USE_PKG_CONFIG").is_ok()
- };
- let shared_isset = env::var("SODIUM_SHARED").is_ok();
-
- if lib_dir_isset && use_pkg_isset {
- panic!("SODIUM_LIB_DIR is incompatible with SODIUM_USE_PKG_CONFIG. Set the only one env variable");
- }
-
- if lib_dir_isset {
- find_libsodium_env();
- } else if use_pkg_isset {
- if shared_isset {
- println!("cargo:warning=SODIUM_SHARED has no effect with SODIUM_USE_PKG_CONFIG");
- }
-
- find_libsodium_pkg();
- } else {
- if shared_isset {
- println!(
- "cargo:warning=SODIUM_SHARED has no effect for building libsodium from source"
- );
- }
-
- build_libsodium();
- }
-}
-
-/* Must be called when SODIUM_LIB_DIR is set to any value
-This function will set `cargo` flags.
-*/
-fn find_libsodium_env() {
- let lib_dir = env::var("SODIUM_LIB_DIR").unwrap(); // cannot fail
-
- println!("cargo:rustc-link-search=native={}", lib_dir);
- let mode = if env::var("SODIUM_SHARED").is_ok() {
- "dylib"
- } else {
- "static"
- };
- let name = if cfg!(target_env = "msvc") {
- "libsodium"
- } else {
- "sodium"
- };
- println!("cargo:rustc-link-lib={}={}", mode, name);
- println!(
- "cargo:warning=Using unknown libsodium version. This crate is tested against \
- {} and may not be fully compatible with other versions.",
- VERSION
- );
-}
-
-/* Must be called when no SODIUM_USE_PKG_CONFIG env var is set
-This function will set `cargo` flags.
-*/
-#[cfg(target_env = "msvc")]
-fn find_libsodium_pkg() {
- panic!("SODIUM_USE_PKG_CONFIG is not supported on msvc");
-}
-
-/* Must be called when SODIUM_USE_PKG_CONFIG env var is set
-This function will set `cargo` flags.
-*/
-#[cfg(not(target_env = "msvc"))]
-fn find_libsodium_pkg() {
- match pkg_config::Config::new().probe("libsodium") {
- Ok(lib) => {
- if lib.version != VERSION {
- println!(
- "cargo:warning=Using libsodium version {}. This crate is tested against {} \
- and may not be fully compatible with {}.",
- lib.version, VERSION, lib.version
- );
- }
- for lib_dir in &lib.link_paths {
- println!("cargo:lib={}", lib_dir.to_str().unwrap());
- }
- for include_dir in &lib.include_paths {
- println!("cargo:include={}", include_dir.to_str().unwrap());
- }
- }
- Err(e) => {
- panic!(
- "
-Failed to run pkg-config:
-{:?}
-
-You can try fixing this by installing pkg-config:
-
- # On Ubuntu
- sudo apt install pkg-config
- # On Arch Linux
- sudo pacman -S pkgconf
- # On Fedora
- sudo dnf install pkgconf-pkg-config
-
-",
- e
- );
- }
- }
-}
-
-#[cfg(windows)]
-fn make_libsodium(_: &str, _: &Path, _: &Path) -> PathBuf {
- // We don't build anything on windows, we simply linked to precompiled
- // libs.
- get_lib_dir()
-}
-
-#[cfg(not(windows))]
-fn make_libsodium(target: &str, source_dir: &Path, install_dir: &Path) -> PathBuf {
- use std::{fs, process::Command, str};
-
- // Decide on CC, CFLAGS and the --host configure argument
- let build_compiler = cc::Build::new().get_compiler();
- let mut compiler = build_compiler.path().to_str().unwrap().to_string();
- let mut cflags = build_compiler.cflags_env().into_string().unwrap();
- let mut host_arg = format!("--host={}", target);
- let mut cross_compiling = target != env::var("HOST").unwrap();
- if target.contains("-ios") {
- // Determine Xcode directory path
- let xcode_select_output = Command::new("xcode-select").arg("-p").output().unwrap();
- if !xcode_select_output.status.success() {
- panic!("Failed to run xcode-select -p");
- }
- let xcode_dir = str::from_utf8(&xcode_select_output.stdout)
- .unwrap()
- .trim()
- .to_string();
-
- // Determine SDK directory paths
- let sdk_dir_simulator = Path::new(&xcode_dir)
- .join("Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk")
- .to_str()
- .unwrap()
- .to_string();
- let sdk_dir_ios = Path::new(&xcode_dir)
- .join("Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk")
- .to_str()
- .unwrap()
- .to_string();
-
- // Min versions
- let ios_simulator_version_min = "6.0.0";
- let ios_version_min = "6.0.0";
-
- // Roughly based on `dist-build/ios.sh` in the libsodium sources
- match &*target {
- "aarch64-apple-ios" => {
- cflags += " -arch arm64";
- cflags += &format!(" -isysroot {}", sdk_dir_ios);
- cflags += &format!(" -mios-version-min={}", ios_version_min);
- cflags += " -fembed-bitcode";
- host_arg = "--host=arm-apple-darwin10".to_string();
- }
- "armv7-apple-ios" => {
- cflags += " -arch armv7";
- cflags += &format!(" -isysroot {}", sdk_dir_ios);
- cflags += &format!(" -mios-version-min={}", ios_version_min);
- cflags += " -mthumb";
- host_arg = "--host=arm-apple-darwin10".to_string();
- }
- "armv7s-apple-ios" => {
- cflags += " -arch armv7s";
- cflags += &format!(" -isysroot {}", sdk_dir_ios);
- cflags += &format!(" -mios-version-min={}", ios_version_min);
- cflags += " -mthumb";
- host_arg = "--host=arm-apple-darwin10".to_string();
- }
- "i386-apple-ios" => {
- cflags += " -arch i386";
- cflags += &format!(" -isysroot {}", sdk_dir_simulator);
- cflags += &format!(" -mios-simulator-version-min={}", ios_simulator_version_min);
- host_arg = "--host=i686-apple-darwin10".to_string();
- }
- "x86_64-apple-ios" => {
- cflags += " -arch x86_64";
- cflags += &format!(" -isysroot {}", sdk_dir_simulator);
- cflags += &format!(" -mios-simulator-version-min={}", ios_simulator_version_min);
- host_arg = "--host=x86_64-apple-darwin10".to_string();
- }
- _ => panic!("Unknown iOS build target: {}", target),
- }
- cross_compiling = true;
- } else if target.contains("i686") {
- compiler += " -m32 -maes";
- cflags += " -march=i686";
- }
-
- let help = if cross_compiling {
- "***********************************************************\n\
- Possible missing dependencies.\n\
- See https://github.com/sodiumoxide/sodiumoxide#cross-compiling\n\
- ***********************************************************\n\n"
- } else {
- ""
- };
-
- // Run `./configure`
- let prefix_arg = format!("--prefix={}", install_dir.to_str().unwrap());
- let libdir_arg = format!("--libdir={}/lib", install_dir.to_str().unwrap());
- let mut configure_cmd = Command::new(fs::canonicalize(source_dir.join("configure")).expect("Failed to find configure script! Did you clone the submodule at `libsodium-sys/libsodium`?"));
- if !compiler.is_empty() {
- configure_cmd.env("CC", &compiler);
- }
- if !cflags.is_empty() {
- configure_cmd.env("CFLAGS", &cflags);
- }
- if env::var("SODIUM_DISABLE_PIE").is_ok() {
- configure_cmd.arg("--disable-pie");
- }
- let configure_status = configure_cmd
- .current_dir(&source_dir)
- .arg(&prefix_arg)
- .arg(&libdir_arg)
- .arg(&host_arg)
- .arg("--enable-shared=no")
- .status()
- .unwrap_or_else(|error| {
- panic!("Failed to run './configure': {}\n{}", error, help);
- });
- if !configure_status.success() {
- panic!(
- "\nFailed to configure libsodium using {:?}\nCFLAGS={}\nCC={}\n{}\n",
- configure_cmd, cflags, compiler, help
- );
- }
-
- // Run `make check`, or `make all` if we're cross-compiling
- let j_arg = format!("-j{}", env::var("NUM_JOBS").unwrap());
- let make_arg = if cross_compiling { "all" } else { "check" };
- let mut make_cmd = Command::new("make");
- let make_status = make_cmd
- .current_dir(&source_dir)
- .env("V", "1")
- .arg(make_arg)
- .arg(&j_arg)
- .status()
- .unwrap_or_else(|error| {
- panic!("Failed to run 'make {}': {}\n{}", make_arg, error, help);
- });
- if !make_status.success() {
- panic!("\nFailed to build libsodium using {:?}\n{}", make_cmd, help);
- }
-
- // Run `make install`
- let mut install_cmd = Command::new("make");
- let install_status = install_cmd
- .current_dir(&source_dir)
- .arg("install")
- .status()
- .unwrap_or_else(|error| {
- panic!("Failed to run 'make install': {}", error);
- });
- if !install_status.success() {
- panic!("\nFailed to install libsodium using {:?}", install_cmd);
- }
-
- install_dir.join("lib")
-}
-
-#[cfg(any(windows, target_env = "msvc"))]
-fn get_crate_dir() -> PathBuf {
- env::var("CARGO_MANIFEST_DIR").unwrap().into()
-}
-
-#[cfg(target_env = "msvc")]
-fn is_release_profile() -> bool {
- env::var("PROFILE").unwrap() == "release"
-}
-
-#[cfg(all(target_env = "msvc", target_pointer_width = "32"))]
-fn get_lib_dir() -> PathBuf {
- if is_release_profile() {
- get_crate_dir().join("msvc/Win32/Release/v142/")
- } else {
- get_crate_dir().join("msvc/Win32/Debug/v142/")
- }
-}
-
-#[cfg(all(target_env = "msvc", target_pointer_width = "64"))]
-fn get_lib_dir() -> PathBuf {
- if is_release_profile() {
- get_crate_dir().join("msvc/x64/Release/v142/")
- } else {
- get_crate_dir().join("msvc/x64/Debug/v142/")
- }
-}
-
-#[cfg(all(windows, not(target_env = "msvc"), target_pointer_width = "32"))]
-fn get_lib_dir() -> PathBuf {
- get_crate_dir().join("mingw/win32/")
-}
-
-#[cfg(all(windows, not(target_env = "msvc"), target_pointer_width = "64"))]
-fn get_lib_dir() -> PathBuf {
- get_crate_dir().join("mingw/win64/")
-}
-
-fn build_libsodium() {
- use std::{ffi::OsStr, fs};
-
- // Determine build target triple
- let mut out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
- let target = env::var("TARGET").unwrap();
- let profile = env::var("PROFILE").unwrap();
-
- // Avoid issues with paths containing spaces by falling back to using a tempfile.
- // See https://github.com/jedisct1/libsodium/issues/207
- if out_dir.to_str().unwrap().contains(' ') {
- out_dir = env::temp_dir()
- .join("libsodium-sys")
- .join(&target)
- .join(&profile);
- println!(
- "cargo:warning=The path to the usual build directory contains spaces and hence \
- can't be used to build libsodium. Falling back to use {}. If running `cargo \
- clean`, ensure you also delete this fallback directory",
- out_dir.display()
- );
- }
-
- // Determine source and install dir
- let install_dir = out_dir.join("installed");
- let source_dir = out_dir.join("source").join("libsodium");
-
- // Create directories
- fs::create_dir_all(&install_dir).unwrap();
- fs::create_dir_all(&source_dir).unwrap();
-
- let paths = std::fs::read_dir("./libsodium").unwrap();
-
- for path in paths {
- println!("Name: {}", path.unwrap().path().display())
- }
-
- if !target.contains("msvc") {
- // Copy sources into build directory
- // Skip .git because it's marked read-only and that causes problems re-building
- for entry in walkdir::WalkDir::new("libsodium")
- .into_iter()
- .filter_entry(|e| e.file_name() != OsStr::new(".git"))
- .filter_map(Result::ok)
- {
- let outpath = out_dir.join("source").join(entry.path());
- if let Err(e) = if entry.file_type().is_dir() {
- fs::create_dir_all(outpath)
- } else {
- fs::copy(entry.path(), outpath).map(|_| ())
- } {
- panic!("Failed to copy sources into build directory: {}", e);
- }
- }
- }
-
- let lib_dir = make_libsodium(&target, &source_dir, &install_dir);
-
- if target.contains("msvc") {
- println!("cargo:rustc-link-lib=static=libsodium");
- } else {
- println!("cargo:rustc-link-lib=static=sodium");
- }
-
- println!(
- "cargo:rustc-link-search=native={}",
- lib_dir.to_str().unwrap()
- );
-
- let include_dir = source_dir.join("src/libsodium/include");
-
- println!("cargo:include={}", include_dir.to_str().unwrap());
- println!("cargo:lib={}", lib_dir.to_str().unwrap());
-}
+#[cfg(not(windows))] +extern crate cc; + +#[cfg(target_env = "msvc")] +extern crate libc; + +extern crate pkg_config; +extern crate walkdir; + +use std::{ + env, + path::{Path, PathBuf}, +}; + +static VERSION: &str = "1.0.18"; + +fn main() { + println!("cargo:rerun-if-env-changed=SODIUM_LIB_DIR"); + println!("cargo:rerun-if-env-changed=SODIUM_SHARED"); + println!("cargo:rerun-if-env-changed=SODIUM_USE_PKG_CONFIG"); + + if cfg!(not(windows)) { + println!("cargo:rerun-if-env-changed=SODIUM_DISABLE_PIE"); + } + + if env::var("SODIUM_STATIC").is_ok() { + panic!("SODIUM_STATIC is deprecated. Use SODIUM_SHARED instead."); + } + + let lib_dir_isset = env::var("SODIUM_LIB_DIR").is_ok(); + let use_pkg_isset = if cfg!(feature = "use-pkg-config") { + true + } else { + env::var("SODIUM_USE_PKG_CONFIG").is_ok() + }; + let shared_isset = env::var("SODIUM_SHARED").is_ok(); + + if lib_dir_isset && use_pkg_isset { + panic!("SODIUM_LIB_DIR is incompatible with SODIUM_USE_PKG_CONFIG. Set the only one env variable"); + } + + if lib_dir_isset { + find_libsodium_env(); + } else if use_pkg_isset { + if shared_isset { + println!("cargo:warning=SODIUM_SHARED has no effect with SODIUM_USE_PKG_CONFIG"); + } + + find_libsodium_pkg(); + } else { + if shared_isset { + println!( + "cargo:warning=SODIUM_SHARED has no effect for building libsodium from source" + ); + } + + build_libsodium(); + } +} + +/* Must be called when SODIUM_LIB_DIR is set to any value +This function will set `cargo` flags. +*/ +fn find_libsodium_env() { + let lib_dir = env::var("SODIUM_LIB_DIR").unwrap(); // cannot fail + + println!("cargo:rustc-link-search=native={}", lib_dir); + let mode = if env::var("SODIUM_SHARED").is_ok() { + "dylib" + } else { + "static" + }; + let name = if cfg!(target_env = "msvc") { + "libsodium" + } else { + "sodium" + }; + println!("cargo:rustc-link-lib={}={}", mode, name); + println!( + "cargo:warning=Using unknown libsodium version. This crate is tested against \ + {} and may not be fully compatible with other versions.", + VERSION + ); +} + +/* Must be called when no SODIUM_USE_PKG_CONFIG env var is set +This function will set `cargo` flags. +*/ +#[cfg(target_env = "msvc")] +fn find_libsodium_pkg() { + panic!("SODIUM_USE_PKG_CONFIG is not supported on msvc"); +} + +/* Must be called when SODIUM_USE_PKG_CONFIG env var is set +This function will set `cargo` flags. +*/ +#[cfg(not(target_env = "msvc"))] +fn find_libsodium_pkg() { + match pkg_config::Config::new().probe("libsodium") { + Ok(lib) => { + if lib.version != VERSION { + println!( + "cargo:warning=Using libsodium version {}. This crate is tested against {} \ + and may not be fully compatible with {}.", + lib.version, VERSION, lib.version + ); + } + for lib_dir in &lib.link_paths { + println!("cargo:lib={}", lib_dir.to_str().unwrap()); + } + for include_dir in &lib.include_paths { + println!("cargo:include={}", include_dir.to_str().unwrap()); + } + } + Err(e) => { + panic!( + " +Failed to run pkg-config: +{:?} + +You can try fixing this by installing pkg-config: + + # On Ubuntu + sudo apt install pkg-config + # On Arch Linux + sudo pacman -S pkgconf + # On Fedora + sudo dnf install pkgconf-pkg-config + +", + e + ); + } + } +} + +#[cfg(windows)] +fn make_libsodium(_: &str, _: &Path, _: &Path) -> PathBuf { + // We don't build anything on windows, we simply linked to precompiled + // libs. + get_lib_dir() +} + +#[cfg(not(windows))] +fn make_libsodium(target: &str, source_dir: &Path, install_dir: &Path) -> PathBuf { + use std::{fs, process::Command, str}; + + // Decide on CC, CFLAGS and the --host configure argument + let build_compiler = cc::Build::new().get_compiler(); + let mut compiler = build_compiler.path().to_str().unwrap().to_string(); + let mut cflags = build_compiler.cflags_env().into_string().unwrap(); + let mut host_arg = format!("--host={}", target); + let mut cross_compiling = target != env::var("HOST").unwrap(); + if target.contains("-ios") { + // Determine Xcode directory path + let xcode_select_output = Command::new("xcode-select").arg("-p").output().unwrap(); + if !xcode_select_output.status.success() { + panic!("Failed to run xcode-select -p"); + } + let xcode_dir = str::from_utf8(&xcode_select_output.stdout) + .unwrap() + .trim() + .to_string(); + + // Determine SDK directory paths + let sdk_dir_simulator = Path::new(&xcode_dir) + .join("Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk") + .to_str() + .unwrap() + .to_string(); + let sdk_dir_ios = Path::new(&xcode_dir) + .join("Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk") + .to_str() + .unwrap() + .to_string(); + + // Min versions + let ios_simulator_version_min = "6.0.0"; + let ios_version_min = "6.0.0"; + + // Roughly based on `dist-build/ios.sh` in the libsodium sources + match &*target { + "aarch64-apple-ios" => { + cflags += " -arch arm64"; + cflags += &format!(" -isysroot {}", sdk_dir_ios); + cflags += &format!(" -mios-version-min={}", ios_version_min); + cflags += " -fembed-bitcode"; + host_arg = "--host=arm-apple-darwin10".to_string(); + } + "armv7-apple-ios" => { + cflags += " -arch armv7"; + cflags += &format!(" -isysroot {}", sdk_dir_ios); + cflags += &format!(" -mios-version-min={}", ios_version_min); + cflags += " -mthumb"; + host_arg = "--host=arm-apple-darwin10".to_string(); + } + "armv7s-apple-ios" => { + cflags += " -arch armv7s"; + cflags += &format!(" -isysroot {}", sdk_dir_ios); + cflags += &format!(" -mios-version-min={}", ios_version_min); + cflags += " -mthumb"; + host_arg = "--host=arm-apple-darwin10".to_string(); + } + "i386-apple-ios" => { + cflags += " -arch i386"; + cflags += &format!(" -isysroot {}", sdk_dir_simulator); + cflags += &format!(" -mios-simulator-version-min={}", ios_simulator_version_min); + host_arg = "--host=i686-apple-darwin10".to_string(); + } + "x86_64-apple-ios" => { + cflags += " -arch x86_64"; + cflags += &format!(" -isysroot {}", sdk_dir_simulator); + cflags += &format!(" -mios-simulator-version-min={}", ios_simulator_version_min); + host_arg = "--host=x86_64-apple-darwin10".to_string(); + } + _ => panic!("Unknown iOS build target: {}", target), + } + cross_compiling = true; + } else if target.contains("i686") { + compiler += " -m32 -maes"; + cflags += " -march=i686"; + } + + let help = if cross_compiling { + "***********************************************************\n\ + Possible missing dependencies.\n\ + See https://github.com/sodiumoxide/sodiumoxide#cross-compiling\n\ + ***********************************************************\n\n" + } else { + "" + }; + + // Run `./configure` + let prefix_arg = format!("--prefix={}", install_dir.to_str().unwrap()); + let libdir_arg = format!("--libdir={}/lib", install_dir.to_str().unwrap()); + let mut configure_cmd = Command::new(fs::canonicalize(source_dir.join("configure")).expect("Failed to find configure script! Did you clone the submodule at `libsodium-sys/libsodium`?")); + if !compiler.is_empty() { + configure_cmd.env("CC", &compiler); + } + if !cflags.is_empty() { + configure_cmd.env("CFLAGS", &cflags); + } + if env::var("SODIUM_DISABLE_PIE").is_ok() { + configure_cmd.arg("--disable-pie"); + } + let configure_status = configure_cmd + .current_dir(&source_dir) + .arg(&prefix_arg) + .arg(&libdir_arg) + .arg(&host_arg) + .arg("--enable-shared=no") + .status() + .unwrap_or_else(|error| { + panic!("Failed to run './configure': {}\n{}", error, help); + }); + if !configure_status.success() { + panic!( + "\nFailed to configure libsodium using {:?}\nCFLAGS={}\nCC={}\n{}\n", + configure_cmd, cflags, compiler, help + ); + } + + // Run `make check`, or `make all` if we're cross-compiling + let j_arg = format!("-j{}", env::var("NUM_JOBS").unwrap()); + let make_arg = if cross_compiling { "all" } else { "check" }; + let mut make_cmd = Command::new("make"); + let make_status = make_cmd + .current_dir(&source_dir) + .env("V", "1") + .arg(make_arg) + .arg(&j_arg) + .status() + .unwrap_or_else(|error| { + panic!("Failed to run 'make {}': {}\n{}", make_arg, error, help); + }); + if !make_status.success() { + panic!("\nFailed to build libsodium using {:?}\n{}", make_cmd, help); + } + + // Run `make install` + let mut install_cmd = Command::new("make"); + let install_status = install_cmd + .current_dir(&source_dir) + .arg("install") + .status() + .unwrap_or_else(|error| { + panic!("Failed to run 'make install': {}", error); + }); + if !install_status.success() { + panic!("\nFailed to install libsodium using {:?}", install_cmd); + } + + install_dir.join("lib") +} + +#[cfg(any(windows, target_env = "msvc"))] +fn get_crate_dir() -> PathBuf { + env::var("CARGO_MANIFEST_DIR").unwrap().into() +} + +#[cfg(target_env = "msvc")] +fn is_release_profile() -> bool { + env::var("PROFILE").unwrap() == "release" +} + +#[cfg(all(target_env = "msvc", target_pointer_width = "32"))] +fn get_lib_dir() -> PathBuf { + if is_release_profile() { + get_crate_dir().join("msvc/Win32/Release/v142/") + } else { + get_crate_dir().join("msvc/Win32/Debug/v142/") + } +} + +#[cfg(all(target_env = "msvc", target_pointer_width = "64"))] +fn get_lib_dir() -> PathBuf { + if is_release_profile() { + get_crate_dir().join("msvc/x64/Release/v142/") + } else { + get_crate_dir().join("msvc/x64/Debug/v142/") + } +} + +#[cfg(all(windows, not(target_env = "msvc"), target_pointer_width = "32"))] +fn get_lib_dir() -> PathBuf { + get_crate_dir().join("mingw/win32/") +} + +#[cfg(all(windows, not(target_env = "msvc"), target_pointer_width = "64"))] +fn get_lib_dir() -> PathBuf { + get_crate_dir().join("mingw/win64/") +} + +fn build_libsodium() { + use std::{ffi::OsStr, fs}; + + // Determine build target triple + let mut out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); + let target = env::var("TARGET").unwrap(); + let profile = env::var("PROFILE").unwrap(); + + // Avoid issues with paths containing spaces by falling back to using a tempfile. + // See https://github.com/jedisct1/libsodium/issues/207 + if out_dir.to_str().unwrap().contains(' ') { + out_dir = env::temp_dir() + .join("libsodium-sys") + .join(&target) + .join(&profile); + println!( + "cargo:warning=The path to the usual build directory contains spaces and hence \ + can't be used to build libsodium. Falling back to use {}. If running `cargo \ + clean`, ensure you also delete this fallback directory", + out_dir.display() + ); + } + + // Determine source and install dir + let install_dir = out_dir.join("installed"); + let source_dir = out_dir.join("source").join("libsodium"); + + // Create directories + fs::create_dir_all(&install_dir).unwrap(); + fs::create_dir_all(&source_dir).unwrap(); + + let paths = std::fs::read_dir("./libsodium").unwrap(); + + for path in paths { + println!("Name: {}", path.unwrap().path().display()) + } + + if !target.contains("msvc") { + // Copy sources into build directory + // Skip .git because it's marked read-only and that causes problems re-building + for entry in walkdir::WalkDir::new("libsodium") + .into_iter() + .filter_entry(|e| e.file_name() != OsStr::new(".git")) + .filter_map(Result::ok) + { + let outpath = out_dir.join("source").join(entry.path()); + if let Err(e) = if entry.file_type().is_dir() { + fs::create_dir_all(outpath) + } else { + fs::copy(entry.path(), outpath).map(|_| ()) + } { + panic!("Failed to copy sources into build directory: {}", e); + } + } + } + + let lib_dir = make_libsodium(&target, &source_dir, &install_dir); + + if target.contains("msvc") { + println!("cargo:rustc-link-lib=static=libsodium"); + } else { + println!("cargo:rustc-link-lib=static=sodium"); + } + + println!( + "cargo:rustc-link-search=native={}", + lib_dir.to_str().unwrap() + ); + + let include_dir = source_dir.join("src/libsodium/include"); + + println!("cargo:include={}", include_dir.to_str().unwrap()); + println!("cargo:lib={}", lib_dir.to_str().unwrap()); +} diff --git a/cargo/remote/BUILD.libsodium-sys-0.2.7.bazel b/cargo/remote/BUILD.libsodium-sys-0.2.7.bazel index 8f63309..c577512 100644 --- a/cargo/remote/BUILD.libsodium-sys-0.2.7.bazel +++ b/cargo/remote/BUILD.libsodium-sys-0.2.7.bazel @@ -29,26 +29,21 @@ licenses([ ]) # Generated Targets -# buildifier: disable=out-of-order-load -# buildifier: disable=load-on-top -load( - "@rules_rust//cargo:cargo_build_script.bzl", - "cargo_build_script", -) -cargo_build_script( - name = "libsodium_sys_build_script", +# Unsupported target "build-script-build" with type "custom-build" omitted + +rust_library( + name = "libsodium_sys", srcs = glob(["**/*.rs"]), - build_script_env = { - "NUM_JOBS": "2", - "PATH": "/usr/sbin:/usr/bin:/sbin:/bin", + aliases = { }, crate_features = [ ], - crate_root = "build.rs", - data = glob(["**"]), + crate_root = "src/lib.rs", + crate_type = "lib", + data = [], + compile_data = glob(["*/**"]), edition = "2015", - links = "sodium", rustc_flags = [ "--cap-lints=allow", ], @@ -57,10 +52,10 @@ cargo_build_script( "manual", ], version = "0.2.7", - visibility = ["//visibility:private"], + # buildifier: leave-alone deps = [ - "@raze__pkg_config__0_3_19//:pkg_config", - "@raze__walkdir__2_3_2//:walkdir", + ":libsodium_sys_build_script", + "@raze__libc__0_2_101//:libc", ] + selects.with_or({ # cfg(not(target_env = "msvc")) ( @@ -83,7 +78,6 @@ cargo_build_script( "@rules_rust//rust/platform:x86_64-unknown-freebsd", "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", ): [ - "@raze__cc__1_0_70//:cc", ], "//conditions:default": [], }) + selects.with_or({ @@ -92,24 +86,35 @@ cargo_build_script( "@rules_rust//rust/platform:i686-pc-windows-msvc", "@rules_rust//rust/platform:x86_64-pc-windows-msvc", ): [ - "@raze__libc__0_2_101//:libc", ], "//conditions:default": [], }), ) -rust_library( - name = "libsodium_sys", - srcs = glob(["**/*.rs"]), - aliases = { +# Unsupported target "test" with type "test" omitted + +# Additional content from bazel/patch/BUILD_script_patch +# buildifier: disable=load +load("@bazel_skylib//lib:selects.bzl", "selects") + +# Generated Targets +# buildifier: disable=out-of-order-load +# buildifier: disable=load-on-top +load( + "@rules_rust//cargo:cargo_build_script.bzl", + "cargo_build_script", +) + +cargo_build_script( + name = "libsodium_sys_build_script", + srcs = ["@nova//bazel/patch:libsodium_sys_build_script_script_.rs"], + build_script_env = { + "NUM_JOBS": "2", + "PATH": "/usr/sbin:/usr/bin:/sbin:/bin", }, - crate_features = [ - ], - crate_root = "src/lib.rs", - crate_type = "lib", - data = [], - compile_data = glob(["*/**"]), + data = glob(["**"]), edition = "2015", + links = "sodium", rustc_flags = [ "--cap-lints=allow", ], @@ -118,10 +123,10 @@ rust_library( "manual", ], version = "0.2.7", - # buildifier: leave-alone + visibility = ["//visibility:private"], deps = [ - ":libsodium_sys_build_script", - "@raze__libc__0_2_101//:libc", + "@raze__pkg_config__0_3_19//:pkg_config", + "@raze__walkdir__2_3_2//:walkdir", ] + selects.with_or({ # cfg(not(target_env = "msvc")) ( @@ -144,6 +149,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-freebsd", "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", ): [ + "@raze__cc__1_0_70//:cc", ], "//conditions:default": [], }) + selects.with_or({ @@ -152,9 +158,8 @@ rust_library( "@rules_rust//rust/platform:i686-pc-windows-msvc", "@rules_rust//rust/platform:x86_64-pc-windows-msvc", ): [ + "@raze__libc__0_2_101//:libc", ], "//conditions:default": [], }), ) - -# Unsupported target "test" with type "test" omitted |
