- added "-fomit-frame-pointer" to the normal build
authorBernd Petrovitsch <bernd@firmix.at>
Sat, 20 Oct 2007 19:27:33 +0000 (19:27 +0000)
committerBernd Petrovitsch <bernd@firmix.at>
Sat, 20 Oct 2007 19:27:33 +0000 (19:27 +0000)
. start a new era on configuration:
We introduce a new higher level configuratino layer to enable or disable
features/configuration options:

Rationale: Take "debug build" as prime example.
To have a real debug build, you want (at least) "-g" in CFLAGS and no
stripping. It is cumbersome and error prone to edit that by hand (or pass
parameters to the "make") and with a new options somewhere (e.g.
"-fomit-frame-pointer" from above) one has to adjust that.
For these (so called) high leveloptions, I started with
---  snip  ----
# activate debugging with 1 or deactivate with 0
DEBUG ?= 0

# the optimize option to be set for gcc
OPTIMIZE ?= -O2

# enable mudflap with 1 or deactivate with 0
# you need a recent enough gcc and the libmudflap installed
MUDFLAP ?= 0
---  snip  ----
Feel free to propose other useful ones (and submit patches;-).

The lower part, which is basically the former Makefile.inc, gets now "ifeq"
etc. so that a simple "make DEBUG=1" makes a real debug build.
ANd this is available and usefule to the plugin Makeifle's too of course.

Makefile.inc

index 784143c..53572b4 100644 (file)
@@ -1,3 +1,26 @@
+######################
+#
+# Highlevel configuration options for all
+#
+# $Id: Makefile.inc,v 1.36 2007/10/20 19:27:33 bernd67 Exp $
+#
+
+# activate debugging with 1 or deactivate with 0
+DEBUG ?= 0
+
+# the optimize option to be set for gcc
+OPTIMIZE ?= -O2
+
+# enable mudflap with 1 or deactivate with 0
+# you need a recent enough gcc and the libmudflap installed
+MUDFLAP ?= 0
+
+
+######################
+#
+# Lowlevel options and rules
+#
+
 # programs
 CCACHE ?=       $(shell which ccache 2> /dev/null)
 ifeq ($(origin CC),default)
@@ -5,7 +28,11 @@ CC =          $(CCACHE) gcc
 else
 CC ?=          $(CCACHE) gcc
 endif
+ifeq ($(DEBUG),0)
 STRIP ?=       strip
+else
+STRIP ?=       :
+endif
 BISON ?=       bison
 FLEX ?=                flex
 TAGCMD ?=      etags
@@ -21,7 +48,10 @@ EXENAME ?= olsrd
 CFGNAME ?= $(EXENAME).conf
 CFGFILE ?= $(ETCDIR)/$(CFGNAME)
 
-CPPFLAGS =     -Isrc -I$(TOPDIR)/src
+CPPFLAGS =     -Isrc
+ifneq ($(TOPDIR),.)
+CPPFLAGS +=    -I$(TOPDIR)/src
+endif
 
 # add gcc warnings and optimizations if CFLAGS not set
 ifndef CFLAGS
@@ -40,7 +70,10 @@ WARNINGS +=  -Wmissing-format-attribute
 WARNINGS +=    -Wno-multichar
 WARNINGS +=    -Wno-deprecated-declarations
 #WARNINGS +=   -Wredundant-decls
+ifeq ($(MUDFLAP),0)
+# work around a bug in gcc-4.*
 WARNINGS +=    -Wnested-externs
+endif
 # Alas, htons() triggers this so we can't seriously activate it.
 #WARNINGS +=   -Wunreachable-code
 WARNINGS +=    -Winline
@@ -48,18 +81,23 @@ WARNINGS += -Wdisabled-optimization
 #WARNINGS +=   -Werror
 WARNINGS +=    -finline-functions-called-once
 WARNINGS +=    -fearly-inlining
+ifeq ($(DEBUG),0)
+WARNINGS +=    -fomit-framepointers
+endif
 # we have small inline functions in src/lq_route.c which should always be inlined
 WARNINGS +=    -finline-limit=50
 WARNINGS :=    $(shell CC="$(CC)" $(TOPDIR)/gcc-warnings $(WARNINGS))
 endif
 CFLAGS +=      $(WARNINGS)
-CFLAGS +=      -O2
-#CFLAGS +=     -g
+CFLAGS +=      $(OPTIMIZE)
 CFLAGS +=      $(EXTRA_CFLAGS)
 
 # Must be specified along with -lpthread on linux
 CPPFLAGS +=    $(OS_CFLAG_PTHREAD)
 endif
+ifneq ($(MUDFLAP),0)
+CFLAGS +=      -fmudflapth
+endif
 
 ifdef OLSRD_PLUGIN
 # c and ld flags for libraries (plugins)
@@ -70,13 +108,17 @@ else
 # c and ld flags for main
 LDFLAGS +=     -Wl,-export-dynamic 
 endif
+ifneq ($(MUDFLAP),0)
+LIBS +=                -lmudflapth
+endif
+LIBS +=                $(OS_LIB_PTHREAD)
 
 ###################################
 #
 # options to save space on small systems
 
 # we have plugins with the old interface
-CPPFLAGS +=    -DSUPPORT_OLD_PLUGIN_VERSIONS=1
+#CPPFLAGS +=   -DSUPPORT_OLD_PLUGIN_VERSIONS=1
 
 # search sources and headers in current dir and in src/
 SRCS +=                $(wildcard src/*.c *.c)
@@ -101,10 +143,11 @@ endif
 OBJS +=                $(SRCS:%.c=%.o)
 
 # debugging or non-debugging flags
-ifdef DEBUG
+ifeq ($(DEBUG),1)
 CPPFLAGS +=    -DDEBUG
-endif
-ifdef NODEBUG
+CFLAGS +=      -g
+else
+CPPFLAGS +=    -DNDEBUG
 CPPFLAGS +=    -DNODEBUG
 endif