x86: Improve release binary size
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.
This commit is contained in:
parent
c796e270bf
commit
6b433aede1
3 changed files with 7 additions and 5 deletions
|
@ -13,8 +13,10 @@ CFLAGS += -Wall -fno-asynchronous-unwind-tables
|
||||||
LDFLAGS += -Wl,-Map=contiki-$(TARGET).map,--build-id=none
|
LDFLAGS += -Wl,-Map=contiki-$(TARGET).map,--build-id=none
|
||||||
|
|
||||||
ifeq ($(BUILD_RELEASE),1)
|
ifeq ($(BUILD_RELEASE),1)
|
||||||
CFLAGS += -Os -fno-strict-aliasing
|
CFLAGS += -Os -fno-strict-aliasing -ffunction-sections -fdata-sections
|
||||||
LDFLAGS += -Wl,--strip-all
|
# 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
|
else
|
||||||
ifeq ($(findstring clang,$(CC)),clang)
|
ifeq ($(findstring clang,$(CC)),clang)
|
||||||
CFLAGS += -O0 -g
|
CFLAGS += -O0 -g
|
||||||
|
|
|
@ -41,7 +41,7 @@ SECTIONS {
|
||||||
|
|
||||||
.text ALIGN (4K) :
|
.text ALIGN (4K) :
|
||||||
{
|
{
|
||||||
*(.multiboot)
|
KEEP(*(.multiboot))
|
||||||
*(.text*)
|
*(.text*)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,8 +65,8 @@ build() {
|
||||||
export COMPILER_AS_FOR_TARGET=as
|
export COMPILER_AS_FOR_TARGET=as
|
||||||
export COMPILER_LD_FOR_TARGET=ld
|
export COMPILER_LD_FOR_TARGET=ld
|
||||||
export COMPILER_NM_FOR_TARGET=nm
|
export COMPILER_NM_FOR_TARGET=nm
|
||||||
export CFLAGS_FOR_TARGET="-Os -m32 -march=i586 -mtune=i586 -fno-stack-protector -DPREFER_SIZE_OVER_SPEED"
|
export CFLAGS_FOR_TARGET="-Os -m32 -march=i586 -mtune=i586 -fno-stack-protector -DPREFER_SIZE_OVER_SPEED -ffunction-sections -fdata-sections"
|
||||||
export CXXFLAGS_FOR_TARGET="-Os -m32 -march=i586 -mtune=i586 -fno-stack-protector -DPREFER_SIZE_OVER_SPEED"
|
export CXXFLAGS_FOR_TARGET="-Os -m32 -march=i586 -mtune=i586 -fno-stack-protector -DPREFER_SIZE_OVER_SPEED -ffunction-sections -fdata-sections"
|
||||||
|
|
||||||
mkdir -p install
|
mkdir -p install
|
||||||
./configure --target=${TARGET} \
|
./configure --target=${TARGET} \
|
||||||
|
|
Loading…
Add table
Reference in a new issue