From 17c7894389449d0732f4e490a32cc849c3e336e7 Mon Sep 17 00:00:00 2001 From: Manuel Canales Esparcia Date: Wed, 3 May 2006 22:03:58 +0000 Subject: [PATCH] POC for optimizations code. --- LFS/master.sh | 1 + common/common-functions | 33 ++++++++++++++++++++-- common/config | 12 +++++--- common/func_validate_configs.sh | 9 +++--- common/opt_config | 50 +++++++++++++++++++++++++++++++++ common/opt_override | 4 +++ master.sh | 6 ++++ 7 files changed, 104 insertions(+), 11 deletions(-) create mode 100644 common/opt_config create mode 100644 common/opt_override diff --git a/LFS/master.sh b/LFS/master.sh index 7fb6966..b3615e3 100755 --- a/LFS/master.sh +++ b/LFS/master.sh @@ -215,6 +215,7 @@ chapter6_Makefiles() { if [ "$vrs" != "" ] ; then FILE="$name-$vrs.tar.*" wrt_unpack2 "$FILE" + [[ "$OPTIMIZE" = "1" ]] && wrt_optimize "$name" fi # In the mount of kernel filesystems we need to set LFS diff --git a/common/common-functions b/common/common-functions index 3591c1b..76b913d 100644 --- a/common/common-functions +++ b/common/common-functions @@ -198,8 +198,6 @@ HEADER="# This file is automatically generated by jhalfs-X - - #----------------------------------# wrt_target() { # Create target and initialize log file #----------------------------------# @@ -259,7 +257,6 @@ EOF } - #----------------------------------# wrt_target_vars() { # Target vars for hlfs (cross-build method) #----------------------------------# @@ -273,6 +270,36 @@ EOF } +#----------------------------------# +wrt_optimize() { # Apply pkg specific opt's to build +#----------------------------------# + local pkg=$1 + local optLvl optVal OPT_VAR + + optLvl=`awk -v pkg="$pkg" '$1 == pkg { print $2 }' $JHALFSDIR/opt_override` + if [[ "$optLvl" = "" ]] ; then + optLvl=$DEF_OPT_LVL; + fi + + for OPT_VAR in CFLAGS CXXFLAGS LDFLAGS; do + eval optVal=\$${OPT_VAR}_$optLvl + + if [[ "$optVal" != "unset" ]]; then + case $pkg in + *zlib* ) [[ "$OPT_VAR" != "LDFLAGS" ]] && optVal="$optVal -fPIC" ;; + esac +( +cat << EOF + @echo "export $OPT_VAR=\"$optVal\"" >> envars +EOF +) >> $MKFILE.tmp + else + continue + fi + done +} + + #----------------------------------# wrt_run_as_su() { # Execute script inside time { }, footer to log file #----------------------------------# diff --git a/common/config b/common/config index cae590f..593f300 100644 --- a/common/config +++ b/common/config @@ -11,6 +11,10 @@ declare -r LOG=000-masterscript.log #--- Mount point for the build BUILDDIR=/mnt/build_dir +# Create SBU and disk usage report 0(no)/1(yes) +# NOTE: requires to have bc installed on the host +REPORT=1 + #=== Getting packages === #--- Download the source packages 0(no)/1(yes) GETPKG=0 @@ -30,6 +34,10 @@ SERVER=ftp://ftp.lfs-matrix.net # In BLFS the Makefile can't be run automatically RUNMAKE=0 +#--- Optimize the build? 0(no)/1(yes) +# Optimization values are set in opt_config and opt_override +OPTIMIZE=1 + #--- Run test suites [0-3] # 0 = none # 1 = only chapter06 Glibc, GCC and Binutils testsuites @@ -41,10 +49,6 @@ RUNMAKE=0 # (in CLFS, alias to 2) TEST=1 -# Create SBU and disk usage report 0(no)/1(yes) -# NOTE: requires to have bc installed on the host -REPORT=1 - #--- Run the stripping phases 0(no)/1(yes) STRIP=1 diff --git a/common/func_validate_configs.sh b/common/func_validate_configs.sh index 4b4b20d..8b260c6 100644 --- a/common/func_validate_configs.sh +++ b/common/func_validate_configs.sh @@ -84,10 +84,10 @@ validate_config() { # Are the config values sane (within reason) inline_doc # First internal variables, then the ones that change the book's flavour, and lastly system configuration variables - local -r blfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE GETPKG DEPEND TEST" - local -r hlfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE GETPKG RUNMAKE MODEL GRSECURITY_HOST TEST REPORT COMPARE RUN_ICA RUN_FARCE ITERATIONS STRIP FSTAB CONFIG KEYMAP PAGE TIMEZONE LANG LC_ALL" - local -r clfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE GETPKG RUNMAKE METHOD ARCH TARGET TEST REPORT COMPARE RUN_ICA RUN_FARCE ITERATIONS STRIP FSTAB BOOT_CONFIG CONFIG KEYMAP VIMLANG PAGE TIMEZONE LANG" - local -r lfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE GETPKG RUNMAKE TEST REPORT COMPARE RUN_ICA RUN_FARCE ITERATIONS STRIP FSTAB CONFIG VIMLANG PAGE TIMEZONE LANG" + local -r blfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE GETPKG DEPEND TEST OPTIMIZE" + local -r hlfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE GETPKG RUNMAKE MODEL GRSECURITY_HOST TEST OPTIMIZE REPORT COMPARE RUN_ICA RUN_FARCE ITERATIONS STRIP FSTAB CONFIG KEYMAP PAGE TIMEZONE LANG LC_ALL" + local -r clfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE GETPKG RUNMAKE METHOD ARCH TARGET TEST OPTIMIZE REPORT COMPARE RUN_ICA RUN_FARCE ITERATIONS STRIP FSTAB BOOT_CONFIG CONFIG KEYMAP VIMLANG PAGE TIMEZONE LANG" + local -r lfs_PARAM_LIST="BOOK BUILDDIR SRC_ARCHIVE GETPKG RUNMAKE TEST OPTIMIZE REPORT COMPARE RUN_ICA RUN_FARCE ITERATIONS STRIP FSTAB CONFIG VIMLANG PAGE TIMEZONE LANG" local -r ERROR_MSG_pt1='The variable \"${L_arrow}${config_param}${R_arrow}\" value ${L_arrow}${BOLD}${!config_param}${R_arrow} is invalid,' local -r ERROR_MSG_pt2=' check the config file ${BOLD}${GREEN}\<$(echo $PROGNAME | tr [a-z] [A-Z])/config\> or \${OFF}' @@ -205,6 +205,7 @@ inline_doc RUN_FARCE) [[ "$COMPARE" = "1" ]] && validate_against_str "x0x x1x" ;; ITERATIONS) [[ "$COMPARE" = "1" ]] && validate_against_str "x2x x3x x4x x5x" ;; TEST) validate_against_str "x0x x1x x2x x3x" ;; + OPTIMIZE) validate_against_str "x0x x1x" ;; STRIP) validate_against_str "x0x x1x" ;; VIMLANG) validate_against_str "x0x x1x" ;; DEPEND) validate_against_str "x0x x1x x2x" ;; diff --git a/common/opt_config b/common/opt_config new file mode 100644 index 0000000..bfb16bb --- /dev/null +++ b/common/opt_config @@ -0,0 +1,50 @@ +##### +# +# optimization configuration file +# +##### + +#--- Default optimization level +# This level is overridden by definitions in common/def_opt_override; +# in this way, packages can be tuned independently. For example, +# if you have trouble building a package at level 3, add it to +# common/def_opt_override as an alternate level. +# +# Optimization levels need not be numeric; custom strings +# can be defined. +# For example: CFLAGS_myLevel="-O3 -pipe" +# cat "fooPkg myLevel" >> common/def_opt_override +DEF_OPT_LVL=3 + +#--- Optimization level definitions +# Usage: - Apply optimization string at any given level +# - "unset" will cause the variable to be not set +# instead of set to null +#--- LEVEL 0 +# WARNING: Do not edit this level unless you know what you are +# doing. By default, this is set to affect packages +# which may have problems with optimization. +CFLAGS_0="unset" +CXXFLAGS_0=$CFLAGS_0 +LDFLAGS_0="unset" + + +#--- LEVEL 1 +CFLAGS_1="-O2 -pipe" +CXXFLAGS_1=$CFLAGS_1 +LDFLAGS_1="" + +#--- LEVEL 2 +CFLAGS_2="-O3 -pipe" +CXXFLAGS_2=$CFLAGS_2 +LDFLAGS_2="" + +#--- LEVEL 3 +CFLAGS_3="-O3 -march=pentium4 -pipe -s" +CXXFLAGS_3=$CFLAGS_3 +LDFLAGS_3="-s" + +#--- LEVEL noOpt_noSymbols +CFLAGS_noOpt_noSymbols="-s" +CXXFLAGS_noOpt_noSymbols=$CFLAGS_noOpt_noSymbols +LDFLAGS_noOpt_noSymbols="-s" diff --git a/common/opt_override b/common/opt_override new file mode 100644 index 0000000..1c7dae8 --- /dev/null +++ b/common/opt_override @@ -0,0 +1,4 @@ +binutils 0 +gcc 0 +glibc 0 +grub 0 diff --git a/master.sh b/master.sh index 20331f3..6db7a42 100755 --- a/master.sh +++ b/master.sh @@ -56,6 +56,11 @@ source $COMMON_DIR/config [[ $? > 0 ]] && echo "$COMMON_DIR/conf did not load.." && exit [[ $VERBOSITY > 0 ]] && echo "OK" # +[[ $VERBOSITY > 0 ]] && echo -n "Loading optimization config..." +source $COMMON_DIR/opt_config +[[ $? > 0 ]] && echo " $COMMON_DIR/opt_config did not load.." && exit +[[ $VERBOSITY > 0 ]] && echo "OK" +# [[ $VERBOSITY > 0 ]] && echo -n "Loading compare module..." source $COMMON_DIR/func_compare.sh [[ $? > 0 ]] && echo "$COMMON_DIR/func_compare.sh did not load.." && exit @@ -468,6 +473,7 @@ fi if [[ "$PWD" != "$JHALFSDIR" ]]; then cp $COMMON_DIR/makefile-functions $JHALFSDIR/ + [[ "$OPTIMIZE" = "1" ]] && cp $COMMON_DIR/opt_override $JHALFSDIR/ if [[ "$COMPARE" != "0" ]] ; then mkdir -p $JHALFSDIR/extras cp extras/* $JHALFSDIR/extras