Skip to content

Commit f6159cf

Browse files
npigginstewartsmith
authored andcommitted
build: use thin archives rather than incremental linking
This changes to build system to use thin archives rather than incremental linking for built-in.o, similar to recent change to Linux. built-in.o is renamed to built-in.a, and is created as a thin archive with no index, for speed and size. All built-in.a are aggregated into a skiboot.tmp.a which is a thin archive built with an index, making it suitable or linking. This is input into the final link. The advantags of build size and linker code placement flexibility are not as great with skiboot as a bigger project like Linux, but it's a conceptually better way to build, and is more compatible with link time optimisation in toolchains which might be interesting for skiboot particularly for size reductions. Size of build tree before this patch is 34.4MB, afterwards 23.1MB. Signed-off-by: Nicholas Piggin <[email protected]> Signed-off-by: Stewart Smith <[email protected]>
1 parent f30286c commit f6159cf

30 files changed

+40
-35
lines changed

Makefile.main

+9-5
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ LDFLAGS += -Wl,-pie
126126
LDFLAGS += -Wl,-Ttext-segment,$(LD_TEXT) -Wl,-N -Wl,--build-id=none
127127
LDFLAGS += -Wl,--no-multi-toc
128128
LDFLAGS += -mcpu=power7 -mbig-endian -Wl,--oformat,elf64-powerpc
129-
129+
LDFLAGS_FINAL = $(LDFLAGS) -Wl,--whole-archive
130130
LDRFLAGS=-melf64ppc
131131
# Debug stuff
132132
#LDFLAGS += -Wl,-v -Wl,-Map,foomap
@@ -213,8 +213,8 @@ OBJS += $(LIBC) $(CCAN) $(DEVSRC_OBJ) $(LIBPORE)
213213
OBJS_NO_VER = $(OBJS)
214214
ALL_OBJS = $(OBJS) version.o
215215

216-
ALL_OBJS_1 = $(ALL_OBJS) asm/dummy_map.o
217-
ALL_OBJS_2 = $(ALL_OBJS) asm/real_map.o
216+
ALL_OBJS_1 = $(TARGET).tmp.a asm/dummy_map.o
217+
ALL_OBJS_2 = $(TARGET).tmp.a asm/real_map.o
218218

219219
$(TARGET).lid.xz: $(TARGET).lid
220220
$(call Q,XZ, cat $^ | xz -9 -C crc32 > $@, $@)
@@ -228,13 +228,17 @@ $(TARGET).lid.stb: $(TARGET).lid libstb/create-container
228228
$(TARGET).lid.xz.stb: $(TARGET).lid.xz libstb/create-container
229229
$(call Q,STB-DEVELOPMENT-SIGNED-CONTAINER,$(SRC)/libstb/sign-with-local-keys.sh $< $@ $(SRC)/libstb/keys/ PAYLOAD,$@)
230230

231+
$(TARGET).tmp.a: $(ALL_OBJS)
232+
@rm -f $(TARGET).tmp.a
233+
$(call Q,AR, $(AR) rcsTPD $@ $(ALL_OBJS), $@)
234+
231235
$(TARGET).tmp.elf: $(ALL_OBJS_1) $(TARGET).lds $(KERNEL)
232-
$(call Q,LD, $(CC) $(LDFLAGS) -T $(TARGET).lds $(ALL_OBJS_1) -o $@, $@)
236+
$(call Q,LD, $(CC) $(LDFLAGS_FINAL) -o $@ -T $(TARGET).lds $(ALL_OBJS_1), $@)
233237

234238
asm/real_map.o : $(TARGET).tmp.map
235239

236240
$(TARGET).elf: $(ALL_OBJS_2) $(TARGET).lds $(KERNEL)
237-
$(call Q,LD, $(CC) $(LDFLAGS) -T $(TARGET).lds $(ALL_OBJS_2) -o $@, $@)
241+
$(call Q,LD, $(CC) $(LDFLAGS_FINAL) -o $@ -T $(TARGET).lds $(ALL_OBJS_2), $@)
238242

239243
$(SUBDIRS):
240244
$(call Q,MKDIR,mkdir -p $@, $@)

Makefile.rules

+3-2
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,9 @@ endif
6767
%.i : %.c
6868
$(call Q,CC, $(CC) $(call cook_cflags,$@) -E -c $< -o $@, $@)
6969

70-
%built-in.o :
71-
$(call Q,LD, $(LD) $(LDRFLAGS) -r $^ -o $@, $@)
70+
%built-in.a :
71+
@rm -f $@
72+
$(call Q,AR, $(AR) rcSTPD $@ $^, $@)
7273

