6b433aede1
This patch adds -ffunction-sections and -fdata-sections to the 'release' CFLAGS so each function and data is place into its own section in the output file. It also adds --gc-section to the 'release' LDFLAGS so the linker removes the sections which are not referenced. This patch also adds -ffunction-sections and -fdata-sections options to CFLAGS from build_newlib.sh. This increases newlib static libraries size, however, the Contiki image shrinks even more since --gc-section removes "dead code" from newlib. As a practical effect, all unused function and data (as well as sections such as .eh_frame) are striped out from the final elf binary. This shrinks our release binary drastically. Finally, to prevent --gc-section from removing .multiboot section, this patch adds KEEP(*(.multiboot)) to quarkX1000.ld.
27 lines
691 B
Makefile
27 lines
691 B
Makefile
CONTIKI_CPU_DIRS += . init/common
|
|
|
|
CONTIKI_SOURCEFILES += gdt.c helpers.S idt.c cpu.c
|
|
|
|
CC = gcc
|
|
LD = gcc
|
|
AS = as
|
|
OBJCOPY = objcopy
|
|
SIZE = size
|
|
STRIP = strip
|
|
|
|
CFLAGS += -Wall -fno-asynchronous-unwind-tables
|
|
LDFLAGS += -Wl,-Map=contiki-$(TARGET).map,--build-id=none
|
|
|
|
ifeq ($(BUILD_RELEASE),1)
|
|
CFLAGS += -Os -fno-strict-aliasing -ffunction-sections -fdata-sections
|
|
# XXX: --gc-sections can be very tricky sometimes. If somehow the release
|
|
# binary seems to be broken, check if removing this option fixes the issue.
|
|
LDFLAGS += -Wl,--strip-all,--gc-sections
|
|
else
|
|
ifeq ($(findstring clang,$(CC)),clang)
|
|
CFLAGS += -O0 -g
|
|
else
|
|
CFLAGS += -Og -ggdb3
|
|
endif
|
|
endif
|