Skip to content

Commit d1566b5

Browse files
add simple lto support
Signed-off-by: mateoconlechuga <[email protected]>
1 parent eff864b commit d1566b5

File tree

2 files changed

+67
-14
lines changed

2 files changed

+67
-14
lines changed

.github/workflows/make.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,17 @@ jobs:
5757
pathSource: ${{steps.ez80-clang.outputs.file-path}}
5858
pathTarget: ${{env.CEDEV_BIN}}
5959

60+
- name: Download ez80-link
61+
id: ez80-link
62+
uses: carlosperate/[email protected]
63+
with:
64+
file-url: ${{env.HOST_DOMAIN}}/artifact?repo=llvm-project&branch=z80&file=ez80-link${{matrix.exe}}-${{runner.os}}Release
65+
- name: Extract ez80-link
66+
uses: DuckSoft/[email protected]
67+
with:
68+
pathSource: ${{steps.ez80-link.outputs.file-path}}
69+
pathTarget: ${{env.CEDEV_BIN}}
70+
6071
- name: Download Fasmg Download Page
6172
id: fasmg-download
6273
uses: carlosperate/[email protected]
@@ -107,6 +118,7 @@ jobs:
107118
- name: Test Build Dependencies
108119
run: |
109120
ez80-clang --version
121+
ez80-link --version
110122
fasmg ${{matrix.nul}} ${{matrix.nul}}
111123
112124
- name: Checkout Toolchain

src/makefile.mk

Lines changed: 55 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ INIT_LOC ?= D1A87F
2929
OUTPUT_MAP ?= YES
3030
CFLAGS ?= -Wall -Wextra -Oz
3131
CXXFLAGS ?= -Wall -Wextra -Oz
32+
LTO ?= YES
3233
SRCDIR ?= src
3334
OBJDIR ?= obj
3435
BINDIR ?= bin
@@ -79,6 +80,7 @@ CONVBIN = $(call NATIVEPATH,$(BIN)/convbin.exe)
7980
CONVIMG = $(call NATIVEPATH,$(BIN)/convimg.exe)
8081
CEMUTEST = $(call NATIVEPATH,$(BIN)/cemu-autotester.exe)
8182
CC = $(call NATIVEPATH,$(BIN)/ez80-clang.exe)
83+
LINK = $(call NATIVEPATH,$(BIN)/ez80-link.exe)
8284
RM = ( del /q /f $1 2>nul || call )
8385
RMDIR = ( rmdir /s /q $1 2>nul || call )
8486
NATIVEMKDR = ( mkdir $1 2>nul || call )
@@ -90,6 +92,7 @@ CONVBIN = $(call NATIVEPATH,$(BIN)/convbin)
9092
CONVIMG = $(call NATIVEPATH,$(BIN)/convimg)
9193
CEMUTEST = $(call NATIVEPATH,$(BIN)/cemu-autotester)
9294
CC = $(call NATIVEPATH,$(BIN)/ez80-clang)
95+
LINK = $(call NATIVEPATH,$(BIN)/ez80-link)
9396
RM = rm -f $1
9497
RMDIR = rm -rf $1
9598
NATIVEMKDR = mkdir -p $1
@@ -116,24 +119,35 @@ TARGET8XP ?= $(NAME).8xp
116119
ICONIMG := $(wildcard $(call NATIVEPATH,$(ICON)))
117120

118121
# startup routines
119-
LDCRT0 ?= $(call NATIVEPATH,$(CEDEV_TOOLCHAIN)/lib/crt/crt0.src)
122+
LDCRT0 = $(call NATIVEPATH,$(CEDEV_TOOLCHAIN)/lib/crt/crt0.src)
123+
LDBCLTO = $(OBJDIR)/lto.bc
124+
LDLTO = $(OBJDIR)/lto.src
120125

