@@ -29,6 +29,7 @@ INIT_LOC ?= D1A87F
29
29
OUTPUT_MAP ?= YES
30
30
CFLAGS ?= -Wall -Wextra -Oz
31
31
CXXFLAGS ?= -Wall -Wextra -Oz
32
+ LTO ?= YES
32
33
SRCDIR ?= src
33
34
OBJDIR ?= obj
34
35
BINDIR ?= bin
@@ -79,6 +80,7 @@ CONVBIN = $(call NATIVEPATH,$(BIN)/convbin.exe)
79
80
CONVIMG = $(call NATIVEPATH,$(BIN ) /convimg.exe)
80
81
CEMUTEST = $(call NATIVEPATH,$(BIN ) /cemu-autotester.exe)
81
82
CC = $(call NATIVEPATH,$(BIN ) /ez80-clang.exe)
83
+ LINK = $(call NATIVEPATH,$(BIN ) /ez80-link.exe)
82
84
RM = ( del /q /f $1 2>nul || call )
83
85
RMDIR = ( rmdir /s /q $1 2>nul || call )
84
86
NATIVEMKDR = ( mkdir $1 2>nul || call )
@@ -90,6 +92,7 @@ CONVBIN = $(call NATIVEPATH,$(BIN)/convbin)
90
92
CONVIMG = $(call NATIVEPATH,$(BIN ) /convimg)
91
93
CEMUTEST = $(call NATIVEPATH,$(BIN ) /cemu-autotester)
92
94
CC = $(call NATIVEPATH,$(BIN ) /ez80-clang)
95
+ LINK = $(call NATIVEPATH,$(BIN ) /ez80-link)
93
96
RM = rm -f $1
94
97
RMDIR = rm -rf $1
95
98
NATIVEMKDR = mkdir -p $1
@@ -116,24 +119,35 @@ TARGET8XP ?= $(NAME).8xp
116
119
ICONIMG := $(wildcard $(call NATIVEPATH,$(ICON ) ) )
117
120
118
121
# 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
120
125
121
126
# source: http://blog.jgc.org/2011/07/gnu-make-recursive-wildcard-function.html
122
127
rwildcard = $(strip $(foreach d,$(wildcard $1/* ) ,$(call rwildcard,$d,$2) $(filter $(subst %% ,% ,% $(subst * ,% ,$2) ) ,$d) ) )
123
128
124
129
# 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 ) )
128
133
129
134
# 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
133
149
134
150
# 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 )
137
151
LDLIBS ?= $(wildcard $(CEDEV_TOOLCHAIN ) /lib/libload/* .lib)
138
152
139
153
# check if there is an icon present that to convert
@@ -199,7 +213,8 @@ LDHAS_LIBC := 1
199
213
endif
200
214
201
215
# 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
203
218
EZCFLAGS += -fno-threadsafe-statics -Xclang -fforce-mangle-main-argc-argv -mllvm -profile-guided-section-prefix=false -D_EZ80 -D$(DEBUGMODE ) $(DEFPRINTF ) $(DEFCUSTOMFILE ) $(CCDEBUG )
204
219
EZCXXFLAGS = $(EZCFLAGS ) -fno-exceptions -fno-use-cxa-atexit $(CXXFLAGS )
205
220
EZCFLAGS += $(CFLAGS )
@@ -263,16 +278,42 @@ version:
263
278
$(Q ) echo CE C Toolchain $(shell cedev-config --version)
264
279
265
280
.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 )
267
289
$(Q )$(call MKDIR,$(@D ) )
268
290
$(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,$@ )
270
292
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 )
272
307
$(Q )$(call MKDIR,$(@D ) )
273
308
$(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 ) /, $@ ) )
275
310
276
311
ifeq ($(filter clean,$(MAKECMDGOALS ) ) ,)
312
+ ifeq ($(filter test,$(MAKECMDGOALS ) ) ,)
313
+ ifeq ($(filter gfx,$(MAKECMDGOALS ) ) ,)
314
+ ifeq ($(filter version,$(MAKECMDGOALS ) ) ,)
277
315
include $(DEPFILES )
278
316
endif
317
+ endif
318
+ endif
319
+ endif
0 commit comments