Skip to content
This repository was archived by the owner on Aug 31, 2021. It is now read-only.

Commit c598a33

Browse files
author
Fraser Gordon
committed
Update makefiles to allow LTO builds
1 parent 2b29481 commit c598a33

File tree

5 files changed

+38
-10
lines changed

5 files changed

+38
-10
lines changed

engine/Makefile.common

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ CUSTOM_CCFLAGS=\
2424
-fmessage-length=0 \
2525
$(MODE_CCFLAGS)
2626

27-
CUSTOM_LDFLAGS=-static-libgcc \
28-
$(MODE_LDFLAGS) -Wl,-rpath,\$$ORIGIN
27+
CUSTOM_LDFLAGS=$(MODE_LDFLAGS)
28+
CUSTOM_LDFLAGS_LTO=$(MODE_LDFLAGS_LTO) -static-libgcc -Wl,-rpath,\$$ORIGIN
29+
CUSTOM_LDFLAGS_FINAL=$(MODE_LDFLAGS_FINAL) -rpath \$$ORIGIN
2930

3031
include $(dir $(lastword $(MAKEFILE_LIST)))/../rules/application.linux.makefile

engine/Makefile.installer

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ MODE_SOURCES= \
99
MODE_DEFINES=\
1010
MODE_INSTALLER
1111

12-
MODE_LDFLAGS=\
13-
-Wl,--script=installer-$(ARCH).link
12+
MODE_LDFLAGS_FINAL=--script=installer-$(ARCH).link
1413

1514
include Makefile.common

engine/Makefile.standalone

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ MODE_DEPS=libkernel-standalone.a
1010

1111
MODE_LIBS=kernel-standalone
1212

13-
MODE_LDFLAGS=\
14-
-Wl,--script=standalone-$(ARCH).link
13+
MODE_LDFLAGS_FINAL=--script=standalone-$(ARCH).link
1514

1615
include Makefile.common

rules/application.linux.makefile

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,17 @@ else
2626
STATIC_LIBS+=stdc++
2727
endif
2828

29-
LDFLAGS=$(CUSTOM_LDFLAGS) $(addprefix -L,$(GLOBAL_LIBS)) $(addprefix -L,$(CUSTOM_INCLUDES)) -Xlinker -no-undefined $(addprefix -Xlinker --exclude-libs -Xlinker ,$(addsuffix .a,$(addprefix lib,$(STATIC_LIBS))))
29+
LDFLAGS_COMMON=$(addprefix -L,$(GLOBAL_LIBS)) $(addprefix -L,$(CUSTOM_INCLUDES))
30+
LDFLAGS_LTO:=$(CUSTOM_LDFLAGS_LTO) $(CUSTOM_LDFLAGS) $(LDFLAGS_COMMON) -Xlinker -no-undefined $(addprefix -Xlinker --exclude-libs -Xlinker ,$(addsuffix .a,$(addprefix lib,$(STATIC_LIBS))))
31+
LDFLAGS_FINAL:=$(CUSTOM_LDFLAGS_FINAL) $(CUSTOM_LDFLAGS) $(LDFLAGS_COMMON) -no-undefined $(addprefix --exclude-libs ,$(addsuffix .a,$(addprefix lib,$(STATIC_LIBS))))
3032

3133
TARGET_PATH=$(BUILD_DIR)/$(NAME)
3234

33-
$(TARGET_PATH): $(OBJECTS) $(DEPS)
34-
mkdir -p $(dir $(TARGET_PATH))
35-
$(CC) -fvisibility=hidden -o$(TARGET_PATH) $(LDFLAGS) $(OBJECTS) $(CUSTOM_OBJECTS) \
35+
ifeq ($(LD_IS_CC),1)
36+
# If we are using the compiler to link, we need to prefix the linker options
37+
LDFLAGS_FINAL:=$(addprefix -Xlinker ,$(LDFLAGS_FINAL))
38+
39+
LINK_STEP1:=$(CC) -fvisibility=hidden -o$(TARGET_PATH) $(LDFLAGS_LTO) $(LDFLAGS_FINAL) $(OBJECTS) $(CUSTOM_OBJECTS) \
3640
-Wl,-Bstatic \
3741
-Wl,--start-group \
3842
$(addsuffix .a,$(addprefix $(PRODUCT_DIR)/lib,$(LIBS))) \
@@ -41,6 +45,26 @@ $(TARGET_PATH): $(OBJECTS) $(DEPS)
4145
-Wl,-Bdynamic \
4246
$(addsuffix .so,$(addprefix $(PRODUCT_DIR)/,$(SHARED_LIBS))) \
4347
$(addprefix -l,$(DYNAMIC_LIBS))
48+
LINK_STEP2:=
49+
else
50+
LINK_STEP1:=$(CC) -Wl,-relocatable -fvisibility=hidden -o$(TARGET_PATH).rel $(LDFLAGS_LTO) $(OBJECTS) $(CUSTOM_OBJECTS) \
51+
-Wl,-Bstatic \
52+
-Wl,--start-group \
53+
$(addsuffix .a,$(addprefix $(PRODUCT_DIR)/lib,$(LIBS))) \
54+
$(addprefix -l,$(STATIC_LIBS)) \
55+
-Wl,--end-group
56+
LINK_STEP2:=$(LD) -o$(TARGET_PATH) $(LDFLAGS_FINAL) $(TARGET_PATH).rel \
57+
-Bdynamic \
58+
$(addsuffix .so,$(addprefix $(PRODUCT_DIR)/,$(SHARED_LIBS))) \
59+
$(addprefix -l,$(DYNAMIC_LIBS))
60+
endif
61+
62+
63+
$(TARGET_PATH): $(OBJECTS) $(DEPS)
64+
mkdir -p $(dir $(TARGET_PATH))
65+
$(LINK_STEP1)
66+
$(LINK_STEP2)
67+
4468
ifneq ($(MODE),debug)
4569
cd $(BUILD_DIR) && \
4670
$(OBJCOPY) --only-keep-debug "$(NAME)" "$(NAME).dbg" && \

rules/environment.linux.makefile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ ifeq ($(CC),)
2525
CC:=gcc
2626
endif
2727

28+
ifeq ($(origin LD), default)
29+
LD:=$(CC)
30+
LD_IS_CC:=1
31+
endif
32+
2833
BUILD_DIR=$(SOLUTION_DIR)/_build/linux/$(ARCH)/$(MODE)
2934
CACHE_DIR=$(SOLUTION_DIR)/_cache/linux/$(ARCH)/$(MODE)/$(NAME)
3035
PRODUCT_DIR=$(BUILD_DIR)

0 commit comments

Comments
 (0)