rules_swift_package_manager icon indicating copy to clipboard operation
rules_swift_package_manager copied to clipboard

Ambiguous `copt` in release mode

Open luispadron opened this issue 1 year ago • 3 comments

I was updating my dependencies and ran into a build failure in release mode (e.g. --compilation_mode=opt)

ERROR: /private/var/tmp/_bazel_runner/859a0f9921c91b89cc2a6b233b4f521c/external/rules_swift_package_manager~~swift_deps~swiftpkg_swift_system/BUILD.bazel:23:14: Illegal ambiguous match on configurable attribute "copts" in @@rules_swift_package_manager~~swift_deps~swiftpkg_swift_system//:SystemPackage.rspm:

luispadron avatar Jun 24 '24 14:06 luispadron

Using the following lock for swift-system:

    {
      "identity" : "swift-system",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/apple/swift-system.git",
      "state" : {
        "revision" : "f9266c85189c2751589a50ea5aec72799797e471",
        "version" : "1.3.0"
      }
    },

luispadron avatar Jun 24 '24 14:06 luispadron

Did you happen to capture the declaration in the BUILD.bazel file that it does not like?

cgrindel avatar Jun 25 '24 12:06 cgrindel

Hey @cgrindel ! I had the exact same problem. Here is the part of the BUILD.bazel it didn't like:

swift_library(
name = "SystemPackage.rspm",
always_include_developer_search_paths = True,
copts = [
"-DSWIFT_PACKAGE",
"-DSYSTEM_PACKAGE",
] + select({
"@rules_swift_package_manager//config_settings/spm/configuration:debug": ["-DENABLE_MOCKING"], # <- here
"@rules_swift_package_manager//config_settings/spm/platform:ios": ["-DSYSTEM_PACKAGE_DARWIN"],
"@rules_swift_package_manager//config_settings/spm/platform:macos": ["-DSYSTEM_PACKAGE_DARWIN"],
"@rules_swift_package_manager//config_settings/spm/platform:tvos": ["-DSYSTEM_PACKAGE_DARWIN"],
"@rules_swift_package_manager//config_settings/spm/platform:visionos": ["-DSYSTEM_PACKAGE_DARWIN"],
"@rules_swift_package_manager//config_settings/spm/platform:watchos": ["-DSYSTEM_PACKAGE_DARWIN"],
"//conditions:default": [],
}),
# ...

For me the problem was that it would both match the debug configuration and macos platform, which seems like something that should be allowed. I've changed the implementation so it generates something like this:

swift_library(
    name = "SystemPackage.rspm",
    always_include_developer_search_paths = True,
    copts = [
        "-DSWIFT_PACKAGE",
        "-DSYSTEM_PACKAGE",
    ] + select({
        "@rules_swift_package_manager//config_settings/spm/configuration:debug": ["-DENABLE_MOCKING"],
        "//conditions:default": [],
    }) + select({
        "@rules_swift_package_manager//config_settings/spm/platform:ios": ["-DSYSTEM_PACKAGE_DARWIN"],
        "//conditions:default": [],
    }) + select({
        "@rules_swift_package_manager//config_settings/spm/platform:macos": ["-DSYSTEM_PACKAGE_DARWIN"],
        "//conditions:default": [],
    }) + select({
        "@rules_swift_package_manager//config_settings/spm/platform:tvos": ["-DSYSTEM_PACKAGE_DARWIN"],
        "//conditions:default": [],
    }) + select({
        "@rules_swift_package_manager//config_settings/spm/platform:visionos": ["-DSYSTEM_PACKAGE_DARWIN"],
        "//conditions:default": [],
    }) + select({
        "@rules_swift_package_manager//config_settings/spm/platform:watchos": ["-DSYSTEM_PACKAGE_DARWIN"],
        "//conditions:default": [],
    }),
# ...

I just stated out with bazel so maybe there is a slicker way to do this 🧐

roya1v avatar Jul 16 '24 19:07 roya1v