note:
unfortunately, tokio-tungstenite / tungstenite upgrade triggers some
problems with linker of rama-tls-boring with openssl:
```
error: linking with `/Users/apanasenko/Library/Caches/cargo-zigbuild/0.20.1/zigcc-x86_64-unknown-linux-musl-ff6a.sh` failed: exit status: 1
|
= note: "/Users/apanasenko/Library/Caches/cargo-zigbuild/0.20.1/zigcc-x86_64-unknown-linux-musl-ff6a.sh" "-m64" "<sysroot>/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained/rcrt1.o" "<sysroot>/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained/crti.o" "<sysroot>/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained/crtbeginS.o" "<1 object files omitted>" "-Wl,--as-needed" "-Wl,-Bstatic" "/var/folders/kt/52y_g75x3ng8ktvk3rfwm6400000gp/T/rustcyGQdYm/{liblzma_sys-662a82316f96ec30,libbzip2_sys-bf78a2d58d5cbce6,liblibsqlite3_sys-6c004987fd67a36a,libtree_sitter_bash-220b99a97d331ab7,libtree_sitter-858f0a1dbfea58bd,libzstd_sys-6eb237deec748c5b,libring-2a87376483bf916f,libopenssl_sys-7c189e68b37fe2bb,liblibz_sys-4344eef4345520b1,librama_boring_sys-0414e98115015ee0}.rlib" "-lc++" "-lc++abi" "-lunwind" "-lc" "<sysroot>/lib/rustlib/x86_64-unknown-linux-musl/lib/libcompiler_builtins-*.rlib" "-L" "/var/folders/kt/52y_g75x3ng8ktvk3rfwm6400000gp/T/rustcyGQdYm/raw-dylibs" "-Wl,-Bdynamic" "-Wl,--eh-frame-hdr" "-Wl,-z,noexecstack" "-nostartfiles" "-L" "/Users/apanasenko/code/codex/codex-rs/target/x86_64-unknown-linux-musl/release/build/libz-sys-ff5ea50d88c28ffb/out/lib" "-L" "/Users/apanasenko/code/codex/codex-rs/target/x86_64-unknown-linux-musl/release/build/ring-bdec3dddc19f5a5e/out" "-L" "/Users/apanasenko/code/codex/codex-rs/target/x86_64-unknown-linux-musl/release/build/openssl-sys-96e0870de3ca22bc/out/openssl-build/install/lib" "-L" "/Users/apanasenko/code/codex/codex-rs/target/x86_64-unknown-linux-musl/release/build/zstd-sys-0cc37a5da1481740/out" "-L" "/Users/apanasenko/code/codex/codex-rs/target/x86_64-unknown-linux-musl/release/build/tree-sitter-72d2418073317c0f/out" "-L" "/Users/apanasenko/code/codex/codex-rs/target/x86_64-unknown-linux-musl/release/build/tree-sitter-bash-bfd293a9f333ce6a/out" "-L" "/Users/apanasenko/code/codex/codex-rs/target/x86_64-unknown-linux-musl/release/build/libsqlite3-sys-b78b2cfb81a330fc/out" "-L" "/Users/apanasenko/code/codex/codex-rs/target/x86_64-unknown-linux-musl/release/build/bzip2-sys-69a145cc859ef275/out/lib" "-L" "/Users/apanasenko/code/codex/codex-rs/target/x86_64-unknown-linux-musl/release/build/lzma-sys-07e92d0b6baa6fd4/out" "-L" "/Users/apanasenko/code/codex/codex-rs/target/x86_64-unknown-linux-musl/release/build/rama-boring-sys-0bc2dfbf669addc4/out/build/crypto/" "-L" "/Users/apanasenko/code/codex/codex-rs/target/x86_64-unknown-linux-musl/release/build/rama-boring-sys-0bc2dfbf669addc4/out/build/ssl/" "-L" "/Users/apanasenko/code/codex/codex-rs/target/x86_64-unknown-linux-musl/release/build/rama-boring-sys-0bc2dfbf669addc4/out/build/" "-L" "/Users/apanasenko/code/codex/codex-rs/target/x86_64-unknown-linux-musl/release/build/rama-boring-sys-0bc2dfbf669addc4/out/build" "-L" "<sysroot>/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained" "-L" "<sysroot>/lib/rustlib/x86_64-unknown-linux-musl/lib" "-o" "/Users/apanasenko/code/codex/codex-rs/target/x86_64-unknown-linux-musl/release/deps/codex_network_proxy-d08268b863517761" "-Wl,--gc-sections" "-static-pie" "-Wl,-z,relro,-z,now" "-Wl,-O1" "-Wl,--strip-all" "-nodefaultlibs" "<sysroot>/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained/crtendS.o" "<sysroot>/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained/crtn.o"
= note: some arguments are omitted. use `--verbose` to show all linker arguments
= note: warning: ignoring deprecated linker optimization setting '1'
warning: unable to open library directory '/Users/apanasenko/code/codex/codex-rs/target/x86_64-unknown-linux-musl/release/build/rama-boring-sys-0bc2dfbf669addc4/out/build/crypto/': FileNotFound
ld.lld: error: duplicate symbol: SSL_export_keying_material
>>> defined at ssl_lib.c:3816 (ssl/ssl_lib.c:3816)
>>> libssl-lib-ssl_lib.o:(SSL_export_keying_material) in archive /var/folders/kt/52y_g75x3ng8ktvk3rfwm6400000gp/T/rustcyGQdYm/libopenssl_sys-7c189e68b37fe2bb.rlib
>>> defined at t1_enc.cc:205 (/Users/apanasenko/code/codex/codex-rs/target/x86_64-unknown-linux-musl/release/build/rama-boring-sys-0bc2dfbf669addc4/out/boringssl/ssl/t1_enc.cc:205)
>>> t1_enc.cc.o:(.text.SSL_export_keying_material+0x0) in archive /var/folders/kt/52y_g75x3ng8ktvk3rfwm6400000gp/T/rustcyGQdYm/librama_boring_sys-0414e98115015ee0.rlib
ld.lld: error: duplicate symbol: d2i_ASN1_TIME
>>> defined at a_time.c:27 (crypto/asn1/a_time.c:27)
>>> libcrypto-lib-a_time.o:(d2i_ASN1_TIME) in archive /var/folders/kt/52y_g75x3ng8ktvk3rfwm6400000gp/T/rustcyGQdYm/libopenssl_sys-7c189e68b37fe2bb.rlib
>>> defined at a_time.cc:34 (/Users/apanasenko/code/codex/codex-rs/target/x86_64-unknown-linux-musl/release/build/rama-boring-sys-0bc2dfbf669addc4/out/boringssl/crypto/asn1/a_time.cc:34)
>>> a_time.cc.o:(.text.d2i_ASN1_TIME+0x0) in archive /var/folders/kt/52y_g75x3ng8ktvk3rfwm6400000gp/T/rustcyGQdYm/librama_boring_sys-0414e98115015ee0.rlib
```
that force me to migrate away from rama-tls-boring to rama-tls-rustls
and pin `ring` for rustls.
177 lines
4.8 KiB
Bash
177 lines
4.8 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
: "${TARGET:?TARGET environment variable is required}"
|
|
: "${GITHUB_ENV:?GITHUB_ENV environment variable is required}"
|
|
|
|
apt_update_args=()
|
|
if [[ -n "${APT_UPDATE_ARGS:-}" ]]; then
|
|
# shellcheck disable=SC2206
|
|
apt_update_args=(${APT_UPDATE_ARGS})
|
|
fi
|
|
|
|
apt_install_args=()
|
|
if [[ -n "${APT_INSTALL_ARGS:-}" ]]; then
|
|
# shellcheck disable=SC2206
|
|
apt_install_args=(${APT_INSTALL_ARGS})
|
|
fi
|
|
|
|
sudo apt-get update "${apt_update_args[@]}"
|
|
sudo apt-get install -y "${apt_install_args[@]}" musl-tools pkg-config g++ clang libc++-dev libc++abi-dev lld
|
|
|
|
case "${TARGET}" in
|
|
x86_64-unknown-linux-musl)
|
|
arch="x86_64"
|
|
;;
|
|
aarch64-unknown-linux-musl)
|
|
arch="aarch64"
|
|
;;
|
|
*)
|
|
echo "Unexpected musl target: ${TARGET}" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# Use the musl toolchain as the Rust linker to avoid Zig injecting its own CRT.
|
|
if command -v "${arch}-linux-musl-gcc" >/dev/null; then
|
|
musl_linker="$(command -v "${arch}-linux-musl-gcc")"
|
|
elif command -v musl-gcc >/dev/null; then
|
|
musl_linker="$(command -v musl-gcc)"
|
|
else
|
|
echo "musl gcc not found after install; arch=${arch}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
zig_target="${TARGET/-unknown-linux-musl/-linux-musl}"
|
|
runner_temp="${RUNNER_TEMP:-/tmp}"
|
|
tool_root="${runner_temp}/codex-musl-tools-${TARGET}"
|
|
mkdir -p "${tool_root}"
|
|
|
|
sysroot=""
|
|
if command -v zig >/dev/null; then
|
|
zig_bin="$(command -v zig)"
|
|
cc="${tool_root}/zigcc"
|
|
cxx="${tool_root}/zigcxx"
|
|
|
|
cat >"${cc}" <<EOF
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
args=()
|
|
skip_next=0
|
|
for arg in "\$@"; do
|
|
if [[ "\${skip_next}" -eq 1 ]]; then
|
|
skip_next=0
|
|
continue
|
|
fi
|
|
case "\${arg}" in
|
|
--target)
|
|
skip_next=1
|
|
continue
|
|
;;
|
|
--target=*|-target=*|-target)
|
|
# Drop any explicit --target/-target flags. Zig expects -target and
|
|
# rejects Rust triples like *-unknown-linux-musl.
|
|
if [[ "\${arg}" == "-target" ]]; then
|
|
skip_next=1
|
|
fi
|
|
continue
|
|
;;
|
|
-Wp,-U_FORTIFY_SOURCE)
|
|
# aws-lc-sys emits this GCC preprocessor forwarding form in debug
|
|
# builds, but zig cc expects the define flag directly.
|
|
args+=("-U_FORTIFY_SOURCE")
|
|
continue
|
|
;;
|
|
esac
|
|
args+=("\${arg}")
|
|
done
|
|
|
|
exec "${zig_bin}" cc -target "${zig_target}" "\${args[@]}"
|
|
EOF
|
|
cat >"${cxx}" <<EOF
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
args=()
|
|
skip_next=0
|
|
for arg in "\$@"; do
|
|
if [[ "\${skip_next}" -eq 1 ]]; then
|
|
skip_next=0
|
|
continue
|
|
fi
|
|
case "\${arg}" in
|
|
--target)
|
|
# Drop explicit --target and its value: we always pass zig's -target below.
|
|
skip_next=1
|
|
continue
|
|
;;
|
|
--target=*|-target=*|-target)
|
|
# Zig expects -target and rejects Rust triples like *-unknown-linux-musl.
|
|
if [[ "\${arg}" == "-target" ]]; then
|
|
skip_next=1
|
|
fi
|
|
continue
|
|
;;
|
|
-Wp,-U_FORTIFY_SOURCE)
|
|
# aws-lc-sys emits this GCC forwarding form in debug builds; zig c++
|
|
# expects the define flag directly.
|
|
args+=("-U_FORTIFY_SOURCE")
|
|
continue
|
|
;;
|
|
esac
|
|
args+=("\${arg}")
|
|
done
|
|
|
|
exec "${zig_bin}" c++ -target "${zig_target}" "\${args[@]}"
|
|
EOF
|
|
chmod +x "${cc}" "${cxx}"
|
|
|
|
sysroot="$("${zig_bin}" cc -target "${zig_target}" -print-sysroot 2>/dev/null || true)"
|
|
else
|
|
cc="${musl_linker}"
|
|
|
|
if command -v "${arch}-linux-musl-g++" >/dev/null; then
|
|
cxx="$(command -v "${arch}-linux-musl-g++")"
|
|
elif command -v musl-g++ >/dev/null; then
|
|
cxx="$(command -v musl-g++)"
|
|
else
|
|
cxx="${cc}"
|
|
fi
|
|
fi
|
|
|
|
if [[ -n "${sysroot}" && "${sysroot}" != "/" ]]; then
|
|
echo "BORING_BSSL_SYSROOT=${sysroot}" >> "$GITHUB_ENV"
|
|
boring_sysroot_var="BORING_BSSL_SYSROOT_${TARGET}"
|
|
boring_sysroot_var="${boring_sysroot_var//-/_}"
|
|
echo "${boring_sysroot_var}=${sysroot}" >> "$GITHUB_ENV"
|
|
fi
|
|
|
|
cflags="-pthread"
|
|
cxxflags="-pthread"
|
|
if [[ "${TARGET}" == "aarch64-unknown-linux-musl" ]]; then
|
|
# BoringSSL enables -Wframe-larger-than=25344 under clang and treats warnings as errors.
|
|
cflags="${cflags} -Wno-error=frame-larger-than"
|
|
cxxflags="${cxxflags} -Wno-error=frame-larger-than"
|
|
fi
|
|
|
|
echo "CFLAGS=${cflags}" >> "$GITHUB_ENV"
|
|
echo "CXXFLAGS=${cxxflags}" >> "$GITHUB_ENV"
|
|
echo "CC=${cc}" >> "$GITHUB_ENV"
|
|
echo "TARGET_CC=${cc}" >> "$GITHUB_ENV"
|
|
target_cc_var="CC_${TARGET}"
|
|
target_cc_var="${target_cc_var//-/_}"
|
|
echo "${target_cc_var}=${cc}" >> "$GITHUB_ENV"
|
|
echo "CXX=${cxx}" >> "$GITHUB_ENV"
|
|
echo "TARGET_CXX=${cxx}" >> "$GITHUB_ENV"
|
|
target_cxx_var="CXX_${TARGET}"
|
|
target_cxx_var="${target_cxx_var//-/_}"
|
|
echo "${target_cxx_var}=${cxx}" >> "$GITHUB_ENV"
|
|
|
|
cargo_linker_var="CARGO_TARGET_${TARGET^^}_LINKER"
|
|
cargo_linker_var="${cargo_linker_var//-/_}"
|
|
echo "${cargo_linker_var}=${musl_linker}" >> "$GITHUB_ENV"
|
|
|
|
echo "CMAKE_C_COMPILER=${cc}" >> "$GITHUB_ENV"
|
|
echo "CMAKE_CXX_COMPILER=${cxx}" >> "$GITHUB_ENV"
|
|
echo "CMAKE_ARGS=-DCMAKE_HAVE_THREADS_LIBRARY=1 -DCMAKE_USE_PTHREADS_INIT=1 -DCMAKE_THREAD_LIBS_INIT=-pthread -DTHREADS_PREFER_PTHREAD_FLAG=ON" >> "$GITHUB_ENV"
|