惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
Microsoft Azure Blog
Microsoft Azure Blog
月光博客
月光博客
S
Securelist
J
Java Code Geeks
Recorded Future
Recorded Future
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
M
MIT News - Artificial intelligence
S
Secure Thoughts
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Docker
Martin Fowler
Martin Fowler
The Last Watchdog
The Last Watchdog
WordPress大学
WordPress大学
The GitHub Blog
The GitHub Blog
Vercel News
Vercel News
O
OpenAI News
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
PCI Perspectives
PCI Perspectives
N
News and Events Feed by Topic
H
Heimdal Security Blog
SecWiki News
SecWiki News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
博客园 - 【当耐特】
T
Troy Hunt's Blog
L
LINUX DO - 最新话题
Hacker News: Ask HN
Hacker News: Ask HN
Hacker News - Newest:
Hacker News - Newest: "LLM"
N
Netflix TechBlog - Medium
A
Arctic Wolf
The Hacker News
The Hacker News
I
Intezer
S
Schneier on Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Apple Machine Learning Research
Apple Machine Learning Research
L
Lohrmann on Cybersecurity
宝玉的分享
宝玉的分享
P
Privacy & Cybersecurity Law Blog
Stack Overflow Blog
Stack Overflow Blog
T
Tor Project blog
小众软件
小众软件
Simon Willison's Weblog
Simon Willison's Weblog
The Cloudflare Blog
Jina AI
Jina AI

I'm OWenT

