| 양쪽 이전 판 이전 판 다음 판 | 이전 판 |
| linuxfromscratch:13.0:start [2026/03/25 17:44] – baecy | linuxfromscratch:13.0:start [2026/03/31 15:31] (현재) – [Optimize Failed Package] baecy |
|---|
| ==== LFS 13.0 ==== | ==== LFS 13.0 ==== |
| === Optimize Failed Package === | === Scripts === |
| | /etc/profile.d/build-default-flags.sh |
| | <codeprism lang=bash> |
| | # 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' |
| | </codeprism> |
| | /etc/flags-store/toggle-flags.sh |
| | <codeprism lang=bash> |
| | #!/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)" |
| | </codeprism> |
| | /etc/flags-store/export.list |
| | <codeprism lang=bash> |
| | 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" |
| | </codeprism> |
| | /etc/flags-store/01-safe.flag |
| | <codeprism lang=bash> |
| | #Basic (-native -O3 - pipe) |
| | COMMON_FLAGS="-march=native -O3 -pipe" |
| | export LDFLAGS="-Wl,-O1 -Wl,--as-needed" |
| | source /etc/flags-store/export.list |
| | </codeprism> |
| | /etc/flag-store/02-lto.flags |
| | <codeprism lang=bash> |
| | #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 |
| | </codeprism> |
| | /etc/flags-store/03-graphite.flags |
| | <codeprism lang=bash> |
| | ln -sv /etc/profile.d/build-default-flags.sh /flags-store/03-graphite.flags |
| | </codeprism> |
| | /etc/flags-store/04-kernel.flags |
| | <codeprism lang=bash> |
| | #Kernel (-native -O2 - pipe) |
| | COMMON_FLAGS="-march=native -O2 -pipe" |
| | source /etc/flags-store/export.list |
| | </codeprism> |
| | /etc/flags-store/99-debug.flags |
| | <codeprism lang=bash> |
| | # 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 |
| | </codeprism> |
| | |
| | ==== Optimize Failed Package ==== |
| * Glibc: LTO-x (safe: -march=native -O3 -pipe) | * Glibc: LTO-x (safe: -march=native -O3 -pipe) |
| * TCL: LTO-x (safe: -march=native -O3 -pipe) | * TCL: LTO-x (safe: -march=native -O3 -pipe) |
| * OpenSSL: 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) | * 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 === | ==== 책과 다른 방식의 컴파일이 필요한 패키지 ==== |
| | |
| | ==== Chapter 8.30. GCC-15.2.0 ==== |
| <codeprism lang=bash cmdout=2-12> | <codeprism lang=bash cmdout=2-12> |
| gcc -v | gcc -v |