11VERSION =$(shell git describe --abbrev=0 --always)
2- LDFLAGS = -ldflags "-X github.com/ForceCLI/force/lib.Version=${VERSION}"
2+ LDFLAGS = -ldflags "-s -w -X github.com/ForceCLI/force/lib.Version=${VERSION}"
3+ LINUX_LDFLAGS = -ldflags "-s -w -extldflags '-static' -X github.com/ForceCLI/force/lib.Version=${VERSION}"
34GCFLAGS = -gcflags="all=-N -l"
45EXECUTABLE =force
5- WINDOWS =$(EXECUTABLE ) _windows_amd64.exe
6- LINUX =$(EXECUTABLE ) _linux_amd64
7- OSX_AMD64 =$(EXECUTABLE ) _osx_amd64
8- OSX_ARM64 =$(EXECUTABLE ) _osx_arm64
6+ PACKAGE =.
7+ WINDOWS =$(EXECUTABLE ) -windows-amd64.exe
8+ LINUX =$(EXECUTABLE ) -linux-amd64
9+ OSX_AMD64 =$(EXECUTABLE ) -darwin-amd64
10+ OSX_ARM64 =$(EXECUTABLE ) -darwin-arm64
911ALL =$(WINDOWS ) $(LINUX ) $(OSX_AMD64 ) $(OSX_ARM64 )
1012
1113default :
@@ -17,17 +19,27 @@ install:
1719install-debug :
1820 go install ${LDFLAGS} ${GCFLAGS}
1921
20- $(WINDOWS ) :
21- env CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -v -o $( WINDOWS ) ${LDFLAGS}
22+ $(WINDOWS ) : checkcmd-xgo
23+ xgo - go 1.21 -out $( EXECUTABLE ) -dest . ${LDFLAGS} -buildmode default -trimpath -targets windows/amd64 -pkg ${PACKAGE} -x .
2224
23- $(LINUX ) :
24- env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -o $(LINUX ) ${LDFLAGS}
25+ # Build static binaries on linux
26+ $(LINUX ) : checkcmd-x86_64-linux-gnu-gcc checkcmd-x86_64-linux-gnu-g++
27+ env \
28+ GOOS=linux \
29+ GOARCH=amd64 \
30+ CC=x86_64-linux-gnu-gcc \
31+ CXX=x86_64-linux-gnu-g++ \
32+ CGO_ENABLED=1 \
33+ CGO_FLAGS=" -static"
34+ go build -v -tags ' netgo osusergo' -o $(LINUX ) ${LINUX_LDFLAGS} ${PACKAGE}
2535
26- $(OSX_AMD64 ) :
27- env CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -v -o $(OSX_AMD64 ) ${LDFLAGS}
36+ # Build macOS binaries using docker images that contain SDK
37+ # See https://github.com/crazy-max/xgo and https://github.com/tpoechtrager/osxcross
38+ $(OSX_ARM64 ) : checkcmd-xgo
39+ xgo -go 1.21 -out $(EXECUTABLE ) -dest . ${LDFLAGS} -buildmode default -trimpath -targets darwin/arm64 -pkg ${PACKAGE} -x .
2840
29- $(OSX_ARM64 ) :
30- env CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -v -o $( OSX_ARM64 ) ${LDFLAGS}
41+ $(OSX_AMD64 ) : checkcmd-xgo
42+ xgo - go 1.21 -out $( EXECUTABLE ) -dest . ${LDFLAGS} -buildmode default -trimpath -targets darwin/amd64 -pkg ${PACKAGE} -x .
3143
3244$(basename $(WINDOWS ) ) .zip : $(WINDOWS )
3345 zip $@ $<
5466clean :
5567 -rm -f $(EXECUTABLE ) $(EXECUTABLE ) _*
5668
69+ checkcmd-% :
70+ @hash $(* ) > /dev/null 2>&1 || \
71+ (echo " ERROR: '$( * ) ' must be installed and available on your PATH." ; exit 1)
72+
5773.PHONY : default dist clean docs
0 commit comments