@@ -18,33 +18,36 @@ CRD_OPTIONS ?= crd:crdVersions=v1
1818# Repository root based on Git metadata
1919REPOSITORY_ROOT := $(shell git rev-parse --show-toplevel)
2020
21- # Libgit2 version
22- LIBGIT2_VERSION ?= 1.1.1
23-
2421# Other dependency versions
2522ENVTEST_BIN_VERSION ?= 1.19.2
2623
27- # libgit2 related magical paths
28- # These are used to determine if the target libgit2 version is already available on
29- # the system, or where they should be installed to
30- SYSTEM_LIBGIT2_VERSION := $(shell pkg-config --modversion libgit2 2>/dev/null)
31- LIBGIT2_PATH := $(REPOSITORY_ROOT ) /hack/libgit2
24+ # Caches libgit2 versions per tag, "forcing" rebuild only when needed.
25+ LIBGIT2_PATH := $(REPOSITORY_ROOT ) /build/libgit2/$(LIBGIT2_TAG )
3226LIBGIT2_LIB_PATH := $(LIBGIT2_PATH ) /lib
33- LIBGIT2 := $(LIBGIT2_LIB_PATH ) /libgit2.so.$(LIBGIT2_VERSION )
27+ LIBGIT2_LIB64_PATH := $(LIBGIT2_PATH ) /lib64
28+ LIBGIT2 := $(LIBGIT2_LIB_PATH ) /libgit2.a
29+ MUSL-CC =
3430
35- ifneq ($(LIBGIT2_VERSION ) ,$(SYSTEM_LIBGIT2_VERSION ) )
36- LIBGIT2_FORCE ?= 1
37- endif
31+ export CGO_ENABLED =1
32+ export PKG_CONFIG_PATH=$(LIBGIT2_LIB_PATH ) /pkgconfig :$(LIBGIT2_LIB64_PATH ) /pkgconfig
33+ export LD_LIBRARY_PATH=$(LIBGIT2_LIB_PATH ) :$(LIBGIT2_LIB64_PATH )
34+ export CGO_CFLAGS =-I$(LIBGIT2_PATH ) /include -I$(LIBGIT2_PATH ) /include/openssl
3835
3936ifeq ($(shell uname -s) ,Darwin)
40- LIBGIT2 := $(LIBGIT2_LIB_PATH)/libgit2.$(LIBGIT2_VERSION).dylib
41- HAS_BREW := $(shell brew --version 2>/dev/null)
42- ifdef HAS_BREW
43- HAS_OPENSSL := $(shell brew --prefix openssl@1.1)
44- endif
37+ export CGO_LDFLAGS=-L$(LIBGIT2_LIB_PATH) -lssh2 -lssl -lcrypto -lgit2
38+ else
39+ export CGO_LDFLAGS=$(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --libs --static --cflags libssh2 openssl libgit2)
4540endif
4641
4742
43+ ifeq ($(shell uname -s) ,Linux)
44+ MUSL-PREFIX=$(REPOSITORY_ROOT)/build/musl/$(shell uname -m)-linux-musl-native/bin/$(shell uname -m)-linux-musl
45+ MUSL-CC=$(MUSL-PREFIX)-gcc
46+ export CC=$(MUSL-PREFIX)-gcc
47+ export CXX=$(MUSL-PREFIX)-g++
48+ export AR=$(MUSL-PREFIX)-ar
49+ endif
50+
4851# API (doc) generation utilities
4952CONTROLLER_GEN_VERSION ?= v0.7.0
5053GEN_API_REF_DOCS_VERSION ?= v0.3.0
5659GOBIN =$(shell go env GOBIN)
5760endif
5861
59- ifeq ($(strip ${PKG_CONFIG_PATH}) ,)
60- MAKE_PKG_CONFIG_PATH = $(LIBGIT2_LIB_PATH)/pkgconfig
61- else
62- MAKE_PKG_CONFIG_PATH = ${PKG_CONFIG_PATH}:$(LIBGIT2_LIB_PATH)/pkgconfig
63- endif
64-
65- ifdef HAS_OPENSSL
66- MAKE_PKG_CONFIG_PATH := $(MAKE_PKG_CONFIG_PATH):$(HAS_OPENSSL)/lib/pkgconfig
67- endif
6862
6963# Architecture to use envtest with
64+ ifeq ($(shell uname -m) ,x86_64)
7065ENVTEST_ARCH ?= amd64
66+ else
67+ ENVTEST_ARCH ?= arm64
68+ endif
7169
7270all : build
7371
7472build : $(LIBGIT2 ) # # Build manager binary
75- ifeq ($(shell uname -s) ,Darwin)
76- PKG_CONFIG_PATH=$(MAKE_PKG_CONFIG_PATH) \
77- CGO_LDFLAGS="-Wl,-rpath,$(LIBGIT2_LIB_PATH)" \
7873 go build -o bin/manager main.go
79- else
80- PKG_CONFIG_PATH=$(MAKE_PKG_CONFIG_PATH) \
81- go build -o bin/manager main.go
82- endif
8374
8475KUBEBUILDER_ASSETS? ="$(shell $(ENVTEST ) --arch=$(ENVTEST_ARCH ) use -i $(ENVTEST_KUBERNETES_VERSION ) --bin-dir=$(ENVTEST_ASSETS_DIR ) -p path) "
8576test : $(LIBGIT2 ) install-envtest test-api # # Run tests
86- ifeq ($(shell uname -s) ,Darwin)
87- LD_LIBRARY_PATH=$(LIBGIT2_LIB_PATH) \
88- PKG_CONFIG_PATH=$(MAKE_PKG_CONFIG_PATH) \
89- CGO_LDFLAGS="-Wl,-rpath,$(LIBGIT2_LIB_PATH)" \
9077 KUBEBUILDER_ASSETS=$(KUBEBUILDER_ASSETS ) \
91- go test ./... -coverprofile cover.out
92- else
93- LD_LIBRARY_PATH=$(LIBGIT2_LIB_PATH) \
94- PKG_CONFIG_PATH=$(MAKE_PKG_CONFIG_PATH) \
95- KUBEBUILDER_ASSETS=$(KUBEBUILDER_ASSETS) \
96- go test ./... -coverprofile cover.out
97- endif
78+ go test ./... \
79+ -ldflags " -s -w" \
80+ -coverprofile cover.out \
81+ -tags ' netgo,osusergo,static_build'
9882
9983test-api : # # Run api tests
10084 cd api; go test ./... -coverprofile cover.out
10185
10286run : $(LIBGIT2 ) generate fmt vet manifests # # Run against the configured Kubernetes cluster in ~/.kube/config
103- ifeq ($(shell uname -s) ,Darwin)
104- LD_LIBRARY_PATH=$(LIBGIT2_LIB_PATH) \
105- CGO_LDFLAGS="-Wl,-rpath,$(LIBGIT2_LIB_PATH)" \
10687 go run ./main.go
107- else
108- LD_LIBRARY_PATH=$(LIBGIT2_LIB_PATH) \
109- go run ./main.go
110- endif
111-
11288
11389install : manifests # # Install CRDs into a cluster
11490 kustomize build config/crd | kubectl apply -f -
@@ -142,16 +118,8 @@ fmt: ## Run go fmt against code
142118 cd api; go fmt ./...
143119
144120vet : $(LIBGIT2 ) # # Run go vet against code
145- ifeq ($(shell uname -s) ,Darwin)
146- PKG_CONFIG_PATH=$(MAKE_PKG_CONFIG_PATH) \
147- CGO_LDFLAGS="-Wl,-rpath,$(LIBGIT2_LIB_PATH)" \
148- go vet ./...
149- cd api; go vet ./...
150- else
151- PKG_CONFIG_PATH=$(MAKE_PKG_CONFIG_PATH) \
152121 go vet ./...
153122 cd api; go vet ./...
154- endif
155123
156124generate : controller-gen # # Generate API code
157125 cd api; $(CONTROLLER_GEN ) object:headerFile=" ../hack/boilerplate.go.txt" paths=" ./..."
@@ -192,14 +160,12 @@ install-envtest: setup-envtest ## Download envtest binaries locally.
192160
193161libgit2 : $(LIBGIT2 ) # # Detect or download libgit2 library
194162
195- $(LIBGIT2 ) :
196- ifeq (1, $(LIBGIT2_FORCE ) )
197- @{ \
198- set -e; \
199- mkdir -p $(LIBGIT2_PATH); \
200- curl -sL https://raw.githubusercontent.com/fluxcd/golang-with-libgit2/$(LIBGIT2_TAG)/hack/Makefile -o $(LIBGIT2_PATH)/Makefile; \
201- INSTALL_PREFIX=$(LIBGIT2_PATH) make -C $(LIBGIT2_PATH) libgit2; \
202- }
163+ $(LIBGIT2 ) : $(MUSL-CC )
164+ IMG=$(LIBGIT2_IMG ) TAG=$(LIBGIT2_TAG ) ./hack/install-libraries.sh
165+
166+ $(MUSL-CC ) :
167+ ifneq ($(shell uname -s) ,Darwin)
168+ ./hack/download-musl.sh
203169endif
204170
205171.PHONY : help
0 commit comments