Skip to content

Commit 70627a3

Browse files
committed
Add support for aws-crt-swift and complex C dependencies
- Add umbrella directory modulemap generation to match SPM behavior - Add framework detection: scan C source files for framework imports and auto-link - Add default include/ path handling when publicHeadersPath is not specified - Add header collection from excluded directories (SPM excludes only affect compilation) - Add aws_crt_example demonstrating aws-crt-swift building successfully Fixes enable building Swift packages with complex C dependencies that have: - Inline implementation files (.inl) that should be conditionally included - Default public header paths (include/) - Excluded directories containing needed headers - System framework dependencies not declared in Package.swift The umbrella directory approach prevents atomics redefinition errors by only processing headers when explicitly included, rather than importing all headers upfront when listed individually in the modulemap.
1 parent 593b80c commit 70627a3

File tree

14 files changed

+216
-2
lines changed

14 files changed

+216
-2
lines changed

examples/aws_crt_example/.bazelrc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
build --enable_bzlmod
2+
build --lockfile_mode=update
3+
build --macos_minimum_os=15.0
4+
build --host_macos_minimum_os=15.0
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
load("@build_bazel_rules_swift//swift:swift_test.bzl", "swift_test")
2+
3+
swift_test(
4+
name = "AwsCrtTests",
5+
srcs = ["Tests/AwsCrtTests/AwsCrtTests.swift"],
6+
deps = [
7+
"@swiftpkg_aws_crt_swift//:AwsCommonRuntimeKit",
8+
],
9+
)
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
module(name = "aws_crt_example")
2+
3+
bazel_dep(name = "rules_swift_package_manager", version = "")
4+
local_path_override(
5+
module_name = "rules_swift_package_manager",
6+
path = "../..",
7+
)
8+
9+
bazel_dep(name = "apple_support", version = "1.24.2")
10+
bazel_dep(name = "rules_swift", version = "3.1.2", repo_name = "build_bazel_rules_swift")
11+
bazel_dep(name = "rules_apple", version = "4.2.0", repo_name = "build_bazel_rules_apple")
12+
13+
apple_cc_configure = use_extension(
14+
"@apple_support//crosstool:setup.bzl",
15+
"apple_cc_configure_extension",
16+
)
17+
use_repo(apple_cc_configure, "local_config_apple_cc")
18+
19+
swift_deps = use_extension(
20+
"@rules_swift_package_manager//:extensions.bzl",
21+
"swift_deps",
22+
)
23+
swift_deps.from_package(
24+
resolved = "//:Package.resolved",
25+
swift = "//:Package.swift",
26+
)
27+
swift_deps.configure_package(
28+
name = "aws-crt-swift",
29+
init_submodules = True,
30+
recursive_init_submodules = True,
31+
)
32+
use_repo(
33+
swift_deps,
34+
"swift_package",
35+
"swiftpkg_aws_crt_swift",
36+
)

examples/aws_crt_example/Package.resolved

Lines changed: 23 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// swift-tools-version: 5.9
2+
3+
import PackageDescription
4+
5+
let package = Package(
6+
name: "AwsCrtExample",
7+
dependencies: [
8+
.package(url: "https://github.com/awslabs/aws-crt-swift.git", from: "0.54.0"),
9+
]
10+
)

examples/aws_crt_example/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# AWS CRT Swift Example
2+
3+
This example demonstrates using [aws-crt-swift](https://github.com/awslabs/aws-crt-swift) with Bazel.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import XCTest
2+
import AwsCommonRuntimeKit
3+
4+
final class AwsCrtTests: XCTestCase {
5+
func testCrtTypes() throws {
6+
// Test that we can use types from AwsCommonRuntimeKit
7+
let logLevel = LogLevel.info
8+
XCTAssertEqual(logLevel, LogLevel.info)
9+
}
10+
}

examples/aws_crt_example/WORKSPACE

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# Intentionally blank. Using bzlmod.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# Intentionally blank. The content for this workspace is generated by bzlmod.

examples/aws_crt_example/do_test

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/usr/bin/env bash
2+
3+
set -euo pipefail
4+
5+
bazel test //...

0 commit comments

Comments
 (0)