#!/usr/bin/env gmake -f GOOPTS=CGO_ENABLED=0 BUILDOPTS=-ldflags="-s -w" -a -gcflags=all=-l -trimpath -buildvcs=false MYNAME1=doll-master BINARY1=${MYNAME1} UNIX_BINARY1=${MYNAME1} WINDOWS_BINARY1=${MYNAME1}.exe MYNAME2=doll BINARY2=${MYNAME2} UNIX_BINARY2=${MYNAME2} WINDOWS_BINARY2=${MYNAME2}.exe RMCMD=rm -rf EXAMPLE01=01-LoadJsonFile EXAMPLE02=02-TestLuaScript EXAMPLE03=03-UseGoFuncInLua # On windows binary name can depend not only on platform selected, but target too, we need no .exe suffix for linux bin. ifeq ($(OS),Windows_NT) ifdef GOOS ifeq ($(GOOS),windows) BINARY1=${WINDOWS_BINARY1} BINARY2=${WINDOWS_BINARY2} else # not ifeq ($(GOOS),windows) BINARY1=${MYNAME1} BINARY2=${MYNAME2} endif # ifeq ($(GOOS),windows) else # not ifdef GOOS BINARY1=${WINDOWS_BINARY1} BINARY2=${WINDOWS_BINARY2} endif # ifdef GOOS ifeq ($(SHELL), sh.exe) RMCMD=DEL /Q /F endif endif # Set newline symbol explicitly to aboud undefined behaviour in windows. define IFS endef all: clean build build: ifeq ($(OS),Windows_NT) # Looks like on windows gnu make explicitly set SHELL to sh.exe, if it was not set. ifeq ($(SHELL), sh.exe) # # Vanilla cmd.exe / powershell. SET "CGO_ENABLED=0" go build ${BUILDOPTS} -o ${BINARY1} ./cmd/${MYNAME1} go build ${BUILDOPTS} -o ${BINARY2} ./cmd/${MYNAME2} else ifeq (,$(findstring(Git/usr/bin/sh.exe, $(SHELL)))) # # git-bash CGO_ENABLED=0 go build ${BUILDOPTS} -o ${BINARY1} ./cmd/${MYNAME1} CGO_ENABLED=0 go build ${BUILDOPTS} -o ${BINARY2} ./cmd/${MYNAME2} else # not ifeq (,$(findstring(Git/usr/bin/sh.exe, $(SHELL)))) # # Some other shell. # # TODO: handle it. $(info "-- Dunno how to handle this shell: ${SHELL}") endif # ifeq (,$(findstring(Git/usr/bin/sh.exe, $(SHELL)))) else # not ($(OS),Windows_NT) CGO_ENABLED=0 go build ${BUILDOPTS} -o ${BINARY1} ./cmd/${MYNAME1} CGO_ENABLED=0 go build ${BUILDOPTS} -o ${BINARY1} ./cmd/${MYNAME2} endif # ifeq ($(OS),Windows_NT) clean: ifeq ($(OS),Windows_NT) ifeq ($(SHELL),sh.exe) # # Vanilla cmd.exe / powershell. if exist ${WINDOWS_BINARY1} ${RMCMD} ${WINDOWS_BINARY1} if exist ${UNIX_BINARY1} ${RMCMD} ${UNIX_BINARY1} if exist ${WINDOWS_BINARY2} ${RMCMD} ${WINDOWS_BINARY2} if exist ${EXAMPLE01}.exe ${RMCMD} ${EXAMPLE01}.exe if exist ${EXAMPLE01} ${RMCMD} ${EXAMPLE01} if exist ${EXAMPLE02}.exe ${RMCMD} ${EXAMPLE02}.exe if exist ${EXAMPLE02} ${RMCMD} ${EXAMPLE02} if exist ${EXAMPLE03}.exe ${RMCMD} ${EXAMPLE03}.exe if exist ${EXAMPLE03} ${RMCMD} ${EXAMPLE03} else # not ifeq ($(SHELL),sh.exe) ${RMCMD} ./${WINDOWS_BINARY1} ${RMCMD} ./${UNIX_BINARY1} ${RMCMD} ./${WINDOWS_BINARY2} ${RMCMD} ./${UNIX_BINARY2} ${RMCMD} ./${EXAMPLE01}.exe ${RMCMD} ./${EXAMPLE01} ${RMCMD} ./${EXAMPLE02}.exe ${RMCMD} ./${EXAMPLE02} ${RMCMD} ./${EXAMPLE03}.exe ${RMCMD} ./${EXAMPLE03} endif # ifeq ($(SHELL),sh.exe) else # not ifeq ($(OS),Windows_NT) ${RMCMD} ./${UNIX_BINARY1} ${RMCMD} ./${UNIX_BINARY2} ${RMCMD} ${EXAMPLE01} ${RMCMD} ${EXAMPLE02} ${RMCMD} ${EXAMPLE03} endif upgrade: go get -u ./... go mod tidy go mod vendor ${EXAMPLE01}: clean ifeq ($(OS),Windows_NT) # Looks like on windows gnu make explicitly set SHELL to sh.exe, if it was not set. ifeq ($(SHELL), sh.exe) # # Vanilla cmd.exe / powershell. SET "CGO_ENABLED=0" go build ${BUILDOPTS} -o ${EXAMPLE01}.exe ./cmd/${EXAMPLE01} else ifeq (,$(findstring(Git/usr/bin/sh.exe, $(SHELL)))) # # git-bash CGO_ENABLED=0 go build ${BUILDOPTS} -o ${EXAMPLE01}.exe ./cmd/${EXAMPLE01} else # not ifeq (,$(findstring(Git/usr/bin/sh.exe, $(SHELL)))) # # Some other shell. # # TODO: handle it. $(info "-- Dunno how to handle this shell: ${SHELL}") endif # ifeq (,$(findstring(Git/usr/bin/sh.exe, $(SHELL)))) else # not ($(OS),Windows_NT) CGO_ENABLED=0 go build ${BUILDOPTS} -o ${EXAMPLE01} ./cmd/${EXAMPLE01} endif # ifeq ($(OS),Windows_NT) ${EXAMPLE02}: clean ifeq ($(OS),Windows_NT) # Looks like on windows gnu make explicitly set SHELL to sh.exe, if it was not set. ifeq ($(SHELL), sh.exe) # # Vanilla cmd.exe / powershell. SET "CGO_ENABLED=0" go build ${BUILDOPTS} -o ${EXAMPLE02}.exe ./cmd/${EXAMPLE02} else ifeq (,$(findstring(Git/usr/bin/sh.exe, $(SHELL)))) # # git-bash CGO_ENABLED=0 go build ${BUILDOPTS} -o ${EXAMPLE02}.exe ./cmd/${EXAMPLE02} else # not ifeq (,$(findstring(Git/usr/bin/sh.exe, $(SHELL)))) # # Some other shell. # # TODO: handle it. $(info "-- Dunno how to handle this shell: ${SHELL}") endif # ifeq (,$(findstring(Git/usr/bin/sh.exe, $(SHELL)))) else # not ($(OS),Windows_NT) CGO_ENABLED=0 go build ${BUILDOPTS} -o ${EXAMPLE02} ./cmd/${EXAMPLE02} endif # ifeq ($(OS),Windows_NT) ${EXAMPLE03}: clean ifeq ($(OS),Windows_NT) # Looks like on windows gnu make explicitly set SHELL to sh.exe, if it was not set. ifeq ($(SHELL), sh.exe) # # Vanilla cmd.exe / powershell. SET "CGO_ENABLED=0" go build ${BUILDOPTS} -o ${EXAMPLE03}.exe ./cmd/${EXAMPLE03} else ifeq (,$(findstring(Git/usr/bin/sh.exe, $(SHELL)))) # # git-bash CGO_ENABLED=0 go build ${BUILDOPTS} -o ${EXAMPLE03}.exe ./cmd/${EXAMPLE03} else # not ifeq (,$(findstring(Git/usr/bin/sh.exe, $(SHELL)))) # # Some other shell. # # TODO: handle it. $(info "-- Dunno how to handle this shell: ${SHELL}") endif # ifeq (,$(findstring(Git/usr/bin/sh.exe, $(SHELL)))) else # not ($(OS),Windows_NT) CGO_ENABLED=0 go build ${BUILDOPTS} -o ${EXAMPLE03} ./cmd/${EXAMPLE03} endif # ifeq ($(OS),Windows_NT) # vim: set ft=make noet ai ts=4 sw=4 sts=4: