-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
180 lines (151 loc) · 4.73 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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
mkfile_path = $(abspath $(lastword $(MAKEFILE_LIST)))
current_dir := $(notdir $(patsubst %/,%,$(dir $(mkfile_path))))
DFLAGS=
EXECUTABLE=bethela
INSTALLPATH=/usr/local/bin
RBUFFER_FLAG=
OS:=$(shell uname)
CXX:=g++
CXX_STANDARD:=-std=c++17
ifeq ($(CXX), clang++)
THREADING:=
else
THREADING:=
endif
TYPE:=release
VERSION:=portable
LINK:=dynamic
ifeq ($(LINK), dynamic)
LINKER:=
else ifeq ($(LINK), static)
LINKER:=-static
endif
ifeq ($(CXX), clang++)
ADDRESS_SANITIZER:=-fsanitize=address
THREADS_SANITIZER:=-fsanitize=thread
else
ADDRESS_SANITIZER:=
THREADS_SANITIZER:=
endif
ifeq ($(TYPE), release)
CXX_FLAGS:=-O3 -Wall -Wextra
else ifeq ($(TYPE), release2)
CXX_FLAGS:=-O2 -Wall -Wextra
else ifeq ($(TYPE), tune)
CXX_FLAGS:=-O3 -march=native -mtune=native -mcpu=native -Wall -Wextra
else ifeq ($(TYPE), debug)
CXX_FLAGS:=-O2 -Wall -Wextra $(ADDRESS_SANITIZER)
else ifeq ($(TYPE), debug_threads)
CXX_FLAGS:=-O2 -Wall -Wextra $(THREADS_SANITIZER)
endif
ifeq ($(VERSION), portable)
COMPILATION_MSG="compiling portable version"
VERSION_FLAGS:=-DUSE_CXX_AES
else ifeq ($(VERSION), aesni)
COMPILATION_MSG="compiling AES-NI version"
VERSION_FLAGS:=-DUSE_AESNI -DUSE_INTEL_AESNI -maes
else ifeq ($(VERSION), neon)
COMPILATION_MSG="compiling AES aarch64 neon version"
VERSION_FLAGS:=-DUSE_ARM_AES -DUSE_NEON_AES -march=armv8-a+crypto
endif
ifeq ($(RBUFFER), stack)
RBUFFER_FLAG:=-D_USE_RBUFFER_ON_STACK
endif
.PHONY: default environment compile install uninstall encrypt_decrypt randfile checkfile genkeys vig_encrypt_decrypt clean
default:
@echo "Makefile variables and possible values"
@echo "The the first element are always the default value"
@echo "CXX : g++, clang++"
@echo "TYPE : release, debug, debug_threads"
@echo "VERSION : portable, aesni, neon"
@echo "LINK : dynamic, static"
@echo "RBUFFER : heap, stack"
@echo ""
@echo "Makefile recipes"
environment:
@echo "OS : $(OS)"
compile:
@echo $(COMPILATION_MSG)
$(CXX) $(LINKER) $(CXX_STANDARD) main.cpp -o $(EXECUTABLE) $(DFLAGS) $(RBUFFER_FLAG) $(VERSION_FLAGS) $(THREADING) $(CXX_FLAGS)
install:
ifeq ($(OS), Linux)
@echo "created a symlink in $(INSTALLPATH)"
@ln -s $(dir $(abspath $(lastword $(MAKEFILE_LIST))))$(EXECUTABLE) $(INSTALLPATH)
else
@echo "Set It Manually for now"
endif
uninstall:
ifeq ($(OS), Linux)
@rm $(INSTALLPATH)/$(EXECUTABLE)
else
@rm ./$(EXECUTABLE)
endif
encrypt_decrypt:
@echo "Encrypting/Decrypting test files with:"
@./bethela --version
@./bethela --enc-AES256-replace AES256.key file0.subject file1.subject file2.subject file3.subject file4.subject file5.subject file6.subject file7.subject file8.subject file9.subject
@./bethela --dec-AES256-replace AES256.key file0.subject.bthl file1.subject.bthl file2.subject.bthl file3.subject.bthl file4.subject.bthl file5.subject.bthl file6.subject.bthl file7.subject.bthl file8.subject.bthl file9.subject.bthl
randfile:
@echo "compiling random file generator"
$(CXX) $(LINKER) $(CXX_STANDARD) tests/RandFile.cpp -o RandFile -O3
@echo "generating random files..."
@./RandFile
checkfile:
@echo "compiling equality file checker"
$(CXX) $(LINKER) $(CXX_STANDARD) tests/FileCompare.cpp -o FileCompare -O3
@echo "checking random files equality..."
@./FileCompare
genkeys:
@echo "generate keys"
@./bethela --generate testkeyVignere1000.key 1000
@./bethela --generate AES128.key 16
@./bethela --generate AES192.key 24
@./bethela --generate AES256.key 32
vig_encrypt_decrypt:
@echo "encrypting test files..."
@./bethela --encrypt-replace testkeyVignere1000.key *.subject
@./bethela --decrypt-replace testkeyVignere1000.key *.bthl
clean:
@rm *.key
@rm *.subject
@rm *.validator
@rm *.bthl
@rm FileCompare
@rm RandFile
simple-test:
@$(MAKE) compile CXX=clang++ TYPE=debug VERSION=aesni LINK=dynamic
@$(MAKE) genkeys CXX=clang++
@$(MAKE) randfile CXX=clang++
@$(MAKE) encrypt_decrypt
@$(MAKE) checkfile CXX=clang++
temp-linux-test-flow:
@$(MAKE) compile CXX=clang++ TYPE=debug VERSION=portable
@$(MAKE) genkeys CXX=clang++
@$(MAKE) randfile CXX=clang++
@$(MAKE) encrypt_decrypt
@$(MAKE) checkfile CXX=clang++
@$(MAKE) vig_encrypt_decrypt
@./FileCompare
@$(MAKE) compile CXX=clang++ TYPE=debug_threads VERSION=portable
@$(MAKE) encrypt_decrypt
@./FileCompare
@$(MAKE) vig_encrypt_decrypt
@./FileCompare
@$(MAKE) compile CXX=clang++ TYPE=debug VERSION=aesni
@$(MAKE) encrypt_decrypt
@./FileCompare
@$(MAKE) vig_encrypt_decrypt
@./FileCompare
@$(MAKE) compile CXX=clang++ TYPE=debug_threads VERSION=aesni
@$(MAKE) encrypt_decrypt
@./FileCompare
@$(MAKE) vig_encrypt_decrypt
@./FileCompare
download:
@echo "Downloading submodules"
@git submodule update --init --recursive
update:
@echo "Updating submodules"
@git submodule update --recursive --remote
style:
@clang-format -i -style=file *.cpp *.hpp tests/*.hpp tests/*.cpp