-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMakefile1
45 lines (36 loc) · 1.48 KB
/
Makefile1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
CC = clang++-16
CXXFLAGS = -std=c++2b -O3
FLEX = flex
BISON = bison
BISONFLAGS = --locations -k
BUILD_DIR = ./build1
INCLUDES = -Iinclude -I$(BUILD_DIR)
LEXER_HEADER = $(BUILD_DIR)/joos1w.lexer.do.not.use.h
LEXER_OBJ = $(BUILD_DIR)/joos1w_lexer.o
LEXER_SRC = $(BUILD_DIR)/lexer.cpp
PARSER_HEADER = $(BUILD_DIR)/joos1w.parser.tab.h
PARSER_OBJ = $(BUILD_DIR)/joos1w_parser.o
PARSER_SRC = $(BUILD_DIR)/parser.cpp
# Recursive glob .cc files under lib
JOOSC_SRCS = $(shell find lib -name '*.cc') tools/joosc/main.cc
JOOSC_OBJS = $(patsubst %.cc,%.o,$(JOOSC_SRCS))
JOOSC_OBJS := $(addprefix $(BUILD_DIR)/,$(JOOSC_OBJS))
joosc: $(JOOSC_OBJS) $(LEXER_OBJ) $(PARSER_OBJ)
@echo "Linking joosc"
@$(CC) $(CXXFLAGS) -o $@ $^
$(LEXER_SRC): lib/grammar/joos1w_lexer.l
@echo "Generating lexer" && mkdir -p $(BUILD_DIR)
@$(FLEX) --outfile=$(LEXER_SRC) --header-file=$(LEXER_HEADER) $<
$(PARSER_SRC): lib/grammar/joos1w_parser.y
@echo "Generating parser" && mkdir -p $(BUILD_DIR)
@$(BISON) $(BISONFLAGS) --output=$(PARSER_SRC) --defines=$(PARSER_HEADER) $<
$(LEXER_OBJ): $(LEXER_SRC) $(PARSER_SRC) # Flex requires bison to be run first
@echo "Building $@" && mkdir -p $(BUILD_DIR)
@$(CC) $(CXXFLAGS) $(INCLUDES) -c -o $@ $<
$(PARSER_OBJ): $(PARSER_SRC)
@echo "Building $@" && mkdir -p $(BUILD_DIR)
@$(CC) $(CXXFLAGS) $(INCLUDES) -c -o $@ $<
generated_sources: $(LEXER_OBJ) $(PARSER_OBJ)
$(BUILD_DIR)/%.o: %.cc generated_sources
@echo "Building $<" && mkdir -p $(dir $@)
@$(CC) $(CXXFLAGS) $(INCLUDES) -c -o $@ $<