Fix build scripts targeting the wrong architecture (#1564)
* Fix build scripts targeting the wrong architecture
PR #1081 started passing CFLAGS to build scripts, which cargo does
too. But unfortunately Bazel's cpp toolchain adds an explicit target to
the CFLAGS it provides, and that target uses the host platform instead
of the target platform. When building a crate like blake3 or zstd on a
Mac with iOS as the target, this ends up in the crate being built for
macOS instead of iOS.
* Add an end-to-end test to make sure building zstd for iOS works
diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml
index f343453..c95c63c 100644
--- a/.bazelci/presubmit.yml
+++ b/.bazelci/presubmit.yml
@@ -366,6 +366,14 @@
working_directory: examples/ios
build_targets:
- "//..."
+ ios_build:
+ name: iOS build script cross compile test
+ platform: macos
+ working_directory: examples/ios_build
+ test_flags:
+ - "--platforms=//:ios_x86_64"
+ test_targets:
+ - "//..."
buildifier:
version: latest
diff --git a/cargo/cargo_build_script.bzl b/cargo/cargo_build_script.bzl
index 2539b55..2e3961b 100644
--- a/cargo/cargo_build_script.bzl
+++ b/cargo/cargo_build_script.bzl
@@ -13,6 +13,31 @@
# buildifier: disable=bzl-visibility
load("//rust/private:utils.bzl", "dedent", "expand_dict_value_locations", "find_cc_toolchain", "find_toolchain", "name_to_crate_name")
+def strip_target(elems):
+ """Remove '-target xxx' from C(XX)FLAGS.
+
+ The cpp toolchain adds '-target xxx' and '-isysroot xxx' to CFLAGS. If it is not stripped out before
+ the CFLAGS are provided to build scripts, it can cause the build to take on the host architecture
+ instead of the target architecture.
+
+ Args:
+ elems (list): A list of args
+
+ Returns:
+ list: the modified args
+ """
+ skip_next = False
+ out_elems = []
+ for elem in elems:
+ if skip_next:
+ skip_next = False
+ continue
+ if elem == "-target" or elem == "-isysroot":
+ skip_next = True
+ continue
+ out_elems.append(elem)
+ return out_elems
+
def get_cc_compile_args_and_env(cc_toolchain, feature_configuration):
"""Gather cc environment variables from the given `cc_toolchain`
@@ -30,16 +55,16 @@
feature_configuration = feature_configuration,
cc_toolchain = cc_toolchain,
)
- cc_c_args = cc_common.get_memory_inefficient_command_line(
+ cc_c_args = strip_target(cc_common.get_memory_inefficient_command_line(
feature_configuration = feature_configuration,
action_name = C_COMPILE_ACTION_NAME,
variables = compile_variables,
- )
- cc_cxx_args = cc_common.get_memory_inefficient_command_line(
+ ))
+ cc_cxx_args = strip_target(cc_common.get_memory_inefficient_command_line(
feature_configuration = feature_configuration,
action_name = CPP_COMPILE_ACTION_NAME,
variables = compile_variables,
- )
+ ))
cc_env = cc_common.get_environment_variables(
feature_configuration = feature_configuration,
action_name = C_COMPILE_ACTION_NAME,
diff --git a/examples/.bazelignore b/examples/.bazelignore
index 6109369..1afac09 100644
--- a/examples/.bazelignore
+++ b/examples/.bazelignore
@@ -2,3 +2,4 @@
cargo_manifest_dir/external_crate
crate_universe
ios
+ios_build
diff --git a/examples/ios_build/.gitignore b/examples/ios_build/.gitignore
new file mode 100644
index 0000000..ac51a05
--- /dev/null
+++ b/examples/ios_build/.gitignore
@@ -0,0 +1 @@
+bazel-*
diff --git a/examples/ios_build/BUILD.bazel b/examples/ios_build/BUILD.bazel
new file mode 100644
index 0000000..04c2a3d
--- /dev/null
+++ b/examples/ios_build/BUILD.bazel
@@ -0,0 +1,65 @@
+load("@rules_rust//rust:defs.bzl", "rust_static_library")
+
+rust_static_library(
+ name = "ios_build_lib",
+ srcs = glob(["**/*.rs"]),
+ edition = "2018",
+ deps = [
+ "@ios_build//:zstd",
+ ],
+)
+
+filegroup(
+ name = "lib",
+ srcs = ["ios_build_lib"],
+)
+
+sh_test(
+ name = "check_arch",
+ srcs = ["check_arch.sh"],
+ args = ["$(location :lib)"],
+ data = [":lib"],
+)
+
+platform(
+ name = "macos_x86_64",
+ constraint_values = [
+ "@platforms//cpu:x86_64",
+ "@platforms//os:macos",
+ ],
+)
+
+platform(
+ name = "macos_arm64",
+ constraint_values = [
+ "@platforms//cpu:arm64",
+ "@platforms//os:macos",
+ ],
+)
+
+platform(
+ name = "ios_x86_64",
+ constraint_values = [
+ "@platforms//cpu:x86_64",
+ "@platforms//os:ios",
+ "@build_bazel_apple_support//constraints:simulator",
+ ],
+)
+
+platform(
+ name = "ios_sim_arm64",
+ constraint_values = [
+ "@platforms//cpu:arm64",
+ "@platforms//os:ios",
+ "@build_bazel_apple_support//constraints:simulator",
+ ],
+)
+
+platform(
+ name = "ios_arm64",
+ constraint_values = [
+ "@platforms//cpu:arm64",
+ "@platforms//os:ios",
+ "@build_bazel_apple_support//constraints:device",
+ ],
+)
diff --git a/examples/ios_build/Cargo.Bazel.lock b/examples/ios_build/Cargo.Bazel.lock
new file mode 100644
index 0000000..919712a
--- /dev/null
+++ b/examples/ios_build/Cargo.Bazel.lock
@@ -0,0 +1,63 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "cc"
+version = "1.0.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "ios_build"
+version = "0.1.0"
+dependencies = [
+ "zstd",
+]
+
+[[package]]
+name = "jobserver"
+version = "0.1.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.134"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "329c933548736bc49fd575ee68c89e8be4d260064184389a5b77517cddd99ffb"
+
+[[package]]
+name = "zstd"
+version = "0.11.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4"
+dependencies = [
+ "zstd-safe",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "5.0.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.1+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fd07cbbc53846d9145dbffdf6dd09a7a0aa52be46741825f5c97bdd4f73f12b"
+dependencies = [
+ "cc",
+ "libc",
+]
diff --git a/examples/ios_build/Cargo.lock b/examples/ios_build/Cargo.lock
new file mode 100644
index 0000000..919712a
--- /dev/null
+++ b/examples/ios_build/Cargo.lock
@@ -0,0 +1,63 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "cc"
+version = "1.0.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "ios_build"
+version = "0.1.0"
+dependencies = [
+ "zstd",
+]
+
+[[package]]
+name = "jobserver"
+version = "0.1.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.134"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "329c933548736bc49fd575ee68c89e8be4d260064184389a5b77517cddd99ffb"
+
+[[package]]
+name = "zstd"
+version = "0.11.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4"
+dependencies = [
+ "zstd-safe",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "5.0.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.1+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fd07cbbc53846d9145dbffdf6dd09a7a0aa52be46741825f5c97bdd4f73f12b"
+dependencies = [
+ "cc",
+ "libc",
+]
diff --git a/examples/ios_build/Cargo.toml b/examples/ios_build/Cargo.toml
new file mode 100644
index 0000000..de64c22
--- /dev/null
+++ b/examples/ios_build/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "ios_build"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+zstd = "0.11.2"
diff --git a/examples/ios_build/WORKSPACE.bazel b/examples/ios_build/WORKSPACE.bazel
new file mode 100644
index 0000000..6805734
--- /dev/null
+++ b/examples/ios_build/WORKSPACE.bazel
@@ -0,0 +1,64 @@
+workspace(name = "examples")
+
+local_repository(
+ name = "rules_rust",
+ path = "../../",
+)
+
+load("@rules_rust//rust:repositories.bzl", "rules_rust_dependencies", "rust_register_toolchains")
+
+rules_rust_dependencies()
+
+rust_register_toolchains(
+ edition = "2018",
+ extra_target_triples = [
+ "aarch64-apple-ios-sim",
+ "x86_64-apple-ios",
+ ],
+)
+
+load("@rules_rust//crate_universe:repositories.bzl", "crate_universe_dependencies")
+
+crate_universe_dependencies(bootstrap = True)
+
+load("@rules_rust//crate_universe:defs.bzl", "crates_repository", "splicing_config")
+
+crates_repository(
+ name = "ios_build",
+ cargo_lockfile = "//:Cargo.Bazel.lock",
+ # `generator` is not necessary in official releases.
+ # See load satement for `cargo_bazel_bootstrap`.
+ generator = "@cargo_bazel_bootstrap//:cargo-bazel",
+ lockfile = "//:cargo-bazel-lock.json",
+ manifests = ["//:Cargo.toml"],
+ splicing_config = splicing_config(
+ resolver_version = "2",
+ ),
+)
+
+load(
+ "@ios_build//:defs.bzl",
+ ios_build_crate_repositories = "crate_repositories",
+)
+
+ios_build_crate_repositories()
+
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+
+# Used for Bazel CI
+http_archive(
+ name = "bazelci_rules",
+ sha256 = "eca21884e6f66a88c358e580fd67a6b148d30ab57b1680f62a96c00f9bc6a07e",
+ strip_prefix = "bazelci_rules-1.0.0",
+ url = "https://github.com/bazelbuild/continuous-integration/releases/download/rules-1.0.0/bazelci_rules-1.0.0.tar.gz",
+)
+
+load("@bazelci_rules//:rbe_repo.bzl", "rbe_preconfig")
+
+# Creates a default toolchain config for RBE.
+# Use this as is if you are using the rbe_ubuntu16_04 container,
+# otherwise refer to RBE docs.
+rbe_preconfig(
+ name = "buildkite_config",
+ toolchain = "ubuntu1804-bazel-java11",
+)
diff --git a/examples/ios_build/cargo-bazel-lock.json b/examples/ios_build/cargo-bazel-lock.json
new file mode 100644
index 0000000..4557435
--- /dev/null
+++ b/examples/ios_build/cargo-bazel-lock.json
@@ -0,0 +1,435 @@
+{
+ "checksum": "0a1dbbdbe3330575039ff97ce0854718f5c9f99d075e823de9c318e563c342c1",
+ "crates": {
+ "cc 1.0.73": {
+ "name": "cc",
+ "version": "1.0.73",
+ "repository": {
+ "Http": {
+ "url": "https://crates.io/api/v1/crates/cc/1.0.73/download",
+ "sha256": "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "cc",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "include": [
+ "**/*.rs"
+ ],
+ "exclude": []
+ }
+ }
+ },
+ {
+ "Binary": {
+ "crate_name": "gcc-shim",
+ "crate_root": "src/bin/gcc-shim.rs",
+ "srcs": {
+ "include": [
+ "**/*.rs"
+ ],
+ "exclude": []
+ }
+ }
+ }
+ ],
+ "library_target_name": "cc",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": [
+ "jobserver",
+ "parallel"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "jobserver 0.1.25",
+ "target": "jobserver"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "1.0.73"
+ },
+ "license": "MIT/Apache-2.0"
+ },
+ "ios_build 0.1.0": {
+ "name": "ios_build",
+ "version": "0.1.0",
+ "repository": null,
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "ios_build",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "include": [
+ "**/*.rs"
+ ],
+ "exclude": []
+ }
+ }
+ }
+ ],
+ "library_target_name": "ios_build",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "zstd 0.11.2+zstd.1.5.2",
+ "target": "zstd"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.1.0"
+ },
+ "license": null
+ },
+ "jobserver 0.1.25": {
+ "name": "jobserver",
+ "version": "0.1.25",
+ "repository": {
+ "Http": {
+ "url": "https://crates.io/api/v1/crates/jobserver/0.1.25/download",
+ "sha256": "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "jobserver",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "include": [
+ "**/*.rs"
+ ],
+ "exclude": []
+ }
+ }
+ }
+ ],
+ "library_target_name": "jobserver",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [],
+ "selects": {
+ "cfg(unix)": [
+ {
+ "id": "libc 0.2.134",
+ "target": "libc"
+ }
+ ]
+ }
+ },
+ "edition": "2018",
+ "version": "0.1.25"
+ },
+ "license": "MIT/Apache-2.0"
+ },
+ "libc 0.2.134": {
+ "name": "libc",
+ "version": "0.2.134",
+ "repository": {
+ "Http": {
+ "url": "https://crates.io/api/v1/crates/libc/0.2.134/download",
+ "sha256": "329c933548736bc49fd575ee68c89e8be4d260064184389a5b77517cddd99ffb"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "libc",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "include": [
+ "**/*.rs"
+ ],
+ "exclude": []
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "include": [
+ "**/*.rs"
+ ],
+ "exclude": []
+ }
+ }
+ }
+ ],
+ "library_target_name": "libc",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": [
+ "default",
+ "std"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "libc 0.2.134",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "0.2.134"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0"
+ },
+ "zstd 0.11.2+zstd.1.5.2": {
+ "name": "zstd",
+ "version": "0.11.2+zstd.1.5.2",
+ "repository": {
+ "Http": {
+ "url": "https://crates.io/api/v1/crates/zstd/0.11.2+zstd.1.5.2/download",
+ "sha256": "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "zstd",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "include": [
+ "**/*.rs"
+ ],
+ "exclude": []
+ }
+ }
+ }
+ ],
+ "library_target_name": "zstd",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": [
+ "arrays",
+ "default",
+ "legacy",
+ "zdict_builder"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "zstd-safe 5.0.2+zstd.1.5.2",
+ "target": "zstd_safe"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.11.2+zstd.1.5.2"
+ },
+ "license": "MIT"
+ },
+ "zstd-safe 5.0.2+zstd.1.5.2": {
+ "name": "zstd-safe",
+ "version": "5.0.2+zstd.1.5.2",
+ "repository": {
+ "Http": {
+ "url": "https://crates.io/api/v1/crates/zstd-safe/5.0.2+zstd.1.5.2/download",
+ "sha256": "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "zstd_safe",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "include": [
+ "**/*.rs"
+ ],
+ "exclude": []
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "include": [
+ "**/*.rs"
+ ],
+ "exclude": []
+ }
+ }
+ }
+ ],
+ "library_target_name": "zstd_safe",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": [
+ "arrays",
+ "legacy",
+ "std",
+ "zdict_builder"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "libc 0.2.134",
+ "target": "libc"
+ },
+ {
+ "id": "zstd-safe 5.0.2+zstd.1.5.2",
+ "target": "build_script_build"
+ },
+ {
+ "id": "zstd-sys 2.0.1+zstd.1.5.2",
+ "target": "zstd_sys"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "5.0.2+zstd.1.5.2"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT/Apache-2.0"
+ },
+ "zstd-sys 2.0.1+zstd.1.5.2": {
+ "name": "zstd-sys",
+ "version": "2.0.1+zstd.1.5.2",
+ "repository": {
+ "Http": {
+ "url": "https://crates.io/api/v1/crates/zstd-sys/2.0.1+zstd.1.5.2/download",
+ "sha256": "9fd07cbbc53846d9145dbffdf6dd09a7a0aa52be46741825f5c97bdd4f73f12b"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "zstd_sys",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "include": [
+ "**/*.rs"
+ ],
+ "exclude": []
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "include": [
+ "**/*.rs"
+ ],
+ "exclude": []
+ }
+ }
+ }
+ ],
+ "library_target_name": "zstd_sys",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": [
+ "legacy",
+ "std",
+ "zdict_builder"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "libc 0.2.134",
+ "target": "libc"
+ },
+ {
+ "id": "zstd-sys 2.0.1+zstd.1.5.2",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "2.0.1+zstd.1.5.2"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "cc 1.0.73",
+ "target": "cc"
+ }
+ ],
+ "selects": {}
+ },
+ "links": "zstd"
+ },
+ "license": "MIT/Apache-2.0"
+ }
+ },
+ "binary_crates": [
+ "cc 1.0.73"
+ ],
+ "workspace_members": {
+ "ios_build 0.1.0": ""
+ },
+ "conditions": {
+ "cfg(unix)": [
+ "aarch64-apple-darwin",
+ "aarch64-apple-ios",
+ "aarch64-apple-ios-sim",
+ "aarch64-linux-android",
+ "aarch64-unknown-linux-gnu",
+ "arm-unknown-linux-gnueabi",
+ "armv7-linux-androideabi",
+ "armv7-unknown-linux-gnueabi",
+ "i686-apple-darwin",
+ "i686-linux-android",
+ "i686-unknown-freebsd",
+ "i686-unknown-linux-gnu",
+ "powerpc-unknown-linux-gnu",
+ "s390x-unknown-linux-gnu",
+ "x86_64-apple-darwin",
+ "x86_64-apple-ios",
+ "x86_64-linux-android",
+ "x86_64-unknown-freebsd",
+ "x86_64-unknown-linux-gnu"
+ ]
+ }
+}
diff --git a/examples/ios_build/check_arch.sh b/examples/ios_build/check_arch.sh
new file mode 100755
index 0000000..8ae6d86
--- /dev/null
+++ b/examples/ios_build/check_arch.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+#
+# When compiling with --platforms=//:ios_sim_arm64 or --platforms=//:ios_x86_64,
+# the library should not contain any references to macOS (platform 1)
+
+set -e
+
+if [[ "$OSTYPE" != "darwin"* ]]; then
+ echo "This test only makes sense on macOS."
+ exit 0
+fi
+
+if otool -l $1 | grep 'platform 1'; then
+ echo "macOS detected."
+ exit 1
+fi
\ No newline at end of file
diff --git a/examples/ios_build/src/lib.rs b/examples/ios_build/src/lib.rs
new file mode 100644
index 0000000..5f0cad6
--- /dev/null
+++ b/examples/ios_build/src/lib.rs
@@ -0,0 +1,2 @@
+#[allow(unused_imports, clippy::single_component_path_imports)]
+use zstd;