Xcode 12.5 fail resolving SwiftPackageDependency with .systemLibrary target on M1 - xcode

Xcode 12.5 on MBP with M1 fails resolving package dependency with .systemLibrary target. Running Xcode without Rosseta.
The project is setup with 2 spm packages. Both of them added to the project .xcworkspace and only one of them linked within the app. Both packages are local dependencies.
A package has B package as dependency and B package has libgit2 as .systemLibrary dependency.
Then, if I open the project, Xcode can't find pkg-config and then not resolves libgit2 dependency.
This doesn't happens if I generate the A pbxproj with swift package generate-xcodeproj, in this case, the project resolves fine and I can build it without any problem.
The A Package.swift is:
// swift-tools-version:5.3
import PackageDescription
let package = Package(
name: "A",
platforms: [
.macOS(.v11)
],
products: [
.library(
name: "A",
targets: ["A"]
),
],
dependencies: [
.package(path: "../B")
],
targets: [
.target(
name: "A",
dependencies: ["B"]
),
.testTarget(
name: "ATests",
dependencies: ["A"]
),
]
)
The B Package.swift is:
// swift-tools-version:5.3
import PackageDescription
let package = Package(
name: "B",
platforms: [
.macOS(.v11)
],
products: [
.library(
name: "B",
targets: ["B"]
)
],
dependencies: [],
targets: [
.systemLibrary(
name: "Clibgit2",
pkgConfig: "libgit2",
providers: [
.brew(["libgit2"])
]
),
.target(
name: "B",
dependencies: [
.target(name: "Clibgit2")
]
),
.testTarget(
name: "BTests",
dependencies: ["B"]
)
]
)
The Clibgit2 target is well configured with the module.modulemap and shim.h files.
I checked pkg-config is installed and has the libgit2 package info with pkg-config --list
Also I opened the project on an intel mac and is working fine.
libgit2 is installed by brew.

Thanks to NeoNach!!
Xcode is only looking at /opt/brew and /usr/local. The homebrew location for M1 chips is on /opt/homebrew so you can set a custom path using com.apple.dt.Xcode.IDEHombrePrefixPath.
defaults write com.apple.dt.Xcode IDEHomebrewPrefixPath /opt/homebrew
Tweet ref: https://twitter.com/NeoNacho/status/1412514541343166467

Related

Unable to build hello_world cc_grpc_library with bazel 6.0.0

