golang_version := 1.12.7 golang_tarball := go$(golang_version).src.tar.gz golang_tarball_path := src/$(golang_tarball) golang_bin_tarball := go$(golang_version).linux-amd64.tar.gz golang_bin_tarball_path := src/$(golang_bin_tarball) build_dir := build/$(arch) golang_bin_dir := $(build_dir)/go golang_src_dir := $(build_dir)/go/src golang_src_build_dir := $(build_dir)/target/src prefix := $(arch)-linux-musl- bin := $(build_dir)/target/bin/go ifeq ($(arch), mipsel) prefix := mipsel-linux-musln32- go_arch := mipsle else ifeq ($(arch), aarch64) go_arch := arm64 else ifeq ($(arch), x86_64) go_arch := amd64 endif cc := $(prefix)gcc cxx := $(prefix)g++ strip := $(prefix)strip $(golang_bin_tarball_path): wget https://dl.google.com/go/$(golang_bin_tarball) -O $(golang_bin_tarball_path) $(golang_bin_dir): $(golang_bin_tarball_path) mkdir -p $(build_dir) cd $(build_dir) && tar xvf ../../$(golang_bin_tarball_path) cd $(build_dir)/go && patch -p1 < ../../../set-external-linker.patch touch $(golang_bin_dir) $(golang_src_build_dir): $(golang_src_dir) mkdir -p $(build_dir)/target cp -r $(golang_src_dir) $(golang_src_build_dir) $(bin): $(golang_bin_dir) $(golang_src_build_dir) cd $(golang_src_build_dir) && \ GOROOT_BOOTSTRAP=`realpath ../../go` \ GOROOT_FINAL=/golang \ GOOS=linux \ GOARCH=$(go_arch) \ CC_FOR_TARGET=$(cc) \ CXX_FOR_TARGET=$(cxx) \ CC=x86_64-linux-musl-gcc \ CXX=x86_64-linux-musl-g++ \ LD=x86_64-linux-musl-ld \ GO_LDFLAGS="-buildmode=pie" \ CGO_ENABLED=1 \ ./make.bash # if [ "$(arch)" != "x86_64" ]; then \ # mv $(build_dir)/target/bin/*_*/* $(build_dir)/target/bin; \ # rm -rf $(build_dir)/target/bin/*_*; \ # rm -rf $(build_dir)/target/pkg/linux_amd64; \ # rm -rf $(build_dir)/target/pkg/tool/linux_amd64; \ # fi # rm -rf $(build_dir)/target/pkg/obj # rm -rf $(build_dir)/target/pkg/bootstrap .PHONY: all clean all: $(bin) clean: rm -rf build/$(arch)