WIP [LTO] try to build and link with LTO

Doesn't work, it strips all of the magic sections.
This commit is contained in:
Travis Geiselbrecht
2020-07-12 13:17:49 -07:00
parent 5690a8bb58
commit 166a147ee4
3 changed files with 23 additions and 6 deletions

View File

@@ -64,6 +64,11 @@ GLOBAL_CPPFLAGS := --std=c++11 -fno-exceptions -fno-rtti -fno-threadsafe-statics
GLOBAL_ASMFLAGS := -DASSEMBLY
GLOBAL_LDFLAGS :=
WITH_LTO ?= true
ifeq (true,$(call TOBOOL,$(WITH_LTO)))
GLOBAL_COMPILEFLAGS += -flto -fno-fat-lto-objects
endif
# if WERROR is set, add to the compile args
ifeq (true,$(call TOBOOL,$(WERROR)))
GLOBAL_COMPILEFLAGS += -Werror

View File

@@ -21,10 +21,16 @@ $(OUTELF).hex: $(OUTELF)
$(OUTELF): $(ALLMODULE_OBJS) $(EXTRA_OBJS) $(LINKER_SCRIPT) $(EXTRA_LINKER_SCRIPTS)
$(info linking $@)
ifeq (true,$(call TOBOOL,$(WITH_LTO)))
$(NOECHO)$(CC) -nostdlib -flto $(GLOBAL_LDFLAGS) $(ARCH_LDFLAGS) -T $(LINKER_SCRIPT) \
$(addprefix -T,$(EXTRA_LINKER_SCRIPTS)) -march=rv64imac -mabi=lp64 -mcmodel=medany \
$(ALLMODULE_OBJS) $(EXTRA_OBJS) $(LIBGCC) -o $@
else
$(NOECHO)$(SIZE) -t --common $(sort $(ALLMODULE_OBJS)) $(EXTRA_OBJS)
$(NOECHO)$(LD) $(GLOBAL_LDFLAGS) $(ARCH_LDFLAGS) -dT $(LINKER_SCRIPT) \
$(addprefix -T,$(EXTRA_LINKER_SCRIPTS)) \
$(ALLMODULE_OBJS) $(EXTRA_OBJS) $(LIBGCC) -Map=$(OUTELF).map -o $@
endif
$(OUTELF).sym: $(OUTELF)
$(info generating symbols: $@)

View File

@@ -83,6 +83,13 @@ include make/compile.mk
# MODULE_OBJS is passed back from compile.mk
#$(info MODULE_OBJS = $(MODULE_OBJS))
# track all of the source files compiled
ALLSRCS += $(MODULE_SRCS)
# track all the objects built
ALLOBJS += $(MODULE_OBJS)
ifeq (false,$(call TOBOOL,$(WITH_LTO)))
# build a ld -r style combined object
MODULE_OBJECT := $(call TOBUILDDIR,$(MODULE_SRCDIR).mod.o)
$(MODULE_OBJECT): $(MODULE_OBJS) $(MODULE_EXTRA_OBJS)
@@ -90,17 +97,16 @@ $(MODULE_OBJECT): $(MODULE_OBJS) $(MODULE_EXTRA_OBJS)
$(info linking $@)
$(NOECHO)$(LD) $(GLOBAL_MODULE_LDFLAGS) -r $^ -o $@
# track all of the source files compiled
ALLSRCS += $(MODULE_SRCS)
# track all the objects built
ALLOBJS += $(MODULE_OBJS)
# track the module object for make clean
GENERATED += $(MODULE_OBJECT)
# make the rest of the build depend on our output
ALLMODULE_OBJS := $(ALLMODULE_OBJS) $(MODULE_OBJECT)
else
# for LTO builds just add all of the .o files from this module to the global
# link line. ld -r seems to foul up LTO
ALLMODULE_OBJS := $(ALLMODULE_OBJS) $(MODULE_OBJS) $(MODULE_EXTRA_OBJS)
endif
# empty out any vars set here
MODULE :=