Skip to content

Commit

Permalink
Merge pull request #98 from bazel-ios/amber/local-debug-options
Browse files Browse the repository at this point in the history
Add local debug options as a dependency, but only if local_debug_options_enabled
  • Loading branch information
amberdixon authored Aug 12, 2020
2 parents 0f34ead + 2b769bd commit 359607a
Show file tree
Hide file tree
Showing 11 changed files with 107 additions and 31 deletions.
12 changes: 11 additions & 1 deletion .bazelrc
Original file line number Diff line number Diff line change
@@ -1,9 +1,19 @@
# We can't create a bzl_library for rules-swift because of its visibility,
# so circumvent by not using the sandbox
build --strategy=Stardoc=standalone

# Debugging does not work in sandbox mode. Uncomment these lines to turn off sandboxing.
# build --genrule_strategy=standalone
# build --spawn_strategy=standalone

build --verbose_failures # Print the full command line for commands that failed
build --test_output=errors # Prints log file output to the console on failure

# By default do not build the tests for sources-with-prebuilt-binaries,
# By default do not build the tests for sources-with-prebuilt-binaries,
# because it takes quite some time. They will only run on CI
build --deleted_packages tests/ios/frameworks/sources-with-prebuilt-binaries

# Enable these features to test local and CI builds
# when swiftmodule caching is enabled.
# build --features=swift.cacheable_swiftmodules
# build --features=swift.use_global_module_cache
39 changes: 39 additions & 0 deletions rules/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,4 +1,43 @@
load("@bazel_skylib//rules:common_settings.bzl", "bool_flag")
load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library")

exports_files(
glob(["*.bzl"]),
visibility = ["//docs:__pkg__"],
)

genrule(
name = "empty",
outs = ["empty.swift"],
cmd = "touch $(OUTS)",
)

# A dummy target that enables serialize-debugging-options but only in local development,
# so that swiftmodule paths will refer to paths on the local machine and LLDB will work.
# See details here: https://github.com/ios-bazel-users/ios-bazel-users/blob/master/DebuggableRemoteSwift.md
swift_library(
name = "_LocalDebugOptions",
srcs = [":empty"],
copts = [
"-Xfrontend",
"-serialize-debugging-options",
],
module_name = "_LocalDebugOptions",
tags = [
"manual",
"no-remote",
],
visibility = ["//visibility:public"],
)

bool_flag(
name = "local_debug_options_enabled",
build_setting_default = False,
)

config_setting(
name = "local_debug_options",
flag_values = {
":local_debug_options_enabled": "True",
},
)
12 changes: 11 additions & 1 deletion rules/app.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,19 @@ def ios_application(name, apple_library = apple_library, **kwargs):
application_kwargs["launch_storyboard"] = application_kwargs.pop("launch_storyboard", library.launch_screen_storyboard_name)
application_kwargs["families"] = application_kwargs.pop("families", ["iphone", "ipad"])

local_debug_options_for_swift = []

# A dummy target that enables serialize-debugging-options but only in local development.
# As of Xcode 11.5, LocalDebugOptions is not needed for debugging apps.
if library.has_swift_sources:
local_debug_options_for_swift.append("@build_bazel_rules_ios//rules:_LocalDebugOptions")

rules_apple_ios_application(
name = name,
deps = library.deps,
deps = library.deps + select({
"@build_bazel_rules_ios//rules:local_debug_options": local_debug_options_for_swift,
"//conditions:default": [],
}),
infoplists = infoplists,
**application_kwargs
)
1 change: 1 addition & 0 deletions rules/library.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -608,4 +608,5 @@ def apple_library(name, library_tools = {}, export_private_headers = True, names
namespace = namespace,
linkopts = linkopts,
platforms = platforms,
has_swift_sources = (swift_sources and len(swift_sources) > 0),
)
9 changes: 8 additions & 1 deletion rules/test.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,15 @@ def ios_unit_test(name, apple_library = apple_library, **kwargs):

library = apple_library(name = name, namespace_is_module_name = False, platforms = {"ios": unit_test_kwargs.get("minimum_os_version")}, **kwargs)

local_debug_options_for_swift = []
if library.has_swift_sources and unit_test_kwargs.get("test_host", None) == None:
local_debug_options_for_swift.append("@build_bazel_rules_ios//rules:_LocalDebugOptions")

