From e422bcb9b9e3aea5117f76711c9fb336e6fc8a0d Mon Sep 17 00:00:00 2001
From: baujc <baujc@cwe-513-vol554.cern.ch>
Date: Mon, 25 Feb 2019 16:42:43 +0100
Subject: [PATCH] Add in Kconfig the selection of the optimization compilation
 flags

---
 Kconfig                         | 34 +++++++++++++++++++++++++++++++++
 userspace/libsdb/Makefile       |  8 +++++++-
 userspace/libwr/Makefile        | 10 ++++++++--
 userspace/tools/Makefile        |  9 ++++++++-
 userspace/wrs_watchdog/Makefile |  8 +++++++-
 userspace/wrsw_hal/Makefile     |  9 ++++++++-
 userspace/wrsw_rtud/Makefile    |  8 +++++++-
 7 files changed, 79 insertions(+), 7 deletions(-)

diff --git a/Kconfig b/Kconfig
index 43c7819d1..f46774e9d 100644
--- a/Kconfig
+++ b/Kconfig
@@ -1064,3 +1064,37 @@ config RTU_HP_MASK_VAL
 endmenu
 
 source Kconfig_vlans.in
+
+choice
+	prompt "Compilation optimization"
+    
+    config OPTIMIZATION_SPEED
+        boolean "Execution time (-O2)"
+        help
+           GCC performs nearly all supported optimizations that do not involve a space-speed tradeoff.
+           
+     config OPTIMIZATION_SIZE_SPEED
+        boolean "Size and execution time (-Os)"
+        help
+           Optimize for size. Enables all -O2 optimizations except those that often increase code size.
+           
+     config OPTIMIZATION_DEBUGGING
+        boolean "Debugging (-Og -ggdb)"
+        help
+           Should be the optimization level of choice for the standard edit-compile-debug cycle
+
+     config OPTIMIZATION_NONE_DEBUGGING
+        boolean "Debugging without optimization(-ggdb)"
+        help
+           Compile without optimization and with debug informations 
+endchoice
+
+config OPTIMIZATION
+	string
+	default "-Os" if OPTIMIZATION_SIZE_SPEED
+	default "-O2" if OPTIMIZATION_SPEED
+	default "-Og -ggdb" if OPTIMIZATION_DEBUGGING
+	default "-ggdb" if OPTIMIZATION_NONE_DEBUGGING
+	default ""
+
+
diff --git a/userspace/libsdb/Makefile b/userspace/libsdb/Makefile
index 469967349..919e60c8c 100644
--- a/userspace/libsdb/Makefile
+++ b/userspace/libsdb/Makefile
@@ -1,4 +1,7 @@
 
+# We are now Kconfig-based
+-include ../../.config
+
 LINUX ?= /lib/modules/$(shell uname -r)/build
 
 # If we compile for the kernel, we need to include real kernel headers.
@@ -19,7 +22,10 @@ OBJDUMP         = $(CROSS_COMPILE)objdump
 # calculate endianness at compile time
 ENDIAN := $(shell ./check-endian $(CC))
 
-CFLAGS = -Wall -ggdb -O2
+export CFLAGS_OPTIMIZATION:= ${shell echo $(CONFIG_OPTIMIZATION)}
+
+CFLAGS += $(CFLAGS_OPTIMIZATION)
+CFLAGS += -Wall
 CFLAGS += -I../include/linux -I../include # for <sdb.h>
 CFLAGS += -ffunction-sections -fdata-sections
 CFLAGS += -Wno-pointer-sign
diff --git a/userspace/libwr/Makefile b/userspace/libwr/Makefile
index 33eef1467..d3ae6145d 100644
--- a/userspace/libwr/Makefile
+++ b/userspace/libwr/Makefile
@@ -1,3 +1,7 @@
+
+# We are now Kconfig-based
+-include ../../.config
+
 OBJS = init.o fpga_io.o util.o pps_gen.o i2c.o shw_io.o i2c_bitbang.o \
        i2c_fpga_reg.o pio.o libshw_i2c.o i2c_sfp.o fan.o i2c_io.o hwiu.o \
        ptpd_netif.o hal_client.o hal_minirpc.o\
@@ -21,8 +25,10 @@ STRIP           = $(CROSS_COMPILE)strip
 OBJCOPY         = $(CROSS_COMPILE)objcopy
 OBJDUMP         = $(CROSS_COMPILE)objdump
 
-CFLAGS = -Wall -I. -O2 -ggdb \
-	-Wstrict-prototypes \
+export CFLAGS_OPTIMIZATION:= ${shell echo $(CONFIG_OPTIMIZATION)}
+
+CFLAGS += $(CFLAGS_OPTIMIZATION)
+CFLAGS += -Wall -I. -Wstrict-prototypes \
 	-DLIBWR_INTERNAL \
 	-I./include \
 	-I../include \
