-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathGNUmakefile
103 lines (85 loc) · 2.7 KB
/
GNUmakefile
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
TARGET := nppcrypt
OBJDIR := obj
SRCDIR := src
CXX := g++
C := gcc
CXXFLAGS := -std=c++11
CFLAGS :=
# cryptopp is built in src/cryptopp (instead of obj/cryptopp and bin/cryptopp) to avoid having to mess with the cryptopp makefile
CRYPTOPP := src/cryptopp/libcryptopp.a
LDFLAGS := -lstdc++ -Lsrc/cryptopp -lcryptopp
PREFIX := /usr/local
unexport LDFLAGS
DEP_SRC := $(shell find $(SRCDIR)/bcrypt -type f -name *.cpp)
DEP_SRC += $(shell find $(SRCDIR)/scrypt -type f -name *.c)
DEP_SRC += $(shell find $(SRCDIR)/keccak -type f -name *.cpp)
DEP_SRC += $(shell find $(SRCDIR)/tinyxml2 -type f -name *.cpp)
MAIN_SRC := src/clihelp.cpp src/crypt_help.cpp src/crypt.cpp src/cmdline.cpp src/exception.cpp src/cryptheader.cpp
ifeq ($(mode),debug)
CFLAGS += -g3 -ggdb -O0 -Wall -Wextra -Wno-unused -DDEBUG
CXXFLAGS += -g3 -ggdb -O0 -Wall -Wextra -Wno-unused -DDEBUG
SUBDIR := debug
else
CFLAGS += -g2 -Os -fdata-sections -ffunction-sections -DNDEBUG
CXXFLAGS += -g2 -Os -fdata-sections -ffunction-sections -DNDEBUG
LDFLAGS +=
SUBDIR := release
endif
DEP_OBJ := $(patsubst $(SRCDIR)/%,$(OBJDIR)/$(SUBDIR)/%,$(patsubst %.cpp,%.o,$(patsubst %.c,%.o,$(DEP_SRC))))
MAIN_OBJ := $(patsubst $(SRCDIR)/%,$(OBJDIR)/$(SUBDIR)/%,$(MAIN_SRC:.cpp=.o))
.PHONY: all
all:
$(MAKE) info
$(MAKE) directories
$(MAKE) $(CRYPTOPP)
$(MAKE) bin/$(SUBDIR)/$(TARGET)
.PHONY: info
info:
ifeq ($(mode),debug)
@echo "building nppcrypt in debug mode..."
else
@echo "building nppcrypt in release mode..."
endif
.PHONY: directories
directories:
@mkdir -p bin/$(SUBDIR)
@mkdir -p obj/$(SUBDIR)
@mkdir -p obj/$(SUBDIR)/bcrypt
@mkdir -p obj/$(SUBDIR)/scrypt
@mkdir -p obj/$(SUBDIR)/keccak
@mkdir -p obj/$(SUBDIR)/tinyxml2
.PHONY: clean
clean:
@make -C src/cryptopp clean
@rm -rf $(OBJDIR)
.PHONY: install
install: bin/release/$(TARGET)
ifeq ($(target),global)
@cp $< /usr/bin/$(TARGET)
else
@mkdir -p $(DESTDIR)$(PREFIX)/bin
@cp $< $(DESTDIR)$(PREFIX)/bin/$(TARGET)
endif
.PHONY: uninstall
uninstall:
ifeq ($(target),global)
@rm -f /usr/bin/$(TARGET)
else
@rm -f $(DESTDIR)$(PREFIX)/bin/$(TARGET)
endif
$(CRYPTOPP):
$(MAKE) -C src/cryptopp
bin/$(SUBDIR)/$(TARGET): $(MAIN_OBJ) $(DEP_OBJ)
$(CXX) $(CXXFLAGS) -o bin/$(SUBDIR)/$(TARGET) $^ $(LDFLAGS)
$(OBJDIR)/$(SUBDIR)/scrypt/%.o: src/scrypt/%.c
$(C) $(CFLAGS) -c -o $@ $<
$(OBJDIR)/$(SUBDIR)/bcrypt/%.o: src/bcrypt/%.cpp
$(CXX) $(CXXFLAGS) -c -o $@ $<
$(OBJDIR)/$(SUBDIR)/keccak/%.o: src/keccak/%.cpp
$(CXX) $(CXXFLAGS) -c -o $@ $<
$(OBJDIR)/$(SUBDIR)/tinyxml2/%.o: src/tinyxml2/%.cpp
$(CXX) $(CXXFLAGS) -c -o $@ $<
$(OBJDIR)/$(SUBDIR)/crypt.o: src/crypt.cpp
$(CXX) $(CXXFLAGS) -DCRYPTOPP_DISABLE_ASM -DCRYPTOPP_DISABLE_MIXED_ASM -c -o $@ $<
$(OBJDIR)/$(SUBDIR)/%.o: src/%.cpp
$(CXX) $(CXXFLAGS) -c -o $@ $<