I'm trying to build a hello_world cc_grpc_library using bazel 6.0.0 on Ubuntu 22.04, but I'm unable to do so.
Source tree:
WORKSPACE
MODULE.bazel
BUILD
helloworld.proto
.bazelrc
.bazelversion
My WORKSPACE file is empty. WORKSPACE.bzlmod does not exist.
MODULE.bazel contains:
module(name = "helloworld", version = "1.0")
bazel_dep(name = "grpc", version = "1.47.0", repo_name = "com_github_grpc_grpc")
BUILD contains:
load("#rules_proto//proto:defs.bzl", "proto_library")
load("#com_github_grpc_grpc//bazel:grpc_deps.bzl", "grpc_deps")
load("#com_github_grpc_grpc//bazel:grpc_extra_deps.bzl", "grpc_extra_deps")
load("#com_github_grpc_grpc//bazel:cc_grpc_library.bzl", "cc_grpc_library")
grpc_deps()
grpc_extra_deps()
proto_library(
name = "helloworld_proto",
srcs = ["helloworld.proto"],
)
cc_proto_library(
name = "helloworld_cc_proto",
deps = [":helloworld_proto"],
)
cc_grpc_library(
name = "helloworld_cc_grpc",
srcs = [":helloworld_proto"],
grpc_only = True,
deps = [":helloworld_cc_proto"],
)
helloworld.proto is a copy of gRPC's helloworld.proto
When I type bazel build :helloworld_cc_grpc I get the following error and don't know how to solve it:
...external/grpc~1.47.0/bazel/grpc_deps.bzl", line 23, column 11, in grpc_bind_deps
native.bind(
Error: no native function or rule 'bind'
Available attributes: aar_import, action_listener, alias, android_binary, android_device, android_device_script_fixture, android_host_service_fixture, android_instrumentation_test, android_library, android_local_test, android_sdk, android_tools_defaults_jar, apple_cc_toolchain, available_xcodes, cc_binary, cc_host_toolchain_alias, cc_import, cc_libc_top_alias, cc_library, cc_proto_library, cc_shared_library, cc_shared_library_permissions, cc_test, cc_toolchain, cc_toolchain_alias, cc_toolchain_suite, config_feature_flag, config_setting, constraint_setting, constraint_value, environment, existing_rule, existing_rules, exports_files, extra_action, fdo_prefetch_hints, fdo_profile, filegroup, genquery, genrule, glob, j2objc_library, java_binary, java_import, java_library, java_lite_proto_library, java_package_configuration, java_plugin, java_plugins_flag_alias, java_proto_library, java_runtime, java_test, java_toolchain, label_flag, label_setting, objc_import, objc_library, package, package_group, package_name, platform, propeller_optimize, proto_lang_toolchain, proto_library, py_binary, py_library, py_runtime, py_test, repository_name, sh_binary, sh_library, sh_test, subpackages, test_suite, toolchain, toolchain_type, xcode_config, xcode_config_alias, xcode_version
bazel version output:
Bazelisk version: v1.15.0
Build label: 6.0.0
Build target: bazel-out/k8-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Mon Dec 19 15:52:35 2022 (1671465155)
Build timestamp: 1671465155
Build timestamp as int: 1671465155
I've also found this gRPC github issue but I'm not sure what to do with it.
How to build gRPC's hello world example using bzlmod to manage external dependencies?
I've tried building it with bazel's cc_grpc_library but that wraps actual dependency (gRPC) into yet another layer as it is visible from the comment on the provided link. Either way it wasn't building but I don't recall actual error.
gRPC doesn't yet support Bazel module so it can break but in your case, it looks weird to call grpc_deps() and grpc_extra_deps() functions in BUILD file because those are expected to be called in WORKSPACE file. If it turns out that module doesn't work yet, you may want to use it without module. Please take a look at this example.

How can add tensorflow in bazel project?

My project structure
/PROJECT
WORKSPACE
BUILD
third_party
tensorflow <-- cloned repository
my_files
BUILD
In WORKSPACE file i added this
local_repository(
name = "tensorflow",
path = "third_party/tensorflow",
)
load("#tensorflow//tensorflow:workspace3.bzl", "workspace")
workspace()
load("#tensorflow//tensorflow:workspace2.bzl", "workspace")
workspace()
load("#tensorflow//tensorflow:workspace1.bzl", "workspace")
workspace()
load("#tensorflow//tensorflow:workspace0.bzl", "workspace")
workspace()
Initially, the following was already written in the file
#Tensorflow repo should always go after the other external dependencies.
# 2020-10-30
_TENSORFLOW_GIT_COMMIT = "84384703c0d8b502e33ff6fd7eefd219dca5ff8e"
_TENSORFLOW_SHA256= "23fb322fc15a20f7a7838d9a31f8b16f60700a494ea654311a0aa8621769df98"
http_archive(
name = "org_tensorflow",
urls = [
"https://github.com/tensorflow/tensorflow/archive/%s.tar.gz" % _TENSORFLOW_GIT_COMMIT,
],
patches = [
"#//third_party:org_tensorflow_compatibility_fixes.diff",
],
patch_args = [
"-p1",
],
strip_prefix = "tensorflow-%s" % _TENSORFLOW_GIT_COMMIT,
sha256 = _TENSORFLOW_SHA256,
)
load("#org_tensorflow//tensorflow:workspace.bzl", "tf_workspace")
tf_workspace(tf_repo_name = "org_tensorflow")
Than in my_files/BUILD i wrote following
objc_library(
deps = [
"#tensorflow//tensorflow/lite/objc:TensorFlowLite",
],
)
When building, I get the following error
ERROR: file '_middlemen/TensorFlowLiteCMetal-ObjcCppSemantics_build_arch_ios-arm64-min10.0-
applebin_ios-ios_arm64-dbg_with_suffix__non_objc_arc' is generated by these conflicting actions:
Label: #tensorflow//tensorflow/lite/delegates/gpu:metal_delegate,
#org_tensorflow//tensorflow/lite/delegates/gpu:metal_delegate
ERROR: com.google.devtools.build.lib.skyframe.ArtifactConflictFinder$ConflictException:
com.google.devtools.build.lib.actions.MutableActionGraph$ActionConflictException: for
_middlemen/TensorFlowLiteCMetal-ObjcCppSemantics_build_arch_ios-arm64-min10.0-applebin_ios-
ios_arm64-dbg_with_suffix__non_objc_arc, previous action: ObjcCppSemantics_build_arch_ios-
arm64-min10.0-applebin_ios-ios_arm64-dbg_with_suffix__non_objc_arc for #org_tensorflow//tensorflow/lite/delegates/gpu:metal_delegate, attempted action:
ObjcCppSemantics_build_arch_ios-arm64-min10.0-applebin_ios-ios_arm64-
dbg_with_suffix__non_objc_arc for #tensorflow//tensorflow/lite/delegates/gpu:metal_delegate
Maybe I somehow incorrectly add tensorlow, but I do not know how to fix it
This issue solved my problem:
https://github.com/tensorflow/tensorflow/issues/46144

Go dep list dependencies links

Is it possible to list just links/names to go dependencies?
For example in Gopkg.lock I have:
[[projects]]
digest = "x:xxxxxxx"
name = "cloud.google.com/go"
packages = [
"xxxxx",
"xxxxx/xxxxx",
]
I want just name: cloud.google.com/go be listed

Get version defined in mix.exs from a release build

Is there any way to get the version number(1.2.3, the following case) in release build? The package is build in distillery.
def project do
[app: :sample,
version: "1.2.3",
elixir: "~> 1.3",
elixirc_paths: elixirc_paths(Mix.env),
compilers: [:phoenix, :gettext] ++ Mix.compilers,
build_embedded: (Mix.env == :stg) or (Mix.env == :prod),
start_permanent: (Mix.env == :stg) or (Mix.env == :prod),
aliases: aliases,
deps: deps]
end

karaf (fuse) Unresolved constraint in bundle missing requirement osgi.wiring.package

I am trying to install a bundle which depends on another.
When I attempt to install it via maven (where it is stored), I get the following error:
install -s mvn:com.mycompany.er/ER_api/0.1218.0
Bundle ID: 544
Error executing command: Error installing bundles:
Unable to start bundle mvn:com.mycompany.er/ER_api/0.1218.0: Unresolved constraint in bundle com.mycompany.er.ER_api [544]:
Unable to resolve 544.0: missing requirement [544.0] osgi.wiring.package; (&(osgi.wiring.package=com.mycompany.application.errors)(version>=0.145.0)(!(version>=1.0.0)))
The bundle shows up as installed:
[ 544] [Installed ] [ ] [ ] [ 60] ER_api (0.1218.0)
Listing the headers for the ER_api bundle show that it does indeed depend on com.mycompany.application.errors, and that shows up in red.
Import-Package =
....
com.mycompany.application.errors;version="[0.145,1)",
According to my understanding the version required is greater than or equal to 0.145, but less than 1. So version 0.145.0 should meet this criteria.
The package in question com.mycompany.application.errors is available in the bundle APPLICATION_app_common, which appears to be installed and active:
[ 540] [Active ] [ ] [ ] [ 60] APPLICATION_app_common (0.145.0)
Checking whether the package is exported shows that it is:
JBossFuse:karaf#root> headers 540
APPLICATION_app_common (540)
----------------------------
Manifest-Version = 1.0
Bnd-LastModified = 1459506884903
Tool = Bnd-1.50.0
....
Export-Package =
com.mycompany.application;version=0.145.0,
com.mycompany.application.errors;
uses:="javax.xml.bind.annotation,
javax.ws.rs.core,
com.mycompany.application.smapi";
version=0.145.0,
The only thing that complicates matters is that it's not a direct dependency, it's a transitive dependency. ER_api depends on ER_transactions_log, which depends on APPLICATION_app_common. I have the latest version of ER_transactions_log installed and active:
[ 511] [Active ] [ ] [ ] [ 60] ER_transactions_log (0.45.0.SNAPSHOT)
I can't understand why it can't see the exported package. APPLICATION_app_common clearly lists the package in its Export-Package list.
How do I debug this?

Resources