@@ -3,39 +3,71 @@ PKG := "github.com/OpenFogStack/$(PROJECT_NAME)"
3
3
GO_FILES := $(shell find . -name '* .go' | grep -v /vendor/ | grep -v /ext/ | grep -v _test.go)
4
4
TEST_DIR := ./test
5
5
6
+ SUPPORTED_ARCH =amd64 arm arm64
7
+ RUNTIMES := $(shell find pkg/docker/runtimes -name Dockerfile | xargs -n1 dirname | xargs -n1 basename)
8
+
6
9
OS =$(shell go env GOOS)
7
10
ARCH =$(shell go env GOARCH)
8
11
9
- .PHONY : all build start clean
10
-
12
+ .PHONY : all
11
13
all : build
12
14
15
+ .PHONY : build
13
16
build : tinyfaas-${OS}-${ARCH}
14
17
18
+ .PHONY : start
19
+ start : tinyfaas-${OS}-${ARCH}
20
+ ./$<
21
+
22
+ .PHONY : test
23
+ test : build ${TEST_DIR}/test_all.py
24
+ @python3 ${TEST_DIR} /test_all.py
25
+
26
+ .PHONY : clean
27
+ clean : clean.sh
28
+ @sh clean.sh
29
+
30
+
31
+ define arch_build
32
+ pkg/docker/runtimes-$(arch ) : $(foreach runtime,$(RUNTIMES ) ,pkg/docker/runtimes-$(arch ) /$(runtime ) )
33
+ endef
34
+ $(foreach arch,$(SUPPORTED_ARCH),$(eval $(arch_build)))
35
+
36
+ define runtime_build
37
+ .PHONY: pkg/docker/runtimes-$(arch ) /$(runtime )
38
+ pkg/docker/runtimes-$(arch ) /$(runtime ) : pkg/docker/runtimes-$(arch ) /$(runtime ) /Dockerfile pkg/docker/runtimes-$(arch ) /$(runtime ) /blob.tar.gz
39
+
40
+ pkg/docker/runtimes-$(arch ) /$(runtime ) /blob.tar.gz: pkg/docker/runtimes/$(runtime ) /build.Dockerfile
41
+ mkdir -p $$(@D )
42
+ cd $$(<D ) ; docker build --platform=linux/$(arch ) -t tf-build-$(arch ) -$(runtime ) -f $$(<F ) .
43
+ docker run -d -t --platform=linux/$(arch ) --name $${PROJECT_NAME}-$(runtime ) --rm tf-build-$(arch ) -$(runtime )
44
+ docker export $${PROJECT_NAME}-$(runtime ) | gzip > $$@
45
+ docker kill $${PROJECT_NAME}-$(runtime )
46
+
47
+ pkg/docker/runtimes-$(arch ) /$(runtime ) /Dockerfile: pkg/docker/runtimes/$(runtime ) /Dockerfile
48
+ mkdir -p $$(@D )
49
+ cp -r pkg/docker/runtimes/$(runtime ) /Dockerfile $$@
50
+ endef
51
+ $(foreach arch,$(SUPPORTED_ARCH),$(foreach runtime,$(RUNTIMES),$(eval $(runtime_build))))
52
+
15
53
# requires protoc, protoc-gen-go and protoc-gen-go-grpc
16
54
# install from your package manager, e.g.:
17
55
# brew install protobuf
18
56
# brew install protoc-gen-go
19
57
# brew install protoc-gen-go-grpc
20
58
pkg/grpc/tinyfaas/tinyfaas.pb.go pkg/grpc/tinyfaas/tinyfaas_grpc.pb.go : pkg/grpc/tinyfaas/tinyfaas.proto
21
- @protoc -I . $< --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=require_unimplemented_servers=false,paths=source_relative
59
+ @protoc -I $( <D ) $< --go_out=$( <D ) --go_opt=paths=source_relative --go-grpc_out=$( <D ) --go-grpc_opt=require_unimplemented_servers=false,paths=source_relative
22
60
23
61
# requires grpcio-tools and mypy-protobuf
24
62
# python3 -m pip install -r requirements.txt
25
63
pkg/grpc/tinyfaas/tinyfaas_pb2.py pkg/grpc/tinyfaas/tinyfaas_pb2.pyi pkg/grpc/tinyfaas/tinyfaas_pb2_grpc.py : pkg/grpc/tinyfaas/tinyfaas.proto
26
- @python3 -m grpc_tools.protoc -I . --python_out=. --grpc_python_out=. --mypy_out=. $<
64
+ @python3 -m grpc_tools.protoc -I $( <D ) --python_out=$( <D ) --grpc_python_out=$( <D ) --mypy_out=$( <D ) $<
27
65
28
66
cmd/manager/rproxy-% .bin : pkg/grpc/tinyfaas/tinyfaas_pb2.py pkg/grpc/tinyfaas/tinyfaas_pb2.pyi pkg/grpc/tinyfaas/tinyfaas_pb2_grpc.py pkg/grpc/tinyfaas/tinyfaas.pb.go pkg/grpc/tinyfaas/tinyfaas_grpc.pb.go $(GO_FILES )
29
67
GOOS=$(word 1,$(subst -, ,$* ) ) GOARCH=$(word 2,$(subst -, ,$* ) ) go build -o $@ -v $(PKG ) /cmd/rproxy
30
68
31
- tinyfaas-% : cmd/manager/rproxy-% .bin $(GO_FILES )
32
- GOOS=$(word 1,$(subst -, ,$* ) ) GOARCH=$(word 2,$(subst -, ,$* ) ) go build -o $@ -v $(PKG ) /cmd/manager
33
-
34
- start : tinyfaas-${OS}-${ARCH}
35
- ./$<
36
-
37
- test : build ${TEST_DIR}/test_all.py
38
- @python3 ${TEST_DIR} /test_all.py
69
+ tinyfaas-darwin-% : cmd/manager/rproxy-darwin-% .bin pkg/docker/runtimes-% $(GO_FILES )
70
+ GOOS=darwin GOARCH=$* go build -o $@ -v $(PKG ) /cmd/manager
39
71
40
- clean : clean.sh
41
- @sh clean.sh
72
+ tinyfaas-linux- % : cmd/manager/rproxy-linux- % .bin pkg/docker/runtimes- % $( GO_FILES )
73
+ GOOS=linux GOARCH= $* go build -o $@ -v $( PKG ) /cmd/manager
0 commit comments