Skip to content

Instantly share code, notes, and snippets.

@indragiek
Last active April 21, 2023 03:28
Show Gist options
  • Save indragiek/e14162c0098d97ee976bceae9441f04d to your computer and use it in GitHub Desktop.
Save indragiek/e14162c0098d97ee976bceae9441f04d to your computer and use it in GitHub Desktop.
Bazel 3.7.1 patch to build an arm64 slice targeting the iOS Simulator. Use it by running `bazel build ... --cpu=ios_sim_arm64 --apple_platform_type=ios`
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java b/src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java
index 7759984b03..6f41eca83b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java
@@ -42,7 +42,7 @@ public enum ApplePlatform implements ApplePlatformApi {
CATALYST("catalyst", "MacOSX", PlatformType.CATALYST, true);
private static final ImmutableSet<String> IOS_SIMULATOR_TARGET_CPUS =
- ImmutableSet.of("ios_x86_64", "ios_i386");
+ ImmutableSet.of("ios_x86_64", "ios_i386", "ios_sim_arm64");
private static final ImmutableSet<String> IOS_DEVICE_TARGET_CPUS =
ImmutableSet.of("ios_armv6", "ios_arm64", "ios_armv7", "ios_armv7s", "ios_arm64e");
private static final ImmutableSet<String> WATCHOS_SIMULATOR_TARGET_CPUS =
diff --git a/tools/osx/crosstool/cc_toolchain_config.bzl b/tools/osx/crosstool/cc_toolchain_config.bzl
index 6ca6b8ef0c..d490b2ce1a 100644
--- a/tools/osx/crosstool/cc_toolchain_config.bzl
+++ b/tools/osx/crosstool/cc_toolchain_config.bzl
@@ -63,6 +63,8 @@ def _impl(ctx):
toolchain_identifier = "darwin_arm64e"
elif (ctx.attr.cpu == "ios_arm64"):
toolchain_identifier = "ios_arm64"
+ elif (ctx.attr.cpu == "ios_sim_arm64"):
+ toolchain_identifier = "ios_sim_arm64"
elif (ctx.attr.cpu == "ios_arm64e"):
toolchain_identifier = "ios_arm64e"
elif (ctx.attr.cpu == "ios_armv7"):
@@ -94,6 +96,7 @@ def _impl(ctx):
ctx.attr.cpu == "darwin_arm64" or
ctx.attr.cpu == "darwin_arm64e" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -110,6 +113,8 @@ def _impl(ctx):
if (ctx.attr.cpu == "ios_arm64"):
target_system_name = "arm64-apple-ios"
+ elif (ctx.attr.cpu == "ios_sim_arm64"):
+ target_system_name = "arm64-apple-ios-simulator"
elif (ctx.attr.cpu == "tvos_arm64"):
target_system_name = "arm64-apple-tvos"
elif (ctx.attr.cpu == "watchos_arm64_32"):
@@ -151,6 +156,8 @@ def _impl(ctx):
target_cpu = "darwin_arm64e"
elif (ctx.attr.cpu == "ios_arm64"):
target_cpu = "ios_arm64"
+ elif (ctx.attr.cpu == "ios_sim_arm64"):
+ target_cpu = "ios_sim_arm64"
elif (ctx.attr.cpu == "ios_arm64e"):
target_cpu = "ios_arm64e"
elif (ctx.attr.cpu == "ios_armv7"):
@@ -177,6 +184,7 @@ def _impl(ctx):
if (ctx.attr.cpu == "armeabi-v7a"):
target_libc = "armeabi-v7a"
elif (ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -206,6 +214,7 @@ def _impl(ctx):
elif (ctx.attr.cpu == "darwin_arm64" or
ctx.attr.cpu == "darwin_arm64e" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -227,6 +236,7 @@ def _impl(ctx):
elif (ctx.attr.cpu == "darwin_arm64" or
ctx.attr.cpu == "darwin_arm64e" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -343,6 +353,7 @@ def _impl(ctx):
ctx.attr.cpu == "darwin_arm64" or
ctx.attr.cpu == "darwin_arm64e" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -474,6 +485,39 @@ def _impl(ctx):
),
],
)
+ elif (ctx.attr.cpu == "ios_sim_arm64"):
+ objc_compile_action = action_config(
+ action_name = ACTION_NAMES.objc_compile,
+ flag_sets = [
+ flag_set(
+ flag_groups = [flag_group(flags = ["-arch", "arm64"])],
+ ),
+ ],
+ implies = [
+ "compiler_input_flags",
+ "compiler_output_flags",
+ "objc_actions",
+ "apply_default_compiler_flags",
+ "apply_default_warnings",
+ "framework_paths",
+ "preprocessor_defines",
+ "include_system_dirs",
+ "version_min",
+ "objc_arc",
+ "no_objc_arc",
+ "apple_env",
+ "user_compile_flags",
+ "sysroot",
+ "unfiltered_compile_flags",
+ "apply_simulator_compiler_flags",
+ ],
+ tools = [
+ tool(
+ path = "wrapped_clang",
+ execution_requirements = xcode_execution_requirements,
+ ),
+ ],
+ )
elif (ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "darwin_arm64e"):
objc_compile_action = action_config(
@@ -800,6 +844,7 @@ def _impl(ctx):
],
)
elif (ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "tvos_arm64" or
ctx.attr.cpu == "darwin_arm64"):
objcpp_executable_action = action_config(
@@ -1213,6 +1258,7 @@ def _impl(ctx):
ctx.attr.cpu == "darwin_arm64" or
ctx.attr.cpu == "darwin_arm64e" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -1295,6 +1341,7 @@ def _impl(ctx):
ctx.attr.cpu == "darwin_arm64" or
ctx.attr.cpu == "darwin_arm64e" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -1358,6 +1405,7 @@ def _impl(ctx):
ctx.attr.cpu == "darwin_arm64" or
ctx.attr.cpu == "darwin_arm64e" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -1472,6 +1520,7 @@ def _impl(ctx):
],
)
elif (ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "tvos_arm64" or
ctx.attr.cpu == "darwin_arm64"):
objcpp_compile_action = action_config(
@@ -1755,6 +1804,7 @@ def _impl(ctx):
ctx.attr.cpu == "darwin_arm64" or
ctx.attr.cpu == "darwin_arm64e" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -1816,6 +1866,7 @@ def _impl(ctx):
ctx.attr.cpu == "darwin_arm64" or
ctx.attr.cpu == "darwin_arm64e" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -1912,6 +1963,7 @@ def _impl(ctx):
],
)
elif (ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "tvos_arm64" or
ctx.attr.cpu == "darwin_arm64"):
objc_archive_action = action_config(
@@ -2240,6 +2292,7 @@ def _impl(ctx):
],
)
elif (ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "tvos_arm64" or
ctx.attr.cpu == "darwin_arm64"):
objc_executable_action = action_config(
@@ -2676,6 +2729,7 @@ def _impl(ctx):
ctx.attr.cpu == "darwin_arm64" or
ctx.attr.cpu == "darwin_arm64e" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -2763,6 +2817,7 @@ def _impl(ctx):
ctx.attr.cpu == "darwin_arm64" or
ctx.attr.cpu == "darwin_arm64e" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -2828,6 +2883,7 @@ def _impl(ctx):
ctx.attr.cpu == "darwin_arm64" or
ctx.attr.cpu == "darwin_arm64e" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -2946,6 +3002,7 @@ def _impl(ctx):
],
)
elif (ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "tvos_arm64"):
objc_fully_link_action = action_config(
action_name = "objc-fully-link",
@@ -3211,6 +3268,7 @@ def _impl(ctx):
ctx.attr.cpu == "darwin_arm64" or
ctx.attr.cpu == "darwin_arm64e" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -3253,6 +3311,7 @@ def _impl(ctx):
if (ctx.attr.cpu == "armeabi-v7a" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -3409,6 +3468,7 @@ def _impl(ctx):
ctx.attr.cpu == "darwin_arm64" or
ctx.attr.cpu == "darwin_arm64e" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -3504,6 +3564,7 @@ def _impl(ctx):
ctx.attr.cpu == "darwin_arm64" or
ctx.attr.cpu == "darwin_arm64e" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "tvos_arm64" or
@@ -3554,6 +3615,7 @@ def _impl(ctx):
if (ctx.attr.cpu == "armeabi-v7a" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -3681,6 +3743,26 @@ def _impl(ctx):
),
],
)
+ elif (ctx.attr.cpu == "ios_sim_arm64"):
+ default_link_flags_feature = feature(
+ name = "default_link_flags",
+ enabled = True,
+ flag_sets = [
+ flag_set(
+ actions = all_link_actions +
+ ["objc-executable", "objc++-executable"],
+ flag_groups = [
+ flag_group(
+ flags = [
+ "-no-canonical-prefixes",
+ "-target",
+ "arm64-apple-ios-simulator",
+ ],
+ ),
+ ],
+ ),
+ ],
+ )
elif (ctx.attr.cpu == "tvos_arm64"):
default_link_flags_feature = feature(
name = "default_link_flags",
@@ -4051,7 +4133,8 @@ def _impl(ctx):
# This stub doesn't have a sensible value for this feature
version_min_feature = feature(name = "version_min")
elif (ctx.attr.cpu == "ios_i386" or
- ctx.attr.cpu == "ios_x86_64"):
+ ctx.attr.cpu == "ios_x86_64" or
+ ctx.attr.cpu == "ios_sim_arm64"):
version_min_feature = feature(
name = "version_min",
flag_sets = [
@@ -4562,6 +4645,7 @@ def _impl(ctx):
if (ctx.attr.cpu == "armeabi-v7a" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -4789,6 +4873,37 @@ def _impl(ctx):
),
],
)
+ elif (ctx.attr.cpu == "ios_sim_arm64"):
+ unfiltered_compile_flags_feature = feature(
+ name = "unfiltered_compile_flags",
+ flag_sets = [
+ flag_set(
+ actions = [
+ ACTION_NAMES.assemble,
+ ACTION_NAMES.preprocess_assemble,
+ ACTION_NAMES.c_compile,
+ ACTION_NAMES.cpp_compile,
+ ACTION_NAMES.cpp_header_parsing,
+ ACTION_NAMES.cpp_module_compile,
+ ACTION_NAMES.cpp_module_codegen,
+ ACTION_NAMES.linkstamp_compile,
+ ],
+ flag_groups = [
+ flag_group(
+ flags = [
+ "-no-canonical-prefixes",
+ "-Wno-builtin-macro-redefined",
+ "-D__DATE__=\"redacted\"",
+ "-D__TIMESTAMP__=\"redacted\"",
+ "-D__TIME__=\"redacted\"",
+ "-target",
+ "arm64-apple-ios-simulator",
+ ],
+ ),
+ ],
+ ),
+ ],
+ )
elif (ctx.attr.cpu == "tvos_arm64"):
unfiltered_compile_flags_feature = feature(
name = "unfiltered_compile_flags",
@@ -5322,6 +5437,7 @@ def _impl(ctx):
ctx.attr.cpu == "darwin_arm64" or
ctx.attr.cpu == "darwin_arm64e" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -5530,6 +5646,7 @@ def _impl(ctx):
ctx.attr.cpu == "darwin_arm64" or
ctx.attr.cpu == "darwin_arm64e" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
ctx.attr.cpu == "ios_x86_64" or
@@ -5741,6 +5858,7 @@ def _impl(ctx):
elif (ctx.attr.cpu == "armeabi-v7a" or
ctx.attr.cpu == "darwin_arm64" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -5872,6 +5990,7 @@ def _impl(ctx):
)
elif (ctx.attr.cpu == "armeabi-v7a" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -5932,6 +6051,7 @@ def _impl(ctx):
)
if (ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "tvos_arm64" or
@@ -6024,6 +6144,7 @@ def _impl(ctx):
)
if (ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
@@ -6288,6 +6409,7 @@ def _impl(ctx):
ctx.attr.cpu == "darwin_arm64" or
ctx.attr.cpu == "darwin_arm64e" or
ctx.attr.cpu == "ios_arm64" or
+ ctx.attr.cpu == "ios_sim_arm64" or
ctx.attr.cpu == "ios_arm64e" or
ctx.attr.cpu == "ios_armv7" or
ctx.attr.cpu == "ios_i386" or
diff --git a/tools/osx/crosstool/osx_archs.bzl b/tools/osx/crosstool/osx_archs.bzl
index 14fad06a5f..97a0baa19a 100644
--- a/tools/osx/crosstool/osx_archs.bzl
+++ b/tools/osx/crosstool/osx_archs.bzl
@@ -20,6 +20,7 @@ OSX_TOOLS_NON_DEVICE_ARCHS = [
"darwin_arm64e",
"ios_i386",
"ios_x86_64",
+ "ios_sim_arm64",
"watchos_i386",
"watchos_x86_64",
"tvos_x86_64",
@@ -50,6 +51,7 @@ OSX_TOOLS_CONSTRAINTS = {
"armeabi-v7a": ["@platforms//cpu:arm"],
"ios_armv7": ["@platforms//os:ios", "@platforms//cpu:arm"],
"ios_arm64": ["@platforms//os:ios", "@platforms//cpu:aarch64"],
+ "ios_sim_arm64": ["@platforms//os:ios", "@platforms//cpu:aarch64"],
"ios_arm64e": ["@platforms//os:ios", "@platforms//cpu:aarch64"],
"watchos_armv7k": ["@platforms//os:ios", "@platforms//cpu:arm"],
"watchos_arm64_32": ["@platforms//os:ios", "@platforms//cpu:aarch64"],
@AndrewSB
Copy link

AndrewSB commented Jul 16, 2021

looking at bazel:master today, has your ios_sim_arm64 been implemented as ios_arm64e?

@keith
Copy link

keith commented Aug 19, 2021

Something like this is finally starting to land upstream, here's the updated version of a change like this bazelbuild/bazel#13870

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment