Skip to content

Commit 933e6d3

Browse files
UebelAndredmah42
andauthored
Build libpfm with rules_cc (google#1922)
Co-authored-by: dominic <[email protected]>
1 parent da9d689 commit 933e6d3

File tree

4 files changed

+229
-21
lines changed

4 files changed

+229
-21
lines changed

Diff for: MODULE.bazel

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@ module(
55

66
bazel_dep(name = "bazel_skylib", version = "1.7.1")
77
bazel_dep(name = "platforms", version = "0.0.10")
8-
bazel_dep(name = "rules_foreign_cc", version = "0.10.1")
98
bazel_dep(name = "rules_cc", version = "0.0.9")
109

1110
bazel_dep(name = "rules_python", version = "1.0.0", dev_dependency = True)
1211
bazel_dep(name = "googletest", version = "1.14.0", dev_dependency = True, repo_name = "com_google_googletest")
1312

14-
bazel_dep(name = "libpfm", version = "4.11.0")
13+
bazel_dep(name = "libpfm", version = "4.11.0.bcr.1")
1514

1615
# Register a toolchain for Python 3.9 to be able to build numpy. Python
1716
# versions >=3.10 are problematic.

Diff for: WORKSPACE

-4
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,6 @@ load("//:bazel/benchmark_deps.bzl", "benchmark_deps")
44

55
benchmark_deps()
66

7-
load("@rules_foreign_cc//foreign_cc:repositories.bzl", "rules_foreign_cc_dependencies")
8-
9-
rules_foreign_cc_dependencies()
10-
117
load("@rules_python//python:repositories.bzl", "py_repositories")
128

139
py_repositories()

Diff for: bazel/benchmark_deps.bzl

-8
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,6 @@ def benchmark_deps():
1818
],
1919
)
2020

