forked from wolfi-dev/os
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
85 lines (66 loc) · 2.31 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
USE_CACHE ?= yes
ARCH ?= $(shell uname -m)
ifeq (${ARCH}, arm64)
ARCH = aarch64
endif
TARGETDIR = packages/${ARCH}
MELANGE ?= ../melange/melange
KEY ?= local-melange.rsa
REPO ?= $(shell pwd)/packages
SOURCE_DATE_EPOCH ?= 0
CACHE_DIR ?= gs://wolfi-sources/
WOLFI_SIGNING_PUBKEY ?= https://packages.wolfi.dev/os/wolfi-signing.rsa.pub
WOLFI_PROD ?= https://packages.wolfi.dev/os
MELANGE_OPTS += --repository-append ${REPO}
MELANGE_OPTS += --keyring-append ${KEY}.pub
MELANGE_OPTS += --signing-key ${KEY}
MELANGE_OPTS += --arch ${ARCH}
MELANGE_OPTS += --env-file build-${ARCH}.env
MELANGE_OPTS += --namespace wolfi
MELANGE_OPTS += --generate-index false
MELANGE_OPTS += ${MELANGE_EXTRA_OPTS}
ifeq (${USE_CACHE}, yes)
MELANGE_OPTS += --cache-source ${CACHE_DIR}
endif
ifeq (${BUILDWORLD}, no)
MELANGE_OPTS += -k ${WOLFI_SIGNING_PUBKEY}
MELANGE_OPTS += -r ${WOLFI_PROD}
endif
define build-package
$(eval pkgname = $(call comma-split,$(1),1))
$(eval sourcedir = $(call comma-split,$(1),2))
$(eval sourcedir = $(or $(sourcedir),$(pkgname)))
$(eval pkgtarget = $(TARGETDIR)/$(shell $(MELANGE) package-version $(pkgname).yaml).apk)
packages/$(pkgname): $(pkgtarget)
$(pkgtarget): ${KEY}
mkdir -p ./$(sourcedir)/
SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH} ${MELANGE} build $(pkgname).yaml ${MELANGE_OPTS} --source-dir ./$(sourcedir)/
endef
# The list of packages to be built. The order matters.
# At some point, when ready, this should be replaced with `wolfictl text -t name .`
# non-standard source directories are provided by adding them separated by a comma,
# e.g.
# postgres-11,postgres
PKGLIST ?= $(shell cat packages.txt | grep -v '^\#' )
all: ${KEY} .build-packages
${KEY}:
${MELANGE} keygen ${KEY}
clean:
rm -rf packages/${ARCH}
.PHONY: list list-yaml
list:
$(info $(PKGNAMELIST))
@printf ''
list-yaml:
$(info $(addsuffix .yaml,$(PKGNAMELIST)))
@printf ''
comma := ,
comma-split = $(word $2,$(subst ${comma}, ,$1))
# PKGLIST includes the optional directory e.g. mariadb-10.6,mariadb
# PKGNAMELIST is only the names
PKGNAMELIST = $(foreach F,$(PKGLIST), $(firstword $(subst ${comma}, ,${F})))
PACKAGES := $(addprefix packages/,$(PKGNAMELIST))
$(foreach pkg,$(PKGLIST),$(eval $(call build-package,$(pkg))))
.build-packages: ${PACKAGES}
dev-container:
docker run --privileged --rm -it -v "${PWD}:${PWD}" -w "${PWD}" cgr.dev/chainguard/sdk:latest