国产大模型(GLM 5.1、Kimi K2.6)真实场景效果和 Coding Plan 额度测试 新版本libatapp的连接管理——从etcd服务发现到拓扑驱动的自动重连 新版本libatbus的设计变更——从树形路由到拓扑驱动 Protobuf又一坑 - C++标准和ABI兼容性 AI真好用-给Blog主题统一加mermaid,chart.js,excalidraw,draw.io的多种引入方式支持 给内网部署Squid-通用HTTP下载缓存 UE使用CodeChecker和clang-tidy生成静态分析报告 找出UE的循环依赖 C++小协程栈和临时变量及作用域的栈溢出问题分析 游戏服务的可观测性能力建设(C++生态) 指标上报的多线程优化和多拉取源点优化 协程(libcopp)的Channel功能和CPU命中率优化 通用RPC代码生成器 实现strong_rc_ptr(比shared_ptr更快的引用计数智能指针) 手夯一个STL allocator和对象内存分析组件 std::condition_variable 的信号丢失问题 踩坑一处(GCC)STL std::async 实现BUG导致的crash问题 GCC 14的一个warning to error BUG 给xresloader(Excel导表工具)增强UE读表支持(包含蓝图,Blueprint) Opentelemetry社区在gRPC的几个链接问题(静态库和动态库混用,musl工具链,符号裁剪) Excel转表工具(xresloader)的新验证器(验证外部Excel和文本数据,唯一性和自定义规则) protobuf v22和gRPC v1.55版本升级的依赖变化和upb适配 关于protobuf近期版本(v20/v3.20+)和 gRPC v1.54版本在某些编译环境下的一些链接和编译问题 xresloader-Excel导表工具链的近期变更汇总 打通游戏服务端框架的C++20协程改造的最后一环 Opentelemetry-cpp的Logs模块标准更新(涉及近期版本:1.8-1.9的BREAK CHANGES) 给cmake-toolset和工具链(curl等)加HTTP/2和HTTP/3支持 又开新坑之 coredns 插件: nftables和filter 关于opentelemetry-cpp社区对于C++ Head Only组件单例和符号可见性的讨论小记 填个转表工具 xresloader 去年的坑(数组尾部裁剪) 集成 upb 和 lua binding 的踩坑小记 libcopp对C++20协程的接入和接口设计 再度优化GCC、LLVM、Clang、libc++、libc++abi等套件的构建脚本 游戏服务的分布式事务优化(二)- 事务管理 游戏服务的分布式事务优化(一)- Write Ahead Log(WAL) 模块 测试现代化硬件C++浮点数性能和一致性 适配Boringssl和OpenSSL 3.0 近期cmake-toolset的一些适配问题 C++20 Text Formatting/fmtlib 适配问题小记 再次重构LLVM+Clang+libcxx+libc++abi+其他相关工具的构建流程 重构基于CMake的构建工具链 新版GCC和LLVM+Clang终于Release啦 折腾一下nftables下的双拨 [C++20] Module partitions和符号交叉引用(声明和实现分离) [Rust] 实现一个线程安全且迭代器可以保存的链表 基于protobuf的代码生成 几个使用protobuf中C++接口的Arena的坑 Amazon Aurora DB存储引擎论文阅读小记 近期对libatapp的一些优化调整(增加服务发现和连接管理,支持yaml等) xresloader转表工具链增加了一些新功能(map,oneof支持,输出矩阵,基于模板引擎的加载代码生成等) 在游戏服务器中使用分布式事务 libcopp接入C++20 Coroutine和一些过渡期的设计 libatbus 的大幅优化 nftables初体验 容器配置开发环境小计 PALM Tree - 适合多核并发架构的B+树 - 论文阅读小记 跨平台协程库 - libcopp 简介 C++20 Coroutine 性能测试 (附带和libcopp/libco/libgo/goroutine/linux ucontext对比) 尝鲜Github Action 一些xresloader(转表工具)的改进 protobuf、flatbuffer、msgpack 针对小数据包的简单对比 协程框架(libcopp) 小幅优化 Excel转表工具(xresloader) 增加protobuf插件功能和集成 UnrealEngine 支持 Anna(支持任意扩展和超高性能的KV数据库系统)阅读笔记 C++20 Coroutine libcopp merge boost.context 1.69.0 Google去中心化分布式系统论文三件套(Percolator、Spanner、F1)读后感 Rust玩具-企业微信机器人通用服务 使用ELK辅助监控开发测试环境服务质量和问题定位 2018年的新通用伪随机数算法(xoshiro / xoroshiro)的C++(head only)实现 Webpack+vue+boostrap+ejs构建Web版GM工具 Rust的第二次接触-写个小服务器程序 理解和适配AEAD加密套件 atsf4g-co的进化:协程框架v2、对象路由系统和一些其他细节优化 协程框架(libcopp)v2优化、自适应栈池和同类库的Benchmark对比 可执行文件压缩 初识Rust 使用restructedtext编写xresloader文档 atframework的etcd模块化重构 C++的backtrace ECDH椭圆双曲线(比DH快10倍的密钥交换)算法简介和封装 protobuf-net的动态Message实现 pbc的proto3接入 atgateway内置协议流程优化-加密、算法协商和ECDH 整理一波软件源镜像同步工具+DevOps工具 Blog切换到Hugo libcopp v2的第一波优化完成 libcopp(v2) vs goroutine性能测试 libcopp的线程安全、栈池和merge boost.context 1.64.0 GCC 7和LLVM+Clang+libc++abi 4.0的构建脚本 libatbus的几个藏得很深的bug 用cmake交叉编译到iOS和Android 开源项目得一些小维护 atapp的c binding和c#适配 对象路由系统设计 2016年总结 近期的一个协程流程BUG 重写了llvm+clang+libc++和libc++abi的构建脚本 atsf4g完整游戏工程示例|I'm OWenT atframework基本框架已经完成|I'm OWenT
记录一些bazel适配用编译选项
owent · 2022-02-15 · via I'm OWenT

blog-website

之前搞 opentelemetry-cpp 的时候接触了下 bazel 构建系统。这玩意儿用起来有一点坑,特别是使用自定义编译环境的时候。

在使用我自己编译的很新版本的 GCCclang+libc++ 的时候,涉及对libssp的检测和 LD_LIBRARY_PATH 环境变量在 bazel 中各个步骤中的传递,这里记录一下适配脚本。

BAZEL_OPTIONS="--copt=-DENABLE_METRICS_PREVIEW --copt=-DENABLE_LOGS_PREVIEW"
BAZEL_TEST_OPTIONS="$BAZEL_OPTIONS --test_output=errors"
BAZEL_STARTUP_OPTIONS="--output_user_root=$HOME/.cache/bazel/$BK_CI_BUILD_ID"

# https://github.com/bazelbuild/bazel/issues/4341
BAZEL_MACOS_OPTIONS="--features=-supports_dynamic_linker --linkopt -lpthread --linkopt -liconv --linkopt -lresolv --linkopt -ldl --linkopt -lm"
BAZEL_MACOS_OPTIONS="--host_linkopt -lpthread --host_linkopt -liconv --host_linkopt -lresolv --host_linkopt -ldl --host_linkopt -lm"
BAZEL_LINUX_GCC_OPTIONS=""

