mirror of
https://github.com/DanielLavrushin/b4.git
synced 2026-07-18 12:16:01 +00:00
132 lines
5.3 KiB
Makefile
132 lines
5.3 KiB
Makefile
VERSION ?= 1.0.0
|
|
VERSION_COMMIT := $(shell git rev-parse --short HEAD 2>/dev/null)
|
|
VERSION_DATE := $(shell date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
BINARY_NAME := b4
|
|
SRC_DIR := ./src
|
|
OUT_DIR := ./out
|
|
|
|
ENABLE_LINUX ?= 1
|
|
ENABLE_FREEBSD ?= 0
|
|
ENABLE_OPENBSD ?= 0
|
|
ENABLE_ANDROID ?= 0
|
|
|
|
CGO_ENABLED ?= 0
|
|
|
|
LINUX_ARCHS := 386 amd64 armv5 armv6 armv7 arm64 loong64 mips mipsle mips64 mips64le ppc64 ppc64le riscv64 s390x
|
|
FREEBSD_ARCHS := 386 amd64 armv7 arm64
|
|
OPENBSD_ARCHS := 386 amd64 armv7 arm64
|
|
ANDROID_ARCHS := amd64 arm64 armv7
|
|
|
|
all: build
|
|
|
|
.PHONY: build_local %
|
|
%: ;
|
|
|
|
build:
|
|
@echo "Building $(BINARY_NAME) $(VERSION)..."
|
|
@rm -rf $(OUT_DIR); mkdir -p $(OUT_DIR)/assets
|
|
ifneq ($(ENABLE_LINUX),0)
|
|
@$(MAKE) os_linux
|
|
endif
|
|
ifneq ($(ENABLE_FREEBSD),0)
|
|
@$(MAKE) os_freebsd
|
|
endif
|
|
ifneq ($(ENABLE_OPENBSD),0)
|
|
@$(MAKE) os_openbsd
|
|
endif
|
|
ifneq ($(ENABLE_ANDROID),0)
|
|
@$(MAKE) os_android
|
|
endif
|
|
|
|
os_linux:
|
|
@for arch in $(LINUX_ARCHS); do \
|
|
case $$arch in \
|
|
armv5) GOOS=linux GOARCH=arm GOARM=5 TARGET=armv5 $(MAKE) build_single ;; \
|
|
armv6) GOOS=linux GOARCH=arm GOARM=6 TARGET=armv6 $(MAKE) build_single ;; \
|
|
armv7) GOOS=linux GOARCH=arm GOARM=7 TARGET=armv7 $(MAKE) build_single ;; \
|
|
*) GOOS=linux GOARCH=$$arch TARGET=$$arch $(MAKE) build_single ;; \
|
|
esac ; \
|
|
done
|
|
|
|
os_freebsd:
|
|
@for arch in $(FREEBSD_ARCHS); do \
|
|
case $$arch in \
|
|
armv7) GOOS=freebsd GOARCH=arm GOARM=7 TARGET=armv7 $(MAKE) build_single ;; \
|
|
*) GOOS=freebsd GOARCH=$$arch TARGET=$$arch $(MAKE) build_single ;; \
|
|
esac ; \
|
|
done
|
|
|
|
os_openbsd:
|
|
@for arch in $(OPENBSD_ARCHS); do \
|
|
case $$arch in \
|
|
armv7) GOOS=openbsd GOARCH=arm GOARM=7 TARGET=armv7 $(MAKE) build_single ;; \
|
|
*) GOOS=openbsd GOARCH=$$arch TARGET=$$arch $(MAKE) build_single ;; \
|
|
esac ; \
|
|
done
|
|
|
|
os_android:
|
|
@if [ -z "$$ANDROID_NDK_HOME" ]; then echo "Skipping Android: ANDROID_NDK_HOME not set"; exit 0; fi; \
|
|
for arch in $(ANDROID_ARCHS); do \
|
|
case $$arch in \
|
|
armv7) GOOS=android GOARCH=arm GOARM=7 TARGET=armv7 CGO_ENABLED=1 $(MAKE) build_single_android ;; \
|
|
amd64) GOOS=android GOARCH=amd64 TARGET=amd64 CGO_ENABLED=1 $(MAKE) build_single_android ;; \
|
|
arm64) GOOS=android GOARCH=arm64 TARGET=arm64 CGO_ENABLED=1 $(MAKE) build_single_android ;; \
|
|
esac ; \
|
|
done
|
|
|
|
build_local:
|
|
@set -e; \
|
|
OS="$(word 2,$(MAKECMDGOALS))"; \
|
|
ARCH="$(word 3,$(MAKECMDGOALS))"; \
|
|
DEST_DIR="$(word 4,$(MAKECMDGOALS))"; \
|
|
if [ -z "$$OS" ] || [ -z "$$ARCH" ]; then echo "Usage: make build_local <os> <arch> [dest_dir]"; exit 1; fi; \
|
|
if [ "$$OS" = "android" ]; then \
|
|
if [ -z "$$ANDROID_NDK_HOME" ]; then echo "ANDROID_NDK_HOME not set"; exit 1; fi; \
|
|
case "$$ARCH" in \
|
|
armv7) TARGET=armv7; GOOS=android GOARCH=arm GOARM=7 CGO_ENABLED=1 TARGET=$$TARGET $(MAKE) --no-print-directory build_single_android ;; \
|
|
amd64) TARGET=amd64; GOOS=android GOARCH=amd64 CGO_ENABLED=1 TARGET=$$TARGET $(MAKE) --no-print-directory build_single_android ;; \
|
|
arm64) TARGET=arm64; GOOS=android GOARCH=arm64 CGO_ENABLED=1 TARGET=$$TARGET $(MAKE) --no-print-directory build_single_android ;; \
|
|
*) echo "Unsupported android arch: $$ARCH"; exit 1 ;; \
|
|
esac; \
|
|
else \
|
|
case "$$ARCH" in \
|
|
armv5) TARGET=armv5; GOOS=$$OS GOARCH=arm GOARM=5 TARGET=$$TARGET $(MAKE) --no-print-directory build_single ;; \
|
|
armv6) TARGET=armv6; GOOS=$$OS GOARCH=arm GOARM=6 TARGET=$$TARGET $(MAKE) --no-print-directory build_single ;; \
|
|
armv7) TARGET=armv7; GOOS=$$OS GOARCH=arm GOARM=7 TARGET=$$TARGET $(MAKE) --no-print-directory build_single ;; \
|
|
*) TARGET=$$ARCH; GOOS=$$OS GOARCH=$$ARCH TARGET=$$TARGET $(MAKE) --no-print-directory build_single ;; \
|
|
esac; \
|
|
fi; \
|
|
if [ -n "$$DEST_DIR" ]; then \
|
|
mkdir -p "$$DEST_DIR"; \
|
|
cp "$(OUT_DIR)/$$OS-$$TARGET/$(BINARY_NAME)" "$$DEST_DIR/"; \
|
|
echo "copied to $$DEST_DIR"; \
|
|
fi
|
|
|
|
build_single:
|
|
@set -e; \
|
|
OUT_PATH="$(OUT_DIR)/$(GOOS)-$(TARGET)"; \
|
|
echo "Building for $(GOOS) ($(TARGET))..."; \
|
|
mkdir -p "$$OUT_PATH" "$(OUT_DIR)/assets"; \
|
|
GOOS=$(GOOS) GOARCH=$(GOARCH) GOARM=$(GOARM) CGO_ENABLED=$(CGO_ENABLED) go -C $(SRC_DIR) build -ldflags "-X main.Version=$(VERSION) -X main.Commit=$(VERSION_COMMIT) -X main.Date=$(VERSION_DATE)" -o ../"$$OUT_PATH"/$(BINARY_NAME); \
|
|
tar -C "$$OUT_PATH" -czf "$(OUT_DIR)/assets/$(BINARY_NAME)-$(GOOS)-$(TARGET).tar.gz" "$(BINARY_NAME)"; \
|
|
sha256sum "$(OUT_DIR)/assets/$(BINARY_NAME)-$(GOOS)-$(TARGET).tar.gz" > "$(OUT_DIR)/assets/$(BINARY_NAME)-$(GOOS)-$(TARGET).tar.gz.sha256"
|
|
|
|
build_single_android:
|
|
@set -e; \
|
|
case "$(GOARCH)" in \
|
|
amd64) CC="$$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-*/bin/x86_64-linux-android21-clang" ;; \
|
|
arm64) CC="$$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-*/bin/aarch64-linux-android21-clang" ;; \
|
|
arm) CC="$$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-*/bin/armv7a-linux-androideabi19-clang" ;; \
|
|
esac; \
|
|
OUT_PATH="$(OUT_DIR)/$(GOOS)-$(TARGET)"; \
|
|
echo "Building for $(GOOS) ($(TARGET))..."; \
|
|
mkdir -p "$$OUT_PATH" "$(OUT_DIR)/assets"; \
|
|
GOOS=$(GOOS) GOARCH=$(GOARCH) GOARM=$(GOARM) CGO_ENABLED=1 CC=$$CC go -C $(SRC_DIR) build -ldflags "-X main.Version=$(VERSION)" -o ../"$$OUT_PATH"/$(BINARY_NAME); \
|
|
tar -C "$$OUT_PATH" -czf "$(OUT_DIR)/assets/$(BINARY_NAME)-$(GOOS)-$(TARGET).tar.gz" "$(BINARY_NAME)"; \
|
|
sha256sum "$(OUT_DIR)/assets/$(BINARY_NAME)-$(GOOS)-$(TARGET).tar.gz" > "$(OUT_DIR)/assets/$(BINARY_NAME)-$(GOOS)-$(TARGET).tar.gz.sha256"
|
|
|
|
|
|
|
|
|
|
clean:
|
|
rm -rf $(OUT_DIR)
|