Skip to content

Commit

Permalink
Add bzlmod support
Browse files Browse the repository at this point in the history
This commit adds support for bzlmod.
See the MODULE.bazel for changes and enable with `--enable_bzlmod`.
  • Loading branch information
luispadron committed May 10, 2023
1 parent dc5cae9 commit 9f5b83e
Show file tree
Hide file tree
Showing 7 changed files with 396 additions and 97 deletions.
60 changes: 47 additions & 13 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,12 @@ jobs:
- name: Build and Test
run: |
# Host config
bazelisk test --local_test_jobs=1 -- //... -//tests/ios/...
bazelisk test \
--local_test_jobs=1 \
--enable_bzlmod \
-- \
//... \
-//tests/ios/...
# Clean up after simctl (https://github.com/bazelbuild/rules_apple/issues/185)
pgrep Simulator | xargs kill || true
Expand All @@ -34,7 +39,9 @@ jobs:
--local_test_jobs=1 \
--apple_platform_type=ios \
--test_arg=--destination=platform=ios_simulator,id=$SIMULATOR_UDID \
-- //tests/ios/...
--enable_bzlmod \
//tests/ios/...
- uses: actions/upload-artifact@v2
if: failure()
with:
Expand All @@ -53,12 +60,20 @@ jobs:
- name: Build and Test
run: |
# Host config
bazelisk build --features apple.virtualize_frameworks --local_test_jobs=1 -- //... -//tests/ios/...
bazelisk build \
--features apple.virtualize_frameworks \
--local_test_jobs=1 \
--enable_bzlmod \
-- \
//... \
-//tests/ios/...
bazelisk build --features apple.virtualize_frameworks \
--local_test_jobs=1 \
--apple_platform_type=ios \
-- //tests/ios/...
bazelisk build \
--features apple.virtualize_frameworks \
--local_test_jobs=1 \
--enable_bzlmod \
--apple_platform_type=ios \
//tests/ios/...
- uses: actions/upload-artifact@v2
if: failure()
Expand All @@ -76,9 +91,10 @@ jobs:
- name: Build and Test
run: |
export USE_BAZEL_VERSION=5.3.2
bazelisk build --features apple.virtualize_frameworks \
--config=ios \
-- //tests/ios/...
bazelisk build \
--features apple.virtualize_frameworks \
//tests/ios/...
- uses: actions/upload-artifact@v2
if: failure()
with:
Expand All @@ -97,6 +113,7 @@ jobs:
bazelisk build \
--ios_multi_cpus=sim_arm64 \
--features apple.virtualize_frameworks \
--enable_bzlmod \
-- \
//... \
-//tests/ios/...
Expand All @@ -106,6 +123,7 @@ jobs:
bazelisk build \
--ios_multi_cpus=sim_arm64 \
--features apple.virtualize_frameworks \
--enable_bzlmod \
--apple_platform_type=ios \
-- \
//tests/ios/... \
Expand All @@ -128,7 +146,10 @@ jobs:
- name: buildifier
run: find $PWD -type f \( -name 'WORKSPACE' -o -name '*.bzl' -o -name '*.bazel' \) | xargs bazel run buildifier -- -lint=fix && git diff --exit-code
- name: Check docs
run: bazelisk run docs && git diff --exit-code docs
run: |
bazelisk run --enable_bzlmod //docs
git diff --exit-code docs
xcodeproj_tests:
name: .xcodeproj Tests on Xcode 14.2.0
runs-on: macos-12
Expand All @@ -152,7 +173,13 @@ jobs:
- name: Select Xcode 14.2.0
run: .github/workflows/xcode_select.sh
- name: Run tests
run: bazelisk test tests/ios/lldb/app:objc_app_po_test tests/ios/lldb/app:objc_app_variable_test --config lldb_ios_test
run: |
bazelisk test \
tests/ios/lldb/app:objc_app_po_test \
tests/ios/lldb/app:objc_app_variable_test \
--config lldb_ios_test \
--enable_bzlmod
- uses: actions/upload-artifact@v2
if: failure()
with:
Expand All @@ -166,4 +193,11 @@ jobs:
- name: Select Xcode
run: .github/workflows/xcode_select.sh
- name: Build App
run: bazelisk build -s tests/ios/app/App --apple_platform_type=ios --ios_minimum_os=10.2 --ios_multi_cpus=i386,x86_64
run: |
bazelisk build \
-s \
tests/ios/app/App \
--apple_platform_type=ios \
--ios_minimum_os=10.2 \
--ios_multi_cpus=i386,x86_64 \
--enable_bzlmod
12 changes: 7 additions & 5 deletions BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@
load("@build_bazel_rules_swift//swift/internal:feature_names.bzl", "SWIFT_FEATURE_USE_GLOBAL_INDEX_STORE")
load("//rules:features.bzl", "feature_names")
load("@bazel_skylib//lib:selects.bzl", "selects")
load("@buildifier_prebuilt//:rules.bzl", "buildifier")

