From b37d2b5f58a842791b36cf68a1722681d26f5261 Mon Sep 17 00:00:00 2001 From: Justin W Smith <103147162+justsmth@users.noreply.github.com> Date: Mon, 3 Feb 2025 14:11:06 -0500 Subject: [PATCH] Improve support for alpine linux (#675) * Add alpine linux docker image * Support alpine via ???-unknown-linux-musl bindings * Setup GitHub CI * Satiate clippy * Add clippy-fix make target --- .github/docker_images/alpine-3.20/Dockerfile | 39 +++++++++++++++++++ .../alpine-3.20/aws_lc_rs_build.sh | 14 +++++++ .../docker_images/alpine-3.20/build_image.sh | 26 +++++++++++++ .github/docker_images/alpine-3.20/entry.sh | 7 ++++ .github/workflows/cross.yml | 16 ++++++++ aws-lc-fips-sys/builder/cmake_builder.rs | 2 +- aws-lc-rs/Makefile | 5 ++- aws-lc-rs/src/agreement.rs | 4 +- aws-lc-rs/src/cbb.rs | 2 +- aws-lc-rs/src/digest/digest_ctx.rs | 4 +- aws-lc-rs/src/hkdf.rs | 2 +- aws-lc-rs/src/hmac.rs | 2 +- aws-lc-rs/src/key_wrap.rs | 2 +- aws-lc-rs/src/rsa/encryption.rs | 4 +- aws-lc-rs/src/rsa/encryption/oaep.rs | 12 +++--- aws-lc-rs/src/rsa/encryption/pkcs1.rs | 6 +-- aws-lc-rs/src/rsa/key.rs | 4 +- aws-lc-rs/src/rsa/signature.rs | 4 +- aws-lc-rs/tests/aead_test.rs | 4 +- aws-lc-rs/tests/ecdsa_tests.rs | 4 +- aws-lc-rs/tests/ed25519_tests.rs | 2 +- aws-lc-rs/tests/rsa_test.rs | 2 +- aws-lc-sys/builder/cc_builder.rs | 14 +++---- aws-lc-sys/builder/cmake_builder.rs | 14 +++---- aws-lc-sys/builder/main.rs | 19 ++++++--- docker/build_images.sh | 1 + 26 files changed, 165 insertions(+), 50 deletions(-) create mode 100644 .github/docker_images/alpine-3.20/Dockerfile create mode 100755 .github/docker_images/alpine-3.20/aws_lc_rs_build.sh create mode 100755 .github/docker_images/alpine-3.20/build_image.sh create mode 100755 .github/docker_images/alpine-3.20/entry.sh diff --git a/.github/docker_images/alpine-3.20/Dockerfile b/.github/docker_images/alpine-3.20/Dockerfile new file mode 100644 index 00000000000..77799d71a64 --- /dev/null +++ b/.github/docker_images/alpine-3.20/Dockerfile @@ -0,0 +1,39 @@ +FROM alpine:3.20 + +VOLUME ["/aws_lc_rs"] + +WORKDIR / + +RUN apk add \ + alpine-sdk \ + bash \ + boost-dev \ + build-base \ + busybox-suid \ + clang-dev \ + cargo \ + curl \ + cmake \ + openssl-dev + +ARG UID +RUN adduser -u $UID -S -s /bin/sh -G abuild satoshi +USER satoshi +WORKDIR /home/satoshi +ENV CARGO_HTTP_MULTIPLEXING=false + +# If needed, setup Rust environment for user +#RUN cd "${HOME}" && \ +# curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > ./rustup.sh && \ +# chmod +x ./rustup.sh && \ +# ./rustup.sh -y && \ +# . "${HOME}/.cargo/env" && \ +# echo '. "${HOME}/.cargo/env"' >> ${HOME}/.profile && \ +# cargo install --locked bindgen-cli && \ +# rustup component add rustfmt clippy && \ +# rm ./rustup.sh + +COPY aws_lc_rs_build.sh / +COPY entry.sh / + +ENTRYPOINT ["/entry.sh"] diff --git a/.github/docker_images/alpine-3.20/aws_lc_rs_build.sh b/.github/docker_images/alpine-3.20/aws_lc_rs_build.sh new file mode 100755 index 00000000000..47274610f1a --- /dev/null +++ b/.github/docker_images/alpine-3.20/aws_lc_rs_build.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 OR ISC + +set -ex -o pipefail + +SRC_DIR="${SRC_DIR:-/aws_lc_rs}" + +pushd "${SRC_DIR}" + +cargo test -p aws-lc-rs +cargo clean + +popd # ${SRC_DIR} diff --git a/.github/docker_images/alpine-3.20/build_image.sh b/.github/docker_images/alpine-3.20/build_image.sh new file mode 100755 index 00000000000..2d3f0e0d04b --- /dev/null +++ b/.github/docker_images/alpine-3.20/build_image.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 OR ISC + +set -ex + +SCRIPT_DIR=$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd) + +# Ubuntu: +# sudo apt-get install jq + +# Amazon Linux: +# sudo yum install jq + +# Log Docker hub limit https://docs.docker.com/docker-hub/download-rate-limit/#how-can-i-check-my-current-rate +TOKEN=$(curl "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token) +curl --head -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest + +EXTRA_ARGS=() +if [[ -n "${GOPROXY:+x}" ]]; then + EXTRA_ARGS=("--build-arg" "GOPROXY=${GOPROXY}" "${EXTRA_ARGS[@]}") +fi + +pushd "${SCRIPT_DIR}" +docker build -t alpine:3.20 . --build-arg UID=$(id -u) --load "${EXTRA_ARGS[@]}" +popd diff --git a/.github/docker_images/alpine-3.20/entry.sh b/.github/docker_images/alpine-3.20/entry.sh new file mode 100755 index 00000000000..1857cc127dd --- /dev/null +++ b/.github/docker_images/alpine-3.20/entry.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 OR ISC + +set -ex -o pipefail + +/aws_lc_rs_build.sh "${argv[@]}" diff --git a/.github/workflows/cross.yml b/.github/workflows/cross.yml index 248bda3a08a..f47678e5f39 100644 --- a/.github/workflows/cross.yml +++ b/.github/workflows/cross.yml @@ -312,3 +312,19 @@ jobs: - name: Build run: | docker run -v "${{ github.workspace }}:/aws_lc_rs" ohos:5.0.0 + + alpine-linux: + runs-on: ubuntu-latest + env: + DOCKER_BUILDKIT: 1 + steps: + - uses: actions/checkout@v4 + with: + submodules: "recursive" + - name: Build Docker Image + working-directory: .github/docker_images/alpine-3.20 + run: | + ./build_image.sh + - name: Build + run: | + docker run -v "${{ github.workspace }}:/aws_lc_rs" alpine:3.20 diff --git a/aws-lc-fips-sys/builder/cmake_builder.rs b/aws-lc-fips-sys/builder/cmake_builder.rs index a9ef4ab42a9..165883effe0 100644 --- a/aws-lc-fips-sys/builder/cmake_builder.rs +++ b/aws-lc-fips-sys/builder/cmake_builder.rs @@ -396,7 +396,7 @@ impl crate::Builder for CmakeBuilder { } else { eprintln!("Missing dependency: cmake"); missing_dependency = true; - }; + } if missing_dependency { return Err("Required build dependency is missing. Halting build.".to_owned()); diff --git a/aws-lc-rs/Makefile b/aws-lc-rs/Makefile index f60c8de1268..379376ffcc3 100644 --- a/aws-lc-rs/Makefile +++ b/aws-lc-rs/Makefile @@ -45,9 +45,12 @@ msrv: clippy: cargo +nightly clippy --all-targets --features bindgen,fips,unstable -- -W clippy::all -W clippy::pedantic +clippy-fix: + cargo +nightly clippy --all-targets --features bindgen,fips,unstable --fix --allow-dirty -- -W clippy::all -W clippy::pedantic + ci: format clippy msrv test coverage api-diff-pub readme: cargo readme | tee README.md -.PHONY: asan asan-fips asan-release ci clippy coverage coverage-fips test msrv clippy +.PHONY: asan asan-fips asan-release ci clippy coverage coverage-fips test msrv clippy clippy-fix diff --git a/aws-lc-rs/src/agreement.rs b/aws-lc-rs/src/agreement.rs index 43f97900ae8..c844665d3ad 100644 --- a/aws-lc-rs/src/agreement.rs +++ b/aws-lc-rs/src/agreement.rs @@ -720,7 +720,7 @@ fn ec_key_ecdh<'a>( if 1 != unsafe { EVP_PKEY_derive_init(*pkey_ctx.as_mut()) } { return Err(Unspecified); - }; + } if 1 != unsafe { EVP_PKEY_derive_set_peer(*pkey_ctx.as_mut(), *pub_key.as_mut()) } { return Err(Unspecified); @@ -751,7 +751,7 @@ fn x25519_diffie_hellman<'a>( if 1 != unsafe { EVP_PKEY_derive_init(*pkey_ctx.as_mut()) } { return Err(()); - }; + } let mut pub_key = try_parse_x25519_public_key_bytes(peer_pub_key)?; diff --git a/aws-lc-rs/src/cbb.rs b/aws-lc-rs/src/cbb.rs index 941b8190794..061b6bf1889 100644 --- a/aws-lc-rs/src/cbb.rs +++ b/aws-lc-rs/src/cbb.rs @@ -26,7 +26,7 @@ impl LcCBB<'static> { if 1 != unsafe { CBB_finish(self.as_mut_ptr(), &mut out_data, &mut out_len) } { return Err(Unspecified); - }; + } let out_data = LcPtr::new(out_data)?; let slice = unsafe { std::slice::from_raw_parts(*out_data.as_const(), out_len) }; diff --git a/aws-lc-rs/src/digest/digest_ctx.rs b/aws-lc-rs/src/digest/digest_ctx.rs index 02714dc0e44..56cdfe9387e 100644 --- a/aws-lc-rs/src/digest/digest_ctx.rs +++ b/aws-lc-rs/src/digest/digest_ctx.rs @@ -18,7 +18,7 @@ impl DigestContext { unsafe { if 1 != EVP_DigestInit_ex(dc.as_mut_ptr(), *evp_md_type, null_mut()) { return Err(Unspecified); - }; + } Ok(dc) } } @@ -65,7 +65,7 @@ impl DigestContext { // https://github.com/aws/aws-lc/blob/98ccf4a316401112943bed604562102ad52efac6/include/openssl/digest.h#L280 if 1 != EVP_MD_CTX_copy(dc.as_mut_ptr(), self.as_ptr()) { return Err("EVP_MD_CTX_copy failed"); - }; + } Ok(Self(dc.assume_init())) } } diff --git a/aws-lc-rs/src/hkdf.rs b/aws-lc-rs/src/hkdf.rs index b7dddf4ee22..1ae9c42cf4b 100644 --- a/aws-lc-rs/src/hkdf.rs +++ b/aws-lc-rs/src/hkdf.rs @@ -252,7 +252,7 @@ impl PrkMode { return Err(Unspecified); } } - }; + } Ok(()) } diff --git a/aws-lc-rs/src/hmac.rs b/aws-lc-rs/src/hmac.rs index a660823e184..5e88ceb7c7e 100644 --- a/aws-lc-rs/src/hmac.rs +++ b/aws-lc-rs/src/hmac.rs @@ -306,7 +306,7 @@ impl Key { null_mut(), ) { return Err(Unspecified); - }; + } let result = Self { algorithm, ctx: LcHmacCtx(ctx.assume_init()), diff --git a/aws-lc-rs/src/key_wrap.rs b/aws-lc-rs/src/key_wrap.rs index 0e91f2bd1ad..f1fe2a4ae89 100644 --- a/aws-lc-rs/src/key_wrap.rs +++ b/aws-lc-rs/src/key_wrap.rs @@ -404,7 +404,7 @@ impl KeyWrapPadded for KeyEncryptionKey { ) }) { return Err(Unspecified); - }; + } Ok(&mut output[..out_len]) } diff --git a/aws-lc-rs/src/rsa/encryption.rs b/aws-lc-rs/src/rsa/encryption.rs index 708db66dab8..b2c4e8ffe17 100644 --- a/aws-lc-rs/src/rsa/encryption.rs +++ b/aws-lc-rs/src/rsa/encryption.rs @@ -43,7 +43,7 @@ impl PrivateDecryptingKey { fn validate_key(key: &LcPtr) -> Result<(), Unspecified> { if !is_rsa_key(key) { return Err(Unspecified); - }; + } match key.key_size_bits() { 2048..=8192 => Ok(()), _ => Err(Unspecified), @@ -152,7 +152,7 @@ impl PublicEncryptingKey { fn validate_key(key: &LcPtr) -> Result<(), Unspecified> { if !is_rsa_key(key) { return Err(Unspecified); - }; + } match key.key_size_bits() { 2048..=8192 => Ok(()), _ => Err(Unspecified), diff --git a/aws-lc-rs/src/rsa/encryption/oaep.rs b/aws-lc-rs/src/rsa/encryption/oaep.rs index 35ff7603bd9..40f42bb9e20 100644 --- a/aws-lc-rs/src/rsa/encryption/oaep.rs +++ b/aws-lc-rs/src/rsa/encryption/oaep.rs @@ -136,7 +136,7 @@ impl OaepPublicEncryptingKey { ) }) { return Err(Unspecified); - }; + } Ok(&mut ciphertext[..out_len]) } @@ -240,7 +240,7 @@ impl OaepPrivateDecryptingKey { ) }) { return Err(Unspecified); - }; + } Ok(&mut plaintext[..out_len]) } @@ -280,15 +280,15 @@ fn configure_oaep_crypto_operation( if 1 != unsafe { EVP_PKEY_CTX_set_rsa_padding(*evp_pkey_ctx.as_mut(), RSA_PKCS1_OAEP_PADDING) } { return Err(Unspecified); - }; + } if 1 != unsafe { EVP_PKEY_CTX_set_rsa_oaep_md(*evp_pkey_ctx.as_mut(), oaep_hash_fn()) } { return Err(Unspecified); - }; + } if 1 != unsafe { EVP_PKEY_CTX_set_rsa_mgf1_md(*evp_pkey_ctx.as_mut(), mgf1_hash_fn()) } { return Err(Unspecified); - }; + } let label = label.unwrap_or(&[0u8; 0]); @@ -315,7 +315,7 @@ fn configure_oaep_crypto_operation( EVP_PKEY_CTX_set0_rsa_oaep_label(*evp_pkey_ctx.as_mut(), *label_ptr, label.len()) } { return Err(Unspecified); - }; + } // AWS-LC owns the allocation now, so we detach it to avoid freeing it here when label_ptr goes out of scope. label_ptr.detach(); diff --git a/aws-lc-rs/src/rsa/encryption/pkcs1.rs b/aws-lc-rs/src/rsa/encryption/pkcs1.rs index ac47452b92a..4c73f6005a2 100644 --- a/aws-lc-rs/src/rsa/encryption/pkcs1.rs +++ b/aws-lc-rs/src/rsa/encryption/pkcs1.rs @@ -62,7 +62,7 @@ impl Pkcs1PublicEncryptingKey { ) }) { return Err(Unspecified); - }; + } Ok(&mut ciphertext[..out_len]) } @@ -149,7 +149,7 @@ impl Pkcs1PrivateDecryptingKey { ) }) { return Err(Unspecified); - }; + } Ok(&mut plaintext[..out_len]) } @@ -185,7 +185,7 @@ fn configure_pkcs1_crypto_operation( ) -> Result<(), Unspecified> { if 1 != unsafe { EVP_PKEY_CTX_set_rsa_padding(*evp_pkey_ctx.as_mut(), RSA_PKCS1_PADDING) } { return Err(Unspecified); - }; + } Ok(()) } diff --git a/aws-lc-rs/src/rsa/key.rs b/aws-lc-rs/src/rsa/key.rs index 94c1ffb58ea..6df779739ff 100644 --- a/aws-lc-rs/src/rsa/key.rs +++ b/aws-lc-rs/src/rsa/key.rs @@ -173,7 +173,7 @@ impl KeyPair { fn validate_private_key(key: &LcPtr) -> Result<(), KeyRejected> { if !is_rsa_key(key) { return Err(KeyRejected::unspecified()); - }; + } match key.key_size_bits() { 2048..=8192 => Ok(()), _ => Err(KeyRejected::unspecified()), @@ -489,7 +489,7 @@ pub(super) fn generate_rsa_key(size: c_int, fips: bool) -> Result( pub(crate) fn configure_rsa_pkcs1_pss_padding(pctx: *mut EVP_PKEY_CTX) -> Result<(), ()> { if 1 != unsafe { EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_PSS_PADDING) } { return Err(()); - }; + } if 1 != unsafe { EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx, RSA_PSS_SALTLEN_DIGEST) } { return Err(()); - }; + } Ok(()) } diff --git a/aws-lc-rs/tests/aead_test.rs b/aws-lc-rs/tests/aead_test.rs index 8271514c9b1..5b78df63be3 100644 --- a/aws-lc-rs/tests/aead_test.rs +++ b/aws-lc-rs/tests/aead_test.rs @@ -167,7 +167,7 @@ fn test_aead( return Ok(()); } _ => (), - }; + } let mut s_in_out = plaintext.clone(); let nonce = Nonce::try_assume_unique_for_key(&nonce_bytes).unwrap(); @@ -242,7 +242,7 @@ fn test_aead( Some(error) => { panic!("Unexpected error test case: {error}"); } - }; + } } Ok(()) diff --git a/aws-lc-rs/tests/ecdsa_tests.rs b/aws-lc-rs/tests/ecdsa_tests.rs index 14470c7af28..c88e7dc94ad 100644 --- a/aws-lc-rs/tests/ecdsa_tests.rs +++ b/aws-lc-rs/tests/ecdsa_tests.rs @@ -84,7 +84,7 @@ fn ecdsa_from_pkcs8_test() { "Input: {}", test::to_hex(&input) ), - }; + } match (EcdsaKeyPair::from_pkcs8(this_asn1, &input), error) { (Ok(_), None) => (), @@ -93,7 +93,7 @@ fn ecdsa_from_pkcs8_test() { } (Ok(_), Some(e)) => panic!("Succeeded, but expected error \"{e}\""), (Err(actual), Some(expected)) => assert_eq!(format!("{actual}"), expected), - }; + } assert!( EcdsaKeyPair::from_pkcs8(other_fixed, &input).is_err(), diff --git a/aws-lc-rs/tests/ed25519_tests.rs b/aws-lc-rs/tests/ed25519_tests.rs index ee3b9be3cf8..5e540820db2 100644 --- a/aws-lc-rs/tests/ed25519_tests.rs +++ b/aws-lc-rs/tests/ed25519_tests.rs @@ -135,7 +135,7 @@ fn test_ed25519_from_pkcs8() { test::to_hex(input) ); } - }; + } } // Just test that we can parse the input. diff --git a/aws-lc-rs/tests/rsa_test.rs b/aws-lc-rs/tests/rsa_test.rs index a55777bbf20..c8953a3f225 100644 --- a/aws-lc-rs/tests/rsa_test.rs +++ b/aws-lc-rs/tests/rsa_test.rs @@ -47,7 +47,7 @@ fn rsa_from_pkcs8_test() { "Input: {}", test::to_hex(input.as_slice()) ), - }; + } Ok(()) }, diff --git a/aws-lc-sys/builder/cc_builder.rs b/aws-lc-sys/builder/cc_builder.rs index ea8e6c32bcf..5861c669aa0 100644 --- a/aws-lc-sys/builder/cc_builder.rs +++ b/aws-lc-sys/builder/cc_builder.rs @@ -14,8 +14,8 @@ mod x86_64_unknown_linux_gnu; mod x86_64_unknown_linux_musl; use crate::{ - cargo_env, emit_warning, env_var_to_bool, execute_command, get_crate_cflags, is_no_asm, - option_env, out_dir, requested_c_std, target, target_arch, target_env, target_os, + cargo_env, effective_target, emit_warning, env_var_to_bool, execute_command, get_crate_cflags, + is_no_asm, option_env, out_dir, requested_c_std, target, target_arch, target_env, target_os, target_vendor, CStdRequested, OutputLibType, }; use std::path::PathBuf; @@ -78,7 +78,7 @@ impl PlatformConfig { impl Default for PlatformConfig { fn default() -> Self { - Self::default_for(&target()).unwrap() + Self::default_for(&effective_target()).unwrap() } } @@ -136,7 +136,7 @@ impl CcBuilder { cc_build.std("c99"); } } - }; + } if let Some(cc) = option_env("CC") { emit_warning(&format!("CC environment variable set: {}", cc.clone())); @@ -394,12 +394,12 @@ impl crate::Builder for CcBuilder { return Err("CcBuilder only supports static builds".to_string()); } - if PlatformConfig::default_for(&target()).is_none() { - return Err(format!("Platform not supported: {}", target())); + if PlatformConfig::default_for(&effective_target()).is_none() { + return Err(format!("Platform not supported: {}", effective_target())); } if Some(true) == env_var_to_bool("CARGO_FEATURE_SSL") { - return Err(format!("libssl not supported: {}", target())); + return Err("cc_builder for libssl not supported".to_string()); } Ok(()) diff --git a/aws-lc-sys/builder/cmake_builder.rs b/aws-lc-sys/builder/cmake_builder.rs index 0d2f4c0be63..add279b57e8 100644 --- a/aws-lc-sys/builder/cmake_builder.rs +++ b/aws-lc-sys/builder/cmake_builder.rs @@ -4,10 +4,10 @@ use crate::cc_builder::CcBuilder; use crate::OutputLib::{Crypto, RustWrapper, Ssl}; use crate::{ - allow_prebuilt_nasm, cargo_env, emit_warning, execute_command, get_crate_cflags, is_crt_static, - is_no_asm, option_env, requested_c_std, target, target_arch, target_env, target_os, - target_underscored, target_vendor, test_nasm_command, use_prebuilt_nasm, CStdRequested, - OutputLibType, + allow_prebuilt_nasm, cargo_env, effective_target, emit_warning, execute_command, + get_crate_cflags, is_crt_static, is_no_asm, option_env, requested_c_std, target_arch, + target_env, target_os, target_underscored, target_vendor, test_nasm_command, use_prebuilt_nasm, + CStdRequested, OutputLibType, }; use std::env; use std::ffi::OsString; @@ -215,7 +215,7 @@ impl CmakeBuilder { if target_vendor() == "apple" && target_os().to_lowercase() == "ios" { cmake_cfg.define("CMAKE_SYSTEM_NAME", "iOS"); - if target().ends_with("-ios-sim") || target_arch() == "x86_64" { + if effective_target().ends_with("-ios-sim") || target_arch() == "x86_64" { cmake_cfg.define("CMAKE_OSX_SYSROOT", "iphonesimulator"); } else { cmake_cfg.define("CMAKE_OSX_SYSROOT", "iphoneos"); @@ -331,7 +331,7 @@ impl CmakeBuilder { } } - match target().as_str() { + match effective_target().as_str() { "aarch64-unknown-linux-ohos" => { cmake_cfg.define("OHOS_ARCH", "arm64-v8a"); } @@ -400,7 +400,7 @@ impl crate::Builder for CmakeBuilder { } else { eprintln!("Missing dependency: cmake"); missing_dependency = true; - }; + } if missing_dependency { return Err("Required build dependency is missing. Halting build.".to_owned()); diff --git a/aws-lc-sys/builder/main.rs b/aws-lc-sys/builder/main.rs index 89e7eab5050..df6490ebc9a 100644 --- a/aws-lc-sys/builder/main.rs +++ b/aws-lc-sys/builder/main.rs @@ -216,7 +216,7 @@ fn prefix_string() -> String { #[cfg(feature = "bindgen")] fn target_platform_prefix(name: &str) -> String { - format!("{}_{}", target().replace('-', "_"), name) + format!("{}_{}", effective_target().replace('-', "_"), name) } pub(crate) struct TestCommandResult { @@ -319,9 +319,18 @@ fn target() -> String { cargo_env("TARGET") } +fn effective_target() -> String { + let target = target(); + match target.as_str() { + "x86_64-alpine-linux-musl" => "x86_64-unknown-linux-musl".to_string(), + "aarch64-alpine-linux-musl" => "aarch64-unknown-linux-musl".to_string(), + _ => target, + } +} + #[allow(unused)] fn target_underscored() -> String { - target().replace('-', "_") + effective_target().replace('-', "_") } fn out_dir() -> PathBuf { @@ -428,7 +437,7 @@ fn initialize() { } if !is_external_bindgen() && (is_pregenerating_bindings() || !has_bindgen_feature()) { - let target = target(); + let target = effective_target(); let supported_platform = match target.as_str() { "aarch64-apple-darwin" | "aarch64-linux-android" @@ -548,7 +557,7 @@ bindgen_available!( if internal_bindgen_supported() && !is_external_bindgen() { emit_warning(&format!( "Generating bindings - internal bindgen. Platform: {}", - target() + effective_target() )); let gen_bindings_path = out_dir().join("bindings.rs"); generate_bindings(manifest_dir, prefix, &gen_bindings_path); @@ -764,7 +773,7 @@ fn invoke_external_bindgen( emit_warning(&format!( "Generating bindings - external bindgen. Platform: {}", - target() + effective_target() )); let options = BindingOptions { diff --git a/docker/build_images.sh b/docker/build_images.sh index b5c70caf44b..42939cdbac8 100755 --- a/docker/build_images.sh +++ b/docker/build_images.sh @@ -32,4 +32,5 @@ docker build -t rust:linux-386 linux-386 --load "${EXTRA_ARGS[@]}" docker build -t rust:linux-arm64 linux-arm64 --load "${EXTRA_ARGS[@]}" docker build -t rust:linux-x86_64 linux-x86_64 --load "${EXTRA_ARGS[@]}" docker build -t ubuntu:18.04 ubuntu-18.04 --load "${EXTRA_ARGS[@]}" +docker build -t alpine:3.20 alpine-3.20 --build-arg UID=$(id -u) --load "${EXTRA_ARGS[@]}" popd &>/dev/null