CC ?= gcc DC ?= gdc AR ?= ar CFLAGS += -I. -fPIC -O4 # FIXME LDFLAGS += -ldl DFLAGS = -I. -O4 # TODO -frelease GCFLAGS = -fdata-sections -Xlinker --gc-sections EXE ?= PARSER_DS = \ DFixes/generators.d \ Languages/L0/Basescanner.d \ OPLs/OPL.d \ OPLs/OPTLoader.d \ Languages/L0/ShuntingYardParser.d \ Languages/L1/Lexer.d \ Languages/L1/Tokens.d \ Languages/L1/Bindings.d \ Languages/L1/Parser.d \ ASTs/Nodes.d \ Languages/L1/Formatter.d \ Languages/L0/Treeformatter.d \ Evaluators/List.d \ Evaluators/Context.d \ Evaluators/IL.d \ Evaluators/Compilers.d PARSER_CS = \ OPLs/L0.c TUI_DS = \ TUI/Surface.d \ TUI/Attrs.d \ TUI/Theme.d \ TUI/Terminalclient.d \ TUI/Util.d \ TUI/Reactor.d \ TUI/Terminalinputclient.d # TODO Widgets.d OPLS = OPLs/L1.so OPLs/L1V.so OPLs/L1S.so OPLs/L1Newton.so all: $(OPLS) libparser.a main$(EXE) libparser.a: $(PARSER_DS) L0.o rm -f $@ $(DC) $(DFLAGS) -c $(PARSER_DS) $(LDFLAGS) $(AR) q $@ generators.o Basescanner.o OPL.o OPTLoader.o ShuntingYardParser.o Lexer.o Tokens.o Bindings.o Parser.o Nodes.o Formatter.o Treeformatter.o List.o Context.o IL.o Compilers.o L0.o libtui.a: $(TUI_DS) rm -f $@ $(DC) $(DFLAGS) -c $(PARSER_DS) $(AR) q $@ Surface.o Attrs.o Theme.o Util.o Reactor.o Terminalinputclient.o L0.o: OPLs/L0.c $(CC) $(CFLAGS) -c $< OPLs/L1.so: OPLs/L1.c $(CC) $(CFLAGS) $(LDFLAGS) -shared $< -o $@ OPLs/L1V.so: OPLs/L1V.c $(CC) $(CFLAGS) $(LDFLAGS) -shared $< -o $@ OPLs/L1S.so: OPLs/L1S.c $(CC) $(CFLAGS) $(LDFLAGS) -shared $< -o $@ OPLs/L1Newton.so: OPLs/L1Newton.c $(CC) $(CFLAGS) $(DYLDFLAGS) -shared $< -o $@ Interpreters.o: Evaluators/Interpreters.d libparser.a $(DC) -c $(DFLAGS) $< #-o $@ main$(EXE): main.d libparser.a Interpreters.o $(DC) $(DFLAGS) $(GCFLAGS) main.d Interpreters.o -L. -lparser $(LDFLAGS) ##strip $@ Tests/Languages/L1/Lexer/main$(EXE): Tests/Languages/L1/Lexer/main.d libparser.a $(DC) $(DFLAGS) $(GCFLAGS) $^ -o $@ $(LDFLAGS) #strip $@ Tests/Languages/L1/Parser/main$(EXE): Tests/Languages/L1/Parser/main.d libparser.a $(DC) $(DFLAGS) $(GCFLAGS) $^ -o $@ $(LDFLAGS) #strip $@ Tests/Languages/L1/Parser/pedantic$(EXE): Tests/Languages/L1/Parser/pedantic.d libparser.a $(DC) $(DFLAGS) $(GCFLAGS) $^ -o $@ $(LDFLAGS) #strip $@ Shell1/main$(EXE): Shell1/main.d libparser.a $(DC) $(DFLAGS) $(GCFLAGS) Shell1/main.d -L. -lparser -o $@ $(LDFLAGS) strip $@ test: $(OPLS) Tests/Languages/L1/Lexer/main$(EXE) Tests/Languages/L1/Parser/main$(EXE) Tests/Languages/L1/Parser/pedantic$(EXE) ./Tests/run clean: rm -f -- *.o distclean: clean rm -f libparser.a libtui.a rm -f a.out rm -f main$(EXE) rm -f Shell1/main$(EXE)