-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSubmakefile
More file actions
120 lines (94 loc) · 4.59 KB
/
Submakefile
File metadata and controls
120 lines (94 loc) · 4.59 KB
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
STERPSRCS := emc/sterp/sterp.cc
USERSRCS += $(STERPSRCS)
TARGETS += ../lib/linuxcnc/sterp.so
THISDIR = $(CURDIR)/emc/sterp/
TITLE = gcode++
CXX ?= g++
OBJECTS = $(THISDIR)build/util.o $(THISDIR)build/frontend.o $(THISDIR)build/bytecode.o \
$(THISDIR)build/expression.o $(THISDIR)build/machine.o $(THISDIR)build/line.o \
$(THISDIR)build/instructions.o $(THISDIR)build/canvas.o
EXTERN = $(THISDIR)extern/
### replace with your path(s) ###
ANTLR4_LIB = $(EXTERN)antlr4/lib/
ANTLR4_INCLUDE = -I $(EXTERN)antlr4/gen/ -I $(EXTERN)antlr4/include/
ANTLR4_OBJECTS = $(THISDIR)build/lexer_antlr4.o $(THISDIR)build/parser_antlr4.o \
$(THISDIR)build/parser_antlr4BaseVisitor.o
STB_INCLUDE = -I $(EXTERN)stb/
### testing with doctest ###
TEST_TYPE = unit
TEST_INCLUDE = -I $(EXTERN)doctest/
TEST_TARGETS = unit regression
UNIT_TEST_FILES = tests/unit.cpp tests/testutil.cpp \
tests/calculation.cpp tests/extended_grammar.cpp \
tests/gcode.cpp tests/mcode.cpp tests/edge_cases.cpp \
tests/g93_97.cpp tests/g81_83.cpp tests/g84_86.cpp \
tests/g87_89.cpp tests/errors.cpp
LDFLAGS = -L $(ANTLR4_LIB) -lantlr4-runtime
CXXFLAGS = -std=c++17 -fPIC -g -I $(THISDIR)include/ $(ANTLR4_INCLUDE) $(STB_INCLUDE)
CXXFLAGS += -Wno-overloaded-virtual -Wno-reorder -Wno-sign-compare -Wno-unused-variable -Wno-write-strings
.PHONY: all dev clean new antlr test regression unit
default: linuxcnc
$(call TOOBJSDEPS, $(STERPSRCS)) : EXTRAFLAGS=-fPIC
../lib/linuxcnc/sterp.so: $(ANTLR4_OBJECTS) $(OBJECTS) $(patsubst %.cc,objects/%.o,$(STERPSRCS)) ../lib/liblinuxcncini.so ../lib/librs274.so
cp $(EXTERN)antlr4/lib/libantlr4-runtime.so.4.13.2 ../lib/libantlr4-runtime.so.4.13.2
mkdir -p $(THISDIR)build $(THISDIR)out
$(ECHO) Linking $(notdir $@)
$(Q)mkdir -p ../lib/linuxcnc
$(Q)rm -f $@
# $(Q)$(CXX) $(LDFLAGS) -Wl,-soname,$(notdir $@) -shared -o $@ $^ $(LIBDL)
$(Q)$(CXX) -Wl,--whole-archive $(LDFLAGS) -Wl,--no-whole-archive \
-Wl,-soname,$(notdir $@) -shared -o $@ $^ $(LIBDL)
linuxcnc: $(call TOOBJSDEPS, $(STERPSRCS))
test:
echo "Working on $(TEST_TYPE) tests."
$(MAKE) --no-print-directory $(TEST_TYPE)
unit: $(OBJECTS) $(ANTLR4_OBJECTS) $(UNIT_TEST_FILES)
mkdir -p $(THISDIR)build $(THISDIR)out
echo "Building unit tests..."
$(CXX) $(UNIT_TEST_FILES) \
$(OBJECTS) $(ANTLR4_OBJECTS) -o $(THISDIR)build/unit $(CXXFLAGS) $(LDFLAGS) $(TEST_INCLUDE)
echo "Running unit tests..."
./$(THISDIR)build/unit
regression: $(OBJECTS) $(ANTLR4_OBJECTS)
mkdir -p $(THISDIR)build $(THISDIR)out
echo "Building regression tests..."
$(CXX) tests/regression.cpp $(TEST_INCLUDE) \
$(OBJECTS) $(ANTLR4_OBJECTS) -o $(THISDIR)build/regression $(CXXFLAGS) $(LDFLAGS)
./$(THISDIR)build/regression -s
# antlr:
# mkdir -p $(THISDIR)build $(THISDIR)out
# cd $(EXTERN)antlr4 && java -jar $(EXTERN)antlr4/antlr-4.13.2-complete.jar -Dlanguage=Cpp \
-visitor -o $(EXTERN)antlr4/gen $(THISDIR)antlr4/lexer_antlr4.g4 $(THISDIR)antlr4/parser_antlr4.g4
dev: $(OBJECTS) $(ANTLR4_OBJECTS)
mkdir -p $(THISDIR)build $(THISDIR)out
$(CXX) src/main.cpp $(OBJECTS) $(ANTLR4_OBJECTS) -o $(THISDIR)build/$(TITLE) \
$(CXXFLAGS) $(LDFLAGS)
DIR = /usr/local/bin
install: $(OBJECTS) $(ANTLR4_OBJECTS)
sudo $(CXX) src/main.cpp $(OBJECTS) $(ANTLR4_OBJECTS) -o $(DIR)/$(TITLE) \
$(CXXFLAGS) $(LDFLAGS)
# $(THISDIR)build/lexer_antlr4.o: $(EXTERN)antlr4/gen/lexer_antlr4.cpp
# mkdir -p $(THISDIR)build $(THISDIR)out
# $(CXX) -c $< -o $@ $(CXXFLAGS)
$(THISDIR)build/parser_antlr4.o: $(EXTERN)antlr4/gen/parser_antlr4.cpp
mkdir -p $(THISDIR)build $(THISDIR)out
$(CXX) -c $< -o $@ $(CXXFLAGS)
$(THISDIR)build/parser_antlr4BaseVisitor.o: $(EXTERN)antlr4/gen/parser_antlr4BaseVisitor.cpp
mkdir -p $(THISDIR)build $(THISDIR)out
$(CXX) -c $< -o $@ $(CXXFLAGS)
$(EXTERN)antlr4/gen/%.cpp: $(THISDIR)antlr4/lexer_antlr4.g4 $(THISDIR)antlr4/parser_antlr4.g4
mkdir -p $(THISDIR)build $(THISDIR)out
cd $(EXTERN)antlr4 && java -jar $(EXTERN)antlr4/antlr-4.13.2-complete.jar -Dlanguage=Cpp \
-visitor -o $(EXTERN)antlr4/gen $(THISDIR)antlr4/lexer_antlr4.g4 $(THISDIR)antlr4/parser_antlr4.g4
$(THISDIR)build/%.o: $(THISDIR)src/%.cpp
mkdir -p $(THISDIR)build $(THISDIR)out
$(CXX) -c $< -o $@ $(CXXFLAGS)
clean:
rm -rf ${OBJECTS} $(ANTLR4_OBJECTS) $(THISDIR)build/unit.o $(THISDIR)build/unit \
$(THISDIR)build/regression $(THISDIR)build/regression.o $(EXTERN)antlr4/gen/* $(THISDIR)build/$(TITLE)
# helper to make new source-header pairs
name ?= newfile
new:
printf "#ifndef smv_gpp_$(name)_hpp\n" > include/$(name).hpp
printf "#define smv_gpp_$(name)_hpp\n\n\n#endif\n" >> include/$(name).hpp
printf "#include \"$(name).hpp\"" > src/$(name).cpp