7374
%.lds : %.lds.S
7475
$(call Q,CC, $(CC) $(CPPFLAGS) -P -E $< -o $@, $@)

asm/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
SUBDIRS += asm
44
ASM_OBJS = head.o misc.o kernel-wrapper.o cvc_entry.o
5-
ASM=asm/built-in.o
5+
ASM=asm/built-in.a
66

77
# Add extra dependency to the kernel wrapper
88
kernel_wrapper.o : $(KERNEL)

ccan/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
SUBDIRS += ccan ccan/list ccan/str
44
CCAN_OBJS = list/list.o str/str.o
5-
CCAN=ccan/built-in.o
5+
CCAN=ccan/built-in.a
66

77
$(CCAN): $(CCAN_OBJS:%=ccan/%)
88

core/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ ifeq ($(SKIBOOT_GCOV),1)
1515
CORE_OBJS += gcov-profiling.o
1616
endif
1717

18-
CORE=core/built-in.o
18+
CORE=core/built-in.a
1919

2020
CFLAGS_SKIP_core/relocate.o = -pg -fstack-protector-all
2121
CFLAGS_SKIP_core/relocate.o += -fstack-protector -fstack-protector-strong

hdata/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
SUBDIRS += hdata
44
HDATA_OBJS = spira.o paca.o pcia.o hdif.o memory.o fsp.o iohub.o vpd.o slca.o
55
HDATA_OBJS += cpu-common.o vpd-common.o hostservices.o i2c.o tpmrel.o
6-
DEVSRC_OBJ = hdata/built-in.o
6+
DEVSRC_OBJ = hdata/built-in.a
77

88
$(DEVSRC_OBJ): $(HDATA_OBJS:%=hdata/%)

hw/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ HW_OBJS += phb3.o sfc-ctrl.o fake-rtc.o bt.o p8-i2c.o prd.o
88
HW_OBJS += dts.o lpc-rtc.o npu.o npu-hw-procedures.o xive.o phb4.o
99
HW_OBJS += fake-nvram.o lpc-mbox.o npu2.o npu2-hw-procedures.o
1010
HW_OBJS += phys-map.o sbe-p9.o capp.o occ-sensor.o vas.o
11-
HW=hw/built-in.o
11+
HW=hw/built-in.a
1212

1313
# FIXME hack this for now
1414
CFLAGS_hw/phb4.o = -Wno-unused-value -Wno-unused-parameter

hw/ast-bmc/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
SUBDIRS += hw/ast-bmc
22

33
AST_BMC_OBJS = ast-io.o ast-sf-ctrl.o
4-
AST_BMC = hw/ast-bmc/built-in.o
4+
AST_BMC = hw/ast-bmc/built-in.a
55
$(AST_BMC): $(AST_BMC_OBJS:%=hw/ast-bmc/%)

hw/ec/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33

44
SUBDIRS += hw/ec
55
EC_OBJS = gpio.o
6-
EC=hw/ec/built-in.o
6+
EC=hw/ec/built-in.a
77

88
$(EC): $(EC_OBJS:%=hw/ec/%)

hw/fsp/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ FSP_OBJS += fsp-diag.o fsp-leds.o fsp-mem-err.o fsp-op-panel.o
66
FSP_OBJS += fsp-elog-read.o fsp-elog-write.o fsp-epow.o fsp-dpo.o
77
FSP_OBJS += fsp-dump.o fsp-mdst-table.o fsp-chiptod.o fsp-ipmi.o
88
FSP_OBJS += fsp-attn.o
9-
FSP = hw/fsp/built-in.o
9+
FSP = hw/fsp/built-in.a
1010
$(FSP): $(FSP_OBJS:%=hw/fsp/%)

hw/ipmi/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ SUBDIRS += hw/ipmi
33
IPMI_OBJS = ipmi-rtc.o ipmi-power.o ipmi-fru.o ipmi-sel.o
44
IPMI_OBJS += ipmi-watchdog.o ipmi-sensor.o ipmi-attn.o
55

6-
IPMI = hw/ipmi/built-in.o
6+
IPMI = hw/ipmi/built-in.a
77
$(IPMI): $(IPMI_OBJS:%=hw/ipmi/%)

libc/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
LIBCDIR = libc
22

33
SUBDIRS += $(LIBCDIR)
4-
LIBC = $(LIBCDIR)/built-in.o $(LIBCDIR)/time.o
4+
LIBC = $(LIBCDIR)/built-in.a $(LIBCDIR)/time.o
55

