opn
This commit is contained in:
1 parent
cce1081f75
commit
2b8f11ef8c
36 files changed
+1868
-309
No files matched your search
Executable
+51
@@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
source /opt/rust-package-builder/scripts/lib.sh
|
||||
|
||||
SOURCE_DIR=${1:?source path required}
|
||||
OUTPUT_BINARY=${2:?output binary required}
|
||||
BINARY_NAME=${3:?binary name required}
|
||||
WORK_DIR=${4:?work directory required}
|
||||
|
||||
BUILD_SOURCE="$WORK_DIR/freebsd-source"
|
||||
rm -rf "$BUILD_SOURCE"
|
||||
mkdir -p "$BUILD_SOURCE" "$(dirname "$OUTPUT_BINARY")"
|
||||
|
||||
rsync -a --delete \
|
||||
--exclude='.git/' \
|
||||
--exclude='target/' \
|
||||
"$SOURCE_DIR/" "$BUILD_SOURCE/"
|
||||
|
||||
if [[ "${APPLY_FREEBSD_PATCHES:-1}" == "1" ]]; then
|
||||
/opt/rust-package-builder/scripts/apply-freebsd-patches.sh "$BUILD_SOURCE"
|
||||
else
|
||||
log "FreeBSD/OPNsense source patches disabled"
|
||||
fi
|
||||
|
||||
FREEBSD_TARGET_VERSION=${FREEBSD_RELEASE%-RELEASE}
|
||||
export CFLAGS_x86_64_unknown_freebsd="--target=x86_64-unknown-freebsd${FREEBSD_TARGET_VERSION} --sysroot=/opt/freebsd-sysroot"
|
||||
export CXXFLAGS_x86_64_unknown_freebsd="--target=x86_64-unknown-freebsd${FREEBSD_TARGET_VERSION} --sysroot=/opt/freebsd-sysroot"
|
||||
export CARGO_TARGET_X86_64_UNKNOWN_FREEBSD_RUSTFLAGS="-C link-arg=--target=x86_64-unknown-freebsd${FREEBSD_TARGET_VERSION} -C link-arg=--sysroot=/opt/freebsd-sysroot -C link-arg=-fuse-ld=lld"
|
||||
|
||||
log "cross-compiling $BINARY_NAME for x86_64-unknown-freebsd${FREEBSD_TARGET_VERSION}"
|
||||
cd "$BUILD_SOURCE"
|
||||
if [[ -f Cargo.lock ]]; then
|
||||
cargo "+$FREEBSD_RUST_TOOLCHAIN" build --release --locked --target x86_64-unknown-freebsd
|
||||
else
|
||||
cargo "+$FREEBSD_RUST_TOOLCHAIN" build --release --target x86_64-unknown-freebsd
|
||||
fi
|
||||
|
||||
BUILT="$CARGO_TARGET_DIR/x86_64-unknown-freebsd/release/$BINARY_NAME"
|
||||
[[ -x "$BUILT" ]] || fatal "FreeBSD binary not found: $BUILT"
|
||||
install -m 0555 "$BUILT" "$OUTPUT_BINARY"
|
||||
|
||||
desc=$(file -b "$OUTPUT_BINARY")
|
||||
log "FreeBSD binary: $desc"
|
||||
[[ "$desc" == *FreeBSD* ]] || fatal "cross-built ELF is not identified as FreeBSD"
|
||||
|
||||
header=$(llvm-readelf -h "$OUTPUT_BINARY")
|
||||
printf '%s\n' "$header" | grep -qi FreeBSD || fatal "cross-built ELF header is not marked for FreeBSD"
|
||||
dynamic=$(llvm-readelf -d "$OUTPUT_BINARY" || true)
|
||||
if printf '%s\n' "$dynamic" | grep -q 'libc\.so\.6'; then
|
||||
fatal "Linux libc detected in FreeBSD target binary"
|
||||
fi
|
||||
Reference in new issue
Block a user