forked from godot-go/godot-go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
101 lines (85 loc) · 3.34 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
.DEFAULT_GOAL := build
GOOS?=$(shell go env GOOS)
GOARCH?=$(shell go env GOARCH)
GOIMPORTS?=$(shell which goimports)
CLANG_FORMAT?=$(shell which clang-format || which clang-format-10 || which clang-format-11 || which clang-format-12)
GODOT?=$(shell which godot)
CWD=$(shell pwd)
OUTPUT_PATH=test/demo/lib
CGO_ENABLED=1
TEST_MAIN=test/main.go
ifeq ($(GOOS),windows)
TEST_BINARY_PATH=$(OUTPUT_PATH)/libgodotgo-test-windows-$(GOARCH).dll
else ifeq ($(GOOS),darwin)
TEST_BINARY_PATH=$(OUTPUT_PATH)/libgodotgo-test-macos-$(GOARCH).framework
else ifeq ($(GOOS),linux)
TEST_BINARY_PATH=$(OUTPUT_PATH)/libgodotgo-test-linux-$(GOARCH).so
else
TEST_BINARY_PATH=$(OUTPUT_PATH)/libgodotgo-test-$(GOOS)-$(GOARCH).so
endif
.PHONY: goenv installdeps generate update_godot_headers_from_binary build clean_src clean remote_debug_test test interactive_test open_demo_in_editor
goenv:
go env
installdeps:
go install golang.org/x/tools/cmd/goimports@latest
generate: installdeps clean
go generate
if [ ! -z "$(CLANG_FORMAT)" ]; then \
"$(CLANG_FORMAT)" -i pkg/ffi/ffi_wrapper.gen.h; \
"$(CLANG_FORMAT)" -i pkg/ffi/ffi_wrapper.gen.c; \
fi
find pkg -name *.gen.go -exec go fmt {} \;
if [ ! -z "$(GOIMPORTS)" ]; then \
find pkg -name *.gen.go -exec $(GOIMPORTS) -w {} \; ; \
fi
update_godot_headers_from_binary: ## update godot_headers from the godot binary
DISPLAY=:0 $(GODOT) --dump-extension-api --headless; \
mv extension_api.json godot_headers/extension_api.json; \
DISPLAY=:0 $(GODOT) --dump-gdextension-interface --headless; \
mv gdextension_interface.h godot_headers/godot/
build: goenv
CGO_ENABLED=1 \
GOOS=$(GOOS) \
GOARCH=$(GOARCH) \
CGO_CFLAGS='-g3 -g -gdwarf -DX86=1 -fPIC -O0' \
CGO_LDFLAGS='-g3 -g' \
go build -gcflags=all="-v -N -l -L -clobberdead -clobberdeadreg -dwarf -dwarflocationlists=false" -tags tools -buildmode=c-shared -v -x -trimpath -o "$(TEST_BINARY_PATH)" $(TEST_MAIN)
clean_src:
find pkg -name *.gen.go -delete
find pkg -name *.gen.c -delete
find pkg -name *.gen.h -delete
clean: clean_src
rm -f test/demo/lib/libgodotgo-*
remote_debug_test:
CI=1 \
LOG_LEVEL=info \
GOTRACEBACK=crash \
GODEBUG=sbrk=1,asyncpreemptoff=1,cgocheck=0,invalidptr=1,clobberfree=1,tracebackancestors=5 \
gdbserver --once :55555 $(GODOT) --headless --verbose --debug --path test/demo/
ci_gen_test_project_files:
CI=1 \
LOG_LEVEL=info \
GOTRACEBACK=1 \
GODEBUG=sbrk=1,gctrace=1,asyncpreemptoff=1,cgocheck=0,invalidptr=1,clobberfree=1,tracebackancestors=5 \
$(GODOT) --headless --verbose --path test/demo/ --editor --quit
# hack until fix lands: https://github.com/godotengine/godot/issues/84460
if [ ! -f "test/demo/.godot/extension_list.cfg" ]; then \
echo 'res://example.gdextension' >> test/demo/.godot/extension_list.cfg; \
fi
test:
CI=1 \
LOG_LEVEL=info \
GOTRACEBACK=1 \
GODEBUG=sbrk=1,gctrace=1,asyncpreemptoff=1,cgocheck=0,invalidptr=1,clobberfree=1,tracebackancestors=5 \
$(GODOT) --headless --verbose --path test/demo/ --quit
interactive_test:
LOG_LEVEL=info \
GOTRACEBACK=1 \
GODEBUG=sbrk=1,gctrace=1,asyncpreemptoff=1,cgocheck=0,invalidptr=1,clobberfree=1,tracebackancestors=5 \
$(GODOT) --verbose --debug --path test/demo/
open_demo_in_editor:
DISPLAY=:0 \
LOG_LEVEL=info \
GOTRACEBACK=1 \
GODEBUG=sbrk=1,gctrace=1,asyncpreemptoff=1,cgocheck=0,invalidptr=1,clobberfree=1,tracebackancestors=5 \
$(GODOT) --verbose --debug --path test/demo/ --editor