diff options
-rw-r--r-- | Makefile | 3 | ||||
-rwxr-xr-x | configure | 66 |
2 files changed, 57 insertions, 12 deletions
diff --git a/Makefile b/Makefile index b9b78078..2cd2342a 100644 --- a/Makefile +++ b/Makefile @@ -80,6 +80,9 @@ include/bits/alltypes.h: include/bits/alltypes.h.in include/alltypes.h.in tools/ src/ldso/dynlink.lo: arch/$(ARCH)/reloc.h +OPTIMIZE_SRCS = $(wildcard $(OPTIMIZE_GLOBS:%=src/%)) +$(OPTIMIZE_SRCS:%.c=%.o) $(OPTIMIZE_SRCS:%.c=%.lo): CFLAGS += -O3 + %.o: $(ARCH)/%.s $(CC) $(CFLAGS_ALL_STATIC) -c -o $@ $< diff --git a/configure b/configure index b679986f..327863c8 100755 --- a/configure +++ b/configure @@ -24,6 +24,7 @@ System types: --host=HOST same as --target Optional features: + --enable-optimize=... optimize listed components for speed over size [auto] --enable-debug build with debugging information [disabled] --enable-warnings build with recommended warnings flags [disabled] --enable-gcc-wrapper build musl-gcc toolchain wrapper [auto] @@ -104,6 +105,7 @@ fi CFLAGS_C99FSE= CFLAGS_AUTO= LDFLAGS_AUTO= +OPTIMIZE_GLOBS= prefix=/usr/local/musl exec_prefix='$(prefix)' bindir='$(exec_prefix)/bin' @@ -111,6 +113,7 @@ libdir='$(prefix)/lib' includedir='$(prefix)/include' syslibdir='/lib' target= +optimize=auto debug=no warnings=no shared=yes @@ -129,6 +132,9 @@ case "$arg" in --disable-shared|--enable-shared=no) shared=no ;; --enable-static|--enable-static=yes) static=yes ;; --disable-static|--enable-static=no) static=no ;; +--enable-optimize) optimize=yes ;; +--enable-optimize=*) optimize=${arg#*=} ;; +--disable-optimize) optimize=no ;; --enable-debug|--enable-debug=yes) debug=yes ;; --disable-debug|--enable-debug=no) debug=no ;; --enable-warnings|--enable-warnings=yes) warnings=yes ;; @@ -230,14 +236,57 @@ tryflag CFLAGS_C99FSE -fexcess-precision=standard \ || { test "$ARCH" = i386 && tryflag CFLAGS_C99FSE -ffloat-store ; } tryflag CFLAGS_C99FSE -frounding-math + +# +# If debugging is explicitly enabled, don't auto-enable optimizations +# +if test "$debug" = yes ; then +CFLAGS_AUTO=-g +test "$optimize" = auto && optimize=no +fi + # -# Setup basic default CFLAGS: debug, optimization, and -pipe +# Possibly add a -O option to CFLAGS and select modules to optimize with +# -O3 based on the status of --enable-optimize and provided CFLAGS. # -if fnmatch '-O*|*\ -O*' "$CFLAGS_AUTO $CFLAGS" ; then : +printf "checking for optimization settings... " +case "x$optimize" in +xauto) +if fnmatch '-O*|*\ -O*' "$CFLAGS_AUTO $CFLAGS" ; then +printf "using provided CFLAGS\n" ;optimize=no else -tryflag CFLAGS_AUTO -Os || tryflag CFLAGS_AUTO -O2 +printf "using defaults\n" ; optimize=yes fi -test "x$debug" = xyes && CFLAGS_AUTO="-g" +;; +xsize|xnone) printf "minimize size\n" ; optimize=size ;; +xno|x) printf "disabled\n" ; optimize=no ;; +*) printf "custom\n" ;; +esac + +test "$optimize" = no || tryflag CFLAGS_AUTO -Os || tryflag CFLAGS_AUTO -O2 +test "$optimize" = yes && optimize="internal,malloc,math,string" + +if fnmatch 'no|size' "$optimize" ; then : +else +printf "components to be optimized for speed:" +while test "$optimize" ; do +case "$optimize" in +*,*) this=${optimize%%,*} optimize=${optimize#*,} ;; +*) this=$optimize optimize= +esac +printf " $this" +case "$this" in +*/*.c) ;; +*/*) this=$this*.c ;; +*) this=$this/*.c ;; +esac +OPTIMIZE_GLOBS="$OPTIMIZE_GLOBS $this" +done +OPTIMIZE_GLOBS=${OPTIMIZE_GLOBS# } +printf "\n" +fi + +# Always try -pipe tryflag CFLAGS_AUTO -pipe # @@ -267,14 +316,6 @@ tryflag CFLAGS_AUTO -fno-asynchronous-unwind-tables tryflag CFLAGS_AUTO -Wa,--noexecstack # -# Some optimization levels add bloated alignment that hurt performance -# -tryflag CFLAGS_AUTO -falign-functions=1 -tryflag CFLAGS_AUTO -falign-labels=1 -tryflag CFLAGS_AUTO -falign-loops=1 -tryflag CFLAGS_AUTO -falign-jumps=1 - -# # On x86, make sure we don't have incompatible instruction set # extensions enabled by default. This is bad for making static binaries. # We cheat and use i486 rather than i386 because i386 really does not @@ -366,6 +407,7 @@ CPPFLAGS = $CPPFLAGS LDFLAGS = $LDFLAGS_AUTO $LDFLAGS CROSS_COMPILE = $CROSS_COMPILE LIBCC = $LIBCC +OPTIMIZE_GLOBS = $OPTIMIZE_GLOBS EOF test "x$static" = xno && echo "STATIC_LIBS =" test "x$shared" = xno && echo "SHARED_LIBS =" |