Skip to content

Commit 140adfd

Browse files
feat: add toolchain environment collection to bazel
1 parent 4ed3b56 commit 140adfd

File tree

2 files changed

+57
-1
lines changed

2 files changed

+57
-1
lines changed

core/BUILD

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,58 @@ cc_library(
6868
)
6969

7070

71+
# Generate a header with C++ toolchain information
72+
genrule(
73+
name = "toolchain_info_gen",
74+
outs = ["toolchain_info.h"],
75+
cmd = """
76+
set -e
77+
COMPILER="$(CC)"
78+
FULL_VERSION=$$($$COMPILER --version 2>/dev/null | head -n1) || FULL_VERSION="unknown"
79+
80+
COMPILER_ID="unknown"
81+
COMPILER_VERSION="unknown"
82+
83+
if echo "$$FULL_VERSION" | grep -qi "clang"; then
84+
COMPILER_ID="Clang"
85+
COMPILER_VERSION=$$(echo "$$FULL_VERSION" | grep -oP '\\d+\\.\\d+\\.\\d+' | head -n1) || COMPILER_VERSION="unknown"
86+
elif echo "$$FULL_VERSION" | grep -qi "gcc\\|g++\\|GNU"; then
87+
COMPILER_ID="GNU"
88+
COMPILER_VERSION=$$(echo "$$FULL_VERSION" | grep -oP '\\d+\\.\\d+\\.\\d+' | head -n1) || COMPILER_VERSION="unknown"
89+
elif echo "$$FULL_VERSION" | grep -qi "MSVC\\|Microsoft"; then
90+
COMPILER_ID="MSVC"
91+
COMPILER_VERSION=$$(echo "$$FULL_VERSION" | grep -oP '\\d+\\.\\d+\\.\\d+' | head -n1) || COMPILER_VERSION="unknown"
92+
fi
93+
94+
case "$(COMPILATION_MODE)" in
95+
opt) BUILD_TYPE="Release" ;;
96+
dbg) BUILD_TYPE="Debug" ;;
97+
fastbuild) BUILD_TYPE="FastBuild" ;;
98+
*) BUILD_TYPE="$(COMPILATION_MODE)" ;;
99+
esac
100+
101+
cat > $@ << HEADER_EOF
102+
// Auto-generated by Bazel - do not edit
103+
#ifndef CODSPEED_TOOLCHAIN_INFO_H
104+
#define CODSPEED_TOOLCHAIN_INFO_H
105+
106+
#define CODSPEED_CXX_COMPILER_ID "$$COMPILER_ID"
107+
#define CODSPEED_CXX_COMPILER_VERSION "$$COMPILER_VERSION"
108+
#define CODSPEED_CXX_COMPILER_FULL_VERSION "$$FULL_VERSION"
109+
#define CODSPEED_BUILD_TYPE "$$BUILD_TYPE"
110+
111+
#endif // CODSPEED_TOOLCHAIN_INFO_H
112+
HEADER_EOF
113+
""",
114+
toolchains = ["@bazel_tools//tools/cpp:current_cc_toolchain"],
115+
)
116+
117+
cc_library(
118+
name = "toolchain_info",
119+
hdrs = [":toolchain_info_gen"],
120+
includes = ["."],
121+
)
122+
71123
# Define the codspeed library
72124
cc_library(
73125
name = "codspeed",
@@ -87,7 +139,7 @@ cc_library(
87139
":walltime_mode": ["CODSPEED_ENABLED", "CODSPEED_WALLTIME", "CODSPEED_MODE_DISPLAY=\\\"walltime\\\""],
88140
"//conditions:default": [],
89141
}),
90-
deps = [":instrument_hooks"],
142+
deps = [":instrument_hooks", ":toolchain_info"],
91143
visibility = ["//visibility:public"],
92144
)
93145

core/src/codspeed.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
#include <string>
55
#include <vector>
66

7+
#if __has_include("toolchain_info.h")
8+
#include "toolchain_info.h"
9+
#endif
10+
711
#include "measurement.hpp"
812

913
namespace codspeed {

0 commit comments

Comments
 (0)