aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/test/java/com/google/devtools/build/lib/BUILD1
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java31
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java4
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/util/MOCK_OSX_CROSSTOOL3270
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/util/MockObjcSupport.java94
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java7
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/AppleToolchainSelectionTest.java4
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/BUILD82
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/IosExtensionBinaryTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibraryTest.java1
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java39
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspectTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java197
-rw-r--r--src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java16
19 files changed, 3566 insertions, 194 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD
index 7348bd6a1b..6993b1f45c 100644
--- a/src/test/java/com/google/devtools/build/lib/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/BUILD
@@ -39,6 +39,7 @@ filegroup(
"//src/test/java/com/google/devtools/build/lib/rules/android:srcs",
"//src/test/java/com/google/devtools/build/lib/rules/apple:srcs",
"//src/test/java/com/google/devtools/build/lib/rules/config:srcs",
+ "//src/test/java/com/google/devtools/build/lib/rules/objc:srcs",
"//src/test/java/com/google/devtools/build/lib/analysis/platform:srcs",
"//src/test/java/com/google/devtools/build/lib/analysis/whitelisting:srcs",
"//src/test/java/com/google/devtools/build/lib/rules/platform:srcs",
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
index 96e6d17f7c..bd6ce313a4 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
@@ -64,12 +64,14 @@ public final class BazelAnalysisMock extends AnalysisMock {
"local_repository(name = 'local_config_xcode', path = '/local_config_xcode')",
"bind(",
" name = 'objc_proto_lib',",
- " actual = '//objcproto:ProtocolBuffers_lib',",
+ " actual = '@bazel_tools//objcproto:ProtocolBuffers_lib',",
")",
"bind(",
" name = 'objc_protobuf_lib',",
- " actual = '//objcproto:protobuf_lib',",
+ " actual = '@bazel_tools//objcproto:protobuf_lib',",
")",
+ "local_repository(name = 'com_google_protobuf', path = '/protobuf')",
+ "local_repository(name = 'com_google_protobuf_java', path = '/protobuf')",
"bind(name = 'android/sdk', actual='@bazel_tools//tools/android:sdk')",
"bind(name = 'tools/python', actual='//tools/python')"));
}
@@ -79,7 +81,10 @@ public final class BazelAnalysisMock extends AnalysisMock {
List<String> workspaceContents = getWorkspaceContents(config);
config.create(
"/local_config_xcode/BUILD", "xcode_config(name = 'host_xcodes')");
+ config.create(
+ "/protobuf/BUILD", "licenses(['notice'])", "exports_files(['protoc', 'cc_toolchain'])");
config.create("/local_config_xcode/WORKSPACE");
+ config.create("/protobuf/WORKSPACE");
config.overwrite("WORKSPACE", workspaceContents.toArray(new String[workspaceContents.size()]));
config.create("/bazel_tools_workspace/WORKSPACE", "workspace(name = 'bazel_tools')");
config.create(
@@ -159,6 +164,28 @@ public final class BazelAnalysisMock extends AnalysisMock {
"package(default_visibility=['//visibility:public'])",
"cc_binary(name='launcher', srcs=['launcher_main.cc'])");
+ config.create(
+ "/bazel_tools_workspace/objcproto/BUILD",
+ "package(default_visibility=['//visibility:public'])",
+ "objc_library(",
+ " name = 'ProtocolBuffers_lib',",
+ " srcs = ['empty.m'],",
+ ")",
+ "objc_library(",
+ " name = 'protobuf_lib',",
+ " srcs = ['empty.m'],",
+ " hdrs = ['include/header.h'],",
+ " includes = ['include'],",
+ ")",
+ "exports_files(['well_known_type.proto'])",
+ "proto_library(",
+ " name = 'well_known_type_proto',",
+ " srcs = ['well_known_type.proto'],",
+ ")");
+ config.create("/bazel_tools_workspace/objcproto/empty.m");
+ config.create("/bazel_tools_workspace/objcproto/empty.cc");
+ config.create("/bazel_tools_workspace/objcproto/well_known_type.proto");
+
ccSupport().setup(config);
}
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java
index c7c12582bb..296cd82c3c 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java
@@ -173,9 +173,7 @@ public final class BazelMockCcSupport extends MockCcSupport {
} else {
config.create("tools/cpp/link_dynamic_library.sh", "");
}
- config.create(
- "/bazel_tools_workspace/tools/objc/BUILD",
- "xcode_config(name = 'host_xcodes')");
+ MockObjcSupport.setup(config);
MockPlatformSupport.setup(config, "/bazel_tools_workspace/tools/platforms");
}
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/MOCK_OSX_CROSSTOOL b/src/test/java/com/google/devtools/build/lib/packages/util/MOCK_OSX_CROSSTOOL
index e1b2816e03..86e7e7c344 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/MOCK_OSX_CROSSTOOL
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/MOCK_OSX_CROSSTOOL
@@ -26,6 +26,10 @@ default_toolchain {
toolchain_identifier: "darwin_x86_64"
}
default_toolchain {
+ cpu: "x64_windows"
+ toolchain_identifier: "darwin_x86_64"
+}
+default_toolchain {
cpu: "ios_x86_64"
toolchain_identifier: "ios_x86_64"
}
@@ -3324,6 +3328,3272 @@ toolchain {
cc_target_os: "apple"
}
toolchain {
+ toolchain_identifier: "darwin_x86_64"
+ host_system_name: "x86_64-apple-macosx"
+ target_system_name: "x86_64-apple-macosx"
+ target_cpu: "x64_windows"
+ target_libc: "macosx"
+ compiler: "compiler"
+ abi_version: "darwin_x86_64"
+ abi_libc_version: "darwin_x86_64"
+ tool_path {
+ name: "ar"
+ path: "mac/ar_wrapper"
+ }
+ tool_path {
+ name: "compat-ld"
+ path: "mac/ld"
+ }
+ tool_path {
+ name: "cpp"
+ path: "mac/cpp"
+ }
+ tool_path {
+ name: "gcov"
+ path: "mac/gcov"
+ }
+ tool_path {
+ name: "gcc"
+ path: "mac/clang"
+ }
+ tool_path {
+ name: "ld"
+ path: "mac/ld"
+ }
+ tool_path {
+ name: "nm"
+ path: "mac/nm"
+ }
+ tool_path {
+ name: "strip"
+ path: "mac/strip"
+ }
+ tool_path {
+ name: "dwp"
+ path: "/usr/bin/dwp"
+ }
+ tool_path {
+ name: "objdump"
+ path: "/usr/bin/objdump"
+ }
+ needsPic: false
+ compiler_flag: "-DCOMPILER_GCC3"
+ compiler_flag: "-DCOMPILER_GCC4"
+ compiler_flag: "-Dunix"
+ compiler_flag: "-DOS_MACOSX"
+ compiler_flag: "-DU_HAVE_NL_LANGINFO_CODESET=0"
+ compiler_flag: "-DU_HAVE_STD_STRING"
+ compiler_flag: "-D__STDC_FORMAT_MACROS"
+ cxx_flag: "-std=gnu++11"
+ cxx_flag: "-stdlib=libc++"
+ linker_flag: "-lc++"
+ compilation_mode_flags {
+ mode: FASTBUILD
+ compiler_flag: "-O0"
+ compiler_flag: "-DDEBUG"
+ }
+ compilation_mode_flags {
+ mode: OPT
+ compiler_flag: "-Os"
+ compiler_flag: "-DNDEBUG"
+ }
+ compilation_mode_flags {
+ mode: DBG
+ compiler_flag: "-g"
+ compiler_flag: "-DDEBUG"
+ }
+ linking_mode_flags {
+ mode: DYNAMIC
+ }
+ make_variable {
+ name: "STACK_FRAME_UNLIMITED"
+ value: "-Wframe-larger-than=100000000 -Wno-vla"
+ }
+ cxx_builtin_include_directory: "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"
+ cxx_builtin_include_directory: "/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"
+ cxx_builtin_include_directory: "/Applications/Xcode_7.2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"
+ cxx_builtin_include_directory: "/Applications/Xcode_7.3.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"
+ cxx_builtin_include_directory: "/Applications/Xcode_8.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"
+ cxx_builtin_include_directory: "/Applications/Xcode_8.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"
+ cxx_builtin_include_directory: "/Applications/Xcode_8.2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"
+ cxx_builtin_include_directory: "/Applications/Xcode_8.2.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"
+ cxx_builtin_include_directory: "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs"
+ cxx_builtin_include_directory: "/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs"
+ cxx_builtin_include_directory: "/Applications/Xcode_7.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs"
+ cxx_builtin_include_directory: "/Applications/Xcode_7.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs"
+ cxx_builtin_include_directory: "/Applications/Xcode_8.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs"
+ cxx_builtin_include_directory: "/Applications/Xcode_8.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs"
+ cxx_builtin_include_directory: "/Applications/Xcode_8.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs"
+ cxx_builtin_include_directory: "/Applications/Xcode_8.2.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs"
+ cxx_builtin_include_directory: "/usr/include"
+ builtin_sysroot: ""
+ unfiltered_cxx_flag: "-no-canonical-prefixes"
+ unfiltered_cxx_flag: "-pthread"
+ supports_normalizing_ar: false
+ default_python_version: "python2.7"
+ feature {
+ name: "no_legacy_features"
+ }
+ feature {
+ name: "fastbuild"
+ implies: "fastbuild_only_flag"
+ }
+ feature {
+ name: "opt"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-g0"
+ }
+ with_feature {
+ feature: "no_generate_debug_symbols"
+ }
+ }
+ implies: "opt_only_flag"
+ }
+ feature {
+ name: "dbg"
+ implies: "dbg_only_flag"
+ }
+ feature {
+ name: "compile_all_modules"
+ }
+ feature {
+ name: "exclude_private_headers_in_module_maps"
+ }
+ feature {
+ name: "has_configured_linker_path"
+ }
+ feature {
+ name: "only_doth_headers_in_module_maps"
+ }
+ feature {
+ name: "is_not_test_target"
+ }
+ feature {
+ name: "generate_dsym_file"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "objc-compile"
+ action: "objc++-compile"
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "-g"
+ }
+ }
+ flag_set {
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "DSYM_HINT_LINKED_BINARY=%{linked_binary}"
+ flag: "DSYM_HINT_DSYM_PATH=%{dsym_path}"
+ flag: "DSYM_HINT_DSYM_BUNDLE_ZIP=%{dsym_bundle_zip}"
+ }
+ }
+ }
+ feature {
+ name: "no_generate_debug_symbols"
+ }
+ feature {
+ name: "generate_linkmap"
+ flag_set {
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "-Xlinker -map"
+ flag: "-Xlinker %{linkmap_exec_path}"
+ }
+ }
+ }
+ feature {
+ name: "objc_actions"
+ implies: "objc-compile"
+ implies: "objc++-compile"
+ implies: "objc-fully-link"
+ implies: "objc-archive"
+ implies: "objc-executable"
+ implies: "objc++-executable"
+ implies: "assemble"
+ implies: "preprocess-assemble"
+ implies: "c-compile"
+ implies: "c++-compile"
+ implies: "c++-link-static-library"
+ implies: "c++-link-pic-static-library"
+ implies: "c++-link-interface-dynamic-library"
+ implies: "c++-link-dynamic-library"
+ implies: "c++-link-alwayslink-static-library"
+ implies: "c++-link-alwayslink-pic-static-library"
+ implies: "c++-link-executable"
+ }
+ feature {
+ name: "strip_debug_symbols"
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-interface-dynamic-library"
+ flag_group {
+ flag: "-Wl,-S"
+ expand_if_all_available: "strip_debug_symbols"
+ }
+ }
+ }
+ feature {
+ name: "symbol_counts"
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ flag_group {
+ flag: "-Wl,--print-symbol-counts=%{symbol_counts_output}"
+ }
+ expand_if_all_available: "symbol_counts_output"
+ }
+ }
+ feature {
+ name: "shared_flag"
+ flag_set {
+ action: "c++-link-dynamic-library"
+ flag_group {
+ flag: "-shared"
+ }
+ }
+ }
+ feature {
+ name: "linkstamps"
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ flag_group {
+ flag: "%{linkstamp_paths}"
+ iterate_over: "linkstamp_paths"
+ }
+ expand_if_all_available: "linkstamp_paths"
+ }
+ }
+ feature {
+ name: "output_execpath_flags"
+ flag_set {
+ action: "c++-link-dynamic-library"
+ flag_group {
+ flag: "-o"
+ flag: "%{output_execpath}"
+ }
+ expand_if_all_available: "output_execpath"
+ }
+ }
+ feature {
+ name: "output_execpath_flags_executable"
+ flag_set {
+ action: "c++-link-executable"
+ flag_group {
+ flag: "-o"
+ }
+ expand_if_all_available: "output_execpath"
+ }
+ flag_set {
+ action: "c++-link-executable"
+ flag_group {
+ flag: "/dev/null"
+ flag: "-MMD"
+ flag: "-MF"
+ }
+ expand_if_all_available: "skip_mostly_static"
+ expand_if_all_available: "output_execpath"
+ }
+ flag_set {
+ action: "c++-link-executable"
+ flag_group {
+ flag: "%{output_execpath}"
+ }
+ expand_if_all_available: "output_execpath"
+ }
+ }
+ feature {
+ name: "global_whole_archive_open"
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag: "-Wl,-all_load"
+ }
+ expand_if_all_available: "global_whole_archive"
+ }
+ }
+ feature {
+ name: "runtime_root_flags"
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag: "-Wl,-rpath,$ORIGIN/%{runtime_library_search_directories}"
+ iterate_over: "runtime_library_search_directories"
+ }
+ expand_if_all_available: "runtime_library_search_directories"
+ }
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag: "%{runtime_root_flags}"
+ iterate_over: "runtime_root_flags"
+ }
+ expand_if_all_available: "runtime_root_flags"
+ }
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag: "%{runtime_root_entries}"
+ iterate_over: "runtime_root_entries"
+ }
+ expand_if_all_available: "runtime_root_entries"
+ }
+ }
+ feature {
+ name: "archiver_flags"
+ flag_set {
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag: "rcs"
+ flag: "%{output_execpath}"
+ }
+ expand_if_all_available: "output_execpath"
+ }
+ }
+ feature {
+ name: "input_param_flags"
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag: "-L%{library_search_directories}"
+ iterate_over: "library_search_directories"
+ }
+ expand_if_all_available: "library_search_directories"
+ }
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag: "%{libopts}"
+ iterate_over: "libopts"
+ }
+ expand_if_all_available: "libopts"
+ }
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag: "-Wl,-force_load,%{whole_archive_linker_params}"
+ iterate_over: "whole_archive_linker_params"
+ }
+ expand_if_all_available: "whole_archive_linker_params"
+ }
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag: "%{linker_input_params}"
+ iterate_over: "linker_input_params"
+ }
+ expand_if_all_available: "linker_input_params"
+ }
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag_group {
+ flag: "-Wl,--start-lib"
+ expand_if_equal {
+ variable: "libraries_to_link.type"
+ value: "object_file_group"
+ }
+ }
+ flag_group {
+ flag_group {
+ flag: "%{libraries_to_link.object_files}"
+ expand_if_false: "libraries_to_link.is_whole_archive"
+ }
+ flag_group {
+ flag: "-Wl,-force_load,%{libraries_to_link.object_files}"
+ expand_if_true: "libraries_to_link.is_whole_archive"
+ }
+ iterate_over: "libraries_to_link.object_files"
+ expand_if_equal {
+ variable: "libraries_to_link.type"
+ value: "object_file_group"
+ }
+ }
+ flag_group {
+ flag: "-Wl,--end-lib"
+ expand_if_equal {
+ variable: "libraries_to_link.type"
+ value: "object_file_group"
+ }
+ }
+ flag_group {
+ flag_group {
+ flag: "%{libraries_to_link.name}"
+ expand_if_false: "libraries_to_link.is_whole_archive"
+ }
+ flag_group {
+ flag: "-Wl,-force_load,%{libraries_to_link.name}"
+ expand_if_true: "libraries_to_link.is_whole_archive"
+ }
+ expand_if_equal {
+ variable: "libraries_to_link.type"
+ value: "object_file"
+ }
+ }
+ flag_group {
+ flag_group {
+ flag: "%{libraries_to_link.name}"
+ expand_if_false: "libraries_to_link.is_whole_archive"
+ }
+ flag_group {
+ flag: "-Wl,-force_load,%{libraries_to_link.name}"
+ expand_if_true: "libraries_to_link.is_whole_archive"
+ }
+ expand_if_equal {
+ variable: "libraries_to_link.type"
+ value: "interface_library"
+ }
+ }
+ flag_group {
+ flag_group {
+ flag: "%{libraries_to_link.name}"
+ expand_if_false: "libraries_to_link.is_whole_archive"
+ }
+ flag_group {
+ flag: "-Wl,-force_load,%{libraries_to_link.name}"
+ expand_if_true: "libraries_to_link.is_whole_archive"
+ }
+ expand_if_equal {
+ variable: "libraries_to_link.type"
+ value: "static_library"
+ }
+ }
+ flag_group {
+ flag_group {
+ flag: "-l%{libraries_to_link.name}"
+ expand_if_false: "libraries_to_link.is_whole_archive"
+ }
+ flag_group {
+ flag: "-Wl,-force_load,-l%{libraries_to_link.name}"
+ expand_if_true: "libraries_to_link.is_whole_archive"
+ }
+ expand_if_equal {
+ variable: "libraries_to_link.type"
+ value: "dynamic_library"
+ }
+ }
+ flag_group {
+ flag_group {
+ flag: "-l:%{libraries_to_link.name}"
+ expand_if_false: "libraries_to_link.is_whole_archive"
+ }
+ flag_group {
+ flag: "-Wl,-force_load,-l:%{libraries_to_link.name}"
+ expand_if_true: "libraries_to_link.is_whole_archive"
+ }
+ expand_if_equal {
+ variable: "libraries_to_link.type"
+ value: "versioned_dynamic_library"
+ }
+ }
+ iterate_over: "libraries_to_link"
+ }
+ expand_if_all_available: "libraries_to_link"
+ }
+ }
+ feature {
+ name: "force_pic_flags"
+ flag_set {
+ action: "c++-link-executable"
+ flag_group {
+ flag: "-pie"
+ }
+ expand_if_all_available: "force_pic"
+ }
+ }
+ feature {
+ name: "pch"
+ flag_set {
+ action: "objc-compile"
+ action: "objc++-compile"
+ action: "c-compile"
+ action: "c++-compile"
+ flag_group {
+ flag: "-include"
+ flag: "%{pch_file}"
+ }
+ }
+ }
+ feature {
+ name: "module_maps"
+ }
+ feature {
+ name: "use_objc_modules"
+ flag_set {
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-fmodule-name=%{module_name}"
+ flag: "-iquote"
+ flag: "%{module_maps_dir}"
+ flag: "-fmodules-cache-path=%{modules_cache_path}"
+ }
+ }
+ }
+ feature {
+ name: "no_enable_modules"
+ flag_set {
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-fmodule-maps"
+ }
+ }
+ requires {
+ feature: "use_objc_modules"
+ }
+ }
+ feature {
+ name: "apply_default_warnings"
+ flag_set {
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-Wshorten-64-to-32"
+ flag: "-Wbool-conversion"
+ flag: "-Wconstant-conversion"
+ flag: "-Wduplicate-method-match"
+ flag: "-Wempty-body"
+ flag: "-Wenum-conversion"
+ flag: "-Wint-conversion"
+ flag: "-Wunreachable-code"
+ flag: "-Wmismatched-return-types"
+ flag: "-Wundeclared-selector"
+ flag: "-Wuninitialized"
+ flag: "-Wunused-function"
+ flag: "-Wunused-variable"
+ }
+ }
+ }
+ feature {
+ name: "preprocessor_defines"
+ flag_set {
+ action: "preprocess-assemble"
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-header-parsing"
+ action: "c++-header-preprocessing"
+ action: "c++-module-compile"
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-D%{preprocessor_defines}"
+ iterate_over: "preprocessor_defines"
+ }
+ }
+ }
+ feature {
+ name: "framework_paths"
+ flag_set {
+ action: "objc-compile"
+ action: "objc++-compile"
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "-F%{framework_paths}"
+ iterate_over: "framework_paths"
+ }
+ }
+ }
+ feature {
+ name: "apply_default_compiler_flags"
+ flag_set {
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-DOS_MACOSX"
+ }
+ }
+ }
+ feature {
+ name: "include_system_dirs"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-module-compile"
+ action: "c++-header-parsing"
+ action: "c++-header-preprocessing"
+ action: "objc-compile"
+ action: "objc++-compile"
+ action: "objc-executable"
+ action: "objc++-executable"
+ action: "assemble"
+ action: "preprocess-assemble"
+ flag_group {
+ flag: "-isysroot"
+ flag: "%{sdk_dir}"
+ }
+ }
+ }
+ feature {
+ name: "objc_arc"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-module-compile"
+ action: "c++-header-parsing"
+ action: "c++-header-preprocessing"
+ action: "assemble"
+ action: "preprocess-assemble"
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-fobjc-arc"
+ }
+ expand_if_all_available: "objc_arc"
+ }
+ }
+ feature {
+ name: "no_objc_arc"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-module-compile"
+ action: "c++-header-parsing"
+ action: "c++-header-preprocessing"
+ action: "assemble"
+ action: "preprocess-assemble"
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-fno-objc-arc"
+ }
+ expand_if_all_available: "no_objc_arc"
+ }
+ }
+ feature {
+ name: "apple_env"
+ env_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-module-compile"
+ action: "c++-header-parsing"
+ action: "c++-header-preprocessing"
+ action: "assemble"
+ action: "preprocess-assemble"
+ action: "objc-compile"
+ action: "objc++-compile"
+ action: "objc-archive"
+ action: "objc-fully-link"
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ action: "objc-executable"
+ action: "objc++-executable"
+ env_entry {
+ key: "XCODE_VERSION_OVERRIDE"
+ value: "%{xcode_version_override_value}"
+ }
+ env_entry {
+ key: "APPLE_SDK_VERSION_OVERRIDE"
+ value: "%{apple_sdk_version_override_value}"
+ }
+ env_entry {
+ key: "APPLE_SDK_PLATFORM"
+ value: "%{apple_sdk_platform_value}"
+ }
+ }
+ }
+ feature {
+ name: "legacy_link_flags"
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "%{legacy_link_flags}"
+ iterate_over: "legacy_link_flags"
+ }
+ expand_if_all_available: "legacy_link_flags"
+ }
+ }
+ feature {
+ name: "linker_param_file"
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ flag_group {
+ flag: "-Wl,@%{linker_param_file}"
+ }
+ expand_if_all_available: "linker_param_file"
+ }
+ flag_set {
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag: "@%{linker_param_file}"
+ }
+ expand_if_all_available: "linker_param_file"
+ }
+ }
+ feature {
+ name: "version_min"
+ flag_set {
+ action: "objc-executable"
+ action: "objc++-executable"
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "preprocess-assemble"
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-header-parsing"
+ action: "c++-header-preprocessing"
+ action: "c++-module-compile"
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-mmacosx-version-min=%{version_min}"
+ }
+ }
+ }
+ feature {
+ name: "dead_strip"
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "-dead_strip"
+ flag: "-no_dead_strip_inits_and_terms"
+ }
+ with_feature {
+ feature: "is_not_test_target"
+ }
+ }
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-g"
+ }
+ }
+ requires {
+ feature: "opt"
+ }
+ }
+ feature {
+ name: "dependency_file"
+ flag_set {
+ action: "assemble"
+ action: "preprocess-assemble"
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-module-compile"
+ action: "objc-compile"
+ action: "objc++-compile"
+ action: "c++-header-preprocessing"
+ action: "c++-header-parsing"
+ flag_group {
+ flag: "-MD"
+ flag: "-MF"
+ flag: "%{dependency_file}"
+ }
+ expand_if_all_available: "dependency_file"
+ }
+ }
+ feature {
+ name: "random_seed"
+ flag_set {
+ action: "c++-compile"
+ action: "c++-module-codegen"
+ action: "c++-module-compile"
+ flag_group {
+ flag: "-frandom-seed=%{output_file}"
+ }
+ }
+ }
+ feature {
+ name: "pic"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-module-codegen"
+ action: "c++-module-compile"
+ action: "preprocess-assemble"
+ flag_group {
+ flag: "-fPIC"
+ }
+ expand_if_all_available: "pic"
+ }
+ }
+ feature {
+ name: "per_object_debug_info"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-module-codegen"
+ action: "assemble"
+ action: "preprocess-assemble"
+ action: "lto-backend"
+ flag_group {
+ flag: "-gsplit-dwarf"
+ }
+ expand_if_all_available: "per_object_debug_info_file"
+ }
+ }
+ feature {
+ name: "include_paths"
+ flag_set {
+ action: "preprocess-assemble"
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-header-parsing"
+ action: "c++-header-preprocessing"
+ action: "c++-module-compile"
+ action: "clif-match"
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-iquote"
+ flag: "%{quote_include_paths}"
+ iterate_over: "quote_include_paths"
+ }
+ flag_group {
+ flag: "-I%{include_paths}"
+ iterate_over: "include_paths"
+ }
+ flag_group {
+ flag: "-isystem"
+ flag: "%{system_include_paths}"
+ iterate_over: "system_include_paths"
+ }
+ }
+ }
+ feature {
+ name: "fdo_instrument"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-link-interface-dynamic-library"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-executable"
+ flag_group {
+ flag: "-fprofile-generate=%{fdo_instrument_path}"
+ flag: "-fno-data-sections"
+ }
+ }
+ provides: "profile"
+ }
+ feature {
+ name: "fdo_optimize"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ flag_group {
+ flag: "-fprofile-use=%{fdo_profile_path}"
+ flag: "-Xclang-only=-Wno-profile-instr-unprofiled"
+ flag: "-Xclang-only=-Wno-profile-instr-out-of-date"
+ flag: "-fprofile-correction"
+ }
+ expand_if_all_available: "fdo_profile_path"
+ }
+ provides: "profile"
+ }
+ feature {
+ name: "autofdo"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ flag_group {
+ flag: "-fauto-profile=%{fdo_profile_path}"
+ flag: "-fprofile-correction"
+ }
+ expand_if_all_available: "fdo_profile_path"
+ }
+ provides: "profile"
+ }
+ feature {
+ name: "lipo"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ flag_group {
+ flag: "-fripa"
+ }
+ }
+ requires {
+ feature: "autofdo"
+ }
+ requires {
+ feature: "fdo_optimize"
+ }
+ requires {
+ feature: "fdo_instrument"
+ }
+ }
+ feature {
+ name: "asan"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-O1"
+ flag: "-gmlt"
+ flag: "-fsanitize=address,bool,float-cast-overflow,integer-divide-by-zero,return,returns-nonnull-attribute,shift-exponent,unreachable,vla-bound"
+ flag: "-fno-sanitize-recover=all"
+ flag: "-DHEAPCHECK_DISABLE"
+ flag: "-DADDRESS_SANITIZER"
+ flag: "-D_GLIBCXX_ADDRESS_SANITIZER_ANNOTATIONS"
+ flag: "-fno-omit-frame-pointer"
+ }
+ }
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "-fsanitize=address,bool,float-cast-overflow,integer-divide-by-zero,return,returns-nonnull-attribute,shift-exponent,unreachable,vla-bound"
+ flag: "-fsanitize-link-c++-runtime"
+ }
+ }
+ }
+ feature {
+ name: "coverage"
+ }
+ feature {
+ name: "llvm_coverage_map_format"
+ flag_set {
+ action: "preprocess-assemble"
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-module-compile"
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-fprofile-instr-generate"
+ flag: "-fcoverage-mapping"
+ flag: "-g"
+ }
+ }
+ flag_set {
+ action: "c++-link-interface-dynamic-library"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-executable"
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "-fprofile-instr-generate"
+ }
+ }
+ requires {
+ feature: "coverage"
+ }
+ provides: "profile"
+ }
+ feature {
+ name: "gcc_coverage_map_format"
+ flag_set {
+ action: "preprocess-assemble"
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-module-compile"
+ action: "objc-compile"
+ action: "objc++-compile"
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "-fprofile-arcs"
+ flag: "-ftest-coverage"
+ flag: "-g"
+ }
+ }
+ flag_set {
+ action: "c++-link-interface-dynamic-library"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-executable"
+ flag_group {
+ flag: "-lgcov"
+ }
+ }
+ requires {
+ feature: "coverage"
+ }
+ provides: "profile"
+ }
+ feature {
+ name: "cpp_linker_flags"
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ flag_group {
+ flag: "-undefined"
+ flag: "dynamic_lookup"
+ }
+ }
+ }
+ feature {
+ name: "apply_implicit_frameworks"
+ flag_set {
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "-framework Foundation"
+ }
+ }
+ }
+ feature {
+ name: "link_cocoa"
+ flag_set {
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "-framework Cocoa"
+ }
+ }
+ }
+ feature {
+ name: "apply_simulator_compiler_flags"
+ }
+ feature {
+ name: "unfiltered_cxx_flags"
+ }
+ feature {
+ name: "bitcode_embedded_markers"
+ }
+ feature {
+ name: "bitcode_embedded"
+ }
+ feature {
+ name: "copts"
+ flag_set {
+ action: "assemble"
+ action: "preprocess-assemble"
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-header-parsing"
+ action: "c++-header-preprocessing"
+ action: "c++-module-compile"
+ action: "c++-module-codegen"
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "%{copts}"
+ iterate_over: "copts"
+ }
+ expand_if_all_available: "copts"
+ }
+ }
+ feature {
+ name: "dbg_only_flag"
+ flag_set {
+ action: "objc-compile"
+ flag_group {
+ flag: "--DBG_ONLY_FLAG"
+ }
+ }
+ }
+ feature {
+ name: "fastbuild_only_flag"
+ flag_set {
+ action: "objc-compile"
+ flag_group {
+ flag: "--FASTBUILD_ONLY_FLAG"
+ }
+ }
+ }
+ feature {
+ name: "opt_only_flag"
+ flag_set {
+ action: "objc-compile"
+ flag_group {
+ flag: "--OPT_ONLY_FLAG"
+ }
+ }
+ }
+ action_config {
+ config_name: "strip"
+ action_name: "strip"
+ tool {
+ tool_path: "mac/strip"
+ }
+ flag_set {
+ flag_group {
+ flag: "-S"
+ flag: "-o"
+ flag: "%{output_file}"
+ flag: "-R"
+ flag: ".gnu.switches.text.quote_paths"
+ flag: "-R"
+ flag: ".gnu.switches.text.bracket_paths"
+ flag: "-R"
+ flag: ".gnu.switches.text.system_paths"
+ flag: "-R"
+ flag: ".gnu.switches.text.cpp_defines"
+ flag: "-R"
+ flag: ".gnu.switches.text.cpp_includes"
+ flag: "-R"
+ flag: ".gnu.switches.text.cl_args"
+ flag: "-R"
+ flag: ".gnu.switches.text.lipo_info"
+ flag: "-R"
+ flag: ".gnu.switches.text.annotation"
+ }
+ flag_group {
+ flag: "%{stripopts}"
+ iterate_over: "stripopts"
+ }
+ flag_group {
+ flag: "%{input_file}"
+ }
+ }
+ }
+ action_config {
+ config_name: "c-compile"
+ action_name: "c-compile"
+ tool {
+ tool_path: "mac/wrapped_clang"
+ execution_requirement: "requires-darwin"
+ }
+ flag_set {
+ flag_group {
+ flag: "-arch x86_64"
+ }
+ }
+ implies: "preprocessor_defines"
+ implies: "include_system_dirs"
+ implies: "version_min"
+ implies: "objc_arc"
+ implies: "no_objc_arc"
+ implies: "apple_env"
+ implies: "copts"
+ }
+ action_config {
+ config_name: "c++-compile"
+ action_name: "c++-compile"
+ tool {
+ tool_path: "mac/wrapped_clang"
+ execution_requirement: "requires-darwin"
+ }
+ flag_set {
+ flag_group {
+ flag: "-arch x86_64"
+ }
+ }
+ implies: "preprocessor_defines"
+ implies: "include_system_dirs"
+ implies: "version_min"
+ implies: "objc_arc"
+ implies: "no_objc_arc"
+ implies: "apple_env"
+ implies: "copts"
+ }
+ action_config {
+ config_name: "c++-module-compile"
+ action_name: "c++-module-compile"
+ tool {
+ tool_path: "mac/wrapped_clang"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "preprocessor_defines"
+ implies: "include_system_dirs"
+ implies: "version_min"
+ implies: "objc_arc"
+ implies: "no_objc_arc"
+ implies: "apple_env"
+ implies: "copts"
+ }
+ action_config {
+ config_name: "c++-header-parsing"
+ action_name: "c++-header-parsing"
+ tool {
+ tool_path: "mac/wrapped_clang"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "preprocessor_defines"
+ implies: "include_system_dirs"
+ implies: "version_min"
+ implies: "objc_arc"
+ implies: "no_objc_arc"
+ implies: "apple_env"
+ implies: "copts"
+ }
+ action_config {
+ config_name: "c++-header-preprocessing"
+ action_name: "c++-header-preprocessing"
+ tool {
+ tool_path: "mac/wrapped_clang"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "preprocessor_defines"
+ implies: "include_system_dirs"
+ implies: "version_min"
+ implies: "objc_arc"
+ implies: "no_objc_arc"
+ implies: "apple_env"
+ implies: "copts"
+ }
+ action_config {
+ config_name: "objc-compile"
+ action_name: "objc-compile"
+ tool {
+ tool_path: "mac/wrapped_clang"
+ execution_requirement: "requires-darwin"
+ }
+ flag_set {
+ flag_group {
+ flag: "-arch x86_64"
+ }
+ }
+ implies: "objc_actions"
+ implies: "apply_default_compiler_flags"
+ implies: "apply_default_warnings"
+ implies: "framework_paths"
+ implies: "preprocessor_defines"
+ implies: "include_system_dirs"
+ implies: "version_min"
+ implies: "objc_arc"
+ implies: "no_objc_arc"
+ implies: "apple_env"
+ implies: "copts"
+ }
+ action_config {
+ config_name: "objc++-compile"
+ action_name: "objc++-compile"
+ tool {
+ tool_path: "mac/wrapped_clang"
+ execution_requirement: "requires-darwin"
+ }
+ flag_set {
+ flag_group {
+ flag: "-arch x86_64"
+ flag: "-stdlib=libc++"
+ flag: "-std=gnu++11"
+ }
+ }
+ implies: "apply_default_compiler_flags"
+ implies: "apply_default_warnings"
+ implies: "framework_paths"
+ implies: "preprocessor_defines"
+ implies: "include_system_dirs"
+ implies: "version_min"
+ implies: "objc_arc"
+ implies: "no_objc_arc"
+ implies: "apple_env"
+ implies: "copts"
+ }
+ action_config {
+ config_name: "assemble"
+ action_name: "assemble"
+ tool {
+ tool_path: "mac/wrapped_clang"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "objc_arc"
+ implies: "no_objc_arc"
+ implies: "include_system_dirs"
+ implies: "apple_env"
+ implies: "copts"
+ }
+ action_config {
+ config_name: "preprocess-assemble"
+ action_name: "preprocess-assemble"
+ tool {
+ tool_path: "mac/wrapped_clang"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "preprocessor_defines"
+ implies: "include_system_dirs"
+ implies: "version_min"
+ implies: "objc_arc"
+ implies: "no_objc_arc"
+ implies: "apple_env"
+ implies: "copts"
+ }
+ action_config {
+ config_name: "objc-archive"
+ action_name: "objc-archive"
+ tool {
+ tool_path: "mac/libtool"
+ execution_requirement: "requires-darwin"
+ }
+ flag_set {
+ flag_group {
+ flag: "-static"
+ flag: "-filelist"
+ flag: "%{obj_list_path}"
+ flag: "-arch_only"
+ flag: "x86_64"
+ flag: "-syslibroot"
+ flag: "%{sdk_dir}"
+ flag: "-o"
+ flag: "%{archive_path}"
+ }
+ }
+ implies: "apple_env"
+ }
+ action_config {
+ config_name: "objc-executable"
+ action_name: "objc-executable"
+ tool {
+ tool_path: "mac/wrapped_clang"
+ execution_requirement: "requires-darwin"
+ }
+ flag_set {
+ flag_group {
+ flag: "-arch x86_64"
+ }
+ flag_group {
+ flag: "-Xlinker"
+ flag: "-objc_abi_version"
+ flag: "-Xlinker"
+ flag: "2"
+ flag: "-Xlinker"
+ flag: "-rpath"
+ flag: "-Xlinker"
+ flag: "@executable_path/Frameworks"
+ flag: "-fobjc-link-runtime"
+ flag: "-ObjC"
+ }
+ flag_group {
+ flag: "-framework %{framework_names}"
+ iterate_over: "framework_names"
+ }
+ flag_group {
+ flag: "-weak_framework %{weak_framework_names}"
+ iterate_over: "weak_framework_names"
+ }
+ flag_group {
+ flag: "-l%{library_names}"
+ iterate_over: "library_names"
+ }
+ flag_group {
+ flag: "-filelist %{filelist}"
+ }
+ flag_group {
+ flag: "-o %{linked_binary}"
+ }
+ flag_group {
+ flag: "-force_load %{force_load_exec_paths}"
+ iterate_over: "force_load_exec_paths"
+ }
+ flag_group {
+ flag: "%{dep_linkopts}"
+ iterate_over: "dep_linkopts"
+ }
+ flag_group {
+ flag: "-Wl,%{attr_linkopts}"
+ iterate_over: "attr_linkopts"
+ }
+ }
+ implies: "include_system_dirs"
+ implies: "framework_paths"
+ implies: "version_min"
+ implies: "legacy_link_flags"
+ implies: "apple_env"
+ implies: "apply_implicit_frameworks"
+ }
+ action_config {
+ config_name: "objc++-executable"
+ action_name: "objc++-executable"
+ tool {
+ tool_path: "mac/wrapped_clang++"
+ execution_requirement: "requires-darwin"
+ }
+ flag_set {
+ flag_group {
+ flag: "-stdlib=libc++"
+ flag: "-std=gnu++11"
+ }
+ flag_group {
+ flag: "-arch x86_64"
+ }
+ flag_group {
+ flag: "-Xlinker"
+ flag: "-objc_abi_version"
+ flag: "-Xlinker"
+ flag: "2"
+ flag: "-Xlinker"
+ flag: "-rpath"
+ flag: "-Xlinker"
+ flag: "@executable_path/Frameworks"
+ flag: "-fobjc-link-runtime"
+ flag: "-ObjC"
+ }
+ flag_group {
+ flag: "-framework %{framework_names}"
+ iterate_over: "framework_names"
+ }
+ flag_group {
+ flag: "-weak_framework %{weak_framework_names}"
+ iterate_over: "weak_framework_names"
+ }
+ flag_group {
+ flag: "-l%{library_names}"
+ iterate_over: "library_names"
+ }
+ flag_group {
+ flag: "-filelist %{filelist}"
+ }
+ flag_group {
+ flag: "-o %{linked_binary}"
+ }
+ flag_group {
+ flag: "-force_load %{force_load_exec_paths}"
+ iterate_over: "force_load_exec_paths"
+ }
+ flag_group {
+ flag: "%{dep_linkopts}"
+ iterate_over: "dep_linkopts"
+ }
+ flag_group {
+ flag: "-Wl,%{attr_linkopts}"
+ iterate_over: "attr_linkopts"
+ }
+ }
+ implies: "include_system_dirs"
+ implies: "framework_paths"
+ implies: "version_min"
+ implies: "legacy_link_flags"
+ implies: "apple_env"
+ implies: "apply_implicit_frameworks"
+ }
+ action_config {
+ config_name: "c++-link-executable"
+ action_name: "c++-link-executable"
+ tool {
+ tool_path: "mac/clang"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "symbol_counts"
+ implies: "linkstamps"
+ implies: "output_execpath_flags_executable"
+ implies: "global_whole_archive_open"
+ implies: "runtime_root_flags"
+ implies: "input_param_flags"
+ implies: "force_pic_flags"
+ implies: "legacy_link_flags"
+ implies: "strip_debug_symbols"
+ implies: "linker_param_file"
+ implies: "version_min"
+ implies: "apple_env"
+ implies: "cpp_linker_flags"
+ }
+ action_config {
+ config_name: "c++-link-dynamic-library"
+ action_name: "c++-link-dynamic-library"
+ tool {
+ tool_path: "mac/clang"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "has_configured_linker_path"
+ implies: "symbol_counts"
+ implies: "shared_flag"
+ implies: "linkstamps"
+ implies: "output_execpath_flags"
+ implies: "global_whole_archive_open"
+ implies: "runtime_root_flags"
+ implies: "input_param_flags"
+ implies: "legacy_link_flags"
+ implies: "strip_debug_symbols"
+ implies: "linker_param_file"
+ implies: "version_min"
+ implies: "apple_env"
+ implies: "cpp_linker_flags"
+ }
+ action_config {
+ config_name: "c++-link-static-library"
+ action_name: "c++-link-static-library"
+ tool {
+ tool_path: "mac/ar_wrapper"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "global_whole_archive_open"
+ implies: "runtime_root_flags"
+ implies: "archiver_flags"
+ implies: "input_param_flags"
+ implies: "linker_param_file"
+ implies: "apple_env"
+ }
+ action_config {
+ config_name: "c++-link-alwayslink-static-library"
+ action_name: "c++-link-alwayslink-static-library"
+ tool {
+ tool_path: "mac/ar_wrapper"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "global_whole_archive_open"
+ implies: "runtime_root_flags"
+ implies: "archiver_flags"
+ implies: "input_param_flags"
+ implies: "linker_param_file"
+ implies: "apple_env"
+ }
+ action_config {
+ config_name: "c++-link-pic-static-library"
+ action_name: "c++-link-pic-static-library"
+ tool {
+ tool_path: "mac/ar_wrapper"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "global_whole_archive_open"
+ implies: "runtime_root_flags"
+ implies: "archiver_flags"
+ implies: "input_param_flags"
+ implies: "linker_param_file"
+ implies: "apple_env"
+ }
+ action_config {
+ config_name: "c++-link-alwayslink-pic-static-library"
+ action_name: "c++-link-alwayslink-pic-static-library"
+ tool {
+ tool_path: "mac/ar_wrapper"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "global_whole_archive_open"
+ implies: "runtime_root_flags"
+ implies: "archiver_flags"
+ implies: "input_param_flags"
+ implies: "linker_param_file"
+ implies: "apple_env"
+ }
+ action_config {
+ config_name: "c++-link-interface-dynamic-library"
+ action_name: "c++-link-interface-dynamic-library"
+ tool {
+ tool_path: "mac/clang"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "strip_debug_symbols"
+ implies: "apple_env"
+ }
+ action_config {
+ config_name: "objc-fully-link"
+ action_name: "objc-fully-link"
+ tool {
+ tool_path: "mac/libtool"
+ execution_requirement: "requires-darwin"
+ }
+ flag_set {
+ flag_group {
+ flag: "-static"
+ flag: "-arch_only"
+ flag: "x86_64"
+ flag: "-syslibroot"
+ flag: "%{sdk_dir}"
+ flag: "-o"
+ flag: "%{fully_linked_archive_path}"
+ }
+ flag_group {
+ flag: "%{objc_library_exec_paths}"
+ iterate_over: "objc_library_exec_paths"
+ }
+ flag_group {
+ flag: "%{cc_library_exec_paths}"
+ iterate_over: "cc_library_exec_paths"
+ }
+ flag_group {
+ flag: "%{imported_library_exec_paths}"
+ iterate_over: "imported_library_exec_paths"
+ }
+ }
+ implies: "apple_env"
+ }
+ cc_target_os: "apple"
+}
+toolchain {
+ toolchain_identifier: "darwin_x86_64"
+ host_system_name: "x86_64-apple-macosx"
+ target_system_name: "x86_64-apple-macosx"
+ target_cpu: "darwin"
+ target_libc: "macosx"
+ compiler: "compiler"
+ abi_version: "darwin_x86_64"
+ abi_libc_version: "darwin_x86_64"
+ tool_path {
+ name: "ar"
+ path: "mac/ar_wrapper"
+ }
+ tool_path {
+ name: "compat-ld"
+ path: "mac/ld"
+ }
+ tool_path {
+ name: "cpp"
+ path: "mac/cpp"
+ }
+ tool_path {
+ name: "gcov"
+ path: "mac/gcov"
+ }
+ tool_path {
+ name: "gcc"
+ path: "mac/clang"
+ }
+ tool_path {
+ name: "ld"
+ path: "mac/ld"
+ }
+ tool_path {
+ name: "nm"
+ path: "mac/nm"
+ }
+ tool_path {
+ name: "strip"
+ path: "mac/strip"
+ }
+ tool_path {
+ name: "dwp"
+ path: "/usr/bin/dwp"
+ }
+ tool_path {
+ name: "objdump"
+ path: "/usr/bin/objdump"
+ }
+ needsPic: false
+ compiler_flag: "-DCOMPILER_GCC3"
+ compiler_flag: "-DCOMPILER_GCC4"
+ compiler_flag: "-Dunix"
+ compiler_flag: "-DOS_MACOSX"
+ compiler_flag: "-DU_HAVE_NL_LANGINFO_CODESET=0"
+ compiler_flag: "-DU_HAVE_STD_STRING"
+ compiler_flag: "-D__STDC_FORMAT_MACROS"
+ cxx_flag: "-std=gnu++11"
+ cxx_flag: "-stdlib=libc++"
+ linker_flag: "-lc++"
+ compilation_mode_flags {
+ mode: FASTBUILD
+ compiler_flag: "-O0"
+ compiler_flag: "-DDEBUG"
+ }
+ compilation_mode_flags {
+ mode: OPT
+ compiler_flag: "-Os"
+ compiler_flag: "-DNDEBUG"
+ }
+ compilation_mode_flags {
+ mode: DBG
+ compiler_flag: "-g"
+ compiler_flag: "-DDEBUG"
+ }
+ linking_mode_flags {
+ mode: DYNAMIC
+ }
+ make_variable {
+ name: "STACK_FRAME_UNLIMITED"
+ value: "-Wframe-larger-than=100000000 -Wno-vla"
+ }
+ cxx_builtin_include_directory: "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"
+ cxx_builtin_include_directory: "/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"
+ cxx_builtin_include_directory: "/Applications/Xcode_7.2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"
+ cxx_builtin_include_directory: "/Applications/Xcode_7.3.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"
+ cxx_builtin_include_directory: "/Applications/Xcode_8.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"
+ cxx_builtin_include_directory: "/Applications/Xcode_8.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"
+ cxx_builtin_include_directory: "/Applications/Xcode_8.2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"
+ cxx_builtin_include_directory: "/Applications/Xcode_8.2.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"
+ cxx_builtin_include_directory: "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs"
+ cxx_builtin_include_directory: "/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs"
+ cxx_builtin_include_directory: "/Applications/Xcode_7.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs"
+ cxx_builtin_include_directory: "/Applications/Xcode_7.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs"
+ cxx_builtin_include_directory: "/Applications/Xcode_8.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs"
+ cxx_builtin_include_directory: "/Applications/Xcode_8.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs"
+ cxx_builtin_include_directory: "/Applications/Xcode_8.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs"
+ cxx_builtin_include_directory: "/Applications/Xcode_8.2.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs"
+ cxx_builtin_include_directory: "/usr/include"
+ builtin_sysroot: ""
+ unfiltered_cxx_flag: "-no-canonical-prefixes"
+ unfiltered_cxx_flag: "-pthread"
+ supports_normalizing_ar: false
+ default_python_version: "python2.7"
+ feature {
+ name: "no_legacy_features"
+ }
+ feature {
+ name: "fastbuild"
+ implies: "fastbuild_only_flag"
+ }
+ feature {
+ name: "opt"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-g0"
+ }
+ with_feature {
+ feature: "no_generate_debug_symbols"
+ }
+ }
+ implies: "opt_only_flag"
+ }
+ feature {
+ name: "dbg"
+ implies: "dbg_only_flag"
+ }
+ feature {
+ name: "compile_all_modules"
+ }
+ feature {
+ name: "exclude_private_headers_in_module_maps"
+ }
+ feature {
+ name: "has_configured_linker_path"
+ }
+ feature {
+ name: "only_doth_headers_in_module_maps"
+ }
+ feature {
+ name: "is_not_test_target"
+ }
+ feature {
+ name: "generate_dsym_file"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "objc-compile"
+ action: "objc++-compile"
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "-g"
+ }
+ }
+ flag_set {
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "DSYM_HINT_LINKED_BINARY=%{linked_binary}"
+ flag: "DSYM_HINT_DSYM_PATH=%{dsym_path}"
+ flag: "DSYM_HINT_DSYM_BUNDLE_ZIP=%{dsym_bundle_zip}"
+ }
+ }
+ }
+ feature {
+ name: "no_generate_debug_symbols"
+ }
+ feature {
+ name: "generate_linkmap"
+ flag_set {
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "-Xlinker -map"
+ flag: "-Xlinker %{linkmap_exec_path}"
+ }
+ }
+ }
+ feature {
+ name: "objc_actions"
+ implies: "objc-compile"
+ implies: "objc++-compile"
+ implies: "objc-fully-link"
+ implies: "objc-archive"
+ implies: "objc-executable"
+ implies: "objc++-executable"
+ implies: "assemble"
+ implies: "preprocess-assemble"
+ implies: "c-compile"
+ implies: "c++-compile"
+ implies: "c++-link-static-library"
+ implies: "c++-link-pic-static-library"
+ implies: "c++-link-interface-dynamic-library"
+ implies: "c++-link-dynamic-library"
+ implies: "c++-link-alwayslink-static-library"
+ implies: "c++-link-alwayslink-pic-static-library"
+ implies: "c++-link-executable"
+ }
+ feature {
+ name: "strip_debug_symbols"
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-interface-dynamic-library"
+ flag_group {
+ flag: "-Wl,-S"
+ expand_if_all_available: "strip_debug_symbols"
+ }
+ }
+ }
+ feature {
+ name: "symbol_counts"
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ flag_group {
+ flag: "-Wl,--print-symbol-counts=%{symbol_counts_output}"
+ }
+ expand_if_all_available: "symbol_counts_output"
+ }
+ }
+ feature {
+ name: "shared_flag"
+ flag_set {
+ action: "c++-link-dynamic-library"
+ flag_group {
+ flag: "-shared"
+ }
+ }
+ }
+ feature {
+ name: "linkstamps"
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ flag_group {
+ flag: "%{linkstamp_paths}"
+ iterate_over: "linkstamp_paths"
+ }
+ expand_if_all_available: "linkstamp_paths"
+ }
+ }
+ feature {
+ name: "output_execpath_flags"
+ flag_set {
+ action: "c++-link-dynamic-library"
+ flag_group {
+ flag: "-o"
+ flag: "%{output_execpath}"
+ }
+ expand_if_all_available: "output_execpath"
+ }
+ }
+ feature {
+ name: "output_execpath_flags_executable"
+ flag_set {
+ action: "c++-link-executable"
+ flag_group {
+ flag: "-o"
+ }
+ expand_if_all_available: "output_execpath"
+ }
+ flag_set {
+ action: "c++-link-executable"
+ flag_group {
+ flag: "/dev/null"
+ flag: "-MMD"
+ flag: "-MF"
+ }
+ expand_if_all_available: "skip_mostly_static"
+ expand_if_all_available: "output_execpath"
+ }
+ flag_set {
+ action: "c++-link-executable"
+ flag_group {
+ flag: "%{output_execpath}"
+ }
+ expand_if_all_available: "output_execpath"
+ }
+ }
+ feature {
+ name: "global_whole_archive_open"
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag: "-Wl,-all_load"
+ }
+ expand_if_all_available: "global_whole_archive"
+ }
+ }
+ feature {
+ name: "runtime_root_flags"
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag: "-Wl,-rpath,$ORIGIN/%{runtime_library_search_directories}"
+ iterate_over: "runtime_library_search_directories"
+ }
+ expand_if_all_available: "runtime_library_search_directories"
+ }
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag: "%{runtime_root_flags}"
+ iterate_over: "runtime_root_flags"
+ }
+ expand_if_all_available: "runtime_root_flags"
+ }
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag: "%{runtime_root_entries}"
+ iterate_over: "runtime_root_entries"
+ }
+ expand_if_all_available: "runtime_root_entries"
+ }
+ }
+ feature {
+ name: "archiver_flags"
+ flag_set {
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag: "rcs"
+ flag: "%{output_execpath}"
+ }
+ expand_if_all_available: "output_execpath"
+ }
+ }
+ feature {
+ name: "input_param_flags"
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag: "-L%{library_search_directories}"
+ iterate_over: "library_search_directories"
+ }
+ expand_if_all_available: "library_search_directories"
+ }
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag: "%{libopts}"
+ iterate_over: "libopts"
+ }
+ expand_if_all_available: "libopts"
+ }
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag: "-Wl,-force_load,%{whole_archive_linker_params}"
+ iterate_over: "whole_archive_linker_params"
+ }
+ expand_if_all_available: "whole_archive_linker_params"
+ }
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag: "%{linker_input_params}"
+ iterate_over: "linker_input_params"
+ }
+ expand_if_all_available: "linker_input_params"
+ }
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag_group {
+ flag: "-Wl,--start-lib"
+ expand_if_equal {
+ variable: "libraries_to_link.type"
+ value: "object_file_group"
+ }
+ }
+ flag_group {
+ flag_group {
+ flag: "%{libraries_to_link.object_files}"
+ expand_if_false: "libraries_to_link.is_whole_archive"
+ }
+ flag_group {
+ flag: "-Wl,-force_load,%{libraries_to_link.object_files}"
+ expand_if_true: "libraries_to_link.is_whole_archive"
+ }
+ iterate_over: "libraries_to_link.object_files"
+ expand_if_equal {
+ variable: "libraries_to_link.type"
+ value: "object_file_group"
+ }
+ }
+ flag_group {
+ flag: "-Wl,--end-lib"
+ expand_if_equal {
+ variable: "libraries_to_link.type"
+ value: "object_file_group"
+ }
+ }
+ flag_group {
+ flag_group {
+ flag: "%{libraries_to_link.name}"
+ expand_if_false: "libraries_to_link.is_whole_archive"
+ }
+ flag_group {
+ flag: "-Wl,-force_load,%{libraries_to_link.name}"
+ expand_if_true: "libraries_to_link.is_whole_archive"
+ }
+ expand_if_equal {
+ variable: "libraries_to_link.type"
+ value: "object_file"
+ }
+ }
+ flag_group {
+ flag_group {
+ flag: "%{libraries_to_link.name}"
+ expand_if_false: "libraries_to_link.is_whole_archive"
+ }
+ flag_group {
+ flag: "-Wl,-force_load,%{libraries_to_link.name}"
+ expand_if_true: "libraries_to_link.is_whole_archive"
+ }
+ expand_if_equal {
+ variable: "libraries_to_link.type"
+ value: "interface_library"
+ }
+ }
+ flag_group {
+ flag_group {
+ flag: "%{libraries_to_link.name}"
+ expand_if_false: "libraries_to_link.is_whole_archive"
+ }
+ flag_group {
+ flag: "-Wl,-force_load,%{libraries_to_link.name}"
+ expand_if_true: "libraries_to_link.is_whole_archive"
+ }
+ expand_if_equal {
+ variable: "libraries_to_link.type"
+ value: "static_library"
+ }
+ }
+ flag_group {
+ flag_group {
+ flag: "-l%{libraries_to_link.name}"
+ expand_if_false: "libraries_to_link.is_whole_archive"
+ }
+ flag_group {
+ flag: "-Wl,-force_load,-l%{libraries_to_link.name}"
+ expand_if_true: "libraries_to_link.is_whole_archive"
+ }
+ expand_if_equal {
+ variable: "libraries_to_link.type"
+ value: "dynamic_library"
+ }
+ }
+ flag_group {
+ flag_group {
+ flag: "-l:%{libraries_to_link.name}"
+ expand_if_false: "libraries_to_link.is_whole_archive"
+ }
+ flag_group {
+ flag: "-Wl,-force_load,-l:%{libraries_to_link.name}"
+ expand_if_true: "libraries_to_link.is_whole_archive"
+ }
+ expand_if_equal {
+ variable: "libraries_to_link.type"
+ value: "versioned_dynamic_library"
+ }
+ }
+ iterate_over: "libraries_to_link"
+ }
+ expand_if_all_available: "libraries_to_link"
+ }
+ }
+ feature {
+ name: "force_pic_flags"
+ flag_set {
+ action: "c++-link-executable"
+ flag_group {
+ flag: "-pie"
+ }
+ expand_if_all_available: "force_pic"
+ }
+ }
+ feature {
+ name: "pch"
+ flag_set {
+ action: "objc-compile"
+ action: "objc++-compile"
+ action: "c-compile"
+ action: "c++-compile"
+ flag_group {
+ flag: "-include"
+ flag: "%{pch_file}"
+ }
+ }
+ }
+ feature {
+ name: "module_maps"
+ }
+ feature {
+ name: "use_objc_modules"
+ flag_set {
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-fmodule-name=%{module_name}"
+ flag: "-iquote"
+ flag: "%{module_maps_dir}"
+ flag: "-fmodules-cache-path=%{modules_cache_path}"
+ }
+ }
+ }
+ feature {
+ name: "no_enable_modules"
+ flag_set {
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-fmodule-maps"
+ }
+ }
+ requires {
+ feature: "use_objc_modules"
+ }
+ }
+ feature {
+ name: "apply_default_warnings"
+ flag_set {
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-Wshorten-64-to-32"
+ flag: "-Wbool-conversion"
+ flag: "-Wconstant-conversion"
+ flag: "-Wduplicate-method-match"
+ flag: "-Wempty-body"
+ flag: "-Wenum-conversion"
+ flag: "-Wint-conversion"
+ flag: "-Wunreachable-code"
+ flag: "-Wmismatched-return-types"
+ flag: "-Wundeclared-selector"
+ flag: "-Wuninitialized"
+ flag: "-Wunused-function"
+ flag: "-Wunused-variable"
+ }
+ }
+ }
+ feature {
+ name: "preprocessor_defines"
+ flag_set {
+ action: "preprocess-assemble"
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-header-parsing"
+ action: "c++-header-preprocessing"
+ action: "c++-module-compile"
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-D%{preprocessor_defines}"
+ iterate_over: "preprocessor_defines"
+ }
+ }
+ }
+ feature {
+ name: "framework_paths"
+ flag_set {
+ action: "objc-compile"
+ action: "objc++-compile"
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "-F%{framework_paths}"
+ iterate_over: "framework_paths"
+ }
+ }
+ }
+ feature {
+ name: "apply_default_compiler_flags"
+ flag_set {
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-DOS_MACOSX"
+ }
+ }
+ }
+ feature {
+ name: "include_system_dirs"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-module-compile"
+ action: "c++-header-parsing"
+ action: "c++-header-preprocessing"
+ action: "objc-compile"
+ action: "objc++-compile"
+ action: "objc-executable"
+ action: "objc++-executable"
+ action: "assemble"
+ action: "preprocess-assemble"
+ flag_group {
+ flag: "-isysroot"
+ flag: "%{sdk_dir}"
+ }
+ }
+ }
+ feature {
+ name: "objc_arc"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-module-compile"
+ action: "c++-header-parsing"
+ action: "c++-header-preprocessing"
+ action: "assemble"
+ action: "preprocess-assemble"
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-fobjc-arc"
+ }
+ expand_if_all_available: "objc_arc"
+ }
+ }
+ feature {
+ name: "no_objc_arc"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-module-compile"
+ action: "c++-header-parsing"
+ action: "c++-header-preprocessing"
+ action: "assemble"
+ action: "preprocess-assemble"
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-fno-objc-arc"
+ }
+ expand_if_all_available: "no_objc_arc"
+ }
+ }
+ feature {
+ name: "apple_env"
+ env_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-module-compile"
+ action: "c++-header-parsing"
+ action: "c++-header-preprocessing"
+ action: "assemble"
+ action: "preprocess-assemble"
+ action: "objc-compile"
+ action: "objc++-compile"
+ action: "objc-archive"
+ action: "objc-fully-link"
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ action: "objc-executable"
+ action: "objc++-executable"
+ env_entry {
+ key: "XCODE_VERSION_OVERRIDE"
+ value: "%{xcode_version_override_value}"
+ }
+ env_entry {
+ key: "APPLE_SDK_VERSION_OVERRIDE"
+ value: "%{apple_sdk_version_override_value}"
+ }
+ env_entry {
+ key: "APPLE_SDK_PLATFORM"
+ value: "%{apple_sdk_platform_value}"
+ }
+ }
+ }
+ feature {
+ name: "legacy_link_flags"
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "%{legacy_link_flags}"
+ iterate_over: "legacy_link_flags"
+ }
+ expand_if_all_available: "legacy_link_flags"
+ }
+ }
+ feature {
+ name: "linker_param_file"
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ flag_group {
+ flag: "-Wl,@%{linker_param_file}"
+ }
+ expand_if_all_available: "linker_param_file"
+ }
+ flag_set {
+ action: "c++-link-static-library"
+ action: "c++-link-alwayslink-static-library"
+ action: "c++-link-pic-static-library"
+ action: "c++-link-alwayslink-pic-static-library"
+ flag_group {
+ flag: "@%{linker_param_file}"
+ }
+ expand_if_all_available: "linker_param_file"
+ }
+ }
+ feature {
+ name: "version_min"
+ flag_set {
+ action: "objc-executable"
+ action: "objc++-executable"
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "preprocess-assemble"
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-header-parsing"
+ action: "c++-header-preprocessing"
+ action: "c++-module-compile"
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-mmacosx-version-min=%{version_min}"
+ }
+ }
+ }
+ feature {
+ name: "dead_strip"
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "-dead_strip"
+ flag: "-no_dead_strip_inits_and_terms"
+ }
+ with_feature {
+ feature: "is_not_test_target"
+ }
+ }
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-g"
+ }
+ }
+ requires {
+ feature: "opt"
+ }
+ }
+ feature {
+ name: "dependency_file"
+ flag_set {
+ action: "assemble"
+ action: "preprocess-assemble"
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-module-compile"
+ action: "objc-compile"
+ action: "objc++-compile"
+ action: "c++-header-preprocessing"
+ action: "c++-header-parsing"
+ flag_group {
+ flag: "-MD"
+ flag: "-MF"
+ flag: "%{dependency_file}"
+ }
+ expand_if_all_available: "dependency_file"
+ }
+ }
+ feature {
+ name: "random_seed"
+ flag_set {
+ action: "c++-compile"
+ action: "c++-module-codegen"
+ action: "c++-module-compile"
+ flag_group {
+ flag: "-frandom-seed=%{output_file}"
+ }
+ }
+ }
+ feature {
+ name: "pic"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-module-codegen"
+ action: "c++-module-compile"
+ action: "preprocess-assemble"
+ flag_group {
+ flag: "-fPIC"
+ }
+ expand_if_all_available: "pic"
+ }
+ }
+ feature {
+ name: "per_object_debug_info"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-module-codegen"
+ action: "assemble"
+ action: "preprocess-assemble"
+ action: "lto-backend"
+ flag_group {
+ flag: "-gsplit-dwarf"
+ }
+ expand_if_all_available: "per_object_debug_info_file"
+ }
+ }
+ feature {
+ name: "include_paths"
+ flag_set {
+ action: "preprocess-assemble"
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-header-parsing"
+ action: "c++-header-preprocessing"
+ action: "c++-module-compile"
+ action: "clif-match"
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-iquote"
+ flag: "%{quote_include_paths}"
+ iterate_over: "quote_include_paths"
+ }
+ flag_group {
+ flag: "-I%{include_paths}"
+ iterate_over: "include_paths"
+ }
+ flag_group {
+ flag: "-isystem"
+ flag: "%{system_include_paths}"
+ iterate_over: "system_include_paths"
+ }
+ }
+ }
+ feature {
+ name: "fdo_instrument"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-link-interface-dynamic-library"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-executable"
+ flag_group {
+ flag: "-fprofile-generate=%{fdo_instrument_path}"
+ flag: "-fno-data-sections"
+ }
+ }
+ provides: "profile"
+ }
+ feature {
+ name: "fdo_optimize"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ flag_group {
+ flag: "-fprofile-use=%{fdo_profile_path}"
+ flag: "-Xclang-only=-Wno-profile-instr-unprofiled"
+ flag: "-Xclang-only=-Wno-profile-instr-out-of-date"
+ flag: "-fprofile-correction"
+ }
+ expand_if_all_available: "fdo_profile_path"
+ }
+ provides: "profile"
+ }
+ feature {
+ name: "autofdo"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ flag_group {
+ flag: "-fauto-profile=%{fdo_profile_path}"
+ flag: "-fprofile-correction"
+ }
+ expand_if_all_available: "fdo_profile_path"
+ }
+ provides: "profile"
+ }
+ feature {
+ name: "lipo"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ flag_group {
+ flag: "-fripa"
+ }
+ }
+ requires {
+ feature: "autofdo"
+ }
+ requires {
+ feature: "fdo_optimize"
+ }
+ requires {
+ feature: "fdo_instrument"
+ }
+ }
+ feature {
+ name: "asan"
+ flag_set {
+ action: "c-compile"
+ action: "c++-compile"
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-O1"
+ flag: "-gmlt"
+ flag: "-fsanitize=address,bool,float-cast-overflow,integer-divide-by-zero,return,returns-nonnull-attribute,shift-exponent,unreachable,vla-bound"
+ flag: "-fno-sanitize-recover=all"
+ flag: "-DHEAPCHECK_DISABLE"
+ flag: "-DADDRESS_SANITIZER"
+ flag: "-D_GLIBCXX_ADDRESS_SANITIZER_ANNOTATIONS"
+ flag: "-fno-omit-frame-pointer"
+ }
+ }
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "-fsanitize=address,bool,float-cast-overflow,integer-divide-by-zero,return,returns-nonnull-attribute,shift-exponent,unreachable,vla-bound"
+ flag: "-fsanitize-link-c++-runtime"
+ }
+ }
+ }
+ feature {
+ name: "coverage"
+ }
+ feature {
+ name: "llvm_coverage_map_format"
+ flag_set {
+ action: "preprocess-assemble"
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-module-compile"
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "-fprofile-instr-generate"
+ flag: "-fcoverage-mapping"
+ flag: "-g"
+ }
+ }
+ flag_set {
+ action: "c++-link-interface-dynamic-library"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-executable"
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "-fprofile-instr-generate"
+ }
+ }
+ requires {
+ feature: "coverage"
+ }
+ provides: "profile"
+ }
+ feature {
+ name: "gcc_coverage_map_format"
+ flag_set {
+ action: "preprocess-assemble"
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-module-compile"
+ action: "objc-compile"
+ action: "objc++-compile"
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "-fprofile-arcs"
+ flag: "-ftest-coverage"
+ flag: "-g"
+ }
+ }
+ flag_set {
+ action: "c++-link-interface-dynamic-library"
+ action: "c++-link-dynamic-library"
+ action: "c++-link-executable"
+ flag_group {
+ flag: "-lgcov"
+ }
+ }
+ requires {
+ feature: "coverage"
+ }
+ provides: "profile"
+ }
+ feature {
+ name: "cpp_linker_flags"
+ flag_set {
+ action: "c++-link-executable"
+ action: "c++-link-dynamic-library"
+ flag_group {
+ flag: "-undefined"
+ flag: "dynamic_lookup"
+ }
+ }
+ }
+ feature {
+ name: "apply_implicit_frameworks"
+ flag_set {
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "-framework Foundation"
+ }
+ }
+ }
+ feature {
+ name: "link_cocoa"
+ flag_set {
+ action: "objc-executable"
+ action: "objc++-executable"
+ flag_group {
+ flag: "-framework Cocoa"
+ }
+ }
+ }
+ feature {
+ name: "apply_simulator_compiler_flags"
+ }
+ feature {
+ name: "unfiltered_cxx_flags"
+ }
+ feature {
+ name: "bitcode_embedded_markers"
+ }
+ feature {
+ name: "bitcode_embedded"
+ }
+ feature {
+ name: "copts"
+ flag_set {
+ action: "assemble"
+ action: "preprocess-assemble"
+ action: "c-compile"
+ action: "c++-compile"
+ action: "c++-header-parsing"
+ action: "c++-header-preprocessing"
+ action: "c++-module-compile"
+ action: "c++-module-codegen"
+ action: "objc-compile"
+ action: "objc++-compile"
+ flag_group {
+ flag: "%{copts}"
+ iterate_over: "copts"
+ }
+ expand_if_all_available: "copts"
+ }
+ }
+ feature {
+ name: "dbg_only_flag"
+ flag_set {
+ action: "objc-compile"
+ flag_group {
+ flag: "--DBG_ONLY_FLAG"
+ }
+ }
+ }
+ feature {
+ name: "fastbuild_only_flag"
+ flag_set {
+ action: "objc-compile"
+ flag_group {
+ flag: "--FASTBUILD_ONLY_FLAG"
+ }
+ }
+ }
+ feature {
+ name: "opt_only_flag"
+ flag_set {
+ action: "objc-compile"
+ flag_group {
+ flag: "--OPT_ONLY_FLAG"
+ }
+ }
+ }
+ action_config {
+ config_name: "strip"
+ action_name: "strip"
+ tool {
+ tool_path: "mac/strip"
+ }
+ flag_set {
+ flag_group {
+ flag: "-S"
+ flag: "-o"
+ flag: "%{output_file}"
+ flag: "-R"
+ flag: ".gnu.switches.text.quote_paths"
+ flag: "-R"
+ flag: ".gnu.switches.text.bracket_paths"
+ flag: "-R"
+ flag: ".gnu.switches.text.system_paths"
+ flag: "-R"
+ flag: ".gnu.switches.text.cpp_defines"
+ flag: "-R"
+ flag: ".gnu.switches.text.cpp_includes"
+ flag: "-R"
+ flag: ".gnu.switches.text.cl_args"
+ flag: "-R"
+ flag: ".gnu.switches.text.lipo_info"
+ flag: "-R"
+ flag: ".gnu.switches.text.annotation"
+ }
+ flag_group {
+ flag: "%{stripopts}"
+ iterate_over: "stripopts"
+ }
+ flag_group {
+ flag: "%{input_file}"
+ }
+ }
+ }
+ action_config {
+ config_name: "c-compile"
+ action_name: "c-compile"
+ tool {
+ tool_path: "mac/wrapped_clang"
+ execution_requirement: "requires-darwin"
+ }
+ flag_set {
+ flag_group {
+ flag: "-arch x86_64"
+ }
+ }
+ implies: "preprocessor_defines"
+ implies: "include_system_dirs"
+ implies: "version_min"
+ implies: "objc_arc"
+ implies: "no_objc_arc"
+ implies: "apple_env"
+ implies: "copts"
+ }
+ action_config {
+ config_name: "c++-compile"
+ action_name: "c++-compile"
+ tool {
+ tool_path: "mac/wrapped_clang"
+ execution_requirement: "requires-darwin"
+ }
+ flag_set {
+ flag_group {
+ flag: "-arch x86_64"
+ }
+ }
+ implies: "preprocessor_defines"
+ implies: "include_system_dirs"
+ implies: "version_min"
+ implies: "objc_arc"
+ implies: "no_objc_arc"
+ implies: "apple_env"
+ implies: "copts"
+ }
+ action_config {
+ config_name: "c++-module-compile"
+ action_name: "c++-module-compile"
+ tool {
+ tool_path: "mac/wrapped_clang"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "preprocessor_defines"
+ implies: "include_system_dirs"
+ implies: "version_min"
+ implies: "objc_arc"
+ implies: "no_objc_arc"
+ implies: "apple_env"
+ implies: "copts"
+ }
+ action_config {
+ config_name: "c++-header-parsing"
+ action_name: "c++-header-parsing"
+ tool {
+ tool_path: "mac/wrapped_clang"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "preprocessor_defines"
+ implies: "include_system_dirs"
+ implies: "version_min"
+ implies: "objc_arc"
+ implies: "no_objc_arc"
+ implies: "apple_env"
+ implies: "copts"
+ }
+ action_config {
+ config_name: "c++-header-preprocessing"
+ action_name: "c++-header-preprocessing"
+ tool {
+ tool_path: "mac/wrapped_clang"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "preprocessor_defines"
+ implies: "include_system_dirs"
+ implies: "version_min"
+ implies: "objc_arc"
+ implies: "no_objc_arc"
+ implies: "apple_env"
+ implies: "copts"
+ }
+ action_config {
+ config_name: "objc-compile"
+ action_name: "objc-compile"
+ tool {
+ tool_path: "mac/wrapped_clang"
+ execution_requirement: "requires-darwin"
+ }
+ flag_set {
+ flag_group {
+ flag: "-arch x86_64"
+ }
+ }
+ implies: "objc_actions"
+ implies: "apply_default_compiler_flags"
+ implies: "apply_default_warnings"
+ implies: "framework_paths"
+ implies: "preprocessor_defines"
+ implies: "include_system_dirs"
+ implies: "version_min"
+ implies: "objc_arc"
+ implies: "no_objc_arc"
+ implies: "apple_env"
+ implies: "copts"
+ }
+ action_config {
+ config_name: "objc++-compile"
+ action_name: "objc++-compile"
+ tool {
+ tool_path: "mac/wrapped_clang"
+ execution_requirement: "requires-darwin"
+ }
+ flag_set {
+ flag_group {
+ flag: "-arch x86_64"
+ flag: "-stdlib=libc++"
+ flag: "-std=gnu++11"
+ }
+ }
+ implies: "apply_default_compiler_flags"
+ implies: "apply_default_warnings"
+ implies: "framework_paths"
+ implies: "preprocessor_defines"
+ implies: "include_system_dirs"
+ implies: "version_min"
+ implies: "objc_arc"
+ implies: "no_objc_arc"
+ implies: "apple_env"
+ implies: "copts"
+ }
+ action_config {
+ config_name: "assemble"
+ action_name: "assemble"
+ tool {
+ tool_path: "mac/wrapped_clang"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "objc_arc"
+ implies: "no_objc_arc"
+ implies: "include_system_dirs"
+ implies: "apple_env"
+ implies: "copts"
+ }
+ action_config {
+ config_name: "preprocess-assemble"
+ action_name: "preprocess-assemble"
+ tool {
+ tool_path: "mac/wrapped_clang"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "preprocessor_defines"
+ implies: "include_system_dirs"
+ implies: "version_min"
+ implies: "objc_arc"
+ implies: "no_objc_arc"
+ implies: "apple_env"
+ implies: "copts"
+ }
+ action_config {
+ config_name: "objc-archive"
+ action_name: "objc-archive"
+ tool {
+ tool_path: "mac/libtool"
+ execution_requirement: "requires-darwin"
+ }
+ flag_set {
+ flag_group {
+ flag: "-static"
+ flag: "-filelist"
+ flag: "%{obj_list_path}"
+ flag: "-arch_only"
+ flag: "x86_64"
+ flag: "-syslibroot"
+ flag: "%{sdk_dir}"
+ flag: "-o"
+ flag: "%{archive_path}"
+ }
+ }
+ implies: "apple_env"
+ }
+ action_config {
+ config_name: "objc-executable"
+ action_name: "objc-executable"
+ tool {
+ tool_path: "mac/wrapped_clang"
+ execution_requirement: "requires-darwin"
+ }
+ flag_set {
+ flag_group {
+ flag: "-arch x86_64"
+ }
+ flag_group {
+ flag: "-Xlinker"
+ flag: "-objc_abi_version"
+ flag: "-Xlinker"
+ flag: "2"
+ flag: "-Xlinker"
+ flag: "-rpath"
+ flag: "-Xlinker"
+ flag: "@executable_path/Frameworks"
+ flag: "-fobjc-link-runtime"
+ flag: "-ObjC"
+ }
+ flag_group {
+ flag: "-framework %{framework_names}"
+ iterate_over: "framework_names"
+ }
+ flag_group {
+ flag: "-weak_framework %{weak_framework_names}"
+ iterate_over: "weak_framework_names"
+ }
+ flag_group {
+ flag: "-l%{library_names}"
+ iterate_over: "library_names"
+ }
+ flag_group {
+ flag: "-filelist %{filelist}"
+ }
+ flag_group {
+ flag: "-o %{linked_binary}"
+ }
+ flag_group {
+ flag: "-force_load %{force_load_exec_paths}"
+ iterate_over: "force_load_exec_paths"
+ }
+ flag_group {
+ flag: "%{dep_linkopts}"
+ iterate_over: "dep_linkopts"
+ }
+ flag_group {
+ flag: "-Wl,%{attr_linkopts}"
+ iterate_over: "attr_linkopts"
+ }
+ }
+ implies: "include_system_dirs"
+ implies: "framework_paths"
+ implies: "version_min"
+ implies: "legacy_link_flags"
+ implies: "apple_env"
+ implies: "apply_implicit_frameworks"
+ }
+ action_config {
+ config_name: "objc++-executable"
+ action_name: "objc++-executable"
+ tool {
+ tool_path: "mac/wrapped_clang++"
+ execution_requirement: "requires-darwin"
+ }
+ flag_set {
+ flag_group {
+ flag: "-stdlib=libc++"
+ flag: "-std=gnu++11"
+ }
+ flag_group {
+ flag: "-arch x86_64"
+ }
+ flag_group {
+ flag: "-Xlinker"
+ flag: "-objc_abi_version"
+ flag: "-Xlinker"
+ flag: "2"
+ flag: "-Xlinker"
+ flag: "-rpath"
+ flag: "-Xlinker"
+ flag: "@executable_path/Frameworks"
+ flag: "-fobjc-link-runtime"
+ flag: "-ObjC"
+ }
+ flag_group {
+ flag: "-framework %{framework_names}"
+ iterate_over: "framework_names"
+ }
+ flag_group {
+ flag: "-weak_framework %{weak_framework_names}"
+ iterate_over: "weak_framework_names"
+ }
+ flag_group {
+ flag: "-l%{library_names}"
+ iterate_over: "library_names"
+ }
+ flag_group {
+ flag: "-filelist %{filelist}"
+ }
+ flag_group {
+ flag: "-o %{linked_binary}"
+ }
+ flag_group {
+ flag: "-force_load %{force_load_exec_paths}"
+ iterate_over: "force_load_exec_paths"
+ }
+ flag_group {
+ flag: "%{dep_linkopts}"
+ iterate_over: "dep_linkopts"
+ }
+ flag_group {
+ flag: "-Wl,%{attr_linkopts}"
+ iterate_over: "attr_linkopts"
+ }
+ }
+ implies: "include_system_dirs"
+ implies: "framework_paths"
+ implies: "version_min"
+ implies: "legacy_link_flags"
+ implies: "apple_env"
+ implies: "apply_implicit_frameworks"
+ }
+ action_config {
+ config_name: "c++-link-executable"
+ action_name: "c++-link-executable"
+ tool {
+ tool_path: "mac/clang"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "symbol_counts"
+ implies: "linkstamps"
+ implies: "output_execpath_flags_executable"
+ implies: "global_whole_archive_open"
+ implies: "runtime_root_flags"
+ implies: "input_param_flags"
+ implies: "force_pic_flags"
+ implies: "legacy_link_flags"
+ implies: "strip_debug_symbols"
+ implies: "linker_param_file"
+ implies: "version_min"
+ implies: "apple_env"
+ implies: "cpp_linker_flags"
+ }
+ action_config {
+ config_name: "c++-link-dynamic-library"
+ action_name: "c++-link-dynamic-library"
+ tool {
+ tool_path: "mac/clang"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "has_configured_linker_path"
+ implies: "symbol_counts"
+ implies: "shared_flag"
+ implies: "linkstamps"
+ implies: "output_execpath_flags"
+ implies: "global_whole_archive_open"
+ implies: "runtime_root_flags"
+ implies: "input_param_flags"
+ implies: "legacy_link_flags"
+ implies: "strip_debug_symbols"
+ implies: "linker_param_file"
+ implies: "version_min"
+ implies: "apple_env"
+ implies: "cpp_linker_flags"
+ }
+ action_config {
+ config_name: "c++-link-static-library"
+ action_name: "c++-link-static-library"
+ tool {
+ tool_path: "mac/ar_wrapper"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "global_whole_archive_open"
+ implies: "runtime_root_flags"
+ implies: "archiver_flags"
+ implies: "input_param_flags"
+ implies: "linker_param_file"
+ implies: "apple_env"
+ }
+ action_config {
+ config_name: "c++-link-alwayslink-static-library"
+ action_name: "c++-link-alwayslink-static-library"
+ tool {
+ tool_path: "mac/ar_wrapper"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "global_whole_archive_open"
+ implies: "runtime_root_flags"
+ implies: "archiver_flags"
+ implies: "input_param_flags"
+ implies: "linker_param_file"
+ implies: "apple_env"
+ }
+ action_config {
+ config_name: "c++-link-pic-static-library"
+ action_name: "c++-link-pic-static-library"
+ tool {
+ tool_path: "mac/ar_wrapper"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "global_whole_archive_open"
+ implies: "runtime_root_flags"
+ implies: "archiver_flags"
+ implies: "input_param_flags"
+ implies: "linker_param_file"
+ implies: "apple_env"
+ }
+ action_config {
+ config_name: "c++-link-alwayslink-pic-static-library"
+ action_name: "c++-link-alwayslink-pic-static-library"
+ tool {
+ tool_path: "mac/ar_wrapper"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "global_whole_archive_open"
+ implies: "runtime_root_flags"
+ implies: "archiver_flags"
+ implies: "input_param_flags"
+ implies: "linker_param_file"
+ implies: "apple_env"
+ }
+ action_config {
+ config_name: "c++-link-interface-dynamic-library"
+ action_name: "c++-link-interface-dynamic-library"
+ tool {
+ tool_path: "mac/clang"
+ execution_requirement: "requires-darwin"
+ }
+ implies: "strip_debug_symbols"
+ implies: "apple_env"
+ }
+ action_config {
+ config_name: "objc-fully-link"
+ action_name: "objc-fully-link"
+ tool {
+ tool_path: "mac/libtool"
+ execution_requirement: "requires-darwin"
+ }
+ flag_set {
+ flag_group {
+ flag: "-static"
+ flag: "-arch_only"
+ flag: "x86_64"
+ flag: "-syslibroot"
+ flag: "%{sdk_dir}"
+ flag: "-o"
+ flag: "%{fully_linked_archive_path}"
+ }
+ flag_group {
+ flag: "%{objc_library_exec_paths}"
+ iterate_over: "objc_library_exec_paths"
+ }
+ flag_group {
+ flag: "%{cc_library_exec_paths}"
+ iterate_over: "cc_library_exec_paths"
+ }
+ flag_group {
+ flag: "%{imported_library_exec_paths}"
+ iterate_over: "imported_library_exec_paths"
+ }
+ }
+ implies: "apple_env"
+ }
+ cc_target_os: "apple"
+}
+toolchain {
toolchain_identifier: "ios_x86_64"
host_system_name: "x86_64-apple-macosx"
target_system_name: "x86_64-apple-ios"
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
index 7f2ab2b02a..39c4b119f5 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
@@ -676,7 +676,7 @@ public abstract class MockCcSupport {
try {
return PackageIdentifier.create(
RepositoryName.create(TestConstants.TOOLS_REPOSITORY),
- PathFragment.create(TestConstants.TOOLS_REPOSITORY_PATH));
+ PathFragment.create(TestConstants.MOCK_CC_CROSSTOOL_PATH));
} catch (LabelSyntaxException e) {
Verify.verify(false);
throw new AssertionError();
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/MockObjcSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/MockObjcSupport.java
index 4cbf95a631..73f9e9b491 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/MockObjcSupport.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/MockObjcSupport.java
@@ -37,6 +37,11 @@ public final class MockObjcSupport {
private static final String DEFAULT_OSX_CROSSTOOL_DIR = "tools/osx/crosstool";
private static final String MOCK_OSX_CROSSTOOL_FILE =
"com/google/devtools/build/lib/packages/util/MOCK_OSX_CROSSTOOL";
+
+ /** The label of the {@code xcode_config} target used in test to enumerate available xcodes. */
+ public static final String XCODE_VERSION_CONFIG =
+ TestConstants.TOOLS_REPOSITORY + "//tools/objc:host_xcodes";
+
/**
* The build label for the mock OSX crosstool configuration.
*/
@@ -69,10 +74,10 @@ public final class MockObjcSupport {
"xcrunwrapper",
"mcov",
"libtool")) {
- config.create("tools/objc/" + tool);
+ config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/objc/" + tool);
}
config.create(
- "tools/objc/BUILD",
+ TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/objc/BUILD",
"package(default_visibility=['//visibility:public'])",
"exports_files(glob(['**']))",
"filegroup(name = 'default_provisioning_profile', srcs = ['foo.mobileprovision'])",
@@ -89,7 +94,8 @@ public final class MockObjcSupport {
"objc_binary(name = 'xctest_appbin', srcs = ['objc_dummy.mm'])",
"filegroup(",
" name = 'protobuf_well_known_types',",
- " srcs = ['//objcproto:well_known_type.proto'],",
+ String.format(
+ " srcs = ['%s//objcproto:well_known_type.proto'],", TestConstants.TOOLS_REPOSITORY),
")",
"xcode_config(name = 'host_xcodes', default = ':version7_3_1')",
"xcode_version(",
@@ -98,24 +104,42 @@ public final class MockObjcSupport {
" default_ios_sdk_version = \"" + DEFAULT_IOS_SDK_VERSION + "\",",
")",
"objc_library(name = 'dummy_lib', srcs = ['objc_dummy.mm'])");
- config.create("tools/objc/foo.mobileprovision", "No such luck");
- config.create("tools/objc/compile_protos.py");
- config.create("tools/objc/xctest.plist");
- config.create("tools/objc/proto_support");
- config.create("tools/objc/ios_runner.sh.mac_template");
- config.create("tools/objc/j2objc_dead_code_pruner.py");
- config.create("tools/objc/header_scanner");
+ // If the bazel tools repository is not in the workspace, also create a workspace tools/objc
+ // package with a few lingering dependencies.
+ // TODO(b/64537078): Move these dependencies underneath the tools workspace.
+ if (TestConstants.TOOLS_REPOSITORY_SCRATCH.length() > 0) {
+ config.create(
+ "tools/objc/BUILD",
+ "package(default_visibility=['//visibility:public'])",
+ "exports_files(glob(['**']))",
+ "ios_application(name = 'xctest_app', binary = ':xctest_appbin')",
+ "objc_binary(name = 'xctest_appbin', srcs = ['objc_dummy.mm'])",
+ "filegroup(name = 'default_provisioning_profile', srcs = ['foo.mobileprovision'])",
+ "filegroup(name = 'xctest_infoplist', srcs = ['xctest.plist'])");
+ }
+ config.create(
+ TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/objc/foo.mobileprovision", "No such luck");
+ config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/objc/compile_protos.py");
+ config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/objc/xctest.plist");
+ config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/objc/proto_support");
+ config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/objc/ios_runner.sh.mac_template");
+ config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/objc/j2objc_dead_code_pruner.py");
+ config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/objc/header_scanner");
createCrosstoolPackage(config, partialToolchainLines);
+ setupIosSimDevice(config);
+ setupIosTest(config);
+ setupObjcProto(config);
}
/**
* Sets up mock IOS test support.
*/
public static void setupIosTest(MockToolsConfig config) throws IOException {
- config.create("tools/objc/precomp_testrunner_deploy.jar");
- config.create("tools/objc/StdRedirect.dylib");
+ config.create(
+ TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/objc/precomp_testrunner_deploy.jar");
+ config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/objc/StdRedirect.dylib");
createMemleaksSim(config);
- config.create("tools/objc/ios_test.sh.bazel_template");
+ config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/objc/ios_test.sh.bazel_template");
}
/**
@@ -123,7 +147,7 @@ public final class MockObjcSupport {
*/
public static void setupIosSimDevice(MockToolsConfig config) throws IOException {
config.create(
- "tools/objc/sim_devices/BUILD",
+ TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/objc/sim_devices/BUILD",
"ios_device(",
" name = 'default',",
" ios_version = '9.8',",
@@ -132,34 +156,22 @@ public final class MockObjcSupport {
}
private static void createMemleaksSim(MockToolsConfig config) throws IOException {
- config.create("tools/objc/memleaks/BUILD",
- "package(default_visibility=['//visibility:public'])",
+ config.create(
+ TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/objc/memleaks/BUILD",
+ "package(default_visibility=['//visibility:public'])",
"objc_library(",
" name = 'memleaks',",
" srcs = ['memleaks.m'],",
")");
- config.create("tools/objc/memleaks/libmemleaks.a");
- config.create("tools/objc/memleaks_plugin");
+ config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/objc/memleaks/libmemleaks.a");
+ config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/objc/memleaks_plugin");
}
- /**
- * Sets up the support for building protocol buffers for ObjC.
- */
- public static void setupObjcProto(MockToolsConfig config) throws IOException {
- config.overwrite(
- "WORKSPACE",
- TestConstants.WORKSPACE_CONTENT + "bind(",
- " name = 'objc_proto_lib',",
- " actual = '//objcproto:ProtocolBuffers_lib',",
- ")",
- "bind(",
- " name = 'objc_protobuf_lib',",
- " actual = '//objcproto:protobuf_lib',",
- ")");
-
+ /** Sets up the support for building protocol buffers for ObjC. */
+ private static void setupObjcProto(MockToolsConfig config) throws IOException {
config.create(
- "objcproto/BUILD",
+ TestConstants.TOOLS_REPOSITORY_SCRATCH + "objcproto/BUILD",
"package(default_visibility=['//visibility:public'])",
"objc_library(",
" name = 'ProtocolBuffers_lib',",
@@ -176,9 +188,9 @@ public final class MockObjcSupport {
" name = 'well_known_type_proto',",
" srcs = ['well_known_type.proto'],",
")");
- config.create("objcproto/empty.m");
- config.create("objcproto/empty.cc");
- config.create("objcproto/well_known_type.proto");
+ config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "objcproto/empty.m");
+ config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "objcproto/empty.cc");
+ config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "objcproto/well_known_type.proto");
}
/**
@@ -250,12 +262,18 @@ public final class MockObjcSupport {
" srcs = [",
" 'ar',",
" 'libempty.a',",
- " '//tools/objc:libtool'",
+ String.format(" '%s//tools/objc:libtool'", TestConstants.TOOLS_REPOSITORY),
" ],",
")");
for (String arch :
ImmutableList.of(
+ // TODO(b/64492583): Remove 'darwin', as this is legacy and redundant with
+ // darwin_x86_64.
+ "darwin",
+ // TODO(b/36471772): Remove 'k8' once unit tests do not require a host configuration
+ // transition from the apple crosstool configuration.
+ "x64_windows",
"ios_x86_64",
"ios_i386",
"ios_armv7",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java
index f879b160b1..c0a24572ff 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java
@@ -682,7 +682,7 @@ public class CrosstoolConfigurationLoaderTest extends AnalysisTestCase {
PackageIdentifier.create(
TestConstants.TOOLS_REPOSITORY,
PathFragment.create(
- PathFragment.create(TestConstants.TOOLS_REPOSITORY_PATH),
+ PathFragment.create(TestConstants.MOCK_CC_CROSSTOOL_PATH),
PathFragment.create(path)));
return packageIdentifier.getPathUnderExecRoot();
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java
index 346e235a3d..d76970aa85 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java
@@ -242,7 +242,6 @@ public class AppleStaticLibraryTest extends ObjcRuleTestCase {
useConfiguration(
"--ios_multi_cpus=i386,x86_64",
- "--experimental_disable_go",
"--experimental_disable_jvm",
"--crosstool_top=//tools/osx/crosstool:crosstool");
@@ -594,7 +593,7 @@ public class AppleStaticLibraryTest extends ObjcRuleTestCase {
"objc_library(name = 'objcLib', srcs = [ 'b.m' ], deps = [':avoidLib'])",
"objc_library(name = 'avoidLib', srcs = [ 'c.m' ])");
- useConfiguration("--experimental_disable_go", "--experimental_disable_jvm");
+ useConfiguration("--experimental_disable_jvm");
CommandAction action = linkLibAction("//package:test");
assertThat(Artifact.toRootRelativePaths(action.getInputs())).contains(
"package/libobjcLib.a");
@@ -617,11 +616,11 @@ public class AppleStaticLibraryTest extends ObjcRuleTestCase {
"objc_library(name = 'objcLib', srcs = [ 'b.m' ])",
"objc_library(name = 'avoidLib', srcs = [ 'c.m' ])");
- useConfiguration("--experimental_disable_go", "--experimental_disable_jvm");
+ useConfiguration("--experimental_disable_jvm");
CommandAction action = linkLibAction("//package:test");
assertThat(Artifact.toRootRelativePaths(action.getInputs())).contains(
"package/libobjcLib.a");
assertThat(Artifact.toRootRelativePaths(action.getInputs())).doesNotContain(
"package/libavoidCcLib.a");
}
-}
+} \ No newline at end of file
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/AppleToolchainSelectionTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/AppleToolchainSelectionTest.java
index b062851303..cc2b748643 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/AppleToolchainSelectionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/AppleToolchainSelectionTest.java
@@ -94,9 +94,7 @@ public class AppleToolchainSelectionTest extends ObjcRuleTestCase {
@Test
public void testToolchainSelectionCcDepDefault() throws Exception {
- useConfiguration(
- "--experimental_disable_jvm",
- "--experimental_disable_go");
+ useConfiguration("--experimental_disable_jvm");
ScratchAttributeWriter
.fromLabelString(this, "cc_library", "//b:lib")
.setList("srcs", "b.cc")
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/BUILD b/src/test/java/com/google/devtools/build/lib/rules/objc/BUILD
new file mode 100644
index 0000000000..00620ee559
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/BUILD
@@ -0,0 +1,82 @@
+package(default_visibility = ["//visibility:private"])
+
+filegroup(
+ name = "srcs",
+ srcs = glob(["**"]),
+ visibility = ["//src/test/java/com/google/devtools/build/lib:__pkg__"],
+)
+
+java_library(
+ name = "ObjcRulesTests_lib",
+ srcs = [
+ # TODO(b/64531582): Finish fixing all test files in this directory.
+ "AppleBinaryTest.java",
+ "AppleDynamicLibraryTest.java",
+ "AppleStaticLibraryTest.java",
+ "AppleStubBinaryTest.java",
+ "AppleToolchainSelectionTest.java",
+ "BinaryRuleType.java",
+ "BinaryRuleTypePair.java",
+ "HeaderDiscoveryTest.java",
+ "HeaderThinningTest.java",
+ "InterspersingTest.java",
+ "IosDeviceTest.java",
+ "J2ObjcLibraryTest.java",
+ "J2ObjcSourceTest.java",
+ "LegacyAppleBinaryTest.java",
+ "LegacyAppleDynamicLibraryTest.java",
+ "LegacyAppleStaticLibraryTest.java",
+ "LegacyObjcBundleLibraryTest.java",
+ "LegacyObjcBundleTest.java",
+ "LegacyObjcFrameworkTest.java",
+ "LegacyObjcImportTest.java",
+ "LegacyObjcLibraryTest.java",
+ "ObjcBundleLibraryTest.java",
+ "ObjcBundleTest.java",
+ "ObjcFrameworkTest.java",
+ "ObjcImportTest.java",
+ "ObjcLibraryTest.java",
+ "ObjcProviderTest.java",
+ "ObjcRuleTestCase.java",
+ "ObjcSkylarkTest.java",
+ "OnlyNeedsSourcesRuleType.java",
+ "RuleType.java",
+ "TargetDeviceFamilyTest.java",
+ "ValueTest.java",
+ ],
+ deps = [
+ "//src/main/java/com/google/devtools/build/lib:build-base",
+ "//src/main/java/com/google/devtools/build/lib:packages-internal",
+ "//src/main/java/com/google/devtools/build/lib:util",
+ "//src/main/java/com/google/devtools/build/lib:vfs",
+ "//src/main/java/com/google/devtools/build/lib/actions",
+ "//src/main/java/com/google/devtools/build/lib/cmdline",
+ "//src/main/java/com/google/devtools/build/lib/rules/apple",
+ "//src/main/java/com/google/devtools/build/lib/rules/cpp",
+ "//src/main/java/com/google/devtools/build/lib/rules/objc",
+ "//src/main/java/com/google/devtools/common/options",
+ "//src/main/protobuf:bundlemerge_java_proto",
+ "//src/main/protobuf:plmerge_java_proto",
+ "//src/test/java/com/google/devtools/build/lib:actions_testutil",
+ "//src/test/java/com/google/devtools/build/lib:analysis_testutil",
+ "//src/test/java/com/google/devtools/build/lib:packages_testutil",
+ "//src/test/java/com/google/devtools/build/lib:testutil",
+ "//third_party:guava",
+ "//third_party:guava-testlib",
+ "//third_party:jsr305",
+ "//third_party:junit4",
+ "//third_party:truth",
+ "//third_party/java/dd_plist",
+ ],
+)
+
+java_test(
+ name = "ObjcRulesTests",
+ shard_count = 20,
+ test_class = "com.google.devtools.build.lib.AllTests",
+ runtime_deps = [
+ ":ObjcRulesTests_lib",
+ "//src/main/java/com/google/devtools/build/lib:util",
+ "//src/test/java/com/google/devtools/build/lib:testutil",
+ ],
+)
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/IosExtensionBinaryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/IosExtensionBinaryTest.java
index a0c95d249c..01754e5c23 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/IosExtensionBinaryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/IosExtensionBinaryTest.java
@@ -40,7 +40,7 @@ public class IosExtensionBinaryTest extends ObjcRuleTestCase {
@Before
public final void initializeToolsConfigMock() throws Exception {
MockProtoSupport.setup(mockToolsConfig);
- MockObjcSupport.setupObjcProto(mockToolsConfig);
+ MockObjcSupport.setup(mockToolsConfig);
}
@Test
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java
index 224559e8b6..7bb3872c31 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java
@@ -56,7 +56,7 @@ public class IosTestTest extends ObjcRuleTestCase {
MockObjcSupport.setupIosTest(mockToolsConfig);
MockObjcSupport.setupIosSimDevice(mockToolsConfig);
MockProtoSupport.setup(mockToolsConfig);
- MockObjcSupport.setupObjcProto(mockToolsConfig);
+ MockObjcSupport.setup(mockToolsConfig);
invalidatePackages();
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibraryTest.java
index 3fff23e56c..e0e5098520 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/J2ObjcLibraryTest.java
@@ -83,7 +83,6 @@ public class J2ObjcLibraryTest extends ObjcRuleTestCase {
MockObjcSupport.setupIosTest(mockToolsConfig);
MockJ2ObjcSupport.setup(mockToolsConfig);
MockProtoSupport.setup(mockToolsConfig);
- MockObjcSupport.setupObjcProto(mockToolsConfig);
useConfiguration("--proto_toolchain_for_java=//tools/proto/toolchains:java");
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryTest.java
index acc33621bd..4775e2df30 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryTest.java
@@ -71,7 +71,7 @@ public class ObjcBinaryTest extends ObjcRuleTestCase {
@Before
public final void initializeToolsConfigMock() throws Exception {
MockProtoSupport.setup(mockToolsConfig);
- MockObjcSupport.setupObjcProto(mockToolsConfig);
+ MockObjcSupport.setup(mockToolsConfig);
}
@Test
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java
index 3409176a53..08b1d0b191 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java
@@ -81,7 +81,6 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
@Test
public void testFilesToBuild() throws Exception {
- useConfiguration("--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL);
ConfiguredTarget target =
createLibraryTargetWriter("//objc:One")
.setAndCreateFiles("srcs", "a.m", "b.m", "private.h")
@@ -93,7 +92,6 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
@Test
public void testCompilesSources() throws Exception {
- useConfiguration("--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL);
createLibraryTargetWriter("//objc/lib1")
.setAndCreateFiles("srcs", "a.m")
.setAndCreateFiles("hdrs", "hdr.h")
@@ -122,8 +120,6 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
@Test
public void testObjcPlusPlusCompile() throws Exception {
useConfiguration(
- "--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL,
- "--experimental_disable_go",
"--cpu=ios_i386",
"--ios_cpu=i386",
"--ios_minimum_os=9.10.11");
@@ -138,7 +134,6 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
@Test
public void testObjcPlusPlusCompileDarwin() throws Exception {
useConfiguration(ObjcCrosstoolMode.ALL,
- "--experimental_disable_go",
"--cpu=darwin_x86_64",
"--macos_minimum_os=9.10.11",
// TODO(b/36126423): Darwin should imply macos, so the
@@ -155,8 +150,6 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
@Test
public void testCompilationModeDbg() throws Exception {
useConfiguration(
- "--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL,
- "--experimental_disable_go",
"--cpu=ios_i386",
"--ios_cpu=i386",
"--compilation_mode=dbg");
@@ -180,8 +173,6 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
@Test
public void testCompilationModeFastbuild() throws Exception {
useConfiguration(
- "--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL,
- "--experimental_disable_go",
"--cpu=ios_i386",
"--ios_cpu=i386",
"--compilation_mode=fastbuild");
@@ -205,8 +196,6 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
@Test
public void testCompilationModeOpt() throws Exception {
useConfiguration(
- "--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL,
- "--experimental_disable_go",
"--cpu=ios_i386",
"--ios_cpu=i386",
"--compilation_mode=opt");
@@ -408,8 +397,6 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
@Test
public void testCompilationActions_simulator() throws Exception {
useConfiguration(
- "--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL,
- "--experimental_disable_go",
"--cpu=ios_i386",
"--ios_cpu=i386");
@@ -462,8 +449,6 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
@Test
public void testCompilationActions_device() throws Exception {
useConfiguration(
- "--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL,
- "--experimental_disable_go",
"--cpu=ios_armv7",
"--ios_cpu=armv7");
@@ -558,11 +543,7 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
@Test
public void testCompilationActionsWithCopts() throws Exception {
- useConfiguration(
- "--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL,
- "--cpu=ios_i386",
- "--ios_cpu=i386",
- "--experimental_disable_go");
+ useConfiguration("--cpu=ios_i386", "--ios_cpu=i386");
createLibraryTargetWriter("//objc:lib")
.setAndCreateFiles("srcs", "a.m", "b.m", "private.h")
.setAndCreateFiles("hdrs", "c.h")
@@ -711,8 +692,6 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
@Test
public void testArchiveAction_simulator() throws Exception {
useConfiguration(
- "--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL,
- "--experimental_disable_go",
"--cpu=ios_i386",
"--ios_cpu=i386");
createLibraryTargetWriter("//objc:lib")
@@ -743,8 +722,6 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
@Test
public void testArchiveAction_device() throws Exception {
useConfiguration(
- "--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL,
- "--experimental_disable_go",
"--cpu=ios_armv7",
"--ios_cpu=armv7");
createLibraryTargetWriter("//objc:lib")
@@ -775,8 +752,6 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
@Test
public void testFullyLinkArchiveAction_simulator() throws Exception {
useConfiguration(
- "--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL,
- "--experimental_disable_go",
"--cpu=ios_i386",
"--ios_cpu=i386");
createLibraryTargetWriter("//objc:lib_dep")
@@ -815,8 +790,6 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
@Test
public void testFullyLinkArchiveAction_device() throws Exception {
useConfiguration(
- "--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL,
- "--experimental_disable_go",
"--cpu=ios_armv7",
"--ios_cpu=armv7");
createLibraryTargetWriter("//objc:lib_dep")
@@ -886,8 +859,6 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
@Test
public void testPropagatesDefinesToDependersTransitively() throws Exception {
useConfiguration(
- "--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL,
- "--experimental_disable_go",
"--cpu=ios_x86_64",
"--ios_cpu=x86_64");
createLibraryTargetWriter("//lib1:lib1")
@@ -1352,9 +1323,7 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
@Test
public void testApplePlatformEnvForCcLibraryDep() throws Exception {
- useConfiguration(
- "--experimental_disable_go", "--experimental_disable_jvm", "--cpu=ios_i386",
- "--crosstool_top=//tools/osx/crosstool:crosstool");
+ useConfiguration("--experimental_disable_jvm", "--cpu=ios_i386");
scratch.file("package/BUILD",
"cc_library(",
@@ -1483,8 +1452,6 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
@Test
public void testCompilationActionsWithIQuotesInCopts() throws Exception {
useConfiguration(
- "--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL,
- "--experimental_disable_go",
"--cpu=ios_i386",
"--ios_cpu=i386");
createLibraryTargetWriter("//objc:lib")
@@ -1552,7 +1519,6 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
MockObjcSupport.setup(mockToolsConfig, "default_grte_top : '//x'");
useConfiguration(
ObjcCrosstoolMode.ALL,
- "--experimental_disable_go",
"--cpu=ios_x86_64",
"--ios_cpu=x86_64");
scratch.file(
@@ -1584,7 +1550,6 @@ public class ObjcLibraryTest extends ObjcRuleTestCase {
"}");
useConfiguration(
ObjcCrosstoolMode.ALL,
- "--experimental_disable_go",
"--cpu=ios_x86_64",
"--ios_cpu=x86_64");
scratch.file(
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspectTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspectTest.java
index 83611a5b4b..35adffbd07 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspectTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspectTest.java
@@ -36,7 +36,7 @@ public final class ObjcProtoAspectTest extends BuildViewTestCase {
@Before
public final void initializeToolsConfigMock() throws Exception {
MockProtoSupport.setup(mockToolsConfig);
- MockObjcSupport.setupObjcProto(mockToolsConfig);
+ MockObjcSupport.setup(mockToolsConfig);
}
@Test
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryTest.java
index a2689cd8fc..043f21b8cb 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryTest.java
@@ -44,7 +44,7 @@ public class ObjcProtoLibraryTest extends ObjcRuleTestCase {
@Before
public final void initializeToolsConfigMock() throws Exception {
MockProtoSupport.setup(mockToolsConfig);
- MockObjcSupport.setupObjcProto(mockToolsConfig);
+ MockObjcSupport.setup(mockToolsConfig);
}
@Before
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java
index 2f4d819a36..b48d242c6b 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java
@@ -95,6 +95,7 @@ import com.google.devtools.build.lib.rules.cpp.CppCompileAction;
import com.google.devtools.build.lib.rules.cpp.CppLinkAction;
import com.google.devtools.build.lib.rules.objc.CompilationSupport.ExtraLinkArgs;
import com.google.devtools.build.lib.rules.objc.ObjcCommandLineOptions.ObjcCrosstoolMode;
+import com.google.devtools.build.lib.testutil.TestConstants;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.xcode.bundlemerge.proto.BundleMergeProtos;
import com.google.devtools.build.xcode.bundlemerge.proto.BundleMergeProtos.BundleFile;
@@ -122,14 +123,17 @@ import org.junit.Before;
* simply call a check... method) across several rule types.
*/
public abstract class ObjcRuleTestCase extends BuildViewTestCase {
- protected static final String MOCK_ACTOOLWRAPPER_PATH = "tools/objc/actoolwrapper";
- protected static final String MOCK_IBTOOLWRAPPER_PATH = "tools/objc/ibtoolwrapper";
- protected static final String MOCK_BUNDLEMERGE_PATH = "tools/objc/bundlemerge";
- protected static final String MOCK_MOMCWRAPPER_PATH = "tools/objc/momcwrapper";
+ protected static final String MOCK_ACTOOLWRAPPER_PATH =
+ toolsRepoExecPath("tools/objc/actoolwrapper");
+ protected static final String MOCK_IBTOOLWRAPPER_PATH =
+ toolsRepoExecPath("tools/objc/ibtoolwrapper");
+ protected static final String MOCK_BUNDLEMERGE_PATH = toolsRepoExecPath("tools/objc/bundlemerge");
+ protected static final String MOCK_MOMCWRAPPER_PATH = toolsRepoExecPath("tools/objc/momcwrapper");
protected static final String MOCK_SWIFTSTDLIBTOOLWRAPPER_PATH =
- "tools/objc/swiftstdlibtoolwrapper";
- protected static final String MOCK_LIBTOOL_PATH = "tools/objc/libtool";
- protected static final String MOCK_XCRUNWRAPPER_PATH = "tools/objc/xcrunwrapper";
+ toolsRepoExecPath("tools/objc/swiftstdlibtoolwrapper");
+ protected static final String MOCK_LIBTOOL_PATH = toolsRepoExecPath("tools/objc/libtool");
+ protected static final String MOCK_XCRUNWRAPPER_PATH =
+ toolsRepoExecPath("tools/objc/xcrunwrapper");
protected static final ImmutableList<String> FASTBUILD_COPTS =
ImmutableList.of("-O0", "-DDEBUG=1");
@@ -200,15 +204,23 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
DottedVersion minOsVersion) {
switch (configurationDistinguisher) {
case UNKNOWN:
- return String.format("blaze-out/ios_%s-fastbuild/", arch);
+ return String.format("%s-out/ios_%s-fastbuild/", TestConstants.PRODUCT_NAME, arch);
case IOS_EXTENSION: // Intentional fall-through.
case IOS_APPLICATION:
case APPLEBIN_IOS:
- return String.format("blaze-out/ios-%1$s-min%3$s-%2$s-ios_%1$s-fastbuild/",
- arch, configurationDistinguisher.toString().toLowerCase(Locale.US), minOsVersion);
+ return String.format(
+ "%1$s-out/ios-%2$s-min%4$s-%3$s-ios_%2$s-fastbuild/",
+ TestConstants.PRODUCT_NAME,
+ arch,
+ configurationDistinguisher.toString().toLowerCase(Locale.US),
+ minOsVersion);
case APPLEBIN_WATCHOS:
- return String.format("blaze-out/watchos-%1$s-min%3$s-%2$s-watchos_%1$s-fastbuild/",
- arch, configurationDistinguisher.toString().toLowerCase(Locale.US), minOsVersion);
+ return String.format(
+ "%1$s-out/watchos-%2$s-min%4$s-%3$s-watchos_%2$s-fastbuild/",
+ TestConstants.PRODUCT_NAME,
+ arch,
+ configurationDistinguisher.toString().toLowerCase(Locale.US),
+ minOsVersion);
default:
throw new AssertionError();
}
@@ -239,11 +251,14 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
switch (configurationDistinguisher) {
case IOS_EXTENSION:
case APPLEBIN_IOS:
- return String.format("blaze-out/%s-ios_%s-fastbuild/bin/",
- configurationDistinguisher.toString().toLowerCase(Locale.US), arch);
+ return String.format(
+ "%s-out/%s-ios_%s-fastbuild/bin/",
+ TestConstants.PRODUCT_NAME,
+ configurationDistinguisher.toString().toLowerCase(Locale.US),
+ arch);
case UNKNOWN: // Intentional fall-through.
case IOS_APPLICATION:
- return String.format("blaze-out/ios_%s-fastbuild/bin/", arch);
+ return String.format("%s-out/ios_%s-fastbuild/bin/", TestConstants.PRODUCT_NAME, arch);
default:
throw new AssertionError();
}
@@ -273,7 +288,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
* Returns the genfiles dir for iOS builds in the root architecture.
*/
protected static String rootConfigurationGenfiles() {
- return "blaze-out/gcc-4.4.0-glibc-2.3.6-grte-k8-fastbuild/genfiles/";
+ return TestConstants.PRODUCT_NAME + "-out/gcc-4.4.0-glibc-2.3.6-grte-k8-fastbuild/genfiles/";
}
protected String execPathEndingWith(Iterable<Artifact> artifacts, String suffix) {
@@ -284,7 +299,9 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
public final void initializeMockToolsConfig() throws Exception {
MockObjcSupport.setup(mockToolsConfig);
MockProtoSupport.setup(mockToolsConfig);
- MockObjcSupport.setupObjcProto(mockToolsConfig);
+
+ // Set flags required by objc builds.
+ useConfiguration();
}
protected static String frameworkDir(ConfiguredTarget target) {
@@ -368,6 +385,8 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
protected void useConfiguration(ObjcCrosstoolMode objcCrosstoolMode, String... args)
throws Exception {
ImmutableList.Builder<String> extraArgsBuilder = ImmutableList.builder();
+ extraArgsBuilder.addAll(TestConstants.OSX_CROSSTOOL_FLAGS);
+
switch(objcCrosstoolMode) {
case ALL:
extraArgsBuilder.add("--experimental_objc_crosstool=all");
@@ -381,7 +400,8 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
}
extraArgsBuilder
- .add("--experimental_disable_go")
+ .add("--xcode_version_config=" + MockObjcSupport.XCODE_VERSION_CONFIG)
+ .add("--apple_crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL)
.add("--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL);
ImmutableList<String> extraArgs = extraArgsBuilder.build();
@@ -468,10 +488,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
protected void checkLinkActionCorrect(RuleType ruleType, ExtraLinkArgs extraLinkArgs)
throws Exception {
- useConfiguration(
- "--cpu=ios_i386",
- "--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL,
- "--experimental_disable_go");
+ useConfiguration("--cpu=ios_i386");
createLibraryTargetWriter("//lib1:lib1")
.setAndCreateFiles("srcs", "a.m", "b.m", "private.h")
@@ -501,11 +518,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
// Regression test for b/29094356.
protected void checkLinkActionDuplicateInputs(RuleType ruleType, ExtraLinkArgs extraLinkArgs)
throws Exception {
- useConfiguration(
- "--experimental_disable_go",
- "--experimental_disable_jvm",
- "--cpu=ios_i386",
- "--crosstool_top=//tools/osx/crosstool:crosstool");
+ useConfiguration("--experimental_disable_jvm", "--cpu=ios_i386");
scratch.file("lib/BUILD",
"cc_library(",
@@ -717,13 +730,18 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
.containsExactly("ios_runner.sh.mac_template");
assertThat(Artifact.toRootRelativePaths(action.getOutputs()))
.containsExactly("x/x_runner.sh");
- assertThat(action.getSubstitutions())
- .containsExactly(
- Substitution.of("%ipa_file%", "x/x.ipa"),
- Substitution.of("%sim_device%", "'iPhone X'"),
- Substitution.of("%sdk_version%", "3"),
- Substitution.of("%app_name%", "x"),
- Substitution.of("%std_redirect_dylib_path%", "tools/objc/StdRedirect.dylib"));
+ Map<String, String> substitutions =
+ action
+ .getSubstitutions()
+ .stream()
+ .collect(ImmutableMap.toImmutableMap(sub -> sub.getKey(), s -> s.getValue()));
+ ;
+ assertThat(substitutions.get("%ipa_file%")).isEqualTo("x/x.ipa");
+ assertThat(substitutions.get("%sim_device%")).isEqualTo("'iPhone X'");
+ assertThat(substitutions.get("%sdk_version%")).isEqualTo("3");
+ assertThat(substitutions.get("%app_name%")).isEqualTo("x");
+ assertThat(substitutions.get("%std_redirect_dylib_path%"))
+ .endsWith("tools/objc/StdRedirect.dylib");
}
protected void checkGenerateRunnerScriptAction_escaped(RuleType ruleType) throws Exception {
@@ -892,7 +910,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
SpawnAction mergeAction = (SpawnAction) getGeneratingAction(entitlements);
assertThat(Artifact.toExecPaths(mergeAction.getInputs()))
- .contains("tools/objc/device_debug_entitlements.plist");
+ .contains(toolsRepoExecPath("tools/objc/device_debug_entitlements.plist"));
Artifact mergeControl =
getFirstArtifactEndingWith(mergeAction.getInputs(), ".merge-entitlements-control");
@@ -905,7 +923,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
}
assertThat(mergeControlProto.getSourceFileList())
- .contains("tools/objc/device_debug_entitlements.plist");
+ .contains(toolsRepoExecPath("tools/objc/device_debug_entitlements.plist"));
}
private void assertNoDebugEntitlements(RuleType ruleType) throws Exception {
@@ -916,7 +934,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
SpawnAction entitlementsAction = (SpawnAction) getGeneratingAction(entitlements);
assertThat(Artifact.toExecPaths(entitlementsAction.getInputs()))
- .doesNotContain("tools/objc/device_debug_entitlements.plist");
+ .doesNotContain(toolsRepoExecPath("tools/objc/device_debug_entitlements.plist"));
}
protected void checkCompilesSources(RuleType ruleType) throws Exception {
@@ -2153,7 +2171,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
}
protected void checkProvidesStoryboardObjects(RuleType ruleType) throws Exception {
- useConfiguration("--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL);
+ useConfiguration();
createTargetWithStoryboards(ruleType);
ObjcProvider provider = providerForTarget("//x:x");
ImmutableList<Artifact> storyboardInputs = ImmutableList.of(
@@ -2186,16 +2204,14 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
throws Exception {
Artifact storyboardZip = getBinArtifact("x/1.storyboard.zip", target);
CommandAction compileAction = (CommandAction) getGeneratingAction(storyboardZip);
- assertThat(compileAction.getInputs()).containsExactly(
- getSourceArtifact(MOCK_IBTOOLWRAPPER_PATH),
- getSourceArtifact("x/1.storyboard")
- );
+ assertThat(Artifact.toExecPaths(compileAction.getInputs()))
+ .containsExactly(MOCK_IBTOOLWRAPPER_PATH, "x/1.storyboard");
String archiveRoot = targetDevices.contains("watch") ? "." : "1.storyboardc";
assertThat(compileAction.getOutputs()).containsExactly(storyboardZip);
assertThat(compileAction.getArguments())
.containsExactlyElementsIn(
new Builder()
- .add(MOCK_IBTOOLWRAPPER_PATH)
+ .addDynamicString(MOCK_IBTOOLWRAPPER_PATH)
.addExecPath(storyboardZip)
.addDynamicString(archiveRoot) // archive root
.add("--minimum-deployment-target", minimumOsVersion.toString())
@@ -2209,16 +2225,14 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
storyboardZip = getBinArtifact("x/ja.lproj/loc.storyboard.zip", target);
compileAction = (CommandAction) getGeneratingAction(storyboardZip);
- assertThat(compileAction.getInputs()).containsExactly(
- getSourceArtifact(MOCK_IBTOOLWRAPPER_PATH),
- getSourceArtifact("x/ja.lproj/loc.storyboard")
- );
+ assertThat(Artifact.toExecPaths(compileAction.getInputs()))
+ .containsExactly(MOCK_IBTOOLWRAPPER_PATH, "x/ja.lproj/loc.storyboard");
assertThat(compileAction.getOutputs()).containsExactly(storyboardZip);
archiveRoot = targetDevices.contains("watch") ? "ja.lproj/" : "ja.lproj/loc.storyboardc";
assertThat(compileAction.getArguments())
.containsExactlyElementsIn(
new Builder()
- .add(MOCK_IBTOOLWRAPPER_PATH)
+ .addDynamicString(MOCK_IBTOOLWRAPPER_PATH)
.addExecPath(storyboardZip)
.addDynamicString(archiveRoot) // archive root
.add("--minimum-deployment-target", minimumOsVersion.toString())
@@ -2243,13 +2257,12 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
Artifact binary = getBinArtifact("x_lipobin", target);
SpawnAction toolAction = (SpawnAction) getGeneratingAction(swiftLibsZip);
- assertThat(toolAction.getInputs()).containsExactly(
- binary,
- getSourceArtifact(MOCK_SWIFTSTDLIBTOOLWRAPPER_PATH));
+ assertThat(Artifact.toExecPaths(toolAction.getInputs()))
+ .containsExactly(binary.getExecPathString(), MOCK_SWIFTSTDLIBTOOLWRAPPER_PATH);
assertThat(toolAction.getOutputs()).containsExactly(swiftLibsZip);
CustomCommandLine.Builder expectedCommandLine =
- CustomCommandLine.builder().add(MOCK_SWIFTSTDLIBTOOLWRAPPER_PATH);
+ CustomCommandLine.builder().addDynamicString(MOCK_SWIFTSTDLIBTOOLWRAPPER_PATH);
if (toolchain != null) {
expectedCommandLine.add("--toolchain", toolchain);
@@ -2704,7 +2717,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
}
protected void checkDefinesFromCcLibraryDep(RuleType ruleType) throws Exception {
- useConfiguration("--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL);
+ useConfiguration();
ScratchAttributeWriter.fromLabelString(this, "cc_library", "//dep:lib")
.setList("srcs", "a.cc")
.setList("defines", "foo", "bar")
@@ -2933,7 +2946,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
.containsExactly(
"x/foo.png",
"x/x_lipobin",
- "tools/objc/bundlemerge",
+ toolsRepoExecPath("tools/objc/bundlemerge"),
"x/x.ipa-control",
"x/x-MergedInfo.plist");
}
@@ -2953,7 +2966,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
}
public void checkCppSourceCompilesWithCppFlags(RuleType ruleType) throws Exception {
- useConfiguration("--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL);
+ useConfiguration();
ruleType.scratchTarget(
scratch, "srcs", "['a.mm', 'b.cc', 'c.mm', 'd.cxx', 'e.c', 'f.m', 'g.C']");
@@ -3568,11 +3581,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
private void checkCcDependency(
ConfigurationDistinguisher configurationDistinguisher, String targetName) throws Exception {
- useConfiguration(
- "--experimental_disable_go",
- "--experimental_disable_jvm",
- "--cpu=ios_i386",
- "--crosstool_top=//tools/osx/crosstool:crosstool");
+ useConfiguration("--experimental_disable_jvm", "--cpu=ios_i386");
scratch.file("lib/BUILD",
"cc_library(",
@@ -3600,8 +3609,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
protected void checkCcDependencyMultiArch(BinaryRuleTypePair ruleTypePair,
ConfigurationDistinguisher configurationDistinguisher) throws Exception {
- useConfiguration("--experimental_disable_go", "--experimental_disable_jvm",
- "--ios_multi_cpus=armv7,arm64", "--crosstool_top=//tools/osx/crosstool:crosstool");
+ useConfiguration("--experimental_disable_jvm", "--ios_multi_cpus=armv7,arm64");
scratch.file("lib/BUILD",
"cc_library(",
@@ -3701,8 +3709,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
protected void checkGenruleWithoutJavaCcDependency(BinaryRuleTypePair ruleTypePair)
throws Exception {
- useConfiguration("--experimental_disable_go", "--experimental_disable_jvm",
- "--ios_multi_cpus=armv7,arm64", "--crosstool_top=//tools/osx/crosstool:crosstool");
+ useConfiguration("--experimental_disable_jvm", "--ios_multi_cpus=armv7,arm64");
String targets = ruleTypePair.targets(scratch, "x", "srcs", "['gen.m']");
scratch.file("x/BUILD",
@@ -3735,11 +3742,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
protected void checkCcDependencyWithProtoDependency(BinaryRuleTypePair ruleTypePair,
ConfigurationDistinguisher configurationDistinguisher) throws Exception {
MockProtoSupport.setup(mockToolsConfig);
- useConfiguration(
- "--experimental_disable_go",
- "--experimental_disable_jvm",
- "--cpu=ios_i386",
- "--crosstool_top=//tools/osx/crosstool:crosstool");
+ useConfiguration("--experimental_disable_jvm", "--cpu=ios_i386");
scratch.file("lib/BUILD",
"proto_library(",
" name = 'protolib',",
@@ -3781,10 +3784,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
ConfigurationDistinguisher configurationDistinguisher) throws Exception {
MockProtoSupport.setup(mockToolsConfig);
MockJ2ObjcSupport.setup(mockToolsConfig);
- useConfiguration(
- "--experimental_disable_go",
- "--cpu=ios_i386",
- "--crosstool_top=//tools/osx/crosstool:crosstool");
+ useConfiguration("--cpu=ios_i386");
scratch.file("lib/BUILD",
"java_library(",
@@ -3810,11 +3810,12 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
getFirstArtifactEndingWith(appLipoAction.getInputs(), "bin_bin"));
String i386Prefix = iosConfigurationCcDepsBin("i386", configurationDistinguisher);
- ImmutableList<String> archiveFilenames = ImmutableList.of(
- i386Prefix + "lib/libcclib.a",
- i386Prefix + "x/libbin.a",
- i386Prefix + "lib/libjavalib_j2objc.a",
- i386Prefix + "third_party/java/j2objc/libjre_core_lib.a");
+ ImmutableList<String> archiveFilenames =
+ ImmutableList.of(
+ i386Prefix + "lib/libcclib.a",
+ i386Prefix + "x/libbin.a",
+ i386Prefix + "lib/libjavalib_j2objc.a",
+ i386Prefix + toolsRepoExecPath("third_party/java/j2objc/libjre_core_lib.a"));
verifyObjlist(binBinAction, "x/bin-linker.objlist",
archiveFilenames.toArray(new String[archiveFilenames.size()]));
@@ -3830,8 +3831,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
protected void checkCcDependencyWithProtoDependencyMultiArch(BinaryRuleTypePair ruleTypePair,
ConfigurationDistinguisher configurationDistinguisher) throws Exception {
MockProtoSupport.setup(mockToolsConfig);
- useConfiguration("--experimental_disable_go", "--experimental_disable_jvm",
- "--ios_multi_cpus=armv7,arm64", "--crosstool_top=//tools/osx/crosstool:crosstool");
+ useConfiguration("--experimental_disable_jvm", "--ios_multi_cpus=armv7,arm64");
scratch.file("lib/BUILD",
"proto_library(",
" name = 'protolib',",
@@ -3900,15 +3900,13 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
Artifact storyboardZip = getBinArtifact("x/launch.storyboard.zip", target);
CommandAction storyboardCompile = (CommandAction) getGeneratingAction(storyboardZip);
- assertThat(storyboardCompile.getInputs())
- .containsExactly(
- getSourceArtifact(MOCK_IBTOOLWRAPPER_PATH),
- getSourceArtifact("x/launch.storyboard"));
+ assertThat(Artifact.toExecPaths(storyboardCompile.getInputs()))
+ .containsExactly(MOCK_IBTOOLWRAPPER_PATH, "x/launch.storyboard");
assertThat(storyboardCompile.getArguments())
.isEqualTo(
new CustomCommandLine.Builder()
- .add(MOCK_IBTOOLWRAPPER_PATH)
+ .addDynamicString(MOCK_IBTOOLWRAPPER_PATH)
.addExecPath(storyboardZip)
.add("launch.storyboardc")
.add("--minimum-deployment-target")
@@ -4255,8 +4253,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
" framework_imports = glob(['MyFramework.framework/*']),",
" is_dynamic = 1,",
")");
- useConfiguration("--ios_multi_cpus=i386,x86_64", "--experimental_disable_go",
- "--experimental_disable_jvm", "--crosstool_top=//tools/osx/crosstool:crosstool");
+ useConfiguration("--ios_multi_cpus=i386,x86_64", "--experimental_disable_jvm");
Action lipobinAction = lipoBinAction("//x:x");
@@ -4322,8 +4319,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
scratch.file("package/BUILD",
"cc_library(name = 'cclib', srcs = ['dep.c'])");
- useConfiguration("--ios_multi_cpus=i386,x86_64", "--experimental_disable_go",
- "--experimental_disable_jvm", "--crosstool_top=//tools/osx/crosstool:crosstool");
+ useConfiguration("--ios_multi_cpus=i386,x86_64", "--experimental_disable_jvm");
Action appLipoAction = actionProducingArtifact("//x:x", "_lipobin");
String i386Prefix =
@@ -4369,8 +4365,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
ruleType.scratchTarget(scratch,
"srcs", "['a.m']",
"deps", "['//lib1:lib1', '//lib2:lib2']");
- useConfiguration("--ios_multi_cpus=i386,x86_64", "--experimental_disable_go",
- "--experimental_disable_jvm", "--crosstool_top=//tools/osx/crosstool:crosstool");
+ useConfiguration("--ios_multi_cpus=i386,x86_64", "--experimental_disable_jvm");
Action lipobinAction = lipoBinAction("//x:x");
@@ -4405,8 +4400,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
// Regression test for b/32310268.
protected void checkAliasedLinkoptsThroughObjcLibrary(RuleType ruleType) throws Exception {
- useConfiguration("--experimental_disable_go", "--experimental_disable_jvm",
- "--cpu=ios_i386", "--crosstool_top=//tools/osx/crosstool:crosstool");
+ useConfiguration("--experimental_disable_jvm", "--cpu=ios_i386");
scratch.file("bin/BUILD",
"objc_library(",
@@ -4435,8 +4429,7 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
protected void checkCcDependencyLinkoptsArePropagatedToLinkAction(
RuleType ruleType) throws Exception {
- useConfiguration("--experimental_disable_go", "--experimental_disable_jvm",
- "--cpu=ios_i386", "--crosstool_top=//tools/osx/crosstool:crosstool");
+ useConfiguration("--experimental_disable_jvm", "--cpu=ios_i386");
scratch.file("bin/BUILD",
"cc_library(",
@@ -4529,8 +4522,6 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
protected void checkAppleSdkIphoneosPlatformEnv(RuleType ruleType) throws Exception {
ruleType.scratchTarget(scratch);
useConfiguration(
- "--crosstool_top=" + MockObjcSupport.DEFAULT_OSX_CROSSTOOL,
- "--experimental_disable_go",
"--cpu=ios_arm64");
CommandAction action = linkAction("//x:x");
@@ -4986,4 +4977,16 @@ public abstract class ObjcRuleTestCase extends BuildViewTestCase {
assertThat(Joiner.on(" ").join(nineObjcLibCompileAction.getArguments()))
.contains("-mios-simulator-version-min=9.0");
}
+
+ /** Returns the full label string for labels within the main tools repository. */
+ protected static String toolsRepoLabel(String label) {
+ return TestConstants.TOOLS_REPOSITORY + label;
+ }
+
+ /**
+ * Returns the full exec path string for exec paths of targets within the main tools repository.
+ */
+ protected static String toolsRepoExecPath(String execPath) {
+ return TestConstants.TOOLS_REPOSITORY_PATH_PREFIX + execPath;
+ }
}
diff --git a/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java b/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java
index e7662a4ecc..dc7271c63d 100644
--- a/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java
+++ b/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java
@@ -74,9 +74,15 @@ public class TestConstants {
public static final String GCC_INCLUDE_PATH = "external/bazel_tools/tools/cpp/gcc3";
- public static final String TOOLS_REPOSITORY = "@bazel_tools";
+ /** The path in which the mock cc crosstool resides. */
+ public static final String MOCK_CC_CROSSTOOL_PATH = "tools/cpp";
- public static final String TOOLS_REPOSITORY_PATH = "tools/cpp";
+ /** The workspace repository label under which built-in tools reside. */
+ public static final String TOOLS_REPOSITORY = "@bazel_tools";
+ /** The file path in which to create files so that they end up under {@link #TOOLS_REPOSITORY}. */
+ public static final String TOOLS_REPOSITORY_SCRATCH = "/bazel_tools_workspace/";
+ /** The output file path prefix for tool file dependencies. */
+ public static final String TOOLS_REPOSITORY_PATH_PREFIX = "external/bazel_tools/";
public static final ImmutableList<String> DOCS_RULES_PATHS = ImmutableList.of(
"src/main/java/com/google/devtools/build/lib/rules");
@@ -85,6 +91,12 @@ public class TestConstants {
public static final String GENRULE_SETUP = "@bazel_tools//tools/genrule:genrule-setup.sh";
public static final String GENRULE_SETUP_PATH = "genrule-setup.sh";
+ /**
+ * A list of flags required to support use of the crosstool on OSX.
+ */
+ public static final ImmutableList<String> OSX_CROSSTOOL_FLAGS =
+ ImmutableList.of();
+
public static final InvocationPolicy TEST_INVOCATION_POLICY =
InvocationPolicy.getDefaultInstance();