Added makefile and separate binaries compilation

This commit is contained in:
Mihail Slobodyanuk 2022-12-09 15:09:36 +02:00
parent f84f0a5f19
commit 5e53fc4f9d
3 changed files with 80 additions and 18 deletions

1
.gitignore vendored
View file

@ -1 +1,2 @@
.history .history
built

60
build
View file

@ -1,5 +1,4 @@
#!/bin/sh #!/bin/bash
set -ef set -ef
PKGSRC=${PKGSRC:-github.com/RiV-chain/RiV-mesh/src/version} PKGSRC=${PKGSRC:-github.com/RiV-chain/RiV-mesh/src/version}
@ -12,7 +11,8 @@ else
fi fi
ARGS="-v" ARGS="-v"
while getopts "utc:l:dro:ps" option TARGET_PATH=$(pwd)
while getopts "utc:l:dro:psg:b:" option
do do
case "$option" case "$option"
in in
@ -26,6 +26,10 @@ do
p) ARGS="$ARGS -buildmode=pie";; p) ARGS="$ARGS -buildmode=pie";;
# statically linked executable # statically linked executable
s) STATIC=" -linkmode external -extldflags=-static";; s) STATIC=" -linkmode external -extldflags=-static";;
# build target
g) TARGET=$OPTARG;;
# build path
b) TARGET_PATH=$OPTARG;;
esac esac
done done
@ -34,26 +38,46 @@ if [ -z $TABLES ] && [ -z $DEBUG ]; then
fi fi
#could be static #could be static
for CMD in ./cmd/mesh ./cmd/meshctl ; do buildbin() {
echo "Building: $CMD" local CMD=$(realpath $1)
go build $ARGS -ldflags "${LDFLAGS}${STATIC}" -gcflags "$GCFLAGS" $CMD echo "Building: $CMD for $GOOS-$GOARCH"
(cd $TARGET_PATH && go build $ARGS -ldflags "${LDFLAGS}${LDFLAGS2}" -gcflags "$GCFLAGS" $CMD)
if [ $UPX ]; then if [ $UPX ]; then
upx --brute $CMD upx --brute $CMD
fi fi
done }
#only UI should be built with windowsgui flag build_mesh() {
if [ "$GOOS" == "windows" ]; then LDFLAGS2="${STATIC}" buildbin ./cmd/mesh
LDFLAGS="$LDFLAGS -H windowsgui" }
fi
#dynamic only build_meshctl() {
for CMD in ./contrib/ui/mesh-ui ; do LDFLAGS2="${STATIC}" buildbin ./cmd/meshctl
echo "Building: $CMD" }
go build $ARGS -ldflags "$LDFLAGS" -gcflags "$GCFLAGS" $CMD
if [ $UPX ]; then build_mesh_ui() {
upx --brute $CMD #only UI should be built with windowsgui flag
if [ "$GOOS" == "windows" ]; then
LDFLAGS2=" -H windowsgui"
fi 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

37
makefile Normal file
View file

@ -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))