Skip to content
Snippets Groups Projects
Select Git revision
  • 7bd61211b1dbdb3f557aba2dc7f58bcc93cc8db9
  • live_exam_os_ubuntu default protected
2 results

common.mk

Blame
  • 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