@@ -18,33 +18,36 @@ CRD_OPTIONS ?= crd:crdVersions=v1
18
18
# Repository root based on Git metadata
19
19
REPOSITORY_ROOT := $(shell git rev-parse --show-toplevel)
20
20
21
- # Libgit2 version
22
- LIBGIT2_VERSION ?= 1.1.1
23
-
24
21
# Other dependency versions
25
22
ENVTEST_BIN_VERSION ?= 1.19.2
26
23
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 )
32
26
LIBGIT2_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 =
34
30
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
38
35
39
36
ifeq ($(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
[email protected] )
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)
45
40
endif
46
41
47
42
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
+
48
51
# API (doc) generation utilities
49
52
CONTROLLER_GEN_VERSION ?= v0.7.0
50
53
GEN_API_REF_DOCS_VERSION ?= v0.3.0
56
59
GOBIN =$(shell go env GOBIN)
57
60
endif
58
61
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
68
62
69
63
# Architecture to use envtest with
64
+ ifeq ($(shell uname -m) ,x86_64)
70
65
ENVTEST_ARCH ?= amd64
66
+ else
67
+ ENVTEST_ARCH ?= arm64
68
+ endif
71
69
72
70
all : build
73
71
74
72
build : $(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)" \
78
73
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
83
74
84
75
KUBEBUILDER_ASSETS? ="$(shell $(ENVTEST ) --arch=$(ENVTEST_ARCH ) use -i $(ENVTEST_KUBERNETES_VERSION ) --bin-dir=$(ENVTEST_ASSETS_DIR ) -p path) "
85
76
test : $(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)" \
90
77
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'
98
82
99
83
test-api : # # Run api tests
100
84
cd api; go test ./... -coverprofile cover.out
101
85
102
86
run : $(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)" \
106
87
go run ./main.go
107
- else
108
- LD_LIBRARY_PATH=$(LIBGIT2_LIB_PATH) \
109
- go run ./main.go
110
- endif
111
-
112
88
113
89
install : manifests # # Install CRDs into a cluster
114
90
kustomize build config/crd | kubectl apply -f -
@@ -142,16 +118,8 @@ fmt: ## Run go fmt against code
142
118
cd api; go fmt ./...
143
119
144
120
vet : $(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) \
152
121
go vet ./...
153
122
cd api; go vet ./...
154
- endif
155
123
156
124
generate : controller-gen # # Generate API code
157
125
cd api; $(CONTROLLER_GEN ) object:headerFile=" ../hack/boilerplate.go.txt" paths=" ./..."
@@ -192,14 +160,12 @@ install-envtest: setup-envtest ## Download envtest binaries locally.
192
160
193
161
libgit2 : $(LIBGIT2 ) # # Detect or download libgit2 library
194
162
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
203
169
endif
204
170
205
171
.PHONY : help
0 commit comments