-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdefs.bzl
More file actions
151 lines (132 loc) · 4.01 KB
/
defs.bzl
File metadata and controls
151 lines (132 loc) · 4.01 KB
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
load("@rules_cc//cc:defs.bzl", "cc_library", "cc_binary", "cc_test")
COMPILE_OPTIONS = select({
"@platforms//os:windows" : [
"/utf-8", # this is required by fmt. we can remove it when char8_t is supported in std::format.
"/permissive-",
"/Zc:__cplusplus",
"/Zc:preprocessor",
],
"//conditions:default" : [],
})
WARNINGS = select({
"@platforms//os:windows" : [
"/W4",
"/WX",
"/external:anglebrackets",
"/external:W0",
],
"//conditions:default" : [],
})
COPTS = COMPILE_OPTIONS + WARNINGS
LINKOPTS = []
DEFINES = select({
"@platforms//os:windows" : [
"UNICODE",
"_UNICODE",
"WINVER=0x0A00",
"_WIN32_WINNT=0x0A00",
],
"//conditions:default" : [],
})
FEATURES = [
'no_legacy_features'
]
def fw_library(name, visibility, deps, copts=[], copts_win=[], linkopts=[], linkopts_win=[]):
name_hdrs = name + "_hdrs"
name_platform = name + "_platform"
name_win = name + "_win"
lib_hdrs = ":%s" % name_hdrs
lib_platform = ":%s" % name_platform
lib_win = ":%s" % name_win
cc_library(
name = name_hdrs,
hdrs = native.glob(["*.hpp"], allow_empty=True),
visibility = ["//visibility:private"],
deps = deps,
includes = ["."],
defines = DEFINES,
copts = COPTS + copts,
linkopts = LINKOPTS + linkopts,
features = FEATURES,
)
cc_library(
name = name_platform,
srcs = native.glob(["Platform/*.cpp"], allow_empty=True),
hdrs = native.glob(["Platform/*.hpp"], allow_empty=True),
visibility = ["//visibility:private"],
deps = deps + [lib_hdrs],
includes = ["./Platform"],
defines = DEFINES,
copts = COPTS + copts,
linkopts = LINKOPTS + linkopts,
features = FEATURES,
)
cc_library(
name = name_win,
srcs = native.glob(["Win/*.cpp"], allow_empty=True),
hdrs = native.glob(["Win/*.hpp"], allow_empty=True),
visibility = ["//visibility:private"],
deps = deps + [lib_platform],
includes = ["./Win"],
defines = DEFINES,
copts = COPTS + copts + copts_win,
linkopts = LINKOPTS + linkopts + linkopts_win,
features = FEATURES,
)
cc_library(
name = name,
visibility = visibility,
srcs = native.glob(["*.cpp"], allow_empty=True),
hdrs = native.glob(["*.hpp"], allow_empty=True),
includes = ["."],
defines = DEFINES,
deps = deps + [lib_platform] + select({
"@platforms//os:windows" : [lib_win],
"//conditions:default" : [],
}),
copts = COPTS + copts,
linkopts = LINKOPTS + linkopts,
features = FEATURES,
)
def fw_binary(name, visibility, deps, copts=[], copts_win=[], linkopts=[], linkopts_win=[]):
name_win = name + "_win"
lib_win = ":%s" % name_win
cc_library(
name = name_win,
srcs = native.glob(["Win/*.cpp"], allow_empty=True),
hdrs = native.glob(["Win/*.hpp"], allow_empty=True),
visibility = ["//visibility:private"],
includes = ["./Win"],
deps = deps,
copts = COPTS + copts + copts_win,
linkopts = LINKOPTS + linkopts + linkopts_win,
features = FEATURES,
)
cc_binary(
name = name,
visibility = visibility,
srcs = native.glob(["*.cpp"], allow_empty=True),
includes = ["."],
deps = [lib_win] + deps,
copts = COPTS + copts,
linkopts = LINKOPTS + linkopts,
features = FEATURES,
)
def fw_test(name, deps, srcs, tags):
cc_test(
name = name,
deps = deps + ["@catch2//:catch2"],
srcs = srcs,
tags = tags,
defines = DEFINES,
copts = COPTS,
features = FEATURES,
)
def fw_test_suite(deps, tags, names):
for name in names:
fw_test(
name = name,
deps = deps,
srcs = ["%s.cpp" % name],
tags = tags,
)