21-
if "rules_foreign_cc" not in native.existing_rules():
22-
http_archive(
23-
name = "rules_foreign_cc",
24-
sha256 = "476303bd0f1b04cc311fc258f1708a5f6ef82d3091e53fd1977fa20383425a6a",
25-
strip_prefix = "rules_foreign_cc-0.10.1",
26-
url = "https://github.com/bazelbuild/rules_foreign_cc/releases/download/0.10.1/rules_foreign_cc-0.10.1.tar.gz",
27-
)
28-
2921
if "rules_python" not in native.existing_rules():
3022
http_archive(
3123
name = "rules_python",

Diff for: tools/libpfm.BUILD.bazel

+228-7
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,241 @@
11
"""Build rule for libpfm, which is required to collect performance counters for BENCHMARK_ENABLE_LIBPFM builds."""
22

3-
load("@rules_foreign_cc//foreign_cc:defs.bzl", "make")
3+
load("@rules_cc//cc:defs.bzl", "cc_library")
4+
5+
AARCH32_SRCS_COMMON = [
6+
"lib/pfmlib_arm.c",
7+
"lib/pfmlib_arm_armv7_pmuv1.c",
8+
"lib/pfmlib_arm_armv6.c",
9+
"lib/pfmlib_arm_armv8.c",
10+
"lib/pfmlib_tx2_unc_perf_event.c",
11+
]
12+
13+
AARCH32_SRCS_LINUX = [
14+
"lib/pfmlib_arm_perf_event.c",
15+
]
16+
17+
AARCH64_SRCS_COMMON = [
18+
"lib/pfmlib_arm.c",
19+
"lib/pfmlib_arm_armv8.c",
20+
"lib/pfmlib_tx2_unc_perf_event.c",
21+
]
22+
23+
AARCH64_SRCS_LINUX = [
24+
"lib/pfmlib_arm_perf_event.c",
25+
]
26+
27+
MIPS_SRCS_COMMON = [
28+
"lib/pfmlib_mips.c",
29+
"lib/pfmlib_mips_74k.c",
30+
]
31+
32+
MIPS_SRCS_LINUX = [
33+
"lib/pfmlib_mips_perf_event.c",
34+
]
35+
36+
POWERPC_SRCS_COMMON = [
37+
"lib/pfmlib_powerpc.c",
38+
"lib/pfmlib_power4.c",
39+
"lib/pfmlib_ppc970.c",
40+
"lib/pfmlib_power5.c",
41+
"lib/pfmlib_power6.c",
42+
"lib/pfmlib_power7.c",
43+
"lib/pfmlib_torrent.c",
44+
"lib/pfmlib_power8.c",
45+
"lib/pfmlib_power9.c",
46+
"lib/pfmlib_powerpc_nest.c",
47+
]
48+
49+
POWERPC_SRCS_LINUX = [
50+
"lib/pfmlib_powerpc_perf_event.c",
51+
]
52+
53+
S390X_SRCS_COMMON = [
54+
"lib/pfmlib_s390x_cpumf.c",
55+
]
56+
57+
S390X_SRCS_LINUX = [
58+
"lib/pfmlib_s390x_perf_event.c",
59+
]
60+
61+
X86_64_SRCS_COMMON = [
62+
"lib/pfmlib_amd64.c",
63+
"lib/pfmlib_intel_core.c",
64+
"lib/pfmlib_intel_x86.c",
65+
"lib/pfmlib_intel_x86_arch.c",
66+
"lib/pfmlib_intel_atom.c",
67+
"lib/pfmlib_intel_nhm_unc.c",
68+
"lib/pfmlib_intel_nhm.c",
69+
"lib/pfmlib_intel_wsm.c",
70+
"lib/pfmlib_intel_snb.c",
71+
"lib/pfmlib_intel_snb_unc.c",
72+
"lib/pfmlib_intel_ivb.c",
73+
"lib/pfmlib_intel_ivb_unc.c",
74+
"lib/pfmlib_intel_hsw.c",
75+
"lib/pfmlib_intel_bdw.c",
76+
"lib/pfmlib_intel_skl.c",
77+
"lib/pfmlib_intel_icl.c",
78+
"lib/pfmlib_intel_rapl.c",
79+
"lib/pfmlib_intel_snbep_unc.c",
80+
"lib/pfmlib_intel_snbep_unc_cbo.c",
81+
"lib/pfmlib_intel_snbep_unc_ha.c",
82+
"lib/pfmlib_intel_snbep_unc_imc.c",
83+
"lib/pfmlib_intel_snbep_unc_pcu.c",
84+
"lib/pfmlib_intel_snbep_unc_qpi.c",
85+
"lib/pfmlib_intel_snbep_unc_ubo.c",
86+
"lib/pfmlib_intel_snbep_unc_r2pcie.c",
87+
"lib/pfmlib_intel_snbep_unc_r3qpi.c",
88+
"lib/pfmlib_intel_ivbep_unc_cbo.c",
89+
"lib/pfmlib_intel_ivbep_unc_ha.c",
90+
"lib/pfmlib_intel_ivbep_unc_imc.c",
91+
"lib/pfmlib_intel_ivbep_unc_pcu.c",
92+
"lib/pfmlib_intel_ivbep_unc_qpi.c",
93+
"lib/pfmlib_intel_ivbep_unc_ubo.c",
94+
"lib/pfmlib_intel_ivbep_unc_r2pcie.c",
95+
"lib/pfmlib_intel_ivbep_unc_r3qpi.c",
96+
"lib/pfmlib_intel_ivbep_unc_irp.c",
97+
"lib/pfmlib_intel_hswep_unc_cbo.c",
98+
"lib/pfmlib_intel_hswep_unc_ha.c",
99+
"lib/pfmlib_intel_hswep_unc_imc.c",
100+
"lib/pfmlib_intel_hswep_unc_pcu.c",
101+
"lib/pfmlib_intel_hswep_unc_qpi.c",
102+
"lib/pfmlib_intel_hswep_unc_ubo.c",
103+
"lib/pfmlib_intel_hswep_unc_r2pcie.c",
104+
"lib/pfmlib_intel_hswep_unc_r3qpi.c",
105+
"lib/pfmlib_intel_hswep_unc_irp.c",
106+
"lib/pfmlib_intel_hswep_unc_sbo.c",
107+
"lib/pfmlib_intel_bdx_unc_cbo.c",
108+
"lib/pfmlib_intel_bdx_unc_ubo.c",
109+
"lib/pfmlib_intel_bdx_unc_sbo.c",
110+
"lib/pfmlib_intel_bdx_unc_ha.c",
111+
"lib/pfmlib_intel_bdx_unc_imc.c",
112+
"lib/pfmlib_intel_bdx_unc_irp.c",
113+
"lib/pfmlib_intel_bdx_unc_pcu.c",
114+
"lib/pfmlib_intel_bdx_unc_qpi.c",
115+
"lib/pfmlib_intel_bdx_unc_r2pcie.c",
116+
"lib/pfmlib_intel_bdx_unc_r3qpi.c",
117+
"lib/pfmlib_intel_skx_unc_cha.c",
118+
"lib/pfmlib_intel_skx_unc_iio.c",
119+
"lib/pfmlib_intel_skx_unc_imc.c",
120+
"lib/pfmlib_intel_skx_unc_irp.c",
121+
"lib/pfmlib_intel_skx_unc_m2m.c",
122+
"lib/pfmlib_intel_skx_unc_m3upi.c",
123+
"lib/pfmlib_intel_skx_unc_pcu.c",
124+
"lib/pfmlib_intel_skx_unc_ubo.c",
125+
"lib/pfmlib_intel_skx_unc_upi.c",
126+
"lib/pfmlib_intel_knc.c",
127+
"lib/pfmlib_intel_slm.c",
128+
"lib/pfmlib_intel_tmt.c",
129+
"lib/pfmlib_intel_knl.c",
130+
"lib/pfmlib_intel_knl_unc_imc.c",
131+
"lib/pfmlib_intel_knl_unc_edc.c",
132+
"lib/pfmlib_intel_knl_unc_cha.c",
133+
"lib/pfmlib_intel_knl_unc_m2pcie.c",
134+
"lib/pfmlib_intel_glm.c",
135+
"lib/pfmlib_intel_netburst.c",
136+
"lib/pfmlib_amd64_k7.c",
137+
"lib/pfmlib_amd64_k8.c",
138+
"lib/pfmlib_amd64_fam10h.c",
139+
"lib/pfmlib_amd64_fam11h.c",
140+
"lib/pfmlib_amd64_fam12h.c",
141+
"lib/pfmlib_amd64_fam14h.c",
142+
"lib/pfmlib_amd64_fam15h.c",
143+
"lib/pfmlib_amd64_fam17h.c",
144+
"lib/pfmlib_amd64_fam16h.c",
145+
]
146+
147+
X86_SRCS_COMMON = X86_64_SRCS_COMMON + [
148+
"lib/pfmlib_intel_coreduo.c",
149+
"lib/pfmlib_intel_p6.c",
150+
]
4151

5152
filegroup(
6-
name = "pfm_srcs",
7-
srcs = glob(["**"]),
153+
name = "cpu_srcs",
154+
srcs = select({
155+
"@platforms//cpu:x86_32": X86_SRCS_COMMON,
156+
"@platforms//cpu:x86_64": X86_64_SRCS_COMMON,
157+
"@platforms//cpu:aarch32": AARCH32_SRCS_COMMON,
158+
"@platforms//cpu:aarch64": AARCH64_SRCS_COMMON,
159+
"@platforms//cpu:mips64": MIPS_SRCS_COMMON,
160+
"@platforms//cpu:ppc32": POWERPC_SRCS_COMMON,
161+
"@platforms//cpu:ppc64le": POWERPC_SRCS_COMMON,
162+
"@platforms//cpu:ppc": POWERPC_SRCS_COMMON,
163+
"@platforms//cpu:s390x": S390X_SRCS_COMMON,
164+
"//conditions:default": [],
165+
}),
8166
)
9167

10-
make(
11-
name = "libpfm",
12-
lib_source = ":pfm_srcs",
13-
lib_name = "libpfm",
168+
filegroup(
169+
name = "linux_srcs",
170+
srcs = select({
171+
"@platforms//cpu:aarch32": AARCH32_SRCS_LINUX,
172+
"@platforms//cpu:aarch64": AARCH64_SRCS_LINUX,
173+
"@platforms//cpu:mips64": MIPS_SRCS_LINUX,
174+
"@platforms//cpu:ppc32": POWERPC_SRCS_LINUX,
175+
"@platforms//cpu:ppc64le": POWERPC_SRCS_LINUX,
176+
"@platforms//cpu:ppc": POWERPC_SRCS_LINUX,
177+
"@platforms//cpu:s390x": S390X_SRCS_LINUX,
178+
"//conditions:default": [],
179+
}),
180+
)
181+
182+
filegroup(
183+
name = "srcs",
184+
srcs = [
185+
"lib/pfmlib_common.c",
186+
"lib/pfmlib_perf_event.c",
187+
"lib/pfmlib_perf_event_pmu.c",
188+
"lib/pfmlib_perf_event_priv.h",
189+
"lib/pfmlib_perf_event_raw.c",
190+
"lib/pfmlib_torrent.c",
191+
"lib/pfmlib_tx2_unc_perf_event.c",
192+
":cpu_srcs",
193+
] + select({
194+
"@platforms//os:linux": [":linux_srcs"],
195+
"//conditions:default": [],
196+
}),
197+
)
198+
199+
cc_library(
200+
name = "pfm",
201+
srcs = [
202+
":srcs",
203+
],
204+
hdrs = glob([
205+
"include/perfmon/*.h",
206+
]),
14207
copts = [
15208
"-Wno-format-truncation",
16209
"-Wno-use-after-free",
210+
"-fPIC",
211+
"-D_REENTRANT",
212+
"-fvisibility=hidden",
213+
] + select({
214+
"@platforms//cpu:aarch32": ["-DCONFIG_PFMLIB_ARCH_ARM"],
215+
"@platforms//cpu:aarch64": ["-DCONFIG_PFMLIB_ARCH_ARM64"],
216+
"@platforms//cpu:mips64": ["-DCONFIG_PFMLIB_ARCH_MIPS"],
217+
"@platforms//cpu:ppc32": ["-DCONFIG_PFMLIB_ARCH_POWERPC"],
218+
"@platforms//cpu:ppc64le": ["-DCONFIG_PFMLIB_ARCH_POWERPC"],
219+
"@platforms//cpu:ppc": ["-DCONFIG_PFMLIB_ARCH_POWERPC"],
220+
"@platforms//cpu:s390x": ["-DCONFIG_PFMLIB_ARCH_S390X"],
221+
"//conditions:default": [],
222+
}),
223+
includes = [
224+
"include",
225+
"lib",
17226
],
227+
strip_include_prefix = "include",
228+
textual_hdrs = glob([
229+
"lib/**/*.h",
230+
]),
231+
visibility = [
232+
"//visibility:public",
233+
],
234+
)
235+
236+
alias(
237+
name = "libpfm",
238+
actual = ":pfm",
18239
visibility = [
19240
"//visibility:public",
20241
],

0 commit comments

Comments
 (0)