@@ -27,6 +27,8 @@ export GOBIN := $(abspath $(BUILD_DIR))
27
27
export PATH := $(PATH ) :$(GOBIN ) :$(shell dirname $(GO ) )
28
28
export CGO_LDFLAGS := -lswsscommon -lhiredis
29
29
export CGO_CXXFLAGS := -I/usr/include/swss -w -Wall -fpermissive
30
+ export MEMCHECK_CGO_LDFLAGS := $(CGO_LDFLAGS ) -fsanitize=address
31
+ export MEMCHECK_CGO_CXXFLAGS := $(CGO_CXXFLAGS ) -fsanitize=leak
30
32
31
33
ifeq ($(ENABLE_TRANSLIB_WRITE ) ,y)
32
34
BLD_TAGS := gnmi_translib_write
@@ -39,6 +41,11 @@ ifneq ($(BLD_TAGS),)
39
41
BLD_FLAGS := -tags "$(strip $(BLD_TAGS ) ) "
40
42
endif
41
43
44
+ MEMCHECK_TAGS := $(BLD_TAGS ) gnmi_memcheck
45
+ ifneq ($(MEMCHECK_TAGS ) ,)
46
+ MEMCHECK_FLAGS := -tags "$(strip $(MEMCHECK_TAGS ) ) "
47
+ endif
48
+
42
49
ENABLE_DIALOUT_VALUE := 1
43
50
ifeq ($(ENABLE_DIALOUT ) ,n)
44
51
ENABLE_DIALOUT_VALUE = 0
@@ -55,18 +62,18 @@ go.mod:
55
62
56
63
$(GO_DEPS ) : go.mod $(PATCHES ) swsscommon_wrap $(GNOI_YANG )
57
64
$(GO ) mod vendor
58
- $(GO ) mod download golang.org/x/
[email protected]
59
- $(GO ) mod download github.com/jipanyang/
[email protected]
60
- cp -r
$(GOPATH ) /pkg/mod/golang.org/x/
[email protected] /
* vendor/golang.org/x/crypto/
61
- cp -r
$(GOPATH ) /pkg/mod/github.com/jipanyang/
[email protected] /
* vendor/github.com/jipanyang/gnxi/
65
+ $(GO ) mod download github.com/google/
[email protected]
66
+ cp -r
$(GOPATH ) /pkg/mod/github.com/google/
[email protected] /
* vendor/github.com/google/gnxi/
67
+
68
+ # Apply patch from sonic-mgmt-common, ignore glog.patch because glog version changed
69
+ sed -i 's/patch -d $${DEST_DIR}\/github.com\/golang\/glog/\# patch -d $${DEST_DIR}\/github.com\/golang\/glog/g' $(MGMT_COMMON_DIR)/patches/apply.sh
62
70
$(MGMT_COMMON_DIR)/patches/apply.sh vendor
71
+ sed -i 's/# patch -d $${DEST_DIR}\/github.com\/golang\/glog/patch -d $${DEST_DIR}\/github.com\/golang\/glog/g' $(MGMT_COMMON_DIR)/patches/apply.sh
72
+
63
73
chmod -R u+w vendor
64
- patch -d vendor -p0 < patches/gnmi_cli.all.patch
65
- patch -d vendor -p0 < patches/gnmi_set.patch
66
- patch -d vendor -p0 < patches/gnmi_get.patch
67
74
patch -d vendor -p0 < patches/gnmi_path.patch
68
75
patch -d vendor -p0 < patches/gnmi_xpath.patch
69
- git apply patches/0001-Updated-to-filter-and-write-to-file.patch
76
+
70
77
touch $@
71
78
72
79
go-deps : $(GO_DEPS )
@@ -75,31 +82,57 @@ go-deps-clean:
75
82
$(RM ) -r vendor
76
83
77
84
sonic-gnmi : $(GO_DEPS )
85
+ # advancetls 1.0.0 release need following patch to build by go-1.19
86
+ patch -d vendor -p0 < patches/0002-Fix-advance-tls-build-with-go-119.patch
87
+ # build service first which depends on advancetls
78
88
ifeq ($(CROSS_BUILD_ENVIRON ) ,y)
79
89
$(GO) build -o ${GOBIN}/telemetry -mod=vendor $(BLD_FLAGS) github.com/sonic-net/sonic-gnmi/telemetry
80
90
ifneq ($(ENABLE_DIALOUT_VALUE ) ,0)
81
91
$(GO) build -o ${GOBIN}/dialout_client_cli -mod=vendor $(BLD_FLAGS) github.com/sonic-net/sonic-gnmi/dialout/dialout_client_cli
82
92
endif
83
- $(GO) build -o ${GOBIN}/gnmi_get -mod=vendor github.com/jipanyang/gnxi/gnmi_get
84
- $(GO) build -o ${GOBIN}/gnmi_set -mod=vendor github.com/jipanyang/gnxi/gnmi_set
85
- $(GO) build -o ${GOBIN}/gnmi_cli -mod=vendor github.com/openconfig/gnmi/cmd/gnmi_cli
86
93
$(GO) build -o ${GOBIN}/gnoi_client -mod=vendor github.com/sonic-net/sonic-gnmi/gnoi_client
87
94
$(GO) build -o ${GOBIN}/gnmi_dump -mod=vendor github.com/sonic-net/sonic-gnmi/gnmi_dump
88
95
else
89
96
$(GO) install -mod=vendor $(BLD_FLAGS) github.com/sonic-net/sonic-gnmi/telemetry
90
97
ifneq ($(ENABLE_DIALOUT_VALUE ) ,0)
91
98
$(GO) install -mod=vendor $(BLD_FLAGS) github.com/sonic-net/sonic-gnmi/dialout/dialout_client_cli
92
99
endif
93
- $(GO) install -mod=vendor github.com/jipanyang/gnxi/gnmi_get
94
- $(GO) install -mod=vendor github.com/jipanyang/gnxi/gnmi_set
95
- $(GO) install -mod=vendor github.com/openconfig/gnmi/cmd/gnmi_cli
96
100
$(GO) install -mod=vendor github.com/sonic-net/sonic-gnmi/gnoi_client
97
101
$(GO) install -mod=vendor github.com/sonic-net/sonic-gnmi/gnmi_dump
98
102
$(GO) install -mod=vendor github.com/sonic-net/sonic-gnmi/build/gnoi_yang/client/gnoi_openconfig_client
99
103
$(GO) install -mod=vendor github.com/sonic-net/sonic-gnmi/build/gnoi_yang/client/gnoi_sonic_client
100
104
101
105
endif
102
106
107
+ # download and apply patch for gnmi client, which will break advancetls
108
+ # backup crypto and gnxi
109
+ mkdir backup_crypto
110
+ cp -r vendor/golang.org/x/crypto/* backup_crypto/
111
+
112
+ # download and patch crypto and gnxi
113
+ $(GO) mod download golang.org/x/
[email protected]
114
+ cp -r $(GOPATH)/pkg/mod/golang.org/x/
[email protected] /* vendor/golang.org/x/crypto/
115
+ chmod -R u+w vendor
116
+ patch -d vendor -p0 < patches/gnmi_cli.all.patch
117
+ patch -d vendor -p0 < patches/gnmi_set.patch
118
+ patch -d vendor -p0 < patches/gnmi_get.patch
119
+ git apply patches/0001-Updated-to-filter-and-write-to-file.patch
120
+ git apply patches/0003-Fix-client-json-parsing-issue.patch
121
+
122
+ ifeq ($(CROSS_BUILD_ENVIRON ) ,y)
123
+ $(GO) build -o ${GOBIN}/gnmi_get -mod=vendor github.com/google/gnxi/gnmi_get
124
+ $(GO) build -o ${GOBIN}/gnmi_set -mod=vendor github.com/google/gnxi/gnmi_set
125
+ $(GO) build -o ${GOBIN}/gnmi_cli -mod=vendor github.com/openconfig/gnmi/cmd/gnmi_cli
126
+ else
127
+ $(GO) install -mod=vendor github.com/google/gnxi/gnmi_get
128
+ $(GO) install -mod=vendor github.com/google/gnxi/gnmi_set
129
+ $(GO) install -mod=vendor github.com/openconfig/gnmi/cmd/gnmi_cli
130
+ endif
131
+
132
+ # restore old version
133
+ rm -rf vendor/golang.org/x/crypto/
134
+ mv backup_crypto/ vendor/golang.org/x/crypto/
135
+
103
136
swsscommon_wrap :
104
137
make -C swsscommon
105
138
@@ -178,12 +211,19 @@ endif
178
211
sudo CGO_LDFLAGS="$(CGO_LDFLAGS)" CGO_CXXFLAGS="$(CGO_CXXFLAGS)" $(GO) test -race -coverprofile=coverage-data.txt -covermode=atomic -mod=vendor -v github.com/sonic-net/sonic-gnmi/sonic_data_client
179
212
sudo CGO_LDFLAGS="$(CGO_LDFLAGS)" CGO_CXXFLAGS="$(CGO_CXXFLAGS)" $(GO) test -race -coverprofile=coverage-dbus.txt -covermode=atomic -mod=vendor -v github.com/sonic-net/sonic-gnmi/sonic_service_client
180
213
sudo CGO_LDFLAGS="$(CGO_LDFLAGS)" CGO_CXXFLAGS="$(CGO_CXXFLAGS)" $(TESTENV) $(GO) test -race -coverprofile=coverage-translutils.txt -covermode=atomic -mod=vendor -v github.com/sonic-net/sonic-gnmi/transl_utils
181
- $(GO) get github.com/axw/gocov/...
182
- $(GO) get github.com/AlekSi/gocov-xml
214
+ $(GO)
install github.com/axw/gocov/
[email protected]
215
+ $(GO) install github.com/AlekSi/gocov-xml@latest
183
216
$(GO) mod vendor
184
217
gocov convert coverage-*.txt | gocov-xml -source $(shell pwd) > coverage.xml
185
218
rm -rf coverage-*.txt
186
219
220
+ check_memleak : $(DBCONFG ) $(ENVFILE )
221
+ sudo CGO_LDFLAGS=" $( MEMCHECK_CGO_LDFLAGS) " CGO_CXXFLAGS=" $( MEMCHECK_CGO_CXXFLAGS) " $(GO ) test -coverprofile=coverage-telemetry.txt -covermode=atomic -mod=vendor $(MEMCHECK_FLAGS ) -v github.com/sonic-net/sonic-gnmi/telemetry
222
+ sudo CGO_LDFLAGS=" $( MEMCHECK_CGO_LDFLAGS) " CGO_CXXFLAGS=" $( MEMCHECK_CGO_CXXFLAGS) " $(GO ) test -coverprofile=coverage-config.txt -covermode=atomic $(MEMCHECK_FLAGS ) -v github.com/sonic-net/sonic-gnmi/sonic_db_config
223
+ sudo CGO_LDFLAGS=" $( MEMCHECK_CGO_LDFLAGS) " CGO_CXXFLAGS=" $( MEMCHECK_CGO_CXXFLAGS) " $(GO ) test -coverprofile=coverage-gnmi.txt -covermode=atomic -mod=vendor $(MEMCHECK_FLAGS ) -v github.com/sonic-net/sonic-gnmi/gnmi_server -coverpkg ../... -run TestGNMINative
224
+ sudo CGO_LDFLAGS=" $( MEMCHECK_CGO_LDFLAGS) " CGO_CXXFLAGS=" $( MEMCHECK_CGO_CXXFLAGS) " $(GO ) test -coverprofile=coverage-data.txt -covermode=atomic -mod=vendor $(MEMCHECK_FLAGS ) -v github.com/sonic-net/sonic-gnmi/sonic_data_client
225
+
226
+
187
227
clean :
188
228
$(RM ) -r build
189
229
$(RM ) -r vendor
0 commit comments