-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
70 lines (46 loc) · 1.38 KB
/
Makefile
File metadata and controls
70 lines (46 loc) · 1.38 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
# Copyright (c) 2018 Brandon Freitag <freitagbr@gmail.com>
NAME := cryptopals
SRCDIR := cryptopals
BUILDDIR := build
BINDIR := $(BUILDDIR)/bin
LIBDIR := $(BUILDDIR)/lib
OBJDIR := $(BUILDDIR)/obj
INCLUDES := -I./
CXXSTD := -std=c++11
WARNINGS := -Wall -Wextra -Werror -pedantic
OPTIMIZE := -O
CXXFLAGS := $(CXXSTD) $(WARNINGS) $(OPTIMIZE) $(INCLUDES)
LDLIBS := -lm -lssl -lcrypto
VALGRIND := valgrind
LIBSRCS := $(wildcard $(SRCDIR)/*.cpp)
LIBOBJS := $(patsubst $(SRCDIR)/%.cpp,$(OBJDIR)/%.o,$(LIBSRCS))
LIB := $(LIBDIR)/lib$(NAME).a
BINSRCS := $(wildcard $(SRCDIR)/set*/*.cpp)
BINOBJS := $(patsubst $(SRCDIR)/%.cpp,$(OBJDIR)/%.o,$(BINSRCS))
BINS := $(patsubst $(OBJDIR)/%.o,$(BINDIR)/%,$(BINOBJS))
# top-level targets
.PHONY: all debug test valgrind sets clean
all: sets
debug: clean
debug: CXXFLAGS += -DDEBUG
debug: sets
test: sets
-for c in $(BINS); do $$c; done
valgrind: debug
-for c in $(BINS); do $(VALGRIND) $$c; done
sets: $(BINS)
# objects
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
@[ -d $(dir $@) ] || mkdir -p $(dir $@)
$(CXX) $(CXXFLAGS) -o $@ -c $<
# library
$(LIB): $(LIBOBJS)
@[ -d $(dir $@) ] || mkdir -p $(dir $@)
$(LD) -r -o $(OBJDIR)/$(NAME).o $^
$(AR) rs $@ $(OBJDIR)/$(NAME).o
# binaries
$(BINS): $(BINDIR)/%: $(OBJDIR)/%.o $(LIB)
@[ -d $(dir $@) ] || mkdir -p $(dir $@)
$(CXX) $(CXXFLAGS) -o $@ $^ $(LDLIBS)
clean:
$(RM) -r $(BUILDDIR)