Skip to content

Commit

Permalink
feat: define configuration settings to support SPM conditions (#179)
Browse files Browse the repository at this point in the history
Related to #153.
  • Loading branch information
cgrindel authored Jan 26, 2023
1 parent 9d56b7f commit 40baf5d
Show file tree
Hide file tree
Showing 18 changed files with 447 additions and 61 deletions.
5 changes: 5 additions & 0 deletions BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,11 @@ filegroup(
"shared.bazelrc",
":deps.bzl",
":go_deps.bzl",
"//config_settings/bazel/apple_platform_type:all_files",
"//config_settings/bazel/compilation_mode:all_files",
"//config_settings/spm/configuration:all_files",
"//config_settings/spm/platform:all_files",
"//config_settings/spm/platform_configuration:all_files",
"//gazelle:all_files",
"//gazelle/internal/jsonutils:all_files",
"//gazelle/internal/pathdistance:all_files",
Expand Down
26 changes: 26 additions & 0 deletions config_settings/bazel/apple_platform_type/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
load("@cgrindel_bazel_starlib//bzlformat:defs.bzl", "bzlformat_pkg")
load(":apple_platform_types.bzl", "apple_platform_types")

package(default_visibility = ["//visibility:public"])

bzlformat_pkg(name = "bzlformat")

[
config_setting(
name = platform_type,
values = {"apple_platform_type": platform_type},
)
for platform_type in apple_platform_types.all_values
]

filegroup(
name = "all_files",
srcs = glob(["*"]),
visibility = ["//:__subpackages__"],
)

bzl_library(
name = "apple_platform_types",
srcs = ["apple_platform_types.bzl"],
)
19 changes: 19 additions & 0 deletions config_settings/bazel/apple_platform_type/apple_platform_types.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
"""Module for Bazel's Apple platform types."""

# NOTE: If entries are added/removed from apple_platform_types, be sure
# to update the config_setting and selects.config_setting_group declarations in
# //config_settings/spm_platform/BUILD.bazel.

# List of valid values for Bazel's --apple_platform_type
apple_platform_types = struct(
macos = "macos",
ios = "ios",
tvos = "tvos",
watchos = "watchos",
all_values = [
"macos",
"ios",
"tvos",
"watchos",
],
)
25 changes: 25 additions & 0 deletions config_settings/bazel/compilation_mode/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
load("@cgrindel_bazel_starlib//bzlformat:defs.bzl", "bzlformat_pkg")
load(":compilation_modes.bzl", "compilation_modes")

bzlformat_pkg(name = "bzlformat")

[
config_setting(
name = comp_mode,
values = {"compilation_mode": comp_mode},
)
for comp_mode in compilation_modes.all_values
]

filegroup(
name = "all_files",
srcs = glob(["*"]),
visibility = ["//:__subpackages__"],
)

bzl_library(
name = "compilation_modes",
srcs = ["compilation_modes.bzl"],
visibility = ["//visibility:public"],
)
12 changes: 12 additions & 0 deletions config_settings/bazel/compilation_mode/compilation_modes.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
"""Module for Bazel compilation modes."""

compilation_modes = struct(
debug = "dbg",
optimized = "opt",
fast = "fastbuild",
all_values = [
"dbg",
"opt",
"fastbuild",
],
)
20 changes: 0 additions & 20 deletions config_settings/platform_type/BUILD.bazel

This file was deleted.

34 changes: 34 additions & 0 deletions config_settings/spm/configuration/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
load("@bazel_skylib//lib:selects.bzl", "selects")
load("@cgrindel_bazel_starlib//bzlformat:defs.bzl", "bzlformat_pkg")
load(":configurations.bzl", "configurations")

package(default_visibility = ["//visibility:public"])

bzlformat_pkg(name = "bzlformat")

# Bazel compilation modes
# https://bazel.build/docs/user-manual#compilation-mode
SPM_CONFIG_TO_COMPILATION_MODE = {
configurations.debug: "//config_settings/bazel/compilation_mode:dbg",
configurations.release: "//config_settings/bazel/compilation_mode:opt",
}

[
selects.config_setting_group(
name = spm_config,
match_all = [bzl_comp_mode],
)
for (spm_config, bzl_comp_mode) in SPM_CONFIG_TO_COMPILATION_MODE.items()
]

filegroup(
name = "all_files",
srcs = glob(["*"]),
visibility = ["//:__subpackages__"],
)

bzl_library(
name = "configurations",
srcs = ["configurations.bzl"],
)
12 changes: 12 additions & 0 deletions config_settings/spm/configuration/configurations.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
"""Module for Swift package mananger configuration."""

# Derived from BuildConfiguration values
# https://github.com/apple/swift-package-manager/blob/main/Sources/PackageDescription/BuildSettings.swift
configurations = struct(
debug = "debug",
release = "release",
all_values = [
"debug",
"release",
],
)
49 changes: 49 additions & 0 deletions config_settings/spm/platform/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
load("@bazel_skylib//lib:selects.bzl", "selects")
load("@cgrindel_bazel_starlib//bzlformat:defs.bzl", "bzlformat_pkg")
load(":platforms.bzl", "platforms")

package(default_visibility = ["//visibility:public"])

bzlformat_pkg(name = "bzlformat")

# NOTE: Ensure that the list of spm_platforms in spm_platforms.bzl stays in
# sync with the config_setting and selects.config_setting_group declarations.

# MARK: - Platform

# NOTE: The Bazel Apple platform type values match those of the corresponding
# SPM platforms. If they ever diverge, we will need to add a mapping
# somewhere.

[
selects.config_setting_group(
name = platform,
match_any = [
"//config_settings/bazel/apple_platform_type:{}".format(platform),
"@platforms//os:{}".format(platform),
],
)
for platform in platforms.apple_platforms
]

[
config_setting(
name = platform,
constraint_values = [
"@platforms//os:{}".format(platform),
],
)
for platform in platforms.non_apple_platforms
]

filegroup(
name = "all_files",
srcs = glob(["*"]),
visibility = ["//:__subpackages__"],
)

bzl_library(
name = "platforms",
srcs = ["platforms.bzl"],
)
39 changes: 39 additions & 0 deletions config_settings/spm/platform/platforms.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
"""Module for Swift package manager platforms."""

# NOTE: Ensure that the list of spm_platforms below stays in sync with the
# config_setting and selects.config_setting_group declarations in
# //config_settings/spm_platform/BUILD.bazel.

# Derived from Platform values
# https://github.com/apple/swift-package-manager/blob/main/Sources/PackageDescription/SupportedPlatforms.swift
# Not sure how to map the following SPM platforms: maccatalyst, driverkit

_APPLE_PLATFORMS = [
"macos",
"ios",
"tvos",
"watchos",
]

_NON_APPLE_PLATFORMS = [
"linux",
"windows",
"android",
"wasi",
"openbsd",
]

platforms = struct(
macos = "macos",
ios = "ios",
tvos = "tvos",
watchos = "watchos",
linux = "linux",
windows = "windows",
android = "android",
wasi = "wasi",
openbsd = "openbsd",
apple_platforms = _APPLE_PLATFORMS,
non_apple_platforms = _NON_APPLE_PLATFORMS,
all_values = _APPLE_PLATFORMS + _NON_APPLE_PLATFORMS,
)
37 changes: 37 additions & 0 deletions config_settings/spm/platform_configuration/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
load("@bazel_skylib//lib:selects.bzl", "selects")
load("@cgrindel_bazel_starlib//bzlformat:defs.bzl", "bzlformat_pkg")
load(":platform_configurations.bzl", "platform_configurations")

package(default_visibility = ["//visibility:public"])

bzlformat_pkg(name = "bzlformat")

[
selects.config_setting_group(
name = platform_configurations.new_name(
pc.platform,
pc.configuration,
),
match_all = [
"//config_settings/spm/configuration:{}".format(pc.configuration),
"//config_settings/spm/platform:{}".format(pc.platform),
],
)
for pc in platform_configurations.all_values
]

bzl_library(
name = "platform_configurations",
srcs = ["platform_configurations.bzl"],
deps = [
"//config_settings/spm/configuration:configurations",
"//config_settings/spm/platform:platforms",
],
)

filegroup(
name = "all_files",
srcs = glob(["*"]),
visibility = ["//:__subpackages__"],
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
"""Module for SPM platform-configuration combinations."""

load("//config_settings/spm/configuration:configurations.bzl", "configurations")
load("//config_settings/spm/platform:platforms.bzl", "platforms")

def _new(platform, configuration):
return struct(
platform = platform,
configuration = configuration,
)

def _new_name(platform, configuration):
return "{platform}_{configuration}".format(
configuration = configuration,
platform = platform,
)

_ALL_VALUES = [
_new(platform, configuration)
for configuration in configurations.all_values
for platform in platforms.all_values
]

platform_configurations = struct(
new = _new,
new_name = _new_name,
all_values = _ALL_VALUES,
)
6 changes: 6 additions & 0 deletions swiftpkg/internal/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,12 @@ bzl_library(
visibility = ["//swiftpkg:__subpackages__"],
)

bzl_library(
name = "spm_conditionals",
srcs = ["spm_conditionals.bzl"],
visibility = ["//swiftpkg:__subpackages__"],
)

bzl_library(
name = "starlark_codegen",
srcs = ["starlark_codegen.bzl"],
Expand Down
48 changes: 8 additions & 40 deletions swiftpkg/internal/pkginfos.bzl
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
"""API for creating and loading Swift package information."""

load(
"//config_settings/spm/configuration:configurations.bzl",
spm_configurations = "configurations",
)
load(
"//config_settings/spm/platform:platforms.bzl",
spm_platforms = "platforms",
)
load(":pkginfo_dependencies.bzl", "pkginfo_dependencies")
load(":repository_utils.bzl", "repository_utils")
load(":validations.bzl", "validations")
Expand Down Expand Up @@ -842,46 +850,6 @@ library_type_kinds = struct(
all_values = ["automatic", "dynamic", "static"],
)

# Derived from BuildConfiguration values
# https://github.com/apple/swift-package-manager/blob/main/Sources/PackageDescription/BuildSettings.swift
spm_configurations = struct(
debug = "debug",
release = "release",
all_values = [
"debug",
"release",
],
)

# Derived from Platform values
# https://github.com/apple/swift-package-manager/blob/main/Sources/PackageDescription/SupportedPlatforms.swift
spm_platforms = struct(
macos = "macos",
maccatalyst = "maccatalyst",
ios = "ios",
tvos = "tvos",
watchos = "watchos",
driverkit = "driverkit",
linux = "linux",
windows = "windows",
android = "android",
wasi = "wasi",
openbsd = "openbsd",
all_values = [
"macos",
"maccatalyst",
"ios",
"tvos",
"watchos",
"driverkit",
"linux",
"windows",
"android",
"wasi",
"openbsd",
],
)

# MARK: - API Definition

pkginfos = struct(
Expand Down
Loading

0 comments on commit 40baf5d

Please sign in to comment.