66
include $(SRC)/$(LIBCDIR)/string/Makefile.inc
77
include $(SRC)/$(LIBCDIR)/ctype/Makefile.inc

libc/ctype/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ SUBDIRS += $(LIBCDIR)/ctype
1414

1515
CTYPE_OBJS = isdigit.o isprint.o isspace.o isxdigit.o tolower.o toupper.o
1616

17-
CTYPE = $(LIBCDIR)/ctype/built-in.o
17+
CTYPE = $(LIBCDIR)/ctype/built-in.a
1818
$(CTYPE): $(CTYPE_OBJS:%=$(LIBCDIR)/ctype/%)
1919

libc/stdio/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ STDIO_OBJS = vfprintf.o vsnprintf.o fprintf.o \
1717
setvbuf.o fputc.o puts.o fputs.o putchar.o \
1818
stdchnls.o fileno.o snprintf.o
1919

20-
STDIO = $(LIBCDIR)/stdio/built-in.o
20+
STDIO = $(LIBCDIR)/stdio/built-in.a
2121
$(STDIO): $(STDIO_OBJS:%=$(LIBCDIR)/stdio/%)

libc/stdlib/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ SUBDIRS += $(LIBCDIR)/stdlib
1515
STDLIB_OBJS = error.o atoi.o atol.o strtol.o strtoul.o \
1616
rand.o labs.o
1717

18-
STDLIB = $(LIBCDIR)/stdlib/built-in.o
18+
STDLIB = $(LIBCDIR)/stdlib/built-in.a
1919
$(STDLIB): $(STDLIB_OBJS:%=$(LIBCDIR)/stdlib/%)
2020

libc/string/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ STRING_OBJS = strcat.o strchr.o strcmp.o strcpy.o strlen.o \
1616
strncmp.o strncpy.o strstr.o memset.o memcpy.o memcpy_from_ci.o \
1717
memmove.o memchr.o memcmp.o strcasecmp.o strncasecmp.o \
1818
strtok.o strdup.o
19-
STRING = $(LIBCDIR)/string/built-in.o
19+
STRING = $(LIBCDIR)/string/built-in.a
2020
$(STRING): $(STRING_OBJS:%=$(LIBCDIR)/string/%)
2121

libfdt/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ LIBFDT_OBJS = $(LIBFDT_SRCS:%.c=%.o)
1212
CFLAGS_SKIP_libfdt/fdt_sw.o = -Wstack-usage=4096
1313

1414
SUBDIRS += libfdt
15-
LIBFDT = libfdt/built-in.o
15+
LIBFDT = libfdt/built-in.a
1616

1717
$(LIBFDT): $(LIBFDT_OBJS:%=libfdt/%)
1818

libflash/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ LIBFLASH_SRCS = libflash.c libffs.c ecc.c blocklevel.c mbox-flash.c
22
LIBFLASH_OBJS = $(LIBFLASH_SRCS:%.c=%.o)
33

44
SUBDIRS += libflash
5-
LIBFLASH = libflash/built-in.o
5+
LIBFLASH = libflash/built-in.a
66

77
$(LIBFLASH): $(LIBFLASH_OBJS:%=libflash/%)

libpore/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ LIBPORE_SRCS += p8_pore_table_static_data.c sbe_xip_image.c pore_inline_assemble
33
LIBPORE_OBJS_1 = $(LIBPORE_SRCS:%.c=%.o)
44
LIBPORE_OBJS = $(LIBPORE_OBJS_1:%.C=%.o)
55
SUBDIRS += libpore
6-
LIBPORE = libpore/built-in.o
6+
LIBPORE = libpore/built-in.a
77

88
CFLAGS_SKIP_libpore/pore_inline_assembler.o=-Wsuggest-attribute=const
99

libstb/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ SUBDIRS += $(LIBSTB_DIR)
66

77
LIBSTB_SRCS = container.c tpm_chip.c cvc.c secureboot.c trustedboot.c
88
LIBSTB_OBJS = $(LIBSTB_SRCS:%.c=%.o)
9-
LIBSTB = $(LIBSTB_DIR)/built-in.o
9+
LIBSTB = $(LIBSTB_DIR)/built-in.a
1010

1111
include $(SRC)/$(LIBSTB_DIR)/mbedtls/Makefile.inc
1212
include $(SRC)/$(LIBSTB_DIR)/drivers/Makefile.inc

libstb/drivers/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ SUBDIRS += $(DRIVERS_DIR)
66

