|
1 | 1 | # PREFIX should be only writable by the root to avoid privilege escalation with launchd or sudo
|
2 | 2 | PREFIX ?= /opt/socket_vmnet
|
3 | 3 |
|
| 4 | +export SOURCE_DATE_EPOCH ?= $(shell git log -1 --pretty=%ct) |
| 5 | +# https://reproducible-builds.org/docs/archives/ |
| 6 | +TAR ?= gtar --sort=name --mtime="@$(SOURCE_DATE_EPOCH)" --owner=0 --group=0 --numeric-owner --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime |
| 7 | +TOUCH ?= gtouch -d @$(SOURCE_DATE_EPOCH) |
| 8 | +# Not necessary to use GNU's gzip |
| 9 | +GZIP ?= gzip -9 -n |
| 10 | +DIFFOSCOPE ?= diffoscope |
| 11 | +STRIP ?= strip |
| 12 | + |
4 | 13 | CFLAGS ?= -O3
|
5 | 14 |
|
6 | 15 | VERSION ?= $(shell git describe --match 'v[0-9]*' --dirty='.m' --always --tags)
|
| 16 | +VERSION_TRIMMED := $(VERSION:v%=%) |
7 | 17 |
|
8 | 18 | CFLAGS += -DVERSION=\"$(VERSION)\"
|
9 | 19 |
|
@@ -37,8 +47,10 @@ socket_vmnet_client: $(patsubst %.c, %.o, $(wildcard client/*.c))
|
37 | 47 |
|
38 | 48 | install.bin: socket_vmnet socket_vmnet_client
|
39 | 49 | mkdir -p "$(DESTDIR)/$(PREFIX)/bin"
|
40 |
| - install socket_vmnet "$(DESTDIR)/$(PREFIX)/bin/socket_vmnet" |
41 |
| - install socket_vmnet_client "$(DESTDIR)/$(PREFIX)/bin/socket_vmnet_client" |
| 50 | + cp -a socket_vmnet "$(DESTDIR)/$(PREFIX)/bin/socket_vmnet" |
| 51 | + cp -a socket_vmnet_client "$(DESTDIR)/$(PREFIX)/bin/socket_vmnet_client" |
| 52 | + $(STRIP) "$(DESTDIR)/$(PREFIX)/bin/socket_vmnet" |
| 53 | + $(STRIP) "$(DESTDIR)/$(PREFIX)/bin/socket_vmnet_client" |
42 | 54 |
|
43 | 55 | install.doc: README.md LICENSE launchd etc_sudoers.d
|
44 | 56 | mkdir -p "$(DESTDIR)/$(PREFIX)/share/doc/socket_vmnet"
|
@@ -90,3 +102,37 @@ uninstall: uninstall.launchd.plist uninstall.doc uninstall.bin uninstall.run
|
90 | 102 | .PHONY: clean
|
91 | 103 | clean:
|
92 | 104 | rm -f socket_vmnet socket_vmnet_client *.o client/*.o
|
| 105 | + |
| 106 | +define make_artifacts |
| 107 | + $(MAKE) clean |
| 108 | + rm -rf _artifacts/$(1) |
| 109 | + $(MAKE) ARCH=$(1) DESTDIR=_artifacts/$(1) install.bin install.doc |
| 110 | + file -bp _artifacts/$(1)/$(PREFIX)/bin/socket_vmnet | grep -q "Mach-O 64-bit executable $(1)" |
| 111 | + $(TAR) -C _artifacts/$(1) -cf _artifacts/socket_vmnet-$(VERSION_TRIMMED)-$(1).tar ./ |
| 112 | + $(GZIP) _artifacts/socket_vmnet-$(VERSION_TRIMMED)-$(1).tar |
| 113 | + rm -rf _artifacts/$(1) |
| 114 | + $(MAKE) clean |
| 115 | +endef |
| 116 | + |
| 117 | +.PHONY: artifacts |
| 118 | +artifacts: |
| 119 | + rm -rf _artifacts |
| 120 | + $(call make_artifacts,x86_64) |
| 121 | + $(call make_artifacts,arm64) |
| 122 | + sw_vers | tee _artifacts/build-env.txt |
| 123 | + echo --- >> _artifacts/build-env.txt |
| 124 | + pkgutil --pkg-info=com.apple.pkg.CLTools_Executables | tee -a _artifacts/build-env.txt |
| 125 | + echo --- >> _artifacts/build-env.txt |
| 126 | + $(CC) --version | tee -a _artifacts/build-env.txt |
| 127 | + (cd _artifacts ; shasum -a 256 *) > SHA256SUMS |
| 128 | + mv SHA256SUMS _artifacts/SHA256SUMS |
| 129 | + $(TOUCH) _artifacts/* _artifacts |
| 130 | + |
| 131 | +.PHONY: test.repro |
| 132 | +test.repro: |
| 133 | + rm -rf _artifacts.0 _artifacts.1 |
| 134 | + $(MAKE) artifacts |
| 135 | + mv _artifacts _artifacts.0 |
| 136 | + $(MAKE) artifacts |
| 137 | + mv _artifacts _artifacts.1 |
| 138 | + $(DIFFOSCOPE) _artifacts.0/ _artifacts.1/ |
0 commit comments