@@ -14,6 +14,11 @@ B = $(CFG_BUILD_DIR)/$(CFG_BUILD)/stage2/
14
14
L = $(B ) lib/rustlib/$(CFG_BUILD ) /lib
15
15
LD = $(CFG_BUILD ) /stage2/lib/rustlib/$(CFG_BUILD ) /lib/
16
16
RUSTC = $(STAGE2_T_$(CFG_BUILD ) _H_$(CFG_BUILD ) )
17
+ ifeq ($(CFG_OSTYPE ) ,apple-darwin)
18
+ FLEX_LDFLAGS=-ll
19
+ else
20
+ FLEX_LDFLAGS=-lfl
21
+ endif
17
22
18
23
# Run the reference lexer against libsyntax and compare the tokens and spans.
19
24
# If "// ignore-lexer-test" is present in the file, it will be ignored.
@@ -67,3 +72,46 @@ $(info cfg: javac not available, skipping lexer test...)
67
72
check-lexer :
68
73
69
74
endif
75
+
76
+ $(BG ) lex.yy.c : $(SG ) lexer.l $(BG )
77
+ @$(call E, flex: $@ )
78
+ $(Q )$(CFG_FLEX ) -o $@ $<
79
+
80
+ $(BG ) lexer-lalr.o : $(BG ) lex.yy.c $(BG ) parser-lalr.tab.h
81
+ @$(call E, cc: $@ )
82
+ $(Q )$(CFG_CC ) -include $(BG ) parser-lalr.tab.h -c -o $@ $<
83
+
84
+ $(BG ) parser-lalr.tab.c $(BG ) parser-lalr.tab.h : $(SG ) parser-lalr.y
85
+ @$(call E, bison: $@ )
86
+ $(Q )$(CFG_BISON ) $< --output=$(BG ) parser-lalr.tab.c --defines=$(BG ) parser-lalr.tab.h \
87
+ --name-prefix=rs --warnings=error=all
88
+
89
+ $(BG ) parser-lalr.o : $(BG ) parser-lalr.tab.c
90
+ @$(call E, cc: $@ )
91
+ $(Q )$(CFG_CC ) -c -o $@ $<
92
+
93
+ $(BG ) parser-lalr-main.o : $(SG ) parser-lalr-main.c
94
+ @$(call E, cc: $@ )
95
+ $(Q )$(CFG_CC ) -std=c99 -c -o $@ $<
96
+
97
+ $(BG ) parser-lalr : $(BG ) parser-lalr.o $(BG ) parser-lalr-main.o $(BG ) lexer-lalr.o
98
+ @$(call E, cc: $@ )
99
+ $(Q )$(CFG_CC ) -o $@ $^ $(FLEX_LDFLAGS )
100
+
101
+
102
+ ifdef CFG_FLEX
103
+ ifdef CFG_BISON
104
+ check-grammar : $(BG ) $(BG ) parser-lalr
105
+ $(info Verifying grammar ...)
106
+ $(SG ) testparser.py -p $(BG ) parser-lalr -s $(S ) src
107
+
108
+ else
109
+ $(info cfg : bison not available, skipping parser test...)
110
+ check-grammar :
111
+
112
+ endif
113
+ else
114
+ $(info cfg : flex not available, skipping parser test...)
115
+ check-grammar :
116
+
117
+ endif
0 commit comments