/
Makefile
108 lines (88 loc) · 3.23 KB
/
Makefile
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
#Compiler and Linker
CC := clang++
GCC := gcc
#The Target Binary Program
TARGET := matec
TESTTARGET := test_suite
#The Directories, Source, Includes, Objects, Binary and Resources
SRCDIR := src
EXTDIR := ext
TESTDIR := test
INCDIR := inc
LIBDIR := lib
BUILDDIR := obj
TARGETDIR := bin
RESDIR := res
SRCEXT := cpp
DEPEXT := d
OBJEXT := o
current_dir = $(shell pwd)
#Flags, Libraries and Includes
CXXSTD := -std=c++11 -Wno-deprecated-register
CFLAGS := $(CXXSTD) -fopenmp -Wall -O3 -g
#LIB := -fopenmp -lm -larmadillo
DYNLIBPARAM := -dynamiclib
INC := -I$(INCDIR) -Isrc -Isrc/test -I$(LIBDIR) -I$(EXTDIR) -I/usr/local/opt/flex/include
PARSER_LEXER = parser lexer
#---------------------------------------------------------------------------------
#DO NOT EDIT BELOW THIS LINE
#---------------------------------------------------------------------------------
SOURCES := $(shell find $(SRCDIR) $(LIBDIR) -type f -name *.$(SRCEXT) -not -path "$(SRCDIR)/gambit/*" -not -path "$(SRCDIR)/check/*" -not -path "$(SRCDIR)/rook/*")
#SOURCES := $(shell find $(SRCDIR) $(LIBDIR) -type f -name *.$(SRCEXT))
OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.$(OBJEXT)))
MAINOBJS := $(shell echo $(OBJECTS) | sed 's/[^ ]*test[^ ]* *//g')
TESTOBJS := $(filter-out $(MAINOBJS), $(OBJECTS))
#Defauilt Make
all: directories $(TARGET) $(TESTTARGET)
#Remake
remake: cleaner all
#Copy Resources from Resources Directory to Target Directory
resources: directories
@cp $(RESDIR)/* $(TARGETDIR)/
#Make the Directories
directories:
mkdir -p $(TARGETDIR)
mkdir -p $(BUILDDIR)
mkdir -p $(TESTDIR)
mkdir -p $(INCDIR)
mkdir -p $(LIBDIR)
mkdir -p $(RESDIR)
#Clean only Objecst
clean:
$(RM) -rf $(BUILDDIR)
$(RM) -rf $(TARGETDIR)
$(RM) -r $(LIBDIR)/*.so
$(RM) -f $(TARGETDIR)
$(RM) -f src/gambit/parser.* src/rook/parser.*
$(RM) -f src/gambit/location.hh src/rook/location.hh
$(RM) -f src/gambit/position.hh src/rook/position.hh
$(RM) -f src/gambit/stack.hh src/rook/stack.hh
$(RM) -f src/gambit/lexer.yy.cpp src/rook/lexer.yy.cpp
#Clean only Objecst
watch: $(SRCDIR)
@fswatch -o $^/*.cpp | xargs -I{} bash build/compile.sh
#Full Clean, Objects and Binaries
cleaner: clean
$(RM) -rf $(TARGETDIR)
#Pull in dependency info for *existing* .o files
-include $(OBJECTS:.$(OBJEXT)=.$(DEPEXT))
-include build/gambit.mk
-include build/check.mk
-include build/rook.mk
-include build/ext/sqlite.mk
#Link
$(TARGET): $(filter-out $(TESTOBJS),$(OBJECTS))
$(CC) -o $(TARGETDIR)/$(TARGET) $^
$(TESTTARGET): $(filter-out $(BUILDDIR)/$(TARGET).$(OBJEXT),$(OBJECTS))
$(CC) -o $(TARGETDIR)/$(TESTTARGET) $^
#Compile src
$(BUILDDIR)/%.$(OBJEXT): $(SRCDIR)/%.$(SRCEXT)
mkdir -p $(dir $@)
$(CC) $(CFLAGS) $(INC) -c -o $@ $<
$(CC) $(CFLAGS) $(INC) -MM $(SRCDIR)/$*.$(SRCEXT) > $(BUILDDIR)/$*.$(DEPEXT)
cp -f $(BUILDDIR)/$*.$(DEPEXT) $(BUILDDIR)/$*.$(DEPEXT).tmp
sed -e 's|.*:|$(BUILDDIR)/$*.$(OBJEXT):|' < $(BUILDDIR)/$*.$(DEPEXT).tmp > $(BUILDDIR)/$*.$(DEPEXT)
sed -e 's/.*://' -e 's/\\$$//' < $(BUILDDIR)/$*.$(DEPEXT).tmp | fmt -1 | sed -e 's/^ *//' -e 's/$$/:/' >> $(BUILDDIR)/$*.$(DEPEXT)
rm -f $(BUILDDIR)/$*.$(DEPEXT).tmp
#Non-File Targets
.PHONY: all remake clean cleaner