-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmakefile
More file actions
85 lines (66 loc) · 2.2 KB
/
makefile
File metadata and controls
85 lines (66 loc) · 2.2 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
###########################################################################################################################
# tells the makefile to use bash as the shell
SHELL := /bin/bash
WARNINGFLAGS=-Wall -Wno-unused-variable -Wno-unused-function -Wno-unused-but-set-variable -Wno-comment -Werror
# Some default variables
RELEASE?=n
HEADER?=n
# Where are we putting the build stuff?
ifeq "$(RELEASE)" "n"
BINDIR=bin/debug/x86-64-GCC-Linux/
CXX_FLAGS= -std=c++17 $(WARNINGFLAGS) -march=native -DLINUX -DDEBUG -ggdb
CC_FLAGS= -std=c99 $(WARNINGFLAGS) -march=native -DLINUX -DDEBUG -ggdb
DEPFLAGS= -MT $@ -MMD -MP -MF $@.Td
POSTCOMPILE= @mv -f $@.Td $@.d && touch $@
else
BINDIR=bin/release/x86-64-GCC-Linux/
CXX_FLAGS= -std=c++17 $(WARNINGFLAGS) -DLINUX -o3
CC_FLAGS= -std=c99 $(WARNINGFLAGS) -DLINUX -o3
DEPFLAGS=
POSTCOMPILE=
endif
# output directory lists
OBJDIR=$(BINDIR)obj
# find GCC bits
CC=$(shell which gcc)
CXX=$(shell which g++)
AR=$(shell which gcc-ar)
GCCVERSION=$(shell $(CC) -dumpversion)
COMPILE.cxx= @echo " CXX "$< && $(CXX)
COMPILE.c= @echo " CC "$< && $(CC)
COMPILE.link= @echo " LINK "$@ && $(CXX)
# get source listings for projects
MAIN_SRC=\
main.cpp \
arguments.cpp
# change the extension to .o & add obj/ prefix
MAIN_OBJS=$(addprefix $(OBJDIR)/,$(addsuffix .o, $(basename $(MAIN_SRC))))
###########################################################################################################################
# targets
# top targets
all: $(BINDIR)memcpytest
# target for build directories
.PRECIOUS: $(BINDIR)%/
$(BINDIR)%/:
@mkdir $@ -p
@echo " DIR "$@
# cleanup target
clean:
rm -rf bin
# source files
.SECONDEXPANSION:
$(OBJDIR)/%.o: %.cpp $(OBJDIR)/%.o.d | $$(@D)/
$(COMPILE.cxx) $(CXX_FLAGS) $(DEPFLAGS) -fpic -o $@ -c $<
$(POSTCOMPILE)
.SECONDEXPANSION:
$(OBJDIR)/%.o: %.c $(OBJDIR)/%.o.d | $$(@D)/
$(COMPILE.c) $(CC_FLAGS)) $(DEPFLAGS) -fpic -o $@ -c $<
$(POSTCOMPILE)
# dependency dummy - stops header deps getting killed off
$(OBJDIR)/%.o.d: ;
.PRECIOUS: $(OBJDIR)/%.o.d
# output
$(BINDIR)memcpytest: $(MAIN_OBJS)
$(COMPILE.link) $(MAIN_OBJS) -static-libstdc++ -lpthread -o $@
# header dependency includes
include $(wildcard $(patsubst %,%.d,$(MAIN_OBJS)))