diff --git a/userspace/tools/Makefile b/userspace/tools/Makefile
index 0e2bfd094..c48f58bac 100644
--- a/userspace/tools/Makefile
+++ b/userspace/tools/Makefile
@@ -1,3 +1,7 @@
+
+# We are now Kconfig-based
+-include ../../.config
+
 TOOLS = rtu_stat wr_mon wr_phytool wrs_pps_control spll_dbg_proxy load-lm32 load-virtex com
 TOOLS += mapper wmapper
 TOOLS += wrs_version wr_date lm32-vuart wrs_pstats
@@ -28,7 +32,10 @@ OBJCOPY         = $(CROSS_COMPILE)objcopy
 OBJDUMP         = $(CROSS_COMPILE)objdump
 
 # LOTs of includes
-CFLAGS =  -O2 -g -Wall \
+export CFLAGS_OPTIMIZATION:= ${shell echo $(CONFIG_OPTIMIZATION)}
+
+CFLAGS += $(CFLAGS_OPTIMIZATION)
+CFLAGS += -Wall \
 		-Wstrict-prototypes \
 		-I$(LINUX)/arch/arm/mach-at91/include \
 		-I../wrsw_rtud \
diff --git a/userspace/wrs_watchdog/Makefile b/userspace/wrs_watchdog/Makefile
index 99a034093..f7654a8ad 100644
--- a/userspace/wrs_watchdog/Makefile
+++ b/userspace/wrs_watchdog/Makefile
@@ -1,4 +1,7 @@
 
+# We are now Kconfig-based
+-include ../../.config
+
 OBJS = wrs_watchdog.o
 
 BINARY = wrs_watchdog
@@ -16,7 +19,10 @@ STRIP           = $(CROSS_COMPILE)strip
 OBJCOPY         = $(CROSS_COMPILE)objcopy
 OBJDUMP         = $(CROSS_COMPILE)objdump
 
-CFLAGS = -O -g -Wall \
+export CFLAGS_OPTIMIZATION:= ${shell echo $(CONFIG_OPTIMIZATION)}
+
+CFLAGS += $(CFLAGS_OPTIMIZATION)
+CFLAGS = -Wall \
 	-Wstrict-prototypes \
 	-I../include \
 	-I../libwr/include \
diff --git a/userspace/wrsw_hal/Makefile b/userspace/wrsw_hal/Makefile
index edbb95dcd..784b6a38d 100644
--- a/userspace/wrsw_hal/Makefile
+++ b/userspace/wrsw_hal/Makefile
@@ -1,4 +1,7 @@
 
+# We are now Kconfig-based
+-include ../../.config
+
 OBJS = hal_exports.o hal_main.o hal_ports.o hal_timing.o
 
 BINARY = wrsw_hal
@@ -16,7 +19,10 @@ STRIP           = $(CROSS_COMPILE)strip
 OBJCOPY         = $(CROSS_COMPILE)objcopy
 OBJDUMP         = $(CROSS_COMPILE)objdump
 
-CFLAGS = -O -g -Wall \
+export CFLAGS_OPTIMIZATION:= ${shell echo $(CONFIG_OPTIMIZATION)}
+
+CFLAGS += $(CFLAGS_OPTIMIZATION)
+CFLAGS += -Wall \
 	-Wstrict-prototypes \
 	-I../include \
 	-I../libwr/include \
@@ -34,6 +40,7 @@ LDFLAGS = -L../libwr -L../mini-rpc \
 all: $(BINARY)
 
 $(BINARY): $(OBJS)
+	pwd
 	$(CC) -o $@ $^ $(LDFLAGS)
 
 install: all
diff --git a/userspace/wrsw_rtud/Makefile b/userspace/wrsw_rtud/Makefile
index 34378d9e3..419be91ab 100644
--- a/userspace/wrsw_rtud/Makefile
+++ b/userspace/wrsw_rtud/Makefile
@@ -1,4 +1,7 @@
 
+# We are now Kconfig-based
+-include ../../.config
+
 PROGRAM		= wrsw_rtud
 SRCFILES	= rtu_drv.c rtu_ext_drv.c rtu_hash.c rtu_fd.c rtud.c \
 			rtud_exports.c utils.c
@@ -17,7 +20,10 @@ STRIP           = $(CROSS_COMPILE)strip
 OBJCOPY         = $(CROSS_COMPILE)objcopy
 OBJDUMP         = $(CROSS_COMPILE)objdump
 
-CFLAGS = -O2 -Wall -ggdb  \
+export CFLAGS_OPTIMIZATION:= ${shell echo $(CONFIG_OPTIMIZATION)}
+
+CFLAGS += $(CFLAGS_OPTIMIZATION)
+CFLAGS = -Wall  \
 	-Wstrict-prototypes \
 	-I../mini-rpc \
 	-I../include \
-- 
GitLab