Skip to content

Commit 4421de2

Browse files
marler8997Jonathan Marler
authored andcommitted
Second round of makefile/build.d consolidation
1 parent 84bcc67 commit 4421de2

File tree

3 files changed

+66
-265
lines changed

3 files changed

+66
-265
lines changed

src/build.d

Lines changed: 58 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -266,10 +266,10 @@ alias opTabGen = memoize!(function() {
266266
});
267267

268268
/// Returns: the dependencies that build the D backend
269-
alias dBackend = memoize!(function () {
269+
alias backendObj = memoize!(function () {
270270
Dependency dependency = {
271-
name: "dbackend",
272-
target: env["G"].buildPath("dbackend").objName,
271+
name: "backendObj",
272+
target: env["G"].buildPath("backend").objName,
273273
sources: sources.backend,
274274
msg: "(DC) D_BACK_OBJS %-(%s, %)".format(sources.backend.map!(e => e.baseName).array),
275275
deps: [opTabGen],
@@ -289,9 +289,9 @@ alias backend = memoize!(function() {
289289
Dependency dependency = {
290290
name: "backend",
291291
msg: "(LIB) %s".format("BACKEND".libName),
292-
sources: [ env["G"].buildPath("dbackend").objName ],
292+
sources: [ env["G"].buildPath("backend").objName ],
293293
target: env["G"].buildPath("backend").libName,
294-
deps: [opTabGen, dBackend],
294+
deps: [opTabGen, backendObj],
295295
command: [env["HOST_DMD_RUN"], env["MODEL_FLAG"], "-lib", "-of$@", "$<"]
296296
};
297297
return new DependencyRef(dependency);
@@ -397,6 +397,7 @@ alias clean = memoize!(function() {
397397
return new DependencyRef(dependency);
398398
});
399399

400+
400401
/**
401402
Goes through the target list and replaces short-hand targets with their expanded version.
402403
Special targets:
@@ -521,6 +522,31 @@ struct DependencyRange
521522
/// Sets the environment variables
522523
void parseEnvironment()
523524
{
525+
// This block is temporary until we can remove the windows make files
526+
{
527+
const ddebug = env.get("DDEBUG", null);
528+
if (ddebug.length)
529+
{
530+
writefln("WARNING: the DDEBUG variable is deprecated");
531+
if (ddebug == "-debug -g -unittest -cov")
532+
{
533+
environment["ENABLE_DEBUG"] = "1";
534+
environment["ENABLE_UNITTEST"] = "1";
535+
environment["ENABLE_COVERAGE"] = "1";
536+
}
537+
else if (ddebug == "-debug -g -unittest")
538+
{
539+
environment["ENABLE_DEBUG"] = "1";
540+
environment["ENABLE_UNITTEST"] = "1";
541+
}
542+
else
543+
{
544+
writefln("Error: DDEBUG is not an expected value '%s'", ddebug);
545+
exit(1);
546+
}
547+
}
548+
}
549+
524550
env.getDefault("TARGET_CPU", "X86");
525551
version (Windows)
526552
{
@@ -755,22 +781,39 @@ auto sourceFiles()
755781
.map!(e => e.name)
756782
.filter!(e => !lexerRootFiles.canFind(e.baseName.stripExtension))
757783
.array,
758-
backend:
759-
dirEntries(env["C"], "*.d", SpanMode.shallow)
760-
.map!(e => e.name)
761-
.filter!(e => !e.baseName.among("dt.d", "obj.d", "optabgen.d"))
762-
.array,
763-
backendHeaders: [
764-
// can't be built with -betterC
765-
"dt",
766-
"obj",
767-
].map!(e => env["C"].buildPath(e ~ ".d")).array,
784+
backend: ("
785+
bcomplex.d evalu8.d divcoeff.d dvec.d go.d gsroa.d glocal.d gdag.d gother.d gflow.d
786+
out.d
787+
gloop.d compress.d cgelem.d cgcs.d ee.d cod4.d cod5.d nteh.d blockopt.d mem.d cg.d cgreg.d
788+
dtype.d debugprint.d fp.d symbol.d elem.d dcode.d cgsched.d cg87.d cgxmm.d cgcod.d cod1.d cod2.d
789+
cod3.d cv8.d dcgcv.d pdata.d util2.d var.d md5.d backconfig.d ph2.d drtlsym.d dwarfeh.d ptrntab.d
790+
dvarstats.d dwarfdbginf.d cgen.d os.d goh.d barray.d cgcse.d elpicpie.d
791+
".split
792+
~ versionTernary!"OSX"(["machobj.d"], ["elfobj.d"])
793+
~ versionTernary!"Windows"("cgobj.d filespec.d mscoffobj.d newman.d".split, ["aarray.d"])
794+
).map!(e => env["C"].buildPath(e)).array,
795+
backendHeaders: "
796+
cc.d cdef.d cgcv.d code.d cv4.d dt.d el.d global.d
797+
obj.d oper.d outbuf.d rtlsym.d code_x86.d iasm.d codebuilder.d
798+
ty.d type.d exh.d mach.d mscoff.d dwarf.d dwarf2.d xmm.d
799+
dlist.d melf.d varstats.di
800+
".split.map!(e => env["C"].buildPath(e)).array,
768801
};
802+
sources.backend ~= ((env["OS"] == "windows" && env["MODEL"] == "64") ? ["strtold.d", "longdouble.d"] : [])
803+
.map!(e => env["ROOT"].buildPath(e)).array;
804+
769805
sources.dmd = sources.frontend ~ sources.backendHeaders;
770806

771807
return sources;
772808
}
773809

810+
/// Returns the first argument if the given version is true, otherwise, returns the second argument.
811+
auto versionTernary(string version_, T)(T trueCase, T falseCase)
812+
{
813+
mixin("version(" ~ version_ ~ ") { return trueCase; }");
814+
return falseCase;
815+
}
816+
774817
/**
775818
Downloads a file from a given URL
776819

src/posix.mak

Lines changed: 4 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -338,21 +338,6 @@ GLUE_SRCS=$(addsuffix .d, $(addprefix $D/,irstate toctype glue gluelayer todt to
338338

339339
DMD_SRCS=$(FRONT_SRCS) $(GLUE_SRCS) $(BACK_HDRS)
340340

341-
BACK_DOBJS = bcomplex.o evalu8.o divcoeff.o dvec.o go.o gsroa.o glocal.o gdag.o gother.o gflow.o \
342-
out.o \
343-
gloop.o compress.o cgelem.o cgcs.o ee.o cod4.o cod5.o nteh.o blockopt.o mem.o cg.o cgreg.o \
344-
dtype.o debugprint.o fp.o symbol.o elem.o dcode.o cgsched.o cg87.o cgxmm.o cgcod.o cod1.o cod2.o \
345-
cod3.o cv8.o dcgcv.o pdata.o util2.o var.o md5.o backconfig.o ph2.o drtlsym.o dwarfeh.o ptrntab.o \
346-
aarray.o dvarstats.o dwarfdbginf.o elfobj.o cgen.o os.o goh.o barray.o cgcse.o elpicpie.o
347-
348-
G_DOBJS = $(addprefix $G/, $(BACK_DOBJS))
349-
350-
ifeq (osx,$(OS))
351-
BACK_DOBJS += machobj.o
352-
else
353-
# BACK_DOBJS += elfobj.o
354-
endif
355-
356341
######## DMD glue layer and backend
357342

358343
GLUE_SRC = \
@@ -407,7 +392,7 @@ SRC_MAKE = posix.mak osmodel.mak
407392

408393
STRING_IMPORT_FILES = $G/VERSION $G/SYSCONFDIR.imp $(RES)/default_ddoc_theme.ddoc
409394

410-
DEPS = $(patsubst %.o,%.deps,$(DMD_OBJS) $(BACK_OBJS) $(BACK_DOBJS))
395+
DEPS = $(patsubst %.o,%.deps,$(DMD_OBJS))
411396

412397
RUN_BUILD = $(GENERATED)/build HOST_DMD="$(HOST_DMD)" OS=$(OS) BUILD=$(BUILD) MODEL=$(MODEL) AUTO_BOOTSTRAP="$(AUTO_BOOTSTRAP)" --called-from-make
413398

@@ -439,21 +424,13 @@ toolchain-info:
439424
@echo '==== Toolchain Information ===='
440425
@echo
441426

442-
$G/backend.a: $(G_DOBJS) $(SRC_MAKE)
443-
$(AR) rcs $@ $(G_DOBJS)
444-
445427
$G/dmd_frontend: $(FRONT_SRCS) $D/gluelayer.d $(ROOT_SRCS) $G/lexer.a $(STRING_IMPORT_FILES) $(HOST_DMD_PATH)
446428
$(HOST_DMD_RUN) -of$@ $(MODEL_FLAG) -vtls -J$G -J$(RES) $(DFLAGS) $(filter-out $(STRING_IMPORT_FILES) $(HOST_DMD_PATH),$^) -version=NoBackend
447429

448-
ifdef ENABLE_LTO
449-
$G/dmd: $(DMD_SRCS) $(ROOT_SRCS) $G/lexer.a $(G_DOBJS) $(STRING_IMPORT_FILES) $(HOST_DMD_PATH)
430+
$G/dmd: $(DMD_SRCS) $(ROOT_SRCS) $G/lexer.a $G/backend.o $(STRING_IMPORT_FILES) $(HOST_DMD_PATH)
450431
$(HOST_DMD_RUN) -of$@ $(MODEL_FLAG) -vtls -J$G -J$(RES) $(DFLAGS) $(filter-out $(STRING_IMPORT_FILES) $(HOST_DMD_PATH),$^)
451-
else
452-
$G/dmd: $(DMD_SRCS) $(ROOT_SRCS) $G/backend.a $G/lexer.a $(STRING_IMPORT_FILES) $(HOST_DMD_PATH)
453-
$(HOST_DMD_RUN) -of$@ $(MODEL_FLAG) -vtls -J$G -J$(RES) $(DFLAGS) $(filter-out $(STRING_IMPORT_FILES) $(HOST_DMD_PATH) $(LEXER_ROOT),$^)
454-
endif
455432

456-
$G/dmd-unittest: $(DMD_SRCS) $(ROOT_SRCS) $(LEXER_SRCS) $(G_DOBJS) $(STRING_IMPORT_FILES) $(HOST_DMD_PATH)
433+
$G/dmd-unittest: $(DMD_SRCS) $(ROOT_SRCS) $(LEXER_SRCS) $G/backend.o $(STRING_IMPORT_FILES) $(HOST_DMD_PATH)
457434
$(HOST_DMD_RUN) -of$@ $(MODEL_FLAG) -vtls -J$G -J$(RES) $(DFLAGS) -g -unittest -main -version=NoMain $(filter-out $(STRING_IMPORT_FILES) $(HOST_DMD_PATH),$^)
458435

459436
unittest: $G/dmd-unittest
@@ -476,7 +453,6 @@ build-examples: $(EXAMPLES)
476453

477454
clean:
478455
rm -Rf $(GENERATED)
479-
rm -f $(addprefix $D/backend/, $(optabgen_output))
480456
@[ ! -d ${PGO_DIR} ] || echo You should issue manually: rm -rf ${PGO_DIR}
481457

482458
######## Download and install the last dmd buildable without dmd
@@ -508,19 +484,6 @@ export DEFAULT_DMD_CONF
508484
$G/dmd.conf: $(SRC_MAKE)
509485
echo "$$DEFAULT_DMD_CONF" > $@
510486

511-
######## optabgen generates some source
512-
optabgen_output = tytab.d
513-
514-
$G/optabgen: $C/optabgen.d $C/cc.d $C/oper.d $(HOST_DMD_PATH)
515-
$(HOST_DMD_RUN) -of$@ $(DFLAGS) $(MODEL_FLAG) $(BACK_MV) $<
516-
$G/optabgen
517-
mv $(optabgen_output) $G
518-
519-
optabgen_files = $(addprefix $G/, $(optabgen_output))
520-
$(optabgen_files): optabgen.out
521-
.INTERMEDIATE: optabgen.out
522-
optabgen.out : $G/optabgen
523-
524487
######## VERSION
525488
########################################################################
526489
# The version file should be updated on every build
@@ -546,10 +509,6 @@ FORCE: ;
546509

547510
-include $(DEPS)
548511

549-
$(G_DOBJS): $G/%.o: $C/%.d $(optabgen_files) posix.mak $(HOST_DMD_PATH)
550-
@echo " (HOST_DMD_RUN) BACK_DOBJS $<"
551-
$(HOST_DMD_RUN) -c -of$@ $(DFLAGS) $(MODEL_FLAG) $(BACK_BETTERC) $(BACK_DFLAGS) $<
552-
553512
################################################################################
554513
# Generate the man pages
555514
################################################################################
@@ -605,7 +564,7 @@ dscanner: $(DSCANNER_DIR)/dsc
605564
$G/cxxfrontend.o: $G/%.o: tests/%.c $(SRC) $(ROOT_SRC) $(SRC_MAKE)
606565
$(CXX) -c -o$@ $(CXXFLAGS) $(DMD_FLAGS) $(MMD) $<
607566

608-
$G/cxx-unittest: $G/cxxfrontend.o $(DMD_SRCS) $(ROOT_SRCS) $G/lexer.a $(G_DOBJS) $(STRING_IMPORT_FILES) $(HOST_DMD_PATH)
567+
$G/cxx-unittest: $G/cxxfrontend.o $(DMD_SRCS) $(ROOT_SRCS) $G/lexer.a $G/backend.o $(STRING_IMPORT_FILES) $(HOST_DMD_PATH)
609568
CC=$(HOST_CXX) $(HOST_DMD_RUN) -of$@ $(MODEL_FLAG) -vtls -J$G -J$(RES) -L-lstdc++ $(DFLAGS) -version=NoMain $(filter-out $(STRING_IMPORT_FILES) $(HOST_DMD_PATH),$^)
610569

611570
cxx-unittest: $G/cxx-unittest

0 commit comments

Comments
 (0)