77
DRIVERS_SRCS = tpm_i2c_interface.c tpm_i2c_nuvoton.c
88
DRIVERS_OBJS = $(DRIVERS_SRCS:%.c=%.o)
9-
DRIVERS = $(DRIVERS_DIR)/built-in.o
9+
DRIVERS = $(DRIVERS_DIR)/built-in.a
1010

1111
$(DRIVERS): $(DRIVERS_OBJS:%=$(DRIVERS_DIR)/%)

libstb/mbedtls/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ SUBDIRS += $(MBEDTLS_DIR)
66

77
MBEDTLS_SRCS = sha512.c
88
MBEDTLS_OBJS = $(MBEDTLS_SRCS:%.c=%.o)
9-
MBEDTLS = $(MBEDTLS_DIR)/built-in.o
9+
MBEDTLS = $(MBEDTLS_DIR)/built-in.a
1010

1111
$(MBEDTLS): $(MBEDTLS_OBJS:%=$(MBEDTLS_DIR)/%)

libstb/tss/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ SUBDIRS += $(TSS_DIR)
77
TSS_SRCS = trustedbootCmds.C trustedTypes.C trustedbootUtils.C \
88
tpmLogMgr.C
99
TSS_OBJS = $(TSS_SRCS:%.C=%.o)
10-
TSS = $(TSS_DIR)/built-in.o
10+
TSS = $(TSS_DIR)/built-in.a
1111

1212
$(TSS): $(TSS_OBJS:%=$(TSS_DIR)/%)
1313

libxz/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ LIBXZ_SRCS = xz_dec_stream.c xz_dec_lzma2.c xz_crc32.c
22
LIBXZ_OBJS = $(LIBXZ_SRCS:%.c=%.o)
33

44
SUBDIRS += libxz
5-
LIBXZ = libxz/built-in.o
5+
LIBXZ = libxz/built-in.a
66

77
$(LIBXZ): $(LIBXZ_OBJS:%=libxz/%)

platforms/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
PLATDIR = platforms
22

33
SUBDIRS += $(PLATDIR)
4-
PLATFORMS = $(PLATDIR)/built-in.o
4+
PLATFORMS = $(PLATDIR)/built-in.a
55

66
include $(SRC)/$(PLATDIR)/ibm-fsp/Makefile.inc
77
include $(SRC)/$(PLATDIR)/rhesus/Makefile.inc

platforms/astbmc/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ ASTBMC_OBJS = pnor.o common.o slots.o \
66
garrison.o barreleye.o \
77
witherspoon.o zaius.o romulus.o p9dsu.o
88

9-
ASTBMC = $(PLATDIR)/astbmc/built-in.o
9+
ASTBMC = $(PLATDIR)/astbmc/built-in.a
1010
$(ASTBMC): $(ASTBMC_OBJS:%=$(PLATDIR)/astbmc/%)
1111

platforms/ibm-fsp/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ SUBDIRS += $(PLATDIR)/ibm-fsp
22

33
IBM_FSP_OBJS = common.o lxvpd.o apollo.o apollo-pci.o \
44
firenze.o firenze-pci.o zz.o
5-
IBM_FSP = $(PLATDIR)/ibm-fsp/built-in.o
5+
IBM_FSP = $(PLATDIR)/ibm-fsp/built-in.a
66
$(IBM_FSP): $(IBM_FSP_OBJS:%=$(PLATDIR)/ibm-fsp/%)
77

platforms/mambo/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
SUBDIRS += $(PLATDIR)/mambo
22

33
MAMBO_OBJS = mambo.o console.o
4-
MAMBO = $(PLATDIR)/mambo/built-in.o
4+
MAMBO = $(PLATDIR)/mambo/built-in.a
55
$(MAMBO): $(MAMBO_OBJS:%=$(PLATDIR)/mambo/%)
66

platforms/qemu/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
SUBDIRS += $(PLATDIR)/qemu
22

33
QEMU_OBJS = qemu.o
4-
QEMU = $(PLATDIR)/qemu/built-in.o
4+
QEMU = $(PLATDIR)/qemu/built-in.a
55
$(QEMU): $(QEMU_OBJS:%=$(PLATDIR)/qemu/%)
66

platforms/rhesus/Makefile.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
SUBDIRS += $(PLATDIR)/rhesus
22

33
RHESUS_OBJS = rhesus.o
4-
RHESUS = $(PLATDIR)/rhesus/built-in.o
4+
RHESUS = $(PLATDIR)/rhesus/built-in.a
55
$(RHESUS): $(RHESUS_OBJS:%=$(PLATDIR)/rhesus/%)
66

0 commit comments

Comments
 (0)