11package (default_visibility = ["//visibility:public" ])
2+ load ("@bazel_skylib//rules:common_settings.bzl" , "string_flag" )
23
34common_copts = ['-mavx2' , '-mbmi' , '-mpclmul' ]
45sanitize_copts = ['-fsanitize=address,undefined' , '-fsanitize-recover=address' ]
56
7+ avx2_copts = ['-mavx2' , '-mbmi' , '-mpclmul' ]
8+ sse_copts = ['-msse' , '-msse2' , '-msse4.1' , '-mpclmul' ]
9+ arm_copts = ['-march-armv8-a' ]
10+ benchmark_copts = ['-O3' , '-DNDEBUG' , '-std=c++17' ]
11+ static_dispatch_copts = []
12+ dynamic_dispatch_copts = ['-DSONIC_DYNAMIC_DISPATCH=1' ]
13+ no_san_linkopts = []
14+ gcc_san_linkopts = ['-lasan' ]
15+ clang_san_linkopts = ['-fsanitize-link-c++-runtime' ]
16+
17+ string_flag (
18+ name = "sonic_arch" ,
19+ build_setting_default = "haswell" ,
20+ )
21+
22+ string_flag (
23+ name = "sonic_dispatch" ,
24+ build_setting_default = "static" ,
25+ )
26+
27+ string_flag (
28+ name = "sonic_sanitizer" ,
29+ build_setting_default = "no" ,
30+ )
31+
32+ config_setting (
33+ name = "arm_build" ,
34+ flag_values = {":sonic_arch" : "arm" },
35+ )
36+
37+ config_setting (
38+ name = "sse_build" ,
39+ flag_values = {":sonic_arch" : "westmere" },
40+ )
41+ config_setting (
42+ name = "avx2_build" ,
43+ flag_values = {":sonic_arch" : "haswell" },
44+ )
45+
46+ config_setting (
47+ name = "static_dispatch" ,
48+ flag_values = {":sonic_dispatch" : "static" },
49+ )
50+
51+ config_setting (
52+ name = "dynamic_dispatch" ,
53+ flag_values = {":sonic_dispatch" : "dynamic" },
54+ )
55+
56+ config_setting (
57+ name = "no_san" ,
58+ flag_values = {":sonic_sanitizer" : "no" },
59+ )
60+
61+ config_setting (
62+ name = "gcc_san" ,
63+ flag_values = {":sonic_sanitizer" : "gcc" },
64+ )
65+
66+ config_setting (
67+ name = "clang_san" ,
68+ flag_values = {":sonic_sanitizer" : "clang" },
69+ )
70+
671cc_library (
772 name = "string_view" ,
873 hdrs = glob (["include/thirdparty/**/*.h" ]),
@@ -35,12 +100,21 @@ cc_binary(
35100 "@simdjson" ,
36101 "@jsoncpp//:jsoncpp" ,
37102 ],
38- copts = common_copts + ['-DNDEBUG' , '-std=c++17' ],
103+ # copts = common_copts + ['-DNDEBUG', '-std=c++17'],
104+ copts = select ({
105+ "arm_build" : arm_copts + benchmark_copts ,
106+ "sse_build" : sse_copts + benchmark_copts ,
107+ "avx2_build" : avx2_copts + benchmark_copts ,
108+ }) + \
109+ select ({
110+ "static_dispatch" : static_dispatch_copts ,
111+ "dynamic_dispatch" : dynamic_dispatch_copts ,
112+ }),
39113 linkopts = ['-lstdc++fs' ],
40114)
41115
42116cc_test (
43- name = "unittest-gcc " ,
117+ name = "unittest" ,
44118 srcs = glob ([
45119 "tests/*.cpp" ,
46120 "include/sonic/*" ,
@@ -51,10 +125,49 @@ cc_test(
51125 "@gtest//:gtest_main" ,
52126 ],
53127 data = glob ([ "testdata/*.json" ]),
128+ linkopts = [ '-lstdc++fs' , '-fstack-protector-all' ,] + \
129+ select ({
130+ "no_san" : [],
131+ "gcc_san" : sanitize_copts + gcc_san_linkopts ,
132+ "clang_san" : sanitize_copts + clang_san_linkopts ,
133+ }),
134+ copts = [
135+ '-O3' , '-g' , '-UNDEBUG' , '-std=c++14' ,
136+ '-fstack-protector-all' ,
137+ '-Iinclude' , '-Wall' , '-Wextra' , '-Werror' ,
138+ ] + \
139+ select ({
140+ "no_san" : [],
141+ "gcc_san" : sanitize_copts ,
142+ "clang_san" : sanitize_copts ,
143+ }) + \
144+ select ({
145+ "arm_build" : arm_copts + benchmark_copts ,
146+ "sse_build" : sse_copts + benchmark_copts ,
147+ "avx2_build" : avx2_copts + benchmark_copts ,
148+ }) + \
149+ select ({
150+ "static_dispatch" : static_dispatch_copts ,
151+ "dynamic_dispatch" : dynamic_dispatch_copts ,
152+ }),
153+ )
154+
155+ cc_test (
156+ name = "unittest-clang" ,
157+ srcs = glob ([
158+ "tests/*.h" ,
159+ "tests/*.cpp" ,
160+ "include/sonic/*" ,
161+ "include/sonic/**/*" ,
162+ ]),
163+ deps = [
164+ ":string_view" ,
165+ "@gtest//:gtest_main" ,
166+ ],
167+ data = glob ([ "testdata/*.json" ]),
54168 linkopts = sanitize_copts + [
55169 '-lstdc++fs' ,
56170 '-fstack-protector-all' ,
57- '-lasan'
58171 ],
59172 copts = common_copts + sanitize_copts + [
60173 '-O3' , '-g' , '-UNDEBUG' , '-std=c++14' ,
@@ -64,14 +177,14 @@ cc_test(
64177)
65178
66179cc_test (
67- name = "unittest-clang " ,
180+ name = "unittest-arm " ,
68181 srcs = glob ([
69182 "tests/*.h" ,
70183 "tests/*.cpp" ,
71184 "include/sonic/*" ,
72185 "include/sonic/**/*" ,
73186 ]),
74- deps = [
187+ deps = [
75188 ":string_view" ,
76189 "@gtest//:gtest_main" ,
77190 ],
@@ -81,8 +194,33 @@ cc_test(
81194 '-fstack-protector-all' ,
82195 '-fsanitize-link-c++-runtime'
83196 ],
84- copts = common_copts + sanitize_copts + [
85- '-O3' , '-g' , '-UNDEBUG' , '-std=c++14' ,
197+ copts = sanitize_copts + [
198+ '-O3' , '-g' , '-UNDEBUG' , '-std=c++14' , '-march=armv8-a' ,
199+ '-fstack-protector-all' ,
200+ '-Iinclude' , '-Wall' , '-Wextra' , '-Werror' ,
201+ ],
202+ )
203+
204+ cc_test (
205+ name = "unittest-sse" ,
206+ srcs = glob ([
207+ "tests/*.h" ,
208+ "tests/*.cpp" ,
209+ "include/sonic/*" ,
210+ "include/sonic/**/*" ,
211+ ]),
212+ deps = [
213+ ":string_view" ,
214+ "@gtest//:gtest_main" ,
215+ ],
216+ data = glob ([ "testdata/*.json" ]),
217+ linkopts = sanitize_copts + [
218+ '-lstdc++fs' ,
219+ '-fstack-protector-all' ,
220+ '-fsanitize-link-c++-runtime'
221+ ],
222+ copts = sanitize_copts + [
223+ '-O3' , '-g' , '-UNDEBUG' , '-std=c++14' , '-march=westmere' ,
86224 '-fstack-protector-all' ,
87225 '-Iinclude' , '-Wall' , '-Wextra' , '-Werror' ,
88226 ],
@@ -112,3 +250,4 @@ cc_test(
112250 '-fprofile-arcs' , '-ftest-coverage' ,
113251 ],
114252)
253+
0 commit comments