forked from paust-team/pirius
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
159 lines (128 loc) · 4.73 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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
GOPATH ?= $(shell go env GOPATH)
GOOS ?= $(shell go env GOOS)
GOARCH ?= $(shell go env GOARCH)
THIRDPARTY_DIR := $(abspath _thirdparty)
GIT_DIR := .git
mac-os-host := $(findstring Darwin, $(shell uname))
linux-os-host := $(findstring Linux, $(shell uname))
# bin
BROKER_BIN_DIR := broker/cmd
CLIENT_BIN_DIR := agent/cmd
BROKER_BIN_NAME := pirius-broker
CLIENT_BIN_NAME := pirius-agent
BROKER_BIN := $(BROKER_BIN_DIR)/$(BROKER_BIN_NAME)
CLIENT_BIN := $(CLIENT_BIN_DIR)/$(CLIENT_BIN_NAME)
INSTALL_BIN_DIR := /usr/local/bin
# config
CONFIG_NAME := config
BROKER_CONFIG_DIR := broker/config
AGENT_CONFIG_DIR := agent/config
# debug | release
DEPLOY_TARGET ?= debug
INSTALL_CONFIG_HOME_DIR=
ifeq "$(DEPLOY_TARGET)" "debug"
INSTALL_CONFIG_HOME_DIR=${HOME}/.pirius-debug/config
else
INSTALL_CONFIG_HOME_DIR=${HOME}/.pirius/config
endif
INSTALL_BROKER_CONFIG_DIR := ${INSTALL_CONFIG_HOME_DIR}/broker
INSTALL_AGENT_CONFIG_DIR := ${INSTALL_CONFIG_HOME_DIR}/agent
# rocksdb
ROCKSDB_DIR := $(THIRDPARTY_DIR)/rocksdb
ROCKSDB_BUILD_DIR := $(ROCKSDB_DIR)/build
ROCKSDB_INSTALL_DIR := $(ROCKSDB_DIR)/install
ROCKSDB_INCLUDE_DIR := $(ROCKSDB_INSTALL_DIR)/include
ROCKSDB_LIB_DIR := $(ROCKSDB_INSTALL_DIR)/lib
LIB_ROCKSDB := $(ROCKSDB_LIB_DIR)/librocksdb.a
# proto
PROTOC_DIR := $(THIRDPARTY_DIR)/protoc
PROTOC := $(PROTOC_DIR)/bin/protoc
PROTOC_GEN_GO := $(GOPATH)/bin/protoc-gen-go
$(PROTOC):
mkdir -p $(PROTOC_DIR)
ifdef mac-os-host
wget -O $(PROTOC_DIR)/protoc.zip https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-osx-x86_64.zip
endif
ifdef linux-os-host
wget -O $(PROTOC_DIR)/protoc.zip https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-linux-x86_64.zip
endif
cd $(PROTOC_DIR) && unzip protoc.zip
chmod +x $(PROTOC)
$(PROTOC_GEN_GO):
go install github.com/golang/protobuf/protoc-gen-go
$(PROTOC_GEN_GRPC):
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc
PROTO_DIR := ./proto
PROTO_TARGETS := $(PROTO_DIR)/agent.pb.go $(PROTO_DIR)/broker.pb.go
.SUFFIXES: .proto .pb.go
%.pb.go: %.proto $(PROTOC_GEN_GO) $(PROTOC_GEN_GRPC) $(PROTOC)
$(PROTOC) --proto_path=$(PROTO_DIR) --go_out=$(PROTO_DIR) --go-grpc_out=$(PROTO_DIR) $<
.PHONY: compile-protobuf prepare
compile-protobuf: $(PROTO_TARGETS) $(PROTOC_GEN_GO) $(PROTOC)
$(LIB_ROCKSDB):
if [ -d "$(GIT_DIR)" ]; then \
git submodule update --init --recursive; \
fi
mkdir -p $(ROCKSDB_BUILD_DIR)
ifdef mac-os-host
cd $(ROCKSDB_BUILD_DIR) &&\
cmake .. -DCMAKE_TARGET_MESSAGES=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo -DPORTABLE=ON -DWITH_TESTS=OFF \
-DWITH_BENCHMARK_TOOLS=OFF -DWITH_SNAPPY=ON -DUSE_RTTI=ON -DWITH_GFLAGS=OFF -DCMAKE_INSTALL_PREFIX=$(ROCKSDB_INSTALL_DIR) -DROCKSDB_BUILD_SHARED=OFF &&\
make -j`nproc`
endif
ifdef linux-os-host
cd $(ROCKSDB_BUILD_DIR) &&\
cmake .. -DCMAKE_TARGET_MESSAGES=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DPORTABLE=ON -DWITH_FALLOCATE=OFF -DWITH_TESTS=OFF -DWITH_BENCHMARK_TOOLS=OFF -DWITH_SNAPPY=ON -DUSE_RTTI=ON -DWITH_GFLAGS=OFF -DCMAKE_INSTALL_PREFIX=$(ROCKSDB_INSTALL_DIR) -DROCKSDB_BUILD_SHARED=OFF &&\
make -j`nproc`
endif
cd $(ROCKSDB_BUILD_DIR) && make install
touch $(LIB_ROCKSDB)
.PHONY: build-rocksdb
build-rocksdb: $(LIB_ROCKSDB)
$(BROKER_BIN): $(LIB_ROCKSDB)
ifdef linux-os-host
GOOS=linux GOARCH=amd64 \
go build -tags $(DEPLOY_TARGET) -o $(BROKER_BIN) ./$(BROKER_BIN_DIR)/main.go
endif
ifdef mac-os-host
go build -tags $(DEPLOY_TARGET) -o $(BROKER_BIN) ./$(BROKER_BIN_DIR)/main.go
endif
touch $(BROKER_BIN)
$(CLIENT_BIN):
ifdef linux-os-host
CGO_ENABLED=1 CGO_CFLAGS="${CGO_CFLAGS} -I$(ROCKSDB_INCLUDE_DIR)" \
CGO_LDFLAGS="${CGO_LDFLAGS} -L$(ROCKSDB_LIB_DIR)" \
GOOS=linux GOARCH=amd64 \
go build -tags $(DEPLOY_TARGET) -o $(CLIENT_BIN) ./$(CLIENT_BIN_DIR)/main.go
endif
ifdef mac-os-host
CGO_ENABLED=1 CGO_CFLAGS="${CGO_CFLAGS} -I$(ROCKSDB_INCLUDE_DIR)" \
CGO_LDFLAGS="${CGO_LDFLAGS} -L$(ROCKSDB_LIB_DIR)" \
go build -tags $(DEPLOY_TARGET) -o $(CLIENT_BIN) ./$(CLIENT_BIN_DIR)/main.go
endif
touch $(CLIENT_BIN)
.PHONY: build-broker
build-broker: $(BROKER_BIN)
.PHONY: build-agent
build-agent: $(CLIENT_BIN)
.PHONY: all build rebuild install test clean-rocksdb clean-proto
build: build-broker build-agent install-config
all: build
install-config:
mkdir -p ${INSTALL_BROKER_CONFIG_DIR} && cp ${BROKER_CONFIG_DIR}/${CONFIG_NAME}.yml ${INSTALL_BROKER_CONFIG_DIR}/
mkdir -p ${INSTALL_AGENT_CONFIG_DIR} && cp ${AGENT_CONFIG_DIR}/${CONFIG_NAME}.yml ${INSTALL_AGENT_CONFIG_DIR}/
install: build
cp $(BROKER_BIN) $(INSTALL_BIN_DIR)/
cp $(CLIENT_BIN) $(INSTALL_BIN_DIR)/
clean:
rm -f $(BROKER_BIN)
rm -f $(CLIENT_BIN)
rm -rf $(INSTALL_CONFIG_HOME_DIR)
clean-rocksdb:
rm -rf $(ROCKSDB_BUILD_DIR)
rm -rf $(ROCKSDB_INSTALL_DIR)
clean-proto:
rm -rf $(PROTO_TARGETS)
test:
@go test -v