Last active
February 26, 2024 16:57
-
-
Save krasCGQ/d957851aa38319ccbcc144ab0cd493ca to your computer and use it in GitHub Desktop.
Scripts to build static-PIE binary of the following; only works on Alpine Linux and other Musl libc based Distros, as some may segfault when done with Glibc.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env dash | |
# | |
# SPDX-License-Identifier: Unlicense | |
# | |
CC=clang | |
LD=ld.lld | |
STRIP=llvm-strip | |
# -fuse-ld= tells compiler to use specific linker above | |
USE_LD=$(echo $LD | cut -d. -f2) | |
# Limits to at least Intel Nehalem and newer | |
ARCH=x86-64-v2 | |
# Optimize binary for this specific CPU | |
TUNE=skylake | |
# Compiler optimizations and hardenings | |
CFLAGS="-O3 -g0 -fcf-protection=full -fstack-clash-protection -fstack-protector-all" | |
# LLVM-specific hardening, automatically init values with zeroes | |
CFLAGS="$CFLAGS -ftrivial-auto-var-init=zero -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang" | |
# Disable unused command line warning (happens during final link) | |
CFLAGS="$CFLAGS -Wno-unused-command-line-argument" | |
# Linker optimization and static-PIE linking | |
LDFLAGS="-Wl,-O3 -static-pie" | |
# Removes all symbols | |
STRIPFLAGS="-s" | |
# Comment: Probably --disable-rpath does nothing to static build? | |
./configure \ | |
CC=$CC \ | |
CFLAGS="-march=$ARCH -mtune=$TUNE $CFLAGS" \ | |
LDFLAGS="-fuse-ld=$USE_LD $LDFLAGS" \ | |
--prefix=/usr \ | |
--disable-rpath | |
# Remove unused declaration to fix static linking | |
grep program_name src/global.c && sed /program_name/d -i src/global.c | |
make -j"$(nproc --all)" | |
$STRIP $STRIPFLAGS src/cpio | |
ls -l src/cpio | |
sha256sum src/cpio |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env dash | |
# | |
# SPDX-License-Identifier: Unlicense | |
# | |
CC=clang | |
LD=ld.lld | |
STRIP=llvm-strip | |
# -fuse-ld= tells compiler to use specific linker above | |
USE_LD=$(echo $LD | cut -d. -f2) | |
# Limits to at least Intel Nehalem and newer | |
ARCH=x86-64-v2 | |
# Optimize binary for this specific CPU | |
TUNE=skylake | |
# Compiler optimizations and hardenings | |
CFLAGS="-O3 -g0 -fcf-protection=full -fstack-clash-protection -fstack-protector-all" | |
# LLVM-specific hardening, automatically init values with zeroes | |
CFLAGS="$CFLAGS -ftrivial-auto-var-init=zero -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang" | |
# Linker optimization and static-PIE linking | |
LDFLAGS="-Wl,-O3 -static-pie" | |
# Removes all symbols | |
STRIPFLAGS="-s" | |
# shellcheck disable=SC2086 | |
$CC -march=$ARCH -mtune=$TUNE $CFLAGS \ | |
-fuse-ld="$USE_LD" $LDFLAGS \ | |
dtbtool.c -o dtbToolLineage | |
$STRIP $STRIPFLAGS dtbToolLineage | |
ls -l dtbToolLineage | |
sha256sum dtbToolLineage |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env dash | |
# | |
# SPDX-License-Identifer: Unlicense | |
# | |
CC=clang | |
LD=ld.lld | |
STRIP=llvm-strip | |
# -fuse-ld= tells compiler to use specific linker above | |
USE_LD=$(echo $LD | cut -d. -f2) | |
# Limits to at least Intel Nehalem and newer | |
ARCH=x86-64-v2 | |
# Optimize binary for this specific CPU | |
TUNE=skylake | |
# Compiler optimizations and hardenings | |
CFLAGS="-O3 -g0 -fcf-protection=full -fstack-clash-protection -fstack-protector-all" | |
# LLVM-specific hardening, automatically init values with zeroes | |
CFLAGS="$CFLAGS -ftrivial-auto-var-init=zero -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang" | |
# Disable unused command line warning (happens during final link) | |
CFLAGS="$CFLAGS -Wno-unused-command-line-argument" | |
# Defaults as specified in Makefile | |
CPPFLAGS="-Ilibfdt -I. -DFDT_ASSUME_MASK=0" | |
# Disable linking with libyaml and valgrind | |
CPPFLAGS="$CPPFLAGS -DNO_VALGRIND -DNO_YAML" | |
# Linker optimization and static-PIE linking | |
LDFLAGS="-Wl,-O3 -static-pie" | |
# Removes all symbols | |
STRIPFLAGS="-s" | |
# Fix building/linking of the AOSP fork (upstream dtc isn't affected) | |
grep dtc-parser.h dtc-lexer.l && sed s/dtc-parser/dtc-parser.tab/ -i dtc-lexer.l | |
make -j"$(nproc --all)" \ | |
CC=$CC \ | |
CPPFLAGS="$CPPFLAGS" \ | |
EXTRA_CFLAGS="-march=$ARCH -mtune=$TUNE $CFLAGS" \ | |
LDFLAGS="-fuse-ld=$USE_LD $LDFLAGS" \ | |
dtc | |
$STRIP $STRIPFLAGS dtc | |
ls -l dtc | |
sha256sum dtc |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment