X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=Rules.mak;h=d1995de815d90621c83aa261db7d1e06ae631672;hb=2d604581ef7bf34bd723422402cd38d9d6c71162;hp=b3ebeac1fee6436bd2a2cc8010bca10fdd0c81e7;hpb=4a070d1460456117e4286734682ec6462499edfe;p=oweals%2Fbusybox.git diff --git a/Rules.mak b/Rules.mak index b3ebeac1f..d1995de81 100644 --- a/Rules.mak +++ b/Rules.mak @@ -14,8 +14,8 @@ endif PROG := busybox MAJOR_VERSION :=1 MINOR_VERSION :=1 -SUBLEVEL_VERSION:=0 -EXTRAVERSION :=-pre1 +SUBLEVEL_VERSION:=1 +EXTRAVERSION :=-pre0 VERSION :=$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL_VERSION)$(EXTRAVERSION) BUILDTIME := $(shell TZ=UTC date -u "+%Y.%m.%d-%H:%M%z") @@ -81,9 +81,16 @@ CFLAGS_EXTRA=$(subst ",, $(strip $(EXTRA_CFLAGS_OPTIONS))) #GCCINCDIR:=$(shell gcc -print-search-dirs | sed -ne "s/install: \(.*\)/\1include/gp") WARNINGS=-Wall -Wstrict-prototypes -Wshadow -CFLAGS=-I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir) -funsigned-char +CFLAGS+=-I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir) + ARFLAGS=cru + +# gcc centric. Perhaps fiddle with findstring gcc,$(CC) for the rest +# get the CC MAJOR/MINOR version +CC_MAJOR:=$(shell printf "%02d" $(shell echo __GNUC__ | $(CC) -E -xc - | tail -n 1)) +CC_MINOR:=$(shell printf "%02d" $(shell echo __GNUC_MINOR__ | $(CC) -E -xc - | tail -n 1)) + #-------------------------------------------------------- export VERSION BUILDTIME HOSTCC HOSTCFLAGS CROSS CC AR AS LD NM STRIP CPP ifeq ($(strip $(TARGET_ARCH)),) @@ -108,6 +115,19 @@ check_gcc=$(shell \ then echo "$(1)"; else echo "$(2)"; fi \ fi) +# A not very robust macro to check for available ld flags +check_ld=$(shell \ + if [ "x$(1)" != "x" ]; then \ + $(LD) --help | grep -q \\$(1) && echo "-Wl,$(1)$(2)" ; \ + fi) + +# A not very robust macro to check for available as flags +check_as=$(shell \ + if [ "x$(1)" != "x" ]; then \ + $(AS) --help | grep -q "\\$(1)" && echo "-Wa,$(1)$(2)" ; \ + fi) + + # Setup some shortcuts so that silent mode is silent like it should be ifeq ($(subst s,,$(MAKEFLAGS)),$(MAKEFLAGS)) export MAKE_IS_SILENT=n @@ -117,6 +137,10 @@ export MAKE_IS_SILENT=y SECHO=-@false endif +CFLAGS+=$(call check_gcc,-funsigned-char,) + +CFLAGS+=$(call check_gcc,-mmax-stack-frame=256,) + #-------------------------------------------------------- # Arch specific compiler optimization stuff should go here. # Unless you want to override the defaults, do not set anything @@ -125,17 +149,45 @@ endif # use '-Os' optimization if available, else use -O2 OPTIMIZATION:=$(call check_gcc,-Os,-O2) +ifeq ($(CONFIG_BUILD_AT_ONCE),y) +# gcc 2.95 exits with 0 for "unrecognized option" +ifeq ($(strip $(shell [ $(CC_MAJOR) -ge 3 ] ; echo $$?)),0) + OPTIMIZATION+=$(call check_gcc,--combine,) +endif +OPTIMIZATION+=$(call check_gcc,-funit-at-a-time,) +PROG_CFLAGS+=$(call check_gcc,-fwhole-program,) +endif # CONFIG_BUILD_AT_ONCE + +LIB_LDFLAGS:=$(call check_ld,--enable-new-dtags,) +#LIB_LDFLAGS+=$(call check_ld,--reduce-memory-overheads,) +#LIB_LDFLAGS+=$(call check_ld,--as-needed,) +#LIB_LDFLAGS+=$(call check_ld,--warn-shared-textrel,) + + # Some nice architecture specific optimizations ifeq ($(strip $(TARGET_ARCH)),arm) OPTIMIZATION+=-fstrict-aliasing endif ifeq ($(strip $(TARGET_ARCH)),i386) OPTIMIZATION+=$(call check_gcc,-march=i386,) +# gcc-4.0 and older seem to suffer from these +ifneq ($(strip $(shell [ $(CC_MAJOR) -ge 4 -a $(CC_MINOR) -ge 1 ] ; echo $$?)),0) OPTIMIZATION+=$(call check_gcc,-mpreferred-stack-boundary=2,) OPTIMIZATION+=$(call check_gcc,-falign-functions=0 -falign-jumps=0 -falign-loops=0,\ -malign-functions=0 -malign-jumps=0 -malign-loops=0) +endif # gcc-4.0 and older + +# gcc-4.1 and beyond seem to benefit from these +ifeq ($(strip $(shell [ $(CC_MAJOR) -ge 4 -a $(CC_MINOR) -ge 1 ] ; echo $$?)),0) + # turn off flags which hurt -Os + OPTIMIZATION+=$(call check_gcc,-fno-tree-loop-optimize,) + OPTIMIZATION+=$(call check_gcc,-fno-tree-dominator-opts,) + OPTIMIZATION+=$(call check_gcc,-fno-strength-reduce,) + + OPTIMIZATION+=$(call check_gcc,-fno-branch-count-reg,) +endif # gcc-4.1 and beyond endif -OPTIMIZATIONS:=$(OPTIMIZATION) -fomit-frame-pointer +OPTIMIZATIONS:=$(OPTIMIZATION) $(call check_gcc,-fomit-frame-pointer,) # #-------------------------------------------------------- @@ -161,15 +213,22 @@ else endif ifeq ($(strip $(CONFIG_DEBUG)),y) CFLAGS +=$(WARNINGS) -g -D_GNU_SOURCE - LDFLAGS +=-Wl,-warn-common + LDFLAGS += $(call check_ld,-warn-common,) STRIPCMD:=/bin/true -Not_stripping_since_we_are_debugging else CFLAGS+=$(WARNINGS) $(OPTIMIZATIONS) -D_GNU_SOURCE -DNDEBUG - LDFLAGS += -Wl,-warn-common + LDFLAGS += $(call check_ld,-warn-common,) + LDFLAGS += $(call check_ld,--sort-common,) STRIPCMD:=$(STRIP) -s --remove-section=.note --remove-section=.comment endif ifeq ($(strip $(CONFIG_STATIC)),y) - LDFLAGS += --static + LDFLAGS += $(call check_ld,--static,) +#else +# LIBRARIES += -ldl +endif + +ifeq ($(strip $(CONFIG_BUILD_LIBBUSYBOX)),y) + CFLAGS_PIC:= $(call check_gcc,-fPIC,) endif ifeq ($(strip $(CONFIG_SELINUX)),y) @@ -197,4 +256,16 @@ endif # have a chance of winning. CFLAGS += $(CFLAGS_EXTRA) +#------------------------------------------------------------ +# Installation options +ifeq ($(strip $(CONFIG_INSTALL_APPLET_HARDLINKS)),y) +INSTALL_OPTS=--hardlinks +endif +ifeq ($(strip $(CONFIG_INSTALL_APPLET_SYMLINKS)),y) +INSTALL_OPTS=--symlinks +endif +ifeq ($(strip $(CONFIG_INSTALL_APPLET_DONT)),y) +INSTALL_OPTS= +endif + .PHONY: dummy