sh_binary(
buildifier(
name = "buildifier",
srcs = select({
"@bazel_tools//src/conditions:darwin_x86_64": ["@buildifier.mac.amd64//file"],
"@bazel_tools//src/conditions:darwin_arm64": ["@buildifier.mac.arm64//file"],
}),
exclude_patterns = [
"./.git/*",
"./bazel-*/*",
],
mode = "fix",
)

config_setting(
Expand Down
124 changes: 124 additions & 0 deletions MODULE.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
"""
Defines all the external repositories and dependencies for rules_ios.
"""

# Defines the rules_ios bzlmod module
# TODO: The `version` needs to be updated between releases
module(
name = "rules_ios",
version = "1.0.1",
bazel_compatibility = [">=5.0.0"],
compatibility_level = 1,
repo_name = "build_bazel_rules_ios",
)

# Declare the bzlmod dependencies needed by rules_ios and users of rules_ios
bazel_dep(
name = "apple_support",
version = "1.5.0",
repo_name = "build_bazel_apple_support",
)
bazel_dep(
name = "rules_apple",
version = "2.2.0",
repo_name = "build_bazel_rules_apple",
)
bazel_dep(
name = "rules_cc",
version = "0.0.6",
)
bazel_dep(
name = "rules_python",
version = "0.21.0",
)
bazel_dep(
name = "rules_swift",
version = "1.7.1",
repo_name = "build_bazel_rules_swift",
)

# Declare the development dependencies needed for rules_ios development
bazel_dep(
name = "buildifier_prebuilt",
version = "6.1.0",
dev_dependency = True,
)
bazel_dep(
name = "rules_pkg",
version = "0.9.1",
dev_dependency = True,
)
bazel_dep(
name = "bazel_skylib",
version = "1.4.1",
dev_dependency = True,
)
bazel_dep(
name = "stardoc",
version = "0.5.3",
dev_dependency = True,
repo_name = "io_bazel_stardoc",
)

# Load non-bzlmod dependencies from rules_ios
non_module_deps = use_extension("//rules:module_extensions.bzl", "non_module_deps")
use_repo(
non_module_deps,
"com_github_yonaskolb_xcodegen",
"xchammer",
)

non_module_dev_deps = use_extension(
"//rules:module_extensions.bzl",
"non_module_dev_deps",
dev_dependency = True,
)
use_repo(
non_module_dev_deps,
"GoogleMobileAdsSDK",
"TensorFlowLiteC",
"arm64-to-sim",
"com_github_apple_swiftcollections",
"tart",
)

# Configure Xcode
xcode_configure = use_extension(
"//rules:module_extensions.bzl",
"xcode_configure",
dev_dependency = True,
)
xcode_configure.configure(
remote_xcode_label = "",
xcode_locator_label = "//tools/toolchains/xcode_configure:xcode_locator.m",
)

# Load non-bzlmod dependencies used in this repo from rules_swift
swift_non_module_deps = use_extension("@build_bazel_rules_swift//swift:extensions.bzl", "non_module_deps")
use_repo(
swift_non_module_deps,
"build_bazel_rules_swift_index_import",
"build_bazel_rules_swift_local_config",
)

# Load non-bzlmod dependencies used in this repo from rules_apple
apple_non_module_deps = use_extension("@build_bazel_rules_apple//apple:extensions.bzl", "non_module_deps")
use_repo(
apple_non_module_deps,
"xctestrunner",
)

# Register the Python toolchain
python = use_extension("@rules_python//python:extensions.bzl", "python")
python.toolchain(
name = "python3_9",
python_version = "3.9",
)
use_repo(
python,
"python3_9_toolchains",
)

register_toolchains(
"@python3_9_toolchains//:all",
)
43 changes: 14 additions & 29 deletions WORKSPACE
Original file line number Diff line number Diff line change
@@ -1,12 +1,20 @@
# This file marks the root of the Bazel workspace.
# See MODULE.bazel for dependencies and setup.
# It is only used when bzlmod is disabled.
# When bzlmod is enabled WORKSPACE.bzlmod is used.

workspace(name = "build_bazel_rules_ios")

load(
"//rules:repositories.bzl",
"rules_ios_dependencies",
"rules_ios_dev_dependencies",
)

rules_ios_dependencies(load_xchammer_dependencies = True)

rules_ios_dev_dependencies()

load(
"@build_bazel_rules_apple//apple:repositories.bzl",
"apple_rules_dependencies",
Expand Down Expand Up @@ -39,41 +47,18 @@ load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")

bazel_skylib_workspace()

load(
"@bazel_tools//tools/build_defs/repo:git.bzl",
"git_repository",
)

git_repository(
name = "io_bazel_stardoc",
commit = "6f274e903009158504a9d9130d7f7d5f3e9421ed",
remote = "https://github.com/bazelbuild/stardoc.git",
shallow_since = "1667581897 -0400",
)

load("@io_bazel_stardoc//:setup.bzl", "stardoc_repositories")

stardoc_repositories()

load(
"@bazel_tools//tools/build_defs/repo:http.bzl",
"http_file",
)
# Download prebuilt binaries buildifier
load("@buildifier_prebuilt//:deps.bzl", "buildifier_prebuilt_deps")

# Download offical release of buildifier.mac
http_file(
name = "buildifier.mac.amd64",
executable = True,
sha256 = "c9378d9f4293fc38ec54a08fbc74e7a9d28914dae6891334401e59f38f6e65dc",
urls = ["https://github.com/bazelbuild/buildtools/releases/download/5.1.0/buildifier-darwin-amd64"],
)
buildifier_prebuilt_deps()

http_file(
name = "buildifier.mac.arm64",
executable = True,
sha256 = "745feb5ea96cb6ff39a76b2821c57591fd70b528325562486d47b5d08900e2e4",
urls = ["https://github.com/bazelbuild/buildtools/releases/download/5.1.0/buildifier-darwin-arm64"],
)
load("@buildifier_prebuilt//:defs.bzl", "buildifier_prebuilt_register_toolchains")

buildifier_prebuilt_register_toolchains()

load(
"//tests/ios/frameworks/external-dependency:external_dependency.bzl",
Expand Down
6 changes: 6 additions & 0 deletions WORKSPACE.bzlmod
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# This file marks the root of the Bazel workspace.
# See MODULE.bazel for dependencies and setup.
# It is only used when bzlmod is enabled.
# When bzlmod is disabled WORKSPACE is used.

workspace(name = "build_bazel_rules_ios")
44 changes: 44 additions & 0 deletions rules/module_extensions.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
"""Definitions for bzlmod module extensions."""

load(
"//rules:repositories.bzl",
"rules_ios_dependencies",
"rules_ios_dev_dependencies",
)
load(
"//tools/toolchains/xcode_configure:xcode_configure.bzl",
_xcode_configure = "xcode_configure",
)

def _non_module_deps_impl(_):
rules_ios_dependencies(
load_xchammer_dependencies = True,
load_bzlmod_dependencies = False,
)

non_module_deps = module_extension(implementation = _non_module_deps_impl)

def _non_module_dev_deps_impl(_):
rules_ios_dev_dependencies(load_bzlmod_dependencies = False)

non_module_dev_deps = module_extension(implementation = _non_module_dev_deps_impl)

def _xcode_configure_impl(module_ctx):
for mod in module_ctx.modules:
for xcode_configure_attr in mod.tags.configure:
_xcode_configure(
remote_xcode_label = xcode_configure_attr.remote_xcode_label,
xcode_locator_label = xcode_configure_attr.xcode_locator_label,
)

xcode_configure = module_extension(
implementation = _xcode_configure_impl,
tag_classes = {
"configure": tag_class(
attrs = {
"remote_xcode_label": attr.string(mandatory = True),
"xcode_locator_label": attr.string(mandatory = True),
},
),
},
)
Loading

0 comments on commit 9f5b83e

Please sign in to comment.