feat: add support for bazel (#759)
This commit is contained in:
11
.bazelrc
Normal file
11
.bazelrc
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
common --enable_platform_specific_config
|
||||||
|
|
||||||
|
build --cxxopt=-std=c++2a
|
||||||
|
|
||||||
|
# Show everything when running tests.
|
||||||
|
test --test_output=streamed
|
||||||
|
|
||||||
|
build:macos --macos_minimum_os=10.15
|
||||||
|
build:macos --no@fuzztest//fuzztest:use_riegeli
|
||||||
|
|
||||||
|
try-import %workspace%/fuzztest.bazelrc
|
||||||
24
.github/workflows/main.yml
vendored
24
.github/workflows/main.yml
vendored
@@ -107,6 +107,14 @@ jobs:
|
|||||||
mkdir libs
|
mkdir libs
|
||||||
cp libsnmallocshim*.so libs
|
cp libsnmallocshim*.so libs
|
||||||
for lib in `ls libs`; do echo; echo Testing $lib; ninja clean; LD_PRELOAD=libs/$lib ninja libsnmallocshim.so; done
|
for lib in `ls libs`; do echo; echo Testing $lib; ninja clean; LD_PRELOAD=libs/$lib ninja libsnmallocshim.so; done
|
||||||
|
- uses: bazelbuild/setup-bazelisk@v3
|
||||||
|
- name: Mount bazel cache # Optional
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: "~/.cache/bazel"
|
||||||
|
key: bazel
|
||||||
|
- run: bazel build -c opt //:snmalloc
|
||||||
|
- run: bazel build -c opt //:snmalloc-rs
|
||||||
|
|
||||||
# If this looks remarkably familiar, that's because it is. Sigh.
|
# If this looks remarkably familiar, that's because it is. Sigh.
|
||||||
macos:
|
macos:
|
||||||
@@ -151,6 +159,14 @@ jobs:
|
|||||||
mkdir libs
|
mkdir libs
|
||||||
cp libsnmallocshim*.so libs
|
cp libsnmallocshim*.so libs
|
||||||
for lib in `ls libs`; do echo; echo Testing $lib; ninja clean; LD_PRELOAD=libs/$lib ninja libsnmallocshim.so; done
|
for lib in `ls libs`; do echo; echo Testing $lib; ninja clean; LD_PRELOAD=libs/$lib ninja libsnmallocshim.so; done
|
||||||
|
- uses: bazelbuild/setup-bazelisk@v3
|
||||||
|
- name: Mount bazel cache # Optional
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: "~/.cache/bazel"
|
||||||
|
key: bazel
|
||||||
|
- run: bazel build -c opt //:snmalloc
|
||||||
|
- run: bazel build -c opt //:snmalloc-rs
|
||||||
|
|
||||||
|
|
||||||
# GitHub doesn't natively support *BSD, but we can run them in VMs on Mac /
|
# GitHub doesn't natively support *BSD, but we can run them in VMs on Mac /
|
||||||
@@ -448,7 +464,6 @@ jobs:
|
|||||||
run: ctest -j 2 --interactive-debug-mode 0 --output-on-failure -C ${{ matrix.build-type }} --timeout 400
|
run: ctest -j 2 --interactive-debug-mode 0 --output-on-failure -C ${{ matrix.build-type }} --timeout 400
|
||||||
timeout-minutes: 20
|
timeout-minutes: 20
|
||||||
|
|
||||||
|
|
||||||
# Job to run clang-format and report errors
|
# Job to run clang-format and report errors
|
||||||
format:
|
format:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
@@ -488,6 +503,13 @@ jobs:
|
|||||||
run: cmake --build ${{github.workspace}}/build --target snmalloc-fuzzer
|
run: cmake --build ${{github.workspace}}/build --target snmalloc-fuzzer
|
||||||
- name: Test
|
- name: Test
|
||||||
run: ${{github.workspace}}/build/fuzzing/snmalloc-fuzzer
|
run: ${{github.workspace}}/build/fuzzing/snmalloc-fuzzer
|
||||||
|
- uses: bazelbuild/setup-bazelisk@v3
|
||||||
|
- name: Mount bazel cache # Optional
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: "~/.cache/bazel"
|
||||||
|
key: bazel
|
||||||
|
- run: bazel test -c opt --config=asan //fuzzing:snmalloc_fuzzer
|
||||||
|
|
||||||
self-vendored:
|
self-vendored:
|
||||||
strategy:
|
strategy:
|
||||||
|
|||||||
91
BUILD.bazel
Normal file
91
BUILD.bazel
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake")
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "srcs",
|
||||||
|
srcs = glob(
|
||||||
|
[
|
||||||
|
"src/snmalloc/**/*",
|
||||||
|
"src/test/*.h",
|
||||||
|
"CMakeLists.txt",
|
||||||
|
],
|
||||||
|
),
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
config_setting(
|
||||||
|
name = "release_with_debug",
|
||||||
|
values = {
|
||||||
|
"compilation_mode": "fastbuild",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
config_setting(
|
||||||
|
name = "release",
|
||||||
|
values = {
|
||||||
|
"compilation_mode": "opt",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
config_setting(
|
||||||
|
name = "debug",
|
||||||
|
values = {
|
||||||
|
"compilation_mode": "dbg",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
CMAKE_FLAGS = {
|
||||||
|
"CMAKE_INTERPROCEDURAL_OPTIMIZATION": "TRUE",
|
||||||
|
"SNMALLOC_OPTIMISE_FOR_CURRENT_MACHINE": "ON",
|
||||||
|
"SNMALLOC_USE_SELF_VENDORED_STL": "OFF",
|
||||||
|
"SNMALLOC_IPO": "ON",
|
||||||
|
"USE_SNMALLOC_STATS": "ON",
|
||||||
|
} | select({
|
||||||
|
":release_with_debug": {"CMAKE_BUILD_TYPE": "RelWithDebInfo"},
|
||||||
|
":release": {"CMAKE_BUILD_TYPE": "Release"},
|
||||||
|
":debug": {"CMAKE_BUILD_TYPE": "Debug"},
|
||||||
|
"//conditions:default": {"CMAKE_BUILD_TYPE": "Release"},
|
||||||
|
})
|
||||||
|
|
||||||
|
cmake(
|
||||||
|
name = "snmalloc",
|
||||||
|
cache_entries = CMAKE_FLAGS,
|
||||||
|
generate_args = ["-G Ninja"],
|
||||||
|
lib_source = ":srcs",
|
||||||
|
out_shared_libs = select({
|
||||||
|
"@bazel_tools//src/conditions:darwin": [
|
||||||
|
"libsnmallocshim-checks-memcpy-only.dylib",
|
||||||
|
"libsnmallocshim-checks.dylib",
|
||||||
|
"libsnmallocshim.dylib",
|
||||||
|
],
|
||||||
|
"//conditions:default": [],
|
||||||
|
}),
|
||||||
|
out_static_libs = [
|
||||||
|
"libsnmallocshim-static.a",
|
||||||
|
"libsnmalloc-new-override.a",
|
||||||
|
],
|
||||||
|
postfix_script = "ninja",
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
)
|
||||||
|
|
||||||
|
cmake(
|
||||||
|
name = "snmalloc-rs",
|
||||||
|
cache_entries = CMAKE_FLAGS | {
|
||||||
|
"SNMALLOC_RUST_SUPPORT": "ON",
|
||||||
|
},
|
||||||
|
generate_args = ["-G Ninja"],
|
||||||
|
lib_source = ":srcs",
|
||||||
|
out_shared_libs = select({
|
||||||
|
"@bazel_tools//src/conditions:darwin": [
|
||||||
|
"libsnmallocshim-checks-memcpy-only.dylib",
|
||||||
|
"libsnmallocshim-checks.dylib",
|
||||||
|
"libsnmallocshim.dylib",
|
||||||
|
],
|
||||||
|
"//conditions:default": [],
|
||||||
|
}),
|
||||||
|
out_static_libs = [
|
||||||
|
"libsnmallocshim-static.a",
|
||||||
|
"libsnmalloc-new-override.a",
|
||||||
|
],
|
||||||
|
postfix_script = "ninja",
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
)
|
||||||
@@ -659,11 +659,16 @@ install(TARGETS EXPORT snmallocConfig DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|||||||
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/snmalloc)
|
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/snmalloc)
|
||||||
|
|
||||||
install(DIRECTORY src/snmalloc/aal DESTINATION include/snmalloc)
|
install(DIRECTORY src/snmalloc/aal DESTINATION include/snmalloc)
|
||||||
install(DIRECTORY src/snmalloc/ds DESTINATION include/snmalloc)
|
|
||||||
install(DIRECTORY src/snmalloc/override DESTINATION include/snmalloc)
|
|
||||||
install(DIRECTORY src/snmalloc/backend DESTINATION include/snmalloc)
|
install(DIRECTORY src/snmalloc/backend DESTINATION include/snmalloc)
|
||||||
|
install(DIRECTORY src/snmalloc/backend_helpers DESTINATION include/snmalloc)
|
||||||
|
install(DIRECTORY src/snmalloc/ds DESTINATION include/snmalloc)
|
||||||
|
install(DIRECTORY src/snmalloc/ds_aal DESTINATION include/snmalloc)
|
||||||
|
install(DIRECTORY src/snmalloc/ds_core DESTINATION include/snmalloc)
|
||||||
|
install(DIRECTORY src/snmalloc/global DESTINATION include/snmalloc)
|
||||||
install(DIRECTORY src/snmalloc/mem DESTINATION include/snmalloc)
|
install(DIRECTORY src/snmalloc/mem DESTINATION include/snmalloc)
|
||||||
|
install(DIRECTORY src/snmalloc/override DESTINATION include/snmalloc)
|
||||||
install(DIRECTORY src/snmalloc/pal DESTINATION include/snmalloc)
|
install(DIRECTORY src/snmalloc/pal DESTINATION include/snmalloc)
|
||||||
|
install(DIRECTORY src/snmalloc/stl DESTINATION include/snmalloc)
|
||||||
install(FILES
|
install(FILES
|
||||||
src/test/measuretime.h
|
src/test/measuretime.h
|
||||||
src/test/opt.h
|
src/test/opt.h
|
||||||
|
|||||||
6
MODULE.bazel
Normal file
6
MODULE.bazel
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
module(name = "snmalloc")
|
||||||
|
|
||||||
|
bazel_dep(name = "rules_cc", version = "0.1.1")
|
||||||
|
bazel_dep(name = "rules_foreign_cc", version = "0.14.0")
|
||||||
|
bazel_dep(name = "fuzztest", version = "20250214.0")
|
||||||
|
bazel_dep(name = "googletest", version = "1.16.0")
|
||||||
25
fuzzing/BUILD.bazel
Normal file
25
fuzzing/BUILD.bazel
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
load("@rules_cc//cc:defs.bzl", "cc_test")
|
||||||
|
|
||||||
|
# will raise `ERROR: AddressSanitizer: SEGV on unknown address` if run without -c opt
|
||||||
|
# --config=asan adds AddressSanitizer libs
|
||||||
|
# bazel test -c opt --config=asan //fuzzing:snmalloc_fuzzer
|
||||||
|
cc_test(
|
||||||
|
name = "snmalloc_fuzzer",
|
||||||
|
srcs = ["snmalloc-fuzzer.cpp"],
|
||||||
|
copts = [
|
||||||
|
"-fsanitize=address",
|
||||||
|
] + select({
|
||||||
|
"@bazel_tools//tools/cpp:clang-cl": ["-fexperimental-library"], # needed for std::execution::unseq,
|
||||||
|
"//conditions:default": ["-mcx16"],
|
||||||
|
}),
|
||||||
|
defines = [
|
||||||
|
"SNMALLOC_USE_WAIT_ON_ADDRESS=0",
|
||||||
|
"ADDRESS_SANITIZER",
|
||||||
|
],
|
||||||
|
linkstatic = True,
|
||||||
|
malloc = "//:snmalloc",
|
||||||
|
deps = [
|
||||||
|
"@fuzztest//fuzztest",
|
||||||
|
"@fuzztest//fuzztest:fuzztest_gtest_main",
|
||||||
|
],
|
||||||
|
)
|
||||||
85
fuzztest.bazelrc
Normal file
85
fuzztest.bazelrc
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
### DO NOT EDIT. Generated file.
|
||||||
|
#
|
||||||
|
# To regenerate, run the following from your project's workspace:
|
||||||
|
#
|
||||||
|
# bazel run @com_google_fuzztest//bazel:setup_configs > fuzztest.bazelrc
|
||||||
|
#
|
||||||
|
# And don't forget to add the following to your project's .bazelrc:
|
||||||
|
#
|
||||||
|
# try-import %workspace%/fuzztest.bazelrc
|
||||||
|
|
||||||
|
### Common options.
|
||||||
|
#
|
||||||
|
# Do not use directly.
|
||||||
|
|
||||||
|
# Standard define for \"ifdef-ing\" any fuzz test specific code.
|
||||||
|
build:fuzztest-common --copt=-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
|
||||||
|
|
||||||
|
# In fuzz tests, we want to catch assertion violations even in optimized builds.
|
||||||
|
build:fuzztest-common --copt=-UNDEBUG
|
||||||
|
|
||||||
|
# Enable libc++ assertions.
|
||||||
|
# See https://libcxx.llvm.org/UsingLibcxx.html#enabling-the-safe-libc-mode
|
||||||
|
build:fuzztest-common --copt=-D_LIBCPP_ENABLE_ASSERTIONS=1
|
||||||
|
|
||||||
|
### ASan (Address Sanitizer) build configuration.
|
||||||
|
#
|
||||||
|
# Use with: --config=asan
|
||||||
|
|
||||||
|
build:asan --linkopt=-fsanitize=address
|
||||||
|
build:asan --copt=-fsanitize=address
|
||||||
|
|
||||||
|
# We rely on the following flag instead of the compiler provided
|
||||||
|
# __has_feature(address_sanitizer) to know that we have an ASAN build even in
|
||||||
|
# the uninstrumented runtime.
|
||||||
|
build:asan --copt=-DADDRESS_SANITIZER
|
||||||
|
|
||||||
|
### FuzzTest build configuration.
|
||||||
|
#
|
||||||
|
# Use with: --config=fuzztest
|
||||||
|
#
|
||||||
|
# Note that this configuration includes the ASan configuration.
|
||||||
|
|
||||||
|
build:fuzztest --config=asan
|
||||||
|
build:fuzztest --config=fuzztest-common
|
||||||
|
|
||||||
|
# Link statically.
|
||||||
|
build:fuzztest --dynamic_mode=off
|
||||||
|
|
||||||
|
# We apply coverage tracking instrumentation to everything but Centipede and the
|
||||||
|
# FuzzTest framework itself (including GoogleTest and GoogleMock).
|
||||||
|
build:fuzztest --copt=-fsanitize-coverage=inline-8bit-counters,trace-cmp,pc-table
|
||||||
|
build:fuzztest --per_file_copt=common/.*,fuzztest/.*,centipede/.*,-centipede/.*fuzz_target,googletest/.*,googlemock/.*@-fsanitize-coverage=0
|
||||||
|
|
||||||
|
### Experimental FuzzTest build configuration.
|
||||||
|
#
|
||||||
|
# Use with: --config=fuzztest-experimental
|
||||||
|
#
|
||||||
|
# Use this instead of --config=fuzztest when building test binaries to run with
|
||||||
|
# Centipede. Eventually, this will be consolidated with --config=fuzztest.
|
||||||
|
# Note that this configuration doesn't include the ASan configuration. If you
|
||||||
|
# want to use both, you can use --config=fuzztest-experimental --config=asan.
|
||||||
|
|
||||||
|
build:fuzztest-experimental --config=fuzztest-common
|
||||||
|
build:fuzztest-experimental --@com_google_fuzztest//fuzztest:centipede_integration
|
||||||
|
|
||||||
|
# Generate line tables for debugging.
|
||||||
|
build:fuzztest-experimental --copt=-gline-tables-only
|
||||||
|
build:fuzztest-experimental --strip=never
|
||||||
|
|
||||||
|
# Prevent memcmp & co from being inlined.
|
||||||
|
build:fuzztest-experimental --copt=-fno-builtin
|
||||||
|
|
||||||
|
# Disable heap checking.
|
||||||
|
build:fuzztest-experimental --copt=-DHEAPCHECK_DISABLE
|
||||||
|
|
||||||
|
# Link statically.
|
||||||
|
build:fuzztest-experimental --dynamic_mode=off
|
||||||
|
|
||||||
|
# We apply coverage tracking instrumentation to everything but Centipede and the
|
||||||
|
# FuzzTest framework itself (including GoogleTest and GoogleMock).
|
||||||
|
# TODO(b/374840534): Add -fsanitize-coverage=control-flow once we start building
|
||||||
|
# with clang 16+.
|
||||||
|
build:fuzztest-experimental --copt=-fsanitize-coverage=trace-pc-guard,pc-table,trace-loads,trace-cmp
|
||||||
|
build:fuzztest-experimental --per_file_copt=common/.*,fuzztest/.*,centipede/.*,-centipede/.*fuzz_target,googletest/.*,googlemock/.*@-fsanitize-coverage=0
|
||||||
|
|
||||||
Reference in New Issue
Block a user