LFS 13.0
Scripts
/etc/profile.d/build-default-flags.sh
# Graphite (LTO -fgraphite-identity -floop-nest-optimize -floop-interchange)
COMMON_FLAGS="-march=native -O3 -pipe -flto=auto -ffat-lto-objects -fgraphite-identity -floop-nest-optimize -floop-interchange"
export LDFLAGS="-flto=auto -Wl,-O1 -Wl,--as-needed"
source /etc/flags-store/export.list
alias clear-flags='unset CFLAGS CXXFLAGS FCFLAGS FFLAGS RUSTFLAGS LDFLAGS'
/etc/flags-store/toggle-flags.sh
#!/usr/bin/env bash
FLAG_DIR="/etc/flags-store"
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m'
if [ ! -d "$FLAG_DIR" ]; then
echo -e "${YELLOW}경고: 플래그 디렉터리($FLAG_DIR)가 존재하지 않습니다.${NC}"
echo -e "정보: 플래그 디렉터리($FLAG_DIR)를 생성합니다."
mkdir -pv $FLAG_DIR
echo -e "${GREEN}정보: 기본 플래그 파일을 생성합니다.${NC}"
echo -e '#Basic C, CXX and LD Flags. (native,O3,pipe)\nCOMMON_FLAGS="-march=native -O3 -pipe"\nexport CFLAGS="${COMMON_FLAGS}"\nexport CXXFLAGS="${COMMON_FLAGS}"\nexport FCFLAGS="${COMMON_FLAGS}"\nexport FFLAGS="${COMMON_FLAGS}"\nexport RUSTFLAGS="-C target-cpu=native -C opt-level=3"\n\nexport LDFLAGS="-Wl,-O1 -Wl,--as-needed"' | tee ${FLAG_DIR}/safe.flags
echo -e "${NC}"
fi
mapfile -t FLAG_FILES < <(ls "$FLAG_DIR"/*.flags 2>/dev/null)
echo -e "${CYAN}==============================================${NC}"
echo -e " 현재 적용된 CFLAGS: ${GREEN}${CFLAGS:-"None"}${NC}"
echo -e "----------------------------------------------"
echo -e " 사용 가능한 플래그 목록:"
for i in "${!FLAG_FILES[@]}"; do
filename=$(basename "${FLAG_FILES[$i]}")
description=$(head -n 1 "${FLAG_FILES[$i]}" | sed 's/^#//g' | xargs)
echo -e " $((i+1))) ${YELLOW}${filename%-6}${NC} \t- ${CYAN}${description}${NC}"
done
echo -e " c) ${GREEN}Clear-Flags${NC} (Unset all)"
echo -e " q) Quit"
echo -e "----------------------------------------------"
read -p " 플래그 번호를 선택하십시오: " choice
if [[ "$choice" == "q" ]]; then
echo "취소되었습니다."
elif [[ "$choice" == "c" ]]; then
unset CFLAGS CXXFLAGS FCFLAGS FFLAGS RUSTFLAGS LDFLAGS MAKEFLAGS COMMON_FLAGS
echo -e "${GREEN}>>> 모든 플래그가 초기화되었습니다.${NC}"
elif [[ "$choice" =~ ^[0-9]+$ ]] && [ "$choice" -ge 1 ] && [ "$choice" -le "${#FLAG_FILES[@]}" ]; then
selected_file="${FLAG_FILES[$((choice-1))]}"
source "$selected_file"
echo -e "${GREEN}>>> [$(basename "$selected_file")] 적용 완료!${NC}"
else
echo -e "${RED}잘못된 선택입니다.${NC}"
fi
unset FLAG_DIR FLAG_FILES
export MAKEFLAGS="-j$(nproc)"
/etc/flags-store/export.list
export CFLAGS="${COMMON_FLAGS}"
export CXXFLAGS="${COMMON_FLAGS}"
export FCFLAGS="${COMMON_FLAGS}"
export FFLAGS="${COMMON_FLAGS}"
export RUSTFLAGS="-C target-cpu=native -C opt-level=3"
/etc/flags-store/01-safe.flag
#Basic (-native -O3 - pipe)
COMMON_FLAGS="-march=native -O3 -pipe"
export LDFLAGS="-Wl,-O1 -Wl,--as-needed"
source /etc/flags-store/export.list
/etc/flag-store/02-lto.flags
#LTO (Basic + -flto=auto -ffat-lto-objects)
COMMON_FLAGS="-march=native -O3 -pipe -flto=auto -ffat-lto-objects"
export LDFLAGS="-flto=auto -Wl,-O1 -Wl,--as-needed"
source /etc/flags-store/export.list
/etc/flags-store/03-graphite.flags
ln -sv /etc/profile.d/build-default-flags.sh /flags-store/03-graphite.flags
/etc/flags-store/04-kernel.flags
#Kernel (-native -O2 - pipe)
COMMON_FLAGS="-march=native -O2 -pipe"
source /etc/flags-store/export.list
/etc/flags-store/99-debug.flags
# DEBUG (Graphite -fopt-info)
COMMON_FLAGS="-march=native -O3 -pipe -flto=auto -ffat-lto-objects -fgraphite-identity -floop-nest-optimize -floop-interchange -fopt-info"
export LDFLAGS="-flto=auto -Wl,-O1 -Wl,--as-needed"
source /etc/flags-store/export.list
Optimize Failed Package
- Glibc: LTO-x (safe: -march=native -O3 -pipe)
- TCL: LTO-x (safe: -march=native -O3 -pipe)
- libtool: LTO-x (safe: -march=native -O3 -pipe)
- OpenSSL: LTO-x (safe: -march=native -O3 -pipe)
- Linux-6.18.10: LTO-x, O3-x (safe: -march=native -O2 -pipe)
- frei0r-2.5.1: LTO-x -march=native-x (safe: -O3 -pipe)
- Node.js-22.22.0: LTO-x (safe: -march=native -O3 -pipe) (–shared-sqlite: x)
- SpiderMonkey from firefox-140.8.0: LTO-x (safe: -march=native -O2 -pipe)
- libaio-0.3.113: LTO=x (safe: -march=native -O3 -pipe)
- FFmpeg-8.0.1: LTO=x (safe: -march=native -O3 -pipe)
- ristretto-0.13.4: Graphite-X (safe: -march=native -O3 -pipe -flto=auto -ffat-lto-objects)
책과 다른 방식의 컴파일이 필요한 패키지
Chapter 8.30. GCC-15.2.0
gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-linux-gnu/15.2.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../configure --prefix=/usr LD=ld \
--enable-languages=c,c++ --enable-default-pie --enable-default-ssp \
--enable-host-pie --disable-multilib --disable-bootstrap \
--disable-fixincludes --with-system-zlib --with-isl --enable-lto
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 15.2.0 (GCC)
BLFS 13.0
Chapter 11. General Utilities
pinentry-1.3.2
sed -i "/FLTK 1/s/3/4/" configure &&
## sed -i '14456 s/1.3/1.4/' configure
sed -i '14466 's/1.3/1.4/' configure