# Our gcc/llvm
for EXTRA_LD_LIBRARY_PATH in $(echo "$LD_LIBRARY_PATH" | tr ':' ' '); do
  BAZEL_LINUX_GCC_OPTIONS="$BAZEL_LINUX_GCC_OPTIONS --host_linkopt=-Wl,-rpath,$EXTRA_LD_LIBRARY_PATH --host_linkopt=-L$EXTRA_LD_LIBRARY_PATH --linkopt=-L$EXTRA_LD_LIBRARY_PATH"
done

if [[ -z "$USE_CC" ]]; then
  which clang >/dev/null 2>&1
  if [[ $? -eq 0 ]]; then
    USE_CC=clang
  else
    USE_CC=gcc
  fi
fi


USE_CC_BASENAME="$(basename "$USE_CC")"

if [[ "x${USE_CC_BASENAME:0:3}" == "xgcc" ]]; then
  USE_CC_FULLPATH="$(which "$USE_CC")"
  for TEST_GCC_FLAGS in "-Wno-unused-function" "-Wno-error=stringop-overflow" "-Wno-error=array-parameter"; do
    TEST_GCC_FLAGS_SUCCESS=1
    echo "" | "$USE_CC" -E "$TEST_GCC_FLAGS" - >/dev/null 2>&1 || TEST_GCC_FLAGS_SUCCESS=0
    if [[ $TEST_GCC_FLAGS_SUCCESS -ne 0 ]]; then
      BAZEL_LINUX_GCC_OPTIONS="$BAZEL_LINUX_GCC_OPTIONS --copt $TEST_GCC_FLAGS"
    fi
  done
  # Test libssp/-fstack-protector-strong/-fstack-protector-all
  HAVE_LIBSSP=1
  echo "#include <iostream>
  int main () { return 0; }
  " | "${USE_CC/%gcc/g++}" -x c++ -lssp -o run-test-gcc-with-ssp.exe - || HAVE_LIBSSP=0
  if [[ $HAVE_LIBSSP -eq 1 ]]; then
    BAZEL_LINUX_GCC_OPTIONS="$BAZEL_LINUX_GCC_OPTIONS --linkopt -lssp --host_linkopt -lssp"
    rm -f run-test-gcc-with-ssp.exe
  fi
  HAVE_FSTACK_PROTECTOR_STRONG=1
  echo "" | "$USE_CC" -E "-fstack-protector-strong" - >/dev/null 2>&1 || HAVE_FSTACK_PROTECTOR_STRONG=0
  if [[ $HAVE_FSTACK_PROTECTOR_STRONG -eq 1 ]]; then
    BAZEL_LINUX_GCC_OPTIONS="$BAZEL_LINUX_GCC_OPTIONS --copt -fstack-protector-strong --host_copt -fstack-protector-strong --linkopt -fstack-protector-strong --host_linkopt -fstack-protector-strong"
  else
    BAZEL_LINUX_GCC_OPTIONS="$BAZEL_LINUX_GCC_OPTIONS --copt -fstack-protector-all --host_copt -fstack-protector-all --linkopt -fstack-protector-all --host_linkopt -fstack-protector-all"
  fi
  BAZEL_OPTIONS="$BAZEL_OPTIONS $BAZEL_LINUX_GCC_OPTIONS"
  BAZEL_TEST_OPTIONS="$BAZEL_TEST_OPTIONS $BAZEL_LINUX_GCC_OPTIONS"
elif [[ "x${USE_CC_BASENAME:0:5}" == "xclang" ]]; then
  USE_CC_FULLPATH="$(which "$USE_CC")"
  if [[ "x$GCC_HOME_DIR" == "x" ]] || [[ ! -e "$GCC_HOME_DIR" ]]; then
    GCC_HOME_DIR="/opt/gcc-latest";
  fi
  if [[ ! -e "$GCC_HOME_DIR" ]]; then
    GCC_HOME_DIR="/usr/local/gcc-latest";
  fi
  if [[ -e "$GCC_HOME_DIR" ]] && [[ "${USE_CC_FULLPATH:0:10}" == "/opt/llvm-" ]]; then
    if [[ "x$CXXFLAGS" == "x" ]]; then
      export CXXFLAGS="--gcc-toolchain=$GCC_HOME_DIR"
    else
      export CXXFLAGS="$CXXFLAGS --gcc-toolchain=$GCC_HOME_DIR"
    fi
    if [[ "x$CFLAGS" == "x" ]]; then
      export CFLAGS="--gcc-toolchain=$GCC_HOME_DIR"
    else
      export CFLAGS="$CFLAGS --gcc-toolchain=$GCC_HOME_DIR"
    fi
    # BAZEL_LINUX_GCC_OPTIONS="$BAZEL_LINUX_GCC_OPTIONS --cxxopt -stdlib=libc++"
  fi

  for TEST_GCC_FLAGS in "-Wno-unused-function" "-Wno-error=unused-command-line-argument"; do
    TEST_GCC_FLAGS_SUCCESS=1
    echo "" | "$USE_CC" -E "$TEST_GCC_FLAGS" - >/dev/null 2>&1 || TEST_GCC_FLAGS_SUCCESS=0
    if [[ $TEST_GCC_FLAGS_SUCCESS -ne 0 ]]; then
      BAZEL_LINUX_GCC_OPTIONS="$BAZEL_LINUX_GCC_OPTIONS --copt $TEST_GCC_FLAGS"
    fi
  done
  BAZEL_OPTIONS="$BAZEL_OPTIONS $BAZEL_LINUX_GCC_OPTIONS"
  BAZEL_TEST_OPTIONS="$BAZEL_TEST_OPTIONS $BAZEL_LINUX_GCC_OPTIONS"
fi

然后,就可以直接使用以下脚本启动 bazel :

# ============ build & test ============
if [[ "x$USE_CC" != "x" ]]; then
  export CC="$USE_CC"
fi
bazel fetch //...
bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_OPTIONS //...
bazel $BAZEL_STARTUP_OPTIONS test $BAZEL_TEST_OPTIONS //...

# ============ asan ============
# See https://github.com/google/sanitizers/issues/764 when run under docker
if [[ "x$USE_CC" != "x" ]]; then
  export CC="$USE_CC"
fi
bazel fetch //...
bazel $BAZEL_STARTUP_OPTIONS test --config=asan $BAZEL_TEST_OPTIONS --linkopt -static-libasan //...
if [[ $RETRY_CLEAN -eq 1 ]]; then
  echo "AddressSantinizer results:"
  (
    cd bazel-out
    find . -name test.log -exec bash -c 'echo "============  $@ ============"; cat $@; echo "------------  $@ ------------"' _ {} \;
  )
fi

# ============ tsan ============
if [[ "x$USE_CC" != "x" ]]; then
  export CC="$USE_CC"
fi
bazel fetch //...
bazel $BAZEL_STARTUP_OPTIONS test --config=tsan $BAZEL_TEST_OPTIONS //...
if [[ $RETRY_CLEAN -eq 1 ]]; then
  echo "ThreadSantinizer results:"
  (
    cd bazel-out
    find . -name test.log -exec bash -c 'echo "============  $@ ============"; cat $@; echo "------------  $@ ------------"' _ {} \;
  )
fi

# ============ valgrind ============
if [[ "x$USE_CC" != "x" ]]; then
  export CC="$USE_CC"
fi
bazel fetch //...
bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_OPTIONS //...
bazel $BAZEL_STARTUP_OPTIONS test --run_under="/usr/bin/valgrind --leak-check=full --error-exitcode=1 --suppressions=\"${PWD}/ci/valgrind-suppressions\"" $BAZEL_TEST_OPTIONS //...

# ============ benchmark ============
if [[ "x$USE_CC" != "x" ]]; then
  export CC="$USE_CC"
fi
[ -z "${BENCHMARK_DIR}" ] && export BENCHMARK_DIR=$HOME/benchmark
bazel fetch //...
bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_OPTIONS -c opt -- $(bazel query 'attr("tags", "benchmark_result", ...)')
echo "Benchmark results in $BENCHMARK_DIR:"
(
  cd bazel-bin
  find . -name \*_result.txt -exec bash -c \
    'echo "$@" && mkdir -p "$BENCHMARK_DIR/$(dirname "$@")" && \
      cp "$@" "$BENCHMARK_DIR/$@" && chmod +w "$BENCHMARK_DIR/$@"' _ {} \;
)