diff --git a/.gitignore b/.gitignore index 8f5fd87c..bd61a4a8 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .history +built \ No newline at end of file diff --git a/build b/build index 0e31eae4..4e899c83 100755 --- a/build +++ b/build @@ -1,5 +1,4 @@ -#!/bin/sh - +#!/bin/bash set -ef PKGSRC=${PKGSRC:-github.com/RiV-chain/RiV-mesh/src/version} @@ -12,7 +11,8 @@ else fi ARGS="-v" -while getopts "utc:l:dro:ps" option +TARGET_PATH=$(pwd) +while getopts "utc:l:dro:psg:b:" option do case "$option" in @@ -26,6 +26,10 @@ do p) ARGS="$ARGS -buildmode=pie";; # statically linked executable s) STATIC=" -linkmode external -extldflags=-static";; + # build target + g) TARGET=$OPTARG;; + # build path + b) TARGET_PATH=$OPTARG;; esac done @@ -34,26 +38,46 @@ if [ -z $TABLES ] && [ -z $DEBUG ]; then fi #could be static -for CMD in ./cmd/mesh ./cmd/meshctl ; do - echo "Building: $CMD" - go build $ARGS -ldflags "${LDFLAGS}${STATIC}" -gcflags "$GCFLAGS" $CMD +buildbin() { + local CMD=$(realpath $1) + echo "Building: $CMD for $GOOS-$GOARCH" + + (cd $TARGET_PATH && go build $ARGS -ldflags "${LDFLAGS}${LDFLAGS2}" -gcflags "$GCFLAGS" $CMD) if [ $UPX ]; then upx --brute $CMD fi -done +} -#only UI should be built with windowsgui flag -if [ "$GOOS" == "windows" ]; then - LDFLAGS="$LDFLAGS -H windowsgui" -fi +build_mesh() { + LDFLAGS2="${STATIC}" buildbin ./cmd/mesh +} -#dynamic only -for CMD in ./contrib/ui/mesh-ui ; do - echo "Building: $CMD" - go build $ARGS -ldflags "$LDFLAGS" -gcflags "$GCFLAGS" $CMD +build_meshctl() { + LDFLAGS2="${STATIC}" buildbin ./cmd/meshctl +} - if [ $UPX ]; then - upx --brute $CMD +build_mesh_ui() { + #only UI should be built with windowsgui flag + if [ "$GOOS" == "windows" ]; then + LDFLAGS2=" -H windowsgui" fi -done + buildbin ./contrib/ui/mesh-ui +} + +case $TARGET in + "mesh") + build_mesh + ;; + "meshctl") + build_meshctl + ;; + "mesh_ui") + build_mesh_ui + ;; + *) + build_mesh + build_meshctl + build_mesh_ui + ;; +esac diff --git a/makefile b/makefile new file mode 100644 index 00000000..1495586b --- /dev/null +++ b/makefile @@ -0,0 +1,37 @@ +ALL_ARCHS=amd64 +ALL_OS=linux windows macos +ALL_PLATFORMS=linux-amd64 windows-amd64 macos-amd64 +ALL_EXE=mesh meshctl mesh_ui + +OUT_DIR=built + +PATH:=/devroot/toolchain/amd64-w64-mingw32-seh-cpp20/bin:$(PATH) + +take=$(word $1,$(subst -, ,$2)) + +all: $(ALL_PLATFORMS) + +$(addprefix $(OUT_DIR)/,$(ALL_PLATFORMS)): + mkdir -p $@ + + +linux-amd64: $(addprefix linux-amd64-,$(ALL_EXE)) + +windows-amd64: $(addprefix windows-amd64-,$(ALL_EXE)) +windows-amd64-%: BUILD_ENV=CGO_ENABLED=1 CC=amd64-w64-mingw32-gcc CXX=amd64-w64-mingw32-g++ + +macos-amd64: $(addprefix macos-amd64-,$(ALL_EXE)) +macos-amd64-%: BUILD_ENV=GO111MODULE=on + +$(foreach platf, $(ALL_PLATFORMS), $(addprefix $(platf)-,$(ALL_EXE))): + $(MAKE) $(OUT_DIR)/$(call take,1,$@)-$(call take,2,$@) + GOOS=$(call take,1,$@) GOARCH=$(call take,2,$@) $(BUILD_ENV) ./build -g $(call take,3,$@) -b $(OUT_DIR)/$(call take,1,$@)-$(call take,2,$@) + +clean: + +help: + @echo "Targets:" + @echo $(ALL_PLATFORMS) + @echo $(addprefix linux-amd64-,$(ALL_EXE)) + @echo $(addprefix windows-amd64-,$(ALL_EXE)) + @echo $(addprefix macos-amd64-,$(ALL_EXE))