-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
executable file
·114 lines (97 loc) · 3.05 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
109
110
111
112
113
114
#DIRECTORY LAYOUT
SRCDIR=emu
BINDIR=bin
LIBDIR=lib
OBJDIR=obj
TESTDIR=test
TESTS=boardtest proctest ex_tp_test
#OUTPUTS AND THEIR PREREQUISITES
BINS=main
LIBS=libemu.a
HDRS=board processor example/termproc
OUTPUTS=$(BINS:%=$(BINDIR)/%) $(TESTS:%=$(TESTDIR)/%) $(BINS) $(LIBS:%=$(LIBDIR)/%)
OMAIN=main board processor example/termproc
MAIN_OBJECTS=$(OMAIN:%=$(OBJDIR)/%.o)
OBTEST=board boardtest
BTEST_OBJECTS=$(OBTEST:%=$(OBJDIR)/%.o)
OPTEST=board processor proctest
PTEST_OBJECTS=$(OPTEST:%=$(OBJDIR)/%.o)
OTPTEST=ex_tp_test board processor example/termproc
TPTEST_OBJECTS=$(OTPTEST:%=$(OBJDIR)/%.o)
OLIB=board processor example/termproc
LIB_OBJECTS=$(OLIB:%=$(OBJDIR)/%.o)
#LINKING AND INCLUDES
LOCAL_INCLUDES=-I. -I$(SRCDIR)
EXTERN_INCLUDES=
LIB_SEARCH=
LINK_LIBS=
INCLUDES=$(LOCAL_INCLUDES) $(EXTERN_INCLUDES)
#CONFIGURATION VARIABLES
CC=gcc
STANDARDS=-Wall
BUILD_TYPE=-g
BUILD_PARAM=$(STANDARDS) $(BUILD_TYPE)
CFLAGS=$(BUILD_PARAM) $(INCLUDES)
LDFLAGS=$(LIB_SEARCH) $(LINK_LIBS)
BFLAGS=$(BUILD_PARAM) $(INCLUDES) $(LIB_SEARCH) $(LINK_LIBS)
#MAIN TARGET
all: $(OUTPUTS) $(HDRS:%=$(LIBDIR)/%.h)
#DIRECTORY STRUCTURE
$(BINDIR):
@printf '\e[33mCREATING DIRECTORY \e[96m$@\e[m\n'
mkdir $(BINDIR)
$(OBJDIR):
@printf '\e[33mCREATING DIRECTORY \e[96m$@\e[m\n'
mkdir $(OBJDIR)
$(SRCDIR):
@printf '\e[33mCREATING DIRECTORY \e[96m$@\e[m\n'
mkdir $(SRCDIR)
$(LIBDIR):
@printf '\e[33mCREATING DIRECTORY \e[96m$@\e[m\n'
mkdir $(LIBDIR)
$(TESTDIR):
@printf '\e[33mCREATING DIRECTORY \e[96m$@\e[m\n'
mkdir $(TESTDIR)
#HEADER COPYING
$(LIBDIR)/%.h: $(SRCDIR)/%.h
@mkdir -p $(dir $@)
@printf '\e[33mCOPYING \e[96m$@\e[m \e[33mFROM \e[94m$^\e[m\n'
cp $^ $@
#SYMLINKS FOR OUTPUTS
%: $(BINDIR)/%
@printf '\e[33mCREATING SYMLINK \e[96m$@\e[m \e[33mTO \e[94m$^\e[m\n'
ln -s $^ $@
#BINARY TARGETS
$(BINDIR)/main: $(MAIN_OBJECTS) | $(BINDIR)
@printf '\033[33mLINKING \033[96m$@\033[m \033[33mFROM \033[94m$^\033[m\n'
$(CC) $(BUILD_PARAM) $^ $(LDFLAGS) -o $@
@printf "\033[m"
$(TESTDIR)/boardtest: $(BTEST_OBJECTS) | $(TESTDIR)
@printf '\033[33mLINKING \033[96m$@\033[m \033[33mFROM \033[94m$^\033[m\n'
$(CC) $(BUILD_PARAM) $^ $(LDFLAGS) -o $@
@printf "\033[m"
$(TESTDIR)/proctest: $(PTEST_OBJECTS) | $(TESTDIR)
@printf '\033[33mLINKING \033[96m$@\033[m \033[33mFROM \033[94m$^\033[m\n'
$(CC) $(BUILD_PARAM) $^ $(LDFLAGS) -o $@
@printf "\033[m"
$(LIBDIR)/libemu.a: $(LIB_OBJECTS) | $(LIBDIR)
@printf '\033[33mARCHIVING \033[96m$@\033[m \033[33mFROM \033[94m$^\033[m\n'
ar rcs $@ $^
@printf "\033[m"
$(TESTDIR)/ex_tp_test: $(TPTEST_OBJECTS) | $(TESTDIR)
@printf '\033[33mLINKING \033[96m$@\033[m \033[33mFROM \033[94m$^\033[m\n'
$(CC) $(BUILD_PARAM) $^ $(LDFLAGS) -o $@
@printf "\033[m"
#GENERIC OBJECT TARGET
$(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR) $(SRCDIR)
@mkdir -p $(dir $@)
@printf '\033[33mCOMPILING \033[96m$@\033[m \033[33mFROM \033[94m$^\033[m\n'
$(CC) $(CFLAGS) -c $< -o $@
@printf "\033[m"
#CLEANING
clean:
@printf '\033[33mCLEANING...\033[m\n'
rm -r -f -v *~ $(OBJDIR)
clobber: clean
@printf '\033[33mCLOBBERING...\033[m\n'
rm -r -f -v $(OUTPUTS) $(BINDIR) $(TESTDIR) $(LIBDIR)