121126
# source: http://blog.jgc.org/2011/07/gnu-make-recursive-wildcard-function.html
122127
rwildcard = $(strip $(foreach d,$(wildcard $1/*),$(call rwildcard,$d,$2) $(filter $(subst %%,%,%$(subst *,%,$2)),$d)))
123128

124129
# find source files
125-
CSOURCES ?= $(sort $(call rwildcard,$(SRCDIR),*.$(C_EXTENSION)) $(EXTRA_CSOURCES))
126-
CPPSOURCES ?= $(sort $(call rwildcard,$(SRCDIR),*.$(CPP_EXTENSION)) $(EXTRA_CPPSOURCES))
127-
ASMSOURCES ?= $(sort $(call rwildcard,$(SRCDIR),*.asm) $(EXTRA_ASMSOURCES))
130+
CSOURCES = $(sort $(call rwildcard,$(SRCDIR),*.$(C_EXTENSION)) $(EXTRA_CSOURCES))
131+
CPPSOURCES = $(sort $(call rwildcard,$(SRCDIR),*.$(CPP_EXTENSION)) $(EXTRA_CPPSOURCES))
132+
ASMSOURCES = $(sort $(call rwildcard,$(SRCDIR),*.asm) $(EXTRA_ASMSOURCES))
128133

129134
# create links for later
130-
LINK_CSOURCES ?= $(call UPDIR_ADD,$(CSOURCES:%.$(C_EXTENSION)=$(OBJDIR)/%.$(C_EXTENSION).src))
131-
LINK_CPPSOURCES ?= $(call UPDIR_ADD,$(CPPSOURCES:%.$(CPP_EXTENSION)=$(OBJDIR)/%.$(CPP_EXTENSION).src))
132-
LINK_ASMSOURCES ?= $(ASMSOURCES)
135+
ifeq ($(LTO),YES)
136+
LINK_CSOURCES = $(call UPDIR_ADD,$(CSOURCES:%.$(C_EXTENSION)=$(OBJDIR)/%.$(C_EXTENSION).bc))
137+
LINK_CPPSOURCES = $(call UPDIR_ADD,$(CPPSOURCES:%.$(CPP_EXTENSION)=$(OBJDIR)/%.$(CPP_EXTENSION).bc))
138+
LINK_ASMSOURCES = $(ASMSOURCES)
139+
LTOFILES = $(LINK_CSOURCES) $(LINK_CPPSOURCES)
140+
LDFILES = $(LDCRT0) $(LDLTO) $(LINK_ASMSOURCES)
141+
DEPFILES ?= $(wildcard $(LINK_CSOURCES:%.bc=%.d) $(LINK_CPPSOURCES:%.bc=%.d))
142+
else
143+
LINK_CSOURCES = $(call UPDIR_ADD,$(CSOURCES:%.$(C_EXTENSION)=$(OBJDIR)/%.$(C_EXTENSION).src))
144+
LINK_CPPSOURCES = $(call UPDIR_ADD,$(CPPSOURCES:%.$(CPP_EXTENSION)=$(OBJDIR)/%.$(CPP_EXTENSION).src))
145+
LINK_ASMSOURCES = $(ASMSOURCES)
146+
LDFILES = $(LDCRT0) $(LINK_CSOURCES) $(LINK_CPPSOURCES) $(LINK_ASMSOURCES)
147+
DEPFILES ?= $(wildcard $(LINK_CSOURCES:%.src=%.d) $(LINK_CPPSOURCES:%.src=%.d))
148+
endif
133149

134150
# files created to be used for linking
135-
DEPFILES ?= $(wildcard $(LINK_CSOURCES:%.src=%.d) $(LINK_CPPSOURCES:%.src=%.d))
136-
LDFILES ?= $(LDCRT0) $(LINK_CSOURCES) $(LINK_CPPSOURCES) $(LINK_ASMSOURCES)
137151
LDLIBS ?= $(wildcard $(CEDEV_TOOLCHAIN)/lib/libload/*.lib)
138152

139153
# check if there is an icon present that to convert
@@ -199,7 +213,8 @@ LDHAS_LIBC := 1
199213
endif
200214

201215
# define the c/c++ flags used by clang
202-
EZCFLAGS = -nostdinc -isystem $(call NATIVEPATH,$(CEDEV_TOOLCHAIN)/include) -I$(SRCDIR)
216+
EZINC = -isystem $(call NATIVEPATH,$(CEDEV_TOOLCHAIN)/include) -I$(SRCDIR)
217+
EZCFLAGS = -nostdinc
203218
EZCFLAGS += -fno-threadsafe-statics -Xclang -fforce-mangle-main-argc-argv -mllvm -profile-guided-section-prefix=false -D_EZ80 -D$(DEBUGMODE) $(DEFPRINTF) $(DEFCUSTOMFILE) $(CCDEBUG)
204219
EZCXXFLAGS = $(EZCFLAGS) -fno-exceptions -fno-use-cxa-atexit $(CXXFLAGS)
205220
EZCFLAGS += $(CFLAGS)
@@ -263,16 +278,42 @@ version:
263278
$(Q)echo CE C Toolchain $(shell cedev-config --version)
264279

265280
.SECONDEXPANSION:
266-
$(OBJDIR)/%.$(C_EXTENSION).src: $$(call UPDIR_RM,$$*).$(C_EXTENSION) $(MAKEFILE_LIST) $(DEPS)
281+
282+
# no lto
283+
$(OBJDIR)/%.$(C_EXTENSION).src: $$(call UPDIR_RM,$$*).$(C_EXTENSION) $(EXTRA_USERHEADERS) $(MAKEFILE_LIST) $(DEPS)
284+
$(Q)$(call MKDIR,$(@D))
285+
$(Q)echo [compiling] $(call NATIVEPATH,$<)
286+
$(Q)$(CC) -S -MD $(EZINC) $(EZCFLAGS) $(call QUOTE_ARG,$<) -o $(call QUOTE_ARG,$@)
287+
288+
$(OBJDIR)/%.$(CPP_EXTENSION).src: $$(call UPDIR_RM,$$*).$(CPP_EXTENSION) $(EXTRA_USERHEADERS) $(MAKEFILE_LIST) $(DEPS)
267289
$(Q)$(call MKDIR,$(@D))
268290
$(Q)echo [compiling] $(call NATIVEPATH,$<)
269-
$(Q)$(CC) -S -MD $(EZCFLAGS) $(call QUOTE_ARG,$<) -o $(call QUOTE_ARG,$@)
291+
$(Q)$(CC) -S -MD $(EZINC) $(EZCXXFLAGS) $(call QUOTE_ARG,$<) -o $(call QUOTE_ARG,$@)
270292

271-
$(OBJDIR)/%.$(CPP_EXTENSION).src: $$(call UPDIR_RM,$$*).$(CPP_EXTENSION) $(MAKEFILE_LIST) $(DEPS)
293+
# lto
294+
$(LDLTO): $(LDBCLTO)
295+
$(Q)$(CC) -S $(EZCFLAGS) $(call QUOTE_ARG,$(addprefix $(CURDIR)/,$<)) -o $(call QUOTE_ARG,$(addprefix $(CURDIR)/,$@))
296+
297+
$(LDBCLTO): $(LTOFILES)
298+
$(Q)echo [lto opt] $(call NATIVEPATH,$@)
299+
$(Q)$(LINK) $(foreach d,$^,$(call QUOTE_ARG,$(addprefix $(CURDIR)/,$d))) -o $(call QUOTE_ARG,$(addprefix $(CURDIR)/,$@))
300+
301+
$(OBJDIR)/%.$(C_EXTENSION).bc: $$(call UPDIR_RM,$$*).$(C_EXTENSION) $(EXTRA_USERHEADERS) $(MAKEFILE_LIST) $(DEPS)
302+
$(Q)$(call MKDIR,$(@D))
303+
$(Q)echo [compiling] $(call NATIVEPATH,$<)
304+
$(Q)$(CC) -MD -c -emit-llvm $(EZINC) $(EZCFLAGS) $(call QUOTE_ARG,$(addprefix $(CURDIR)/,$<)) -o $(call QUOTE_ARG,$(addprefix $(CURDIR)/,$@))
305+
306+
$(OBJDIR)/%.$(CPP_EXTENSION).bc: $$(call UPDIR_RM,$$*).$(CPP_EXTENSION) $(EXTRA_USERHEADERS) $(MAKEFILE_LIST) $(DEPS)
272307
$(Q)$(call MKDIR,$(@D))
273308
$(Q)echo [compiling] $(call NATIVEPATH,$<)
274-
$(Q)$(CC) -S -MD $(EZCXXFLAGS) $(call QUOTE_ARG,$<) -o $(call QUOTE_ARG,$@)
309+
$(Q)$(CC) -MD -c -emit-llvm $(EZINC) $(EZCXXFLAGS) $(call QUOTE_ARG,$(addprefix $(CURDIR)/,$<)) -o $(call QUOTE_ARG,$(addprefix $(CURDIR)/,$@))
275310

276311
ifeq ($(filter clean,$(MAKECMDGOALS)),)
312+
ifeq ($(filter test,$(MAKECMDGOALS)),)
313+
ifeq ($(filter gfx,$(MAKECMDGOALS)),)
314+
ifeq ($(filter version,$(MAKECMDGOALS)),)
277315
include $(DEPFILES)
278316
endif
317+
endif
318+
endif
319+
endif

0 commit comments

Comments
 (0)