Select Git revision
common.mk 3.27 KiB
build_flags=build
OSES=linux windows darwin
ARCHES=amd64 arm64 386
CA_CERT_NAME=ca-cert.pem
CA_CERT_DEV=../../../certs.dev/$(CA_CERT_NAME)
CA_CERT_PROD=../../../certs.prod/$(CA_CERT_NAME)
RESOURCES_DIR=../defaults/resources
DEFAULT_PORT=1077
bin=nexush
help:
@echo "Supported targets:"
@echo " prepare_dev copy public certificate and server file for development (localhost)"
@echo " prepare_prod copy public certificate and server file for production"
@echo " build_dev build $(bin) development (localhost) binaries for the specified OS/arch"
@echo " build_dev_all build $(bin) development binaries (localhost) for Linux, Windows and Darwin (OSX)"
@echo " build_prod build $(bin) production binaries for the specified OS/arch"
@echo " build_prod_all build $(bin) production binaries for Linux, Windows and Darwin (OSX)"
@echo " clean delete generated binaries"
@echo "The build target requires OS and ARCH variables to be specified:"
@echo " valid OS values: linux, windows, darwin"
@echo " valid ARCH values: amd64, arm64, 386"
prepare_dev: copy_dev_cert set_dev_server
prepare_prod: copy_prod_cert set_prod_server
copy_dev_cert: $(CA_CERT_DEV)
@(mkdir $(RESOURCES_DIR) 2>/dev/null || true)
@cp $< $(RESOURCES_DIR)
copy_prod_cert: $(CA_CERT_PROD)
@(mkdir $(RESOURCES_DIR) 2>/dev/null || true)
@cp $< $(RESOURCES_DIR)
set_prod_server: ../../../config/certs/nexus-server.info.prod
@grep ^ip_address $<|awk -F" = " '{print $$2":$(DEFAULT_PORT)"}'|tr -d "\n" > $(RESOURCES_DIR)/server
set_dev_server:
@printf "127.0.0.1:$(DEFAULT_PORT)" > $(RESOURCES_DIR)/server
build_dir:
$(if $(OS),,$(error Please define the OS environment variable: supported values are linux, windows, darwin))
$(if $(ARCH),,$(error Please define the ARCH environment variable: supported values are amd64, arm64, 386))
@echo "[Creating output directory $(OS)/$(ARCH)]"
@mkdir -p build/$(ARCH)/$(OS)
build_prod: build_dir prepare_prod build
build_dev: build_dir prepare_dev build
build:
@echo "[Building for $(OS) $(ARCH)]" ;\
if [ $(OS) = "linux" ]; then \
GOARCH=$(ARCH) GOOS=$(OS) CGO_ENABLED=0 go $(build_flags) -o build/$(ARCH)/$(OS)/ ;\
#strip -s build/$(ARCH)/$(OS)/$(bin) ;\
#upx build/$(ARCH)/$(OS)/$(bin) ;\
else \
echo "GOARCH=$(ARCH) GOOS=$(OS) go $(build_flags) -o build/$(ARCH)/$(OS)/" ;\
GOARCH=$(ARCH) GOOS=$(OS) go $(build_flags) -o build/$(ARCH)/$(OS)/ ;\
fi
build_prod_all: copy_prod_cert set_prod_server build_all
build_dev_all: copy_dev_cert set_dev_server build_all
build_all:
@for os in $(OSES); do \
for arch in $(ARCHES); do \
if [ $$os != "darwin" ] || [ $$arch != "386" ]; then \
echo "[Creating output directory $$os/$$arch]" ;\
mkdir -p build/$$arch/$$os ;\
echo "[Building for $$os $$arch]" ;\
if [ $$os = "linux" ]; then \
GOARCH=$$arch GOOS=$$os CGO_ENABLED=0 go $(build_flags) -o build/$$arch/$$os/ ;\
#strip -s build/$$arch/$$os/$(bin) ;\
#upx build/$$arch/$$os/$(bin) ;\
else \
echo "GOARCH=$$arch GOOS=$$os go $(build_flags) -o build/$$arch/$$os/" ;\
GOARCH=$$arch GOOS=$$os go $(build_flags) -o build/$$arch/$$os/ ;\
fi \
fi \
done \
done
clean:
@/bin/rm -rf build $(bin) $(RESOURCES_DIR)/server $(RESOURCES_DIR)/$(CA_CERT_NAME)
@go clean .
.PHONY: build clean