@@ -17,58 +17,168 @@ ifndef DEST
1717DEST =bin
1818endif
1919
20- deps :
20+ .PHONY : help
21+
22+ help : # # Print the help documentation
23+ @grep -E ' ^[a-zA-Z_-\]+:.*?## .*$$' $(MAKEFILE_LIST ) | sort | awk ' BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
24+
25+ #
26+ # Dependencies
27+ #
28+
29+ deps_go : # # Install Go dependencies
2130 go get -d -t ./...
2231
23- fmt :
32+ .PHONY : deps_go_test
33+ deps_go_test : # # Download Go dependencies for tests
34+ go get golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow # download shadow
35+ go install golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow # install shadow
36+ go get -u github.com/kisielk/errcheck # download and install errcheck
37+ go get -u github.com/client9/misspell/cmd/misspell # download and install misspell
38+ go get -u github.com/gordonklaus/ineffassign # download and install ineffassign
39+ go get -u honnef.co/go/tools/cmd/staticcheck # download and instal staticcheck
40+ go get -u golang.org/x/tools/cmd/goimports # download and install goimports
41+
42+ deps_arm : # # Install dependencies to cross-compile to ARM
43+ # ARMv7
44+ apt-get install -y libc6-armel-cross libc6-dev-armel-cross binutils-arm-linux-gnueabi libncurses5-dev gcc-arm-linux-gnueabi g++-arm-linux-gnueabi
45+ # ARMv8
46+ apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
47+
48+ deps_gopherjs : # # Install GopherJS
49+ go get -u github.com/gopherjs/gopherjs
50+
51+ deps_javascript : # # Install dependencies for JavaScript tests
52+ npm install .
53+
54+ #
55+ # Go building, formatting, testing, and installing
56+ #
57+
58+ fmt : # # Format Go source code
2459 go fmt $$(go list ./... )
2560
26- vet :
61+ imports : # # Update imports in Go source code
62+ # If missing, install goimports with: go get golang.org/x/tools/cmd/goimports
63+ goimports -w $$(find . -iname '*.go' )
64+
65+ vet : # # Vet Go source code
2766 go vet $$(go list ./... )
2867
29- test :
68+ test_go : # # Run Go tests
3069 bash scripts/test.sh
3170
32- bin/gss_darwin_amd64 :
71+ build : build_cli build_javascript build_so build_android # # Build CLI, Shared Objects (.so), JavaScript, and Android
72+
73+ install : # # Install GSS CLI on current platform
74+ go install -gcflags=" $( GCFLAGS) " -ldflags=" $( LDFLAGS) " github.com/spatialcurrent/go-simple-serializer/cmd/gss
75+
76+ #
77+ # Command line Programs
78+ #
79+
80+ bin/gss_darwin_amd64 : # # Build GSS CLI for Darwin / amd64
3381 GOOS=darwin GOARCH=amd64 go build -o $(DEST ) /gss_darwin_amd64 -gcflags=" $( GCFLAGS) " -ldflags=" $( LDFLAGS) " github.com/spatialcurrent/go-simple-serializer/cmd/gss
3482
35- bin/gss_linux_amd64 :
83+ bin/gss_linux_amd64 : # # Build GSS CLI for Linux / amd64
3684 GOOS=linux GOARCH=amd64 go build -o $(DEST ) /gss_linux_amd64 -gcflags=" $( GCFLAGS) " -ldflags=" $( LDFLAGS) " github.com/spatialcurrent/go-simple-serializer/cmd/gss
3785
38- bin/gss_windows_amd64.exe :
86+ bin/gss_windows_amd64.exe : # # Build GSS CLI for Windows / amd64
3987 GOOS=windows GOARCH=amd64 go build -o $(DEST ) /gss_windows_amd64.exe -gcflags=" $( GCFLAGS) " -ldflags=" $( LDFLAGS) " github.com/spatialcurrent/go-simple-serializer/cmd/gss
4088
41- bin/gss_linux_arm64 :
89+ bin/gss_linux_arm64 : # # Build GSS CLI for Linux / arm64
4290 GOOS=linux GOARCH=arm64 go build -o $(DEST ) /gss_linux_arm64 -gcflags=" $( GCFLAGS) " -ldflags=" $( LDFLAGS) " github.com/spatialcurrent/go-simple-serializer/cmd/gss
4391
44- # Build Shared Object
45- bin/gss.so :
46- go build -o $(DEST ) /gss.so -buildmode=c-shared -ldflags " $( LDFLAGS) " -gcflags=" $( GCFLAGS) " github.com/spatialcurrent/go-simple-serializer/plugins/gss
92+ build_cli : bin/gss_darwin_amd64 bin/gss_linux_amd64 bin/gss_windows_amd64.exe bin/gss_linux_arm64 # # Build command line programs
93+
94+ #
95+ # Shared Objects
96+ #
97+
98+ bin/gss.so : # # Compile Shared Object for current platform
99+ # https://golang.org/cmd/link/
100+ # CGO Enabled : https://github.com/golang/go/issues/24068
101+ CGO_ENABLED=1 go build -o $(DEST ) /gss.so -buildmode=c-shared -ldflags " $( LDFLAGS) " -gcflags=" $( GCFLAGS) " github.com/spatialcurrent/go-simple-serializer/plugins/gss
102+
103+ bin/gss_linux_amd64.so : # # Compile Shared Object for Linux / amd64
104+ # https://golang.org/cmd/link/
105+ # CGO Enabled : https://github.com/golang/go/issues/24068
106+ GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build -o $(DEST ) /gss_linux_amd64.so -buildmode=c-shared -ldflags " $( LDFLAGS) " -gcflags=" $( GCFLAGS) " github.com/spatialcurrent/go-simple-serializer/plugins/gss
107+
108+ bin/gss_linux_armv7.so : # # Compile Shared Object for Linux / ARMv7
109+ # LDFLAGS - https://golang.org/cmd/link/
110+ # CGO Enabled - https://github.com/golang/go/issues/24068
111+ # GOARM/GOARCH Compatability Table - https://github.com/golang/go/wiki/GoArm
112+ # ARM Cross Compiler Required - https://www.acmesystems.it/arm9_toolchain
113+ GOOS=linux GOARCH=arm GOARM=7 CGO_ENABLED=1 CC=arm-linux-gnueabi-gcc go build -ldflags " -linkmode external -extldflags -static" -o $(DEST ) /gss_linux_armv7.so -buildmode=c-shared -ldflags " $( LDFLAGS) " -gcflags=" $( GCFLAGS) " github.com/spatialcurrent/go-simple-serializer/plugins/gss
114+
115+ bin/gss_linux_armv8.so : # # Compile Shared Object for Linux / ARMv8
116+ # LDFLAGS - https://golang.org/cmd/link/
117+ # CGO Enabled - https://github.com/golang/go/issues/24068
118+ # GOARM/GOARCH Compatability Table - https://github.com/golang/go/wiki/GoArm
119+ # ARM Cross Compiler Required - https://www.acmesystems.it/arm9_toolchain
120+ # Dependencies - https://www.96boards.org/blog/cross-compile-files-x86-linux-to-96boards/
121+ GOOS=linux GOARCH=arm64 CGO_ENABLED=1 CC=aarch64-linux-gnu-gcc go build -ldflags " -linkmode external -extldflags -static" -o $(DEST ) /gss_linux_armv8.so -buildmode=c-shared -ldflags " $( LDFLAGS) " -gcflags=" $( GCFLAGS) " github.com/spatialcurrent/go-simple-serializer/plugins/gss
122+
123+ build_so : bin/gss_linux_amd64.so bin/gss_linux_armv7.so bin/gss_linux_armv8.so # # Build Shared Objects (.so)
124+
125+ #
126+ # Android
127+ #
47128
48- # Build JavaScript Library
49- bin/gss.js :
50- gopherjs build -o $(DEST ) /gss.js github.com/spatialcurrent/go-simple-serializer/cmd/gss.js
129+ bin/gss.aar : # # Build Android Archive Library
130+ gomobile bind -target android -javapkg=com.spatialcurrent -o $(DEST ) /gss.aar -gcflags=" $( GCFLAGS) " github.com/spatialcurrent/go-simple-serializer/pkg/gss
51131
52- # Build Minified JavaScript Library
53- bin/gss.min.js :
54- gopherjs build -m -o $(DEST ) /gss.min.js github.com/spatialcurrent/go-simple-serializer/cmd/gss.js
132+ build_android : bin/gss.arr # # Build artifacts for Android
55133
56- # Build Android Archive Library
57- bin/gss.aar :
58- gomobile bind -target android -javapkg=com.spatialcurrent -o $( DEST ) /gss.aar -gcflags= " $( GCFLAGS ) " github.com/spatialcurrent/go-simple-serializer/gss
134+ #
135+ # JavaScript
136+ #
59137
60- build_cli : bin/gss_darwin_amd64 bin/gss_linux_amd64 bin/gss_windows_amd64.exe bin/gss_linux_arm64
138+ dist/gss.mod.js : # # Build JavaScript module
139+ gopherjs build -o dist/gss.mod.js github.com/spatialcurrent/go-simple-serializer/cmd/gss.mod.js
61140
62- build_javascript : bin/gss.js bin/gss.min.js
141+ dist/gss.mod.min.js : # # Build minified JavaScript module
142+ gopherjs build -m -o dist/gss.mod.min.js github.com/spatialcurrent/go-simple-serializer/cmd/gss.mod.js
63143
64- build_android : bin/gss.arr
144+ dist/gss.global.js : # # Build JavaScript library that attaches to global or window.
145+ GSS_JS_EXPORT_GLOBAL=1 gopherjs build -o dist/gss.global.js github.com/spatialcurrent/go-simple-serializer/cmd/gss.global.js
65146
66- build_so : bin/gss.so
147+ dist/gss.global.min.js : # # Build minified JavaScript library that attaches to global or window.
148+ GSS_JS_EXPORT_GLOBAL=1 gopherjs build -m -o dist/gss.global.min.js github.com/spatialcurrent/go-simple-serializer/cmd/gss.global.js
67149
68- build : build_cli build_javascript build_so build_android
150+ build_javascript : dist/gss.mod.js dist/gss.mod.min.js dist/gss.global.js dist/gss.global.min.js # # Build artifacts for JavaScript
69151
70- install :
71- go install -gcflags=" $( GCFLAGS) " -ldflags=" $( LDFLAGS) " github.com/spatialcurrent/go-simple-serializer/cmd/gss
152+ test_javascript : # # Run JavaScript tests
153+ npm run test
154+
155+ lint : # # Lint JavaScript source code
156+ npm run lint
157+
158+ #
159+ # Examples
160+ #
161+
162+ bin/gss_example_c : bin/gss.so # # Build C example
163+ mkdir -p bin && cd bin && gcc -o gss_example_c -I. ./../examples/c/main.c -L. -l:gss.so
164+
165+ bin/gss_example_cpp : bin/gss.so # # Build C++ example
166+ mkdir -p bin && cd bin && g++ -o gss_example_cpp -I . ./../examples/cpp/main.cpp -L. -l:gss.so
167+
168+ run_example_c : bin/gss.so bin/gss_example_c # # Run C example
169+ cd bin && LD_LIBRARY_PATH=. ./gss_example_c
170+
171+ run_example_cpp : bin/gss.so bin/gss_example_cpp # # Run C++ example
172+ cd bin && LD_LIBRARY_PATH=. ./gss_example_cpp
173+
174+ run_example_python : bin/gss.so # # Run Python example
175+ LD_LIBRARY_PATH=bin python examples/python/test.py
176+
177+ run_example_javascript : dist/gss.mod.js # # Run JavaScript module example
178+ node examples/js/index.mod.js
179+
180+ # # Clean
72181
73- clean :
182+ clean : # # Clean artifacts
74183 rm -fr bin
184+ rm -fr dist
0 commit comments