rule(
name = name,
deps = library.lib_names,
deps = library.lib_names + select({
"@build_bazel_rules_ios//rules:local_debug_options": local_debug_options_for_swift,
"//conditions:default": [],
}),
**unit_test_kwargs
)
5 changes: 4 additions & 1 deletion rules/xcodeproj.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,7 @@ def _xcodeproj_impl(ctx):
proj_settings_debug = {
"GCC_PREPROCESSOR_DEFINITIONS": "DEBUG",
"SWIFT_ACTIVE_COMPILATION_CONDITIONS": "DEBUG",
"BAZEL_DEBUG_SYMBOLS_FLAG": "--compilation_mode=dbg",
}
proj_settings = {
"base": proj_settings_base,
Expand Down Expand Up @@ -303,7 +304,9 @@ def _xcodeproj_impl(ctx):
"CLANG_ENABLE_MODULES": "YES",
"CLANG_ENABLE_OBJC_ARC": "YES",
}
framework_search_paths = []

# Ensure Xcode will resolve references to the XCTest framework.
framework_search_paths = ["$(PLATFORM_DIR)/Developer/Library/Frameworks"]
for fi in target_info.framework_includes.to_list():
if fi[0] != "/":
fi = "$BAZEL_WORKSPACE_ROOT/%s" % fi
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@
BAZEL_BIN_SUBDIR = /tests/ios/frameworks/objc;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
FRAMEWORK_SEARCH_PATHS = "";
FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks";
GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
MACH_O_TYPE = "$(inherited)";
Expand All @@ -284,6 +284,7 @@
isa = XCBuildConfiguration;
buildSettings = {
BAZEL_BUILD_EXEC = "$BAZEL_STUBS_DIR/build-wrapper";
BAZEL_DEBUG_SYMBOLS_FLAG = "--compilation_mode=dbg";
BAZEL_INSTALLER = $BAZEL_INSTALLERS_DIR/installer;
BAZEL_INSTALLERS_DIR = $PROJECT_FILE_PATH/bazelinstallers;
BAZEL_OUTPUT_PROCESSOR = "$BAZEL_STUBS_DIR/output-processor.rb";
Expand Down Expand Up @@ -313,7 +314,7 @@
BAZEL_BIN_SUBDIR = /tests/ios/frameworks/objc;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
FRAMEWORK_SEARCH_PATHS = "\"$BAZEL_WORKSPACE_ROOT/bazel-out/applebin_ios-ios_x86_64-fastbuild-ST-cecbe3cb5ea2880cd67bf87ed1de59490130c0d897af2739d7b0f3dd10b40f24/bin/tests/ios/frameworks/objc/ObjcFramework\"";
FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks \"$BAZEL_WORKSPACE_ROOT/bazel-out/applebin_ios-ios_x86_64-fastbuild-ST-cecbe3cb5ea2880cd67bf87ed1de59490130c0d897af2739d7b0f3dd10b40f24/bin/tests/ios/frameworks/objc/ObjcFramework\"";
GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
IPHONEOS_DEPLOYMENT_TARGET = 13.2;
MACH_O_TYPE = "$(inherited)";
Expand All @@ -329,7 +330,7 @@
BAZEL_BIN_SUBDIR = /tests/ios/frameworks/objc;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
FRAMEWORK_SEARCH_PATHS = "";
FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks";
GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
MACH_O_TYPE = "$(inherited)";
Expand Down Expand Up @@ -370,7 +371,7 @@
BAZEL_BIN_SUBDIR = /tests/ios/frameworks/objc;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
FRAMEWORK_SEARCH_PATHS = "\"$BAZEL_WORKSPACE_ROOT/bazel-out/applebin_ios-ios_x86_64-fastbuild-ST-cecbe3cb5ea2880cd67bf87ed1de59490130c0d897af2739d7b0f3dd10b40f24/bin/tests/ios/frameworks/objc/ObjcFramework\" \"$BAZEL_WORKSPACE_ROOT/bazel-out/applebin_ios-ios_x86_64-fastbuild-ST-b6e49002cb7dafa9fcd24b0dd76f1c63efbe73d59588c29fc9a7b41408f04f90/bin/tests/ios/frameworks/objc/ObjcFrameworkTestLib\"";
FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks \"$BAZEL_WORKSPACE_ROOT/bazel-out/applebin_ios-ios_x86_64-fastbuild-ST-cecbe3cb5ea2880cd67bf87ed1de59490130c0d897af2739d7b0f3dd10b40f24/bin/tests/ios/frameworks/objc/ObjcFramework\" \"$BAZEL_WORKSPACE_ROOT/bazel-out/applebin_ios-ios_x86_64-fastbuild-ST-b6e49002cb7dafa9fcd24b0dd76f1c63efbe73d59588c29fc9a7b41408f04f90/bin/tests/ios/frameworks/objc/ObjcFrameworkTestLib\"";
GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
MACH_O_TYPE = "$(inherited)";
Expand All @@ -387,7 +388,7 @@
BAZEL_BIN_SUBDIR = /tests/ios/frameworks/objc;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
FRAMEWORK_SEARCH_PATHS = "\"$BAZEL_WORKSPACE_ROOT/bazel-out/applebin_ios-ios_x86_64-fastbuild-ST-cecbe3cb5ea2880cd67bf87ed1de59490130c0d897af2739d7b0f3dd10b40f24/bin/tests/ios/frameworks/objc/ObjcFramework\" \"$BAZEL_WORKSPACE_ROOT/bazel-out/applebin_ios-ios_x86_64-fastbuild-ST-b6e49002cb7dafa9fcd24b0dd76f1c63efbe73d59588c29fc9a7b41408f04f90/bin/tests/ios/frameworks/objc/ObjcFrameworkTestLib\"";
FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks \"$BAZEL_WORKSPACE_ROOT/bazel-out/applebin_ios-ios_x86_64-fastbuild-ST-cecbe3cb5ea2880cd67bf87ed1de59490130c0d897af2739d7b0f3dd10b40f24/bin/tests/ios/frameworks/objc/ObjcFramework\" \"$BAZEL_WORKSPACE_ROOT/bazel-out/applebin_ios-ios_x86_64-fastbuild-ST-b6e49002cb7dafa9fcd24b0dd76f1c63efbe73d59588c29fc9a7b41408f04f90/bin/tests/ios/frameworks/objc/ObjcFrameworkTestLib\"";
GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
MACH_O_TYPE = "$(inherited)";
Expand All @@ -404,7 +405,7 @@
BAZEL_BIN_SUBDIR = /tests/ios/frameworks/objc;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
FRAMEWORK_SEARCH_PATHS = "\"$BAZEL_WORKSPACE_ROOT/bazel-out/applebin_ios-ios_x86_64-fastbuild-ST-cecbe3cb5ea2880cd67bf87ed1de59490130c0d897af2739d7b0f3dd10b40f24/bin/tests/ios/frameworks/objc/ObjcFramework\"";
FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks \"$BAZEL_WORKSPACE_ROOT/bazel-out/applebin_ios-ios_x86_64-fastbuild-ST-cecbe3cb5ea2880cd67bf87ed1de59490130c0d897af2739d7b0f3dd10b40f24/bin/tests/ios/frameworks/objc/ObjcFramework\"";
GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
IPHONEOS_DEPLOYMENT_TARGET = 13.2;
MACH_O_TYPE = "$(inherited)";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@
BAZEL_BIN_SUBDIR = /tests/macos/xcodeproj;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
FRAMEWORK_SEARCH_PATHS = "";
FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks";
GCC_PREPROCESSOR_DEFINITIONS = "\"REQUIRED_DEFINED_FLAG=1\" \"FLAG_WITH_VALUE_ZERO=0\" $(inherited)";
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MACH_O_TYPE = "$(inherited)";
Expand All @@ -301,7 +301,7 @@
BAZEL_BIN_SUBDIR = /rules/test_host_app;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
FRAMEWORK_SEARCH_PATHS = "";
FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks";
GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
INFOPLIST_FILE = "$BAZEL_STUBS_DIR/Info-stub.plist";
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
Expand All @@ -319,7 +319,7 @@
BAZEL_BIN_SUBDIR = /rules/test_host_app;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
FRAMEWORK_SEARCH_PATHS = "";
FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks";
GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
INFOPLIST_FILE = "$BAZEL_STUBS_DIR/Info-stub.plist";
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
Expand All @@ -335,6 +335,7 @@
isa = XCBuildConfiguration;
buildSettings = {
BAZEL_BUILD_EXEC = "$BAZEL_STUBS_DIR/build-wrapper";
BAZEL_DEBUG_SYMBOLS_FLAG = "--compilation_mode=dbg";
BAZEL_INSTALLER = $BAZEL_INSTALLERS_DIR/installer;
BAZEL_INSTALLERS_DIR = $PROJECT_FILE_PATH/bazelinstallers;
BAZEL_OUTPUT_PROCESSOR = "$BAZEL_STUBS_DIR/output-processor.rb";
Expand Down Expand Up @@ -389,7 +390,7 @@
BAZEL_BIN_SUBDIR = /tests/macos/xcodeproj;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
FRAMEWORK_SEARCH_PATHS = "";
FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks";
GCC_PREPROCESSOR_DEFINITIONS = "\"REQUIRED_DEFINED_FLAG=1\" \"FLAG_WITH_VALUE_ZERO=0\" $(inherited)";
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MACH_O_TYPE = "$(inherited)";
Expand All @@ -406,7 +407,7 @@
BAZEL_BIN_SUBDIR = /tests/macos/xcodeproj;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
FRAMEWORK_SEARCH_PATHS = "";
FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks";
GCC_PREPROCESSOR_DEFINITIONS = "\"REQUIRED_DEFINED_FLAG=1\" \"FLAG_WITH_VALUE_ZERO=0\" $(inherited)";
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MACH_O_TYPE = "$(inherited)";
Expand All @@ -423,7 +424,7 @@
BAZEL_BIN_SUBDIR = /tests/macos/xcodeproj;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
FRAMEWORK_SEARCH_PATHS = "";
FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks";
GCC_PREPROCESSOR_DEFINITIONS = "\"REQUIRED_DEFINED_FLAG=1\" \"FLAG_WITH_VALUE_ZERO=0\" $(inherited)";
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MACH_O_TYPE = "$(inherited)";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@
BAZEL_BIN_SUBDIR = /tests/macos/xcodeproj;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
FRAMEWORK_SEARCH_PATHS = "";
FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks";
GCC_PREPROCESSOR_DEFINITIONS = "\"REQUIRED_DEFINED_FLAG=1\" \"FLAG_WITH_VALUE_ZERO=0\" $(inherited)";
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MACH_O_TYPE = "$(inherited)";
Expand All @@ -301,7 +301,7 @@
BAZEL_BIN_SUBDIR = /tests/macos/xcodeproj;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
FRAMEWORK_SEARCH_PATHS = "";
FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks";
GCC_PREPROCESSOR_DEFINITIONS = "\"REQUIRED_DEFINED_FLAG=1\" \"FLAG_WITH_VALUE_ZERO=0\" $(inherited)";
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MACH_O_TYPE = "$(inherited)";
Expand Down Expand Up @@ -343,7 +343,7 @@
BAZEL_BIN_SUBDIR = /rules/test_host_app;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
FRAMEWORK_SEARCH_PATHS = "";
FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks";
GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
INFOPLIST_FILE = "$BAZEL_STUBS_DIR/Info-stub.plist";
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
Expand All @@ -361,7 +361,7 @@
BAZEL_BIN_SUBDIR = /rules/test_host_app;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
FRAMEWORK_SEARCH_PATHS = "";
FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks";
GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
INFOPLIST_FILE = "$BAZEL_STUBS_DIR/Info-stub.plist";
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
Expand All @@ -379,7 +379,7 @@
BAZEL_BIN_SUBDIR = /tests/macos/xcodeproj;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
FRAMEWORK_SEARCH_PATHS = "";
FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks";
GCC_PREPROCESSOR_DEFINITIONS = "\"REQUIRED_DEFINED_FLAG=1\" \"FLAG_WITH_VALUE_ZERO=0\" $(inherited)";
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MACH_O_TYPE = "$(inherited)";
Expand All @@ -394,6 +394,7 @@
isa = XCBuildConfiguration;
buildSettings = {
BAZEL_BUILD_EXEC = "$BAZEL_STUBS_DIR/build-wrapper";
BAZEL_DEBUG_SYMBOLS_FLAG = "--compilation_mode=dbg";
BAZEL_INSTALLER = $BAZEL_INSTALLERS_DIR/installer;
BAZEL_INSTALLERS_DIR = $PROJECT_FILE_PATH/bazelinstallers;
BAZEL_OUTPUT_PROCESSOR = "$BAZEL_STUBS_DIR/output-processor.rb";
Expand Down Expand Up @@ -423,7 +424,7 @@
BAZEL_BIN_SUBDIR = /tests/macos/xcodeproj;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
FRAMEWORK_SEARCH_PATHS = "";
FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks";
GCC_PREPROCESSOR_DEFINITIONS = "\"REQUIRED_DEFINED_FLAG=1\" \"FLAG_WITH_VALUE_ZERO=0\" $(inherited)";
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MACH_O_TYPE = "$(inherited)";
Expand Down
Loading

0 comments on commit 359607a

Please sign in to comment.