diff --git a/cc/toolchains/args/BUILD b/cc/toolchains/args/BUILD index 94012d0..2741f2f 100644 --- a/cc/toolchains/args/BUILD +++ b/cc/toolchains/args/BUILD @@ -15,6 +15,7 @@ cc_feature( name = "experimental_replace_legacy_action_config_features", args = [ "//cc/toolchains/args/archiver_flags", + "//cc/toolchains/args/force_pic_flags", "//cc/toolchains/args/linker_param_file", ], feature_name = "experimental_replace_legacy_action_config_features", @@ -34,7 +35,6 @@ cc_feature( "//cc/toolchains/features/legacy:unfiltered_compile_flags", "//cc/toolchains/features/legacy:user_compile_flags", "//cc/toolchains/features/legacy:user_link_flags", - "//cc/toolchains/features/legacy:force_pic_flags", "//cc/toolchains/features/legacy:libraries_to_link", "//cc/toolchains/features/legacy:runtime_library_search_directories", "//cc/toolchains/features/legacy:shared_flag", diff --git a/cc/toolchains/args/force_pic_flags/BUILD b/cc/toolchains/args/force_pic_flags/BUILD new file mode 100644 index 0000000..63bc341 --- /dev/null +++ b/cc/toolchains/args/force_pic_flags/BUILD @@ -0,0 +1,17 @@ +load("//cc/toolchains:args.bzl", "cc_args") + +package(default_visibility = ["//visibility:private"]) + +cc_args( + name = "force_pic_flags", + actions = [ + "//cc/toolchains/actions:cpp_link_executable", + "//cc/toolchains/actions:lto_index_for_executable", + ], + args = select({ + "@platforms//os:macos": ["-Wl,-pie"], + "//conditions:default": ["-pie"], + }), + requires_not_none = "//cc/toolchains/variables:force_pic", + visibility = ["//visibility:public"], +) diff --git a/cc/toolchains/features/legacy/BUILD b/cc/toolchains/features/legacy/BUILD index 7dbe406..ffea87c 100644 --- a/cc/toolchains/features/legacy/BUILD +++ b/cc/toolchains/features/legacy/BUILD @@ -140,6 +140,7 @@ cc_external_feature( cc_external_feature( name = "force_pic_flags", + deprecation = "Use //cc/toolchains/args/force_pic_flags instead", feature_name = "force_pic_flags", overridable = True, ) diff --git a/tests/rule_based_toolchain/legacy_features_as_args/BUILD b/tests/rule_based_toolchain/legacy_features_as_args/BUILD index 12470ec..002962d 100644 --- a/tests/rule_based_toolchain/legacy_features_as_args/BUILD +++ b/tests/rule_based_toolchain/legacy_features_as_args/BUILD @@ -18,6 +18,15 @@ compare_feature_implementation( }), ) +compare_feature_implementation( + name = "force_pic_flags_test", + actual_implementation = "//cc/toolchains/args/force_pic_flags", + expected = select({ + "@platforms//os:macos": "//tests/rule_based_toolchain/legacy_features_as_args:goldens/macos/force_pic_flags.textproto", + "//conditions:default": "//tests/rule_based_toolchain/legacy_features_as_args:goldens/unix/force_pic_flags.textproto", + }), +) + compare_feature_implementation( name = "linker_param_file_test", actual_implementation = "//cc/toolchains/args/linker_param_file", diff --git a/tests/rule_based_toolchain/legacy_features_as_args/goldens/macos/force_pic_flags.textproto b/tests/rule_based_toolchain/legacy_features_as_args/goldens/macos/force_pic_flags.textproto new file mode 100644 index 0000000..c18413b --- /dev/null +++ b/tests/rule_based_toolchain/legacy_features_as_args/goldens/macos/force_pic_flags.textproto @@ -0,0 +1,10 @@ +enabled: false +flag_sets { + actions: "c++-link-executable" + actions: "lto-index-for-executable" + flag_groups { + expand_if_available: "force_pic" + flags: "-Wl,-pie" + } +} +name: "force_pic_flags_test" diff --git a/tests/rule_based_toolchain/legacy_features_as_args/goldens/unix/force_pic_flags.textproto b/tests/rule_based_toolchain/legacy_features_as_args/goldens/unix/force_pic_flags.textproto new file mode 100644 index 0000000..d8e2ebf --- /dev/null +++ b/tests/rule_based_toolchain/legacy_features_as_args/goldens/unix/force_pic_flags.textproto @@ -0,0 +1,10 @@ +enabled: false +flag_sets { + actions: "c++-link-executable" + actions: "lto-index-for-executable" + flag_groups { + expand_if_available: "force_pic" + flags: "-pie" + } +} +name: "force_pic_flags_test"