-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMakefile.gnu
More file actions
366 lines (322 loc) · 13.3 KB
/
Copy pathMakefile.gnu
File metadata and controls
366 lines (322 loc) · 13.3 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
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
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
#
# Classic makefile for SmokeRand.
# Supports GCC and Clang (as Zig CC) compilers.
#
# Usage:
# make -f Makefile.gnu
# make -f Makefile.gnu PLATFORM_NAME=GCC
#
# Supported platforms: GCC, GCC32, DJGPP, MINGW-HX, ZIGCC
# Note: GCC includes MinGW and MSYS.
#
# DJGPP platform compiles all generators as DXE3 modules using the dxe3gen
# experimental linker supplied with DJGPP.
#
PLATFORM_NAME ?= GCC
LIB_SOURCES_EXTRA =
LIB_HEADERS_EXTRA =
GEN_LFLAGS =
GEN_DISABLED =
THREADLIB = -lpthread
ifeq ($(OS), Windows_NT)
FPIC_FLAGS =
else ifeq ($(PLATFORM_NAME), DJGPP)
FPIC_FLAGS =
else
FPIC_FLAGS = -fPIC
endif
GEN_CFLAGS = $(FPIC_FLAGS)
SHARED_CFLAGS = $(FPIC_FLAGS)
ifeq ($(PLATFORM_NAME), GCC)
CC = gcc
CXX = g++
AR = ar
# Note -fno-tree-slp-vectorize is needed for GCC 15.2 to avoid performance
# degradation for some algorithms due to excessive vectorization: e.g.
# in mall32, KISS family etc.
GEN_CFLAGS += -fno-tree-slp-vectorize -ffreestanding -nostdlib
GEN_LFLAGS = -lgcc
PLATFORM_FLAGS = -march=native
# May be useful for valgrind
#PLATFORM_FLAGS = -march=x86-64-v3
else ifeq ($(PLATFORM_NAME), GCC32)
CC = gcc
CXX = g++
AR = ar
GEN_CFLAGS += -ffreestanding -nostdlib
GEN_LFLAGS = -lgcc
PLATFORM_FLAGS = -m32 -march=native
else ifeq ($(PLATFORM_NAME), GCC_AARCH64_CROSS)
CC = aarch64-linux-gnu-gcc
CXX = aarch64-linux-gnu-g++
AR = ar
GEN_CFLAGS += -ffreestanding -nostdlib
GEN_LFLAGS = -lgcc
PLATFORM_FLAGS =
else ifeq ($(PLATFORM_NAME), DJGPP)
CC = gcc
CXX = gpp
AR = ar
GEN_CFLAGS += -ffreestanding -nostdlib
#GEN_LFLAGS = -lgcc
THREADLIB =
GEN_DISABLED = icg64 mrg32k3a sezgin63 wich1982 wich2006
PLATFORM_FLAGS = -m32 -march=i586 -DNOTHREADS -U__STRICT_ANSI__
LIB_SOURCES_EXTRA = pe32loader.c
LIB_HEADERS_EXTRA = pe32loader.h
else ifeq ($(PLATFORM_NAME), MINGW-HX)
CC = gcc
CXX = g++
AR = ar
GEN_CFLAGS += -ffreestanding -nostdlib -DNO_CUSTOM_DLLENTRY -DUSE_WINTHREADS
GEN_LFLAGS = -lgcc
THREADLIB =
PLATFORM_FLAGS = -m32 -march=i686
else ifeq ($(PLATFORM_NAME), ZIGCC)
CC = zig cc
CXX = zic c++
AR = zig ar
THREADLIB =
PLATFORM_FLAGS = -DUSE_WINTHREADS -march=native
else ifeq ($(PLATFORM_NAME), GENERIC)
CC = gcc
CXX = g++
AR = ar
THREADLIB =
PLATFORM_FLAGS = -DNO_X86_EXTENSIONS -DNOTHREADS -DNO_CUSTOM_DLLENTRY
endif
#-----------------------------------------------------------------------------
# Wcast-align=strict for debugging for GCC >6 may be useful
COMPILER_FLAGS = -O3 -Werror -Wall -Wextra -Wstrict-aliasing=1 -Wpedantic \
-Wshadow -Wconversion -Wvla -Wcast-align
CFLAGS = $(PLATFORM_FLAGS) -std=c99 $(COMPILER_FLAGS)
CXXFLAGS = $(PLATFORM_FLAGS) -std=c++11 $(COMPILER_FLAGS)
CFLAGS89 = $(PLATFORM_FLAGS) -std=c89 -O3 -Werror -Wall -Wextra -Wpedantic -Wshadow -Wvla
LINKFLAGS = $(PLATFORM_FLAGS)
SHARED_CFLAGS += $(CFLAGS)
INCLUDE = -Iinclude
APPSRCDIR = apps
SRCDIR = src
OBJDIR = obj
BINDIR = bin
LIBDIR = lib
INCLUDEDIR = include/smokerand
LFLAGS = -L$(LIBDIR) -lsmokerand_bat -lsmokerand_core -lm $(THREADLIB)
ifeq ($(OS), Windows_NT)
#GEN_LFLAGS =
#-Wl,--exclude-all-symbols
EXE = .exe
SO = .dll
PLATFORM_FLAGS += -D__USE_MINGW_ANSI_STDIO=1 -D_WIN32_WINNT=0x502
else ifeq ($(PLATFORM_NAME), DJGPP)
# DJGPP specific extensions: DXE3 modules and .exe for executables
EXE = .exe
SO = .dxe
else
# UNIX-like systems
EXE =
SO = .so
LFLAGS += -ldl
ifeq ($(PREFIX),)
PREFIX = /usr/local
endif
endif
# Core library
CORE_LIB = $(LIBDIR)/libsmokerand_core.a
LIB_SOURCES = $(addprefix $(SRCDIR)/, $(LIB_SOURCES_EXTRA) \
base64.c core.c coretests.c cpuinfo.c \
blake2s.c entropy.c extratests.c fileio.c lfsr_period.c lineardep.c \
hwtests.c specfuncs.c threads_intf.c)
LIB_HEADERS = $(addprefix $(INCLUDEDIR)/, $(LIB_HEADERS_EXTRA) \
apidefs.h cinterface.h coredefs.h int128defs.h x86exts.h ../smokerand_core.h \
base64.h core.h coretests.h cpuinfo.h \
blake2s.h entropy.h extratests.h fileio.h lfsr_period.h lineardep.h \
hwtests.h specfuncs.h threads_intf.h version.h)
LIB_OBJFILES = $(subst $(SRCDIR),$(OBJDIR),$(patsubst %.c,%.o,$(LIB_SOURCES)))
INTERFACE_HEADERS = $(INCLUDEDIR)/apidefs.h $(INCLUDEDIR)/coredefs.h \
$(INCLUDEDIR)/cinterface.h $(INCLUDEDIR)/int128defs.h \
$(INCLUDEDIR)/plugindefs.h $(INCLUDEDIR)/x86exts.h
# Battery
BAT_LIB = $(LIBDIR)/libsmokerand_bat.a
BATLIB_SOURCES = $(addprefix $(SRCDIR)/, bat_express.c bat_brief.c bat_default.c \
bat_file.c bat_full.c bat_special.c)
BATLIB_HEADERS = $(addprefix $(INCLUDEDIR)/, bat_express.h bat_brief.h bat_default.h \
bat_file.h bat_full.h bat_special.h) \
include/smokerand_bat.h
BATLIB_OBJFILES = $(subst $(SRCDIR),$(OBJDIR),$(patsubst %.c,%.o,$(BATLIB_SOURCES)))
# Executables
EXEC_NAMES = smokerand sr_speed sr_tiny calibrate_linearcomp calibrate_dc6 \
find_xorshift_params test_base64 \
test_crand test_funcs test_lfsr_period test_rdseed test_syscrypto
EXEC_OBJFILES = $(addprefix $(OBJDIR)/, $(addsuffix .o,$(EXEC_NAMES)))
EXECXX_NAMES = test_cpp11 test_chacha
EXECXX_OBJFILES = $(addprefix $(OBJDIR)/, $(addsuffix .o,$(EXECXX_NAMES)))
# Generators
GEN_CUSTOM_SOURCES = $(addsuffix .c,$(addprefix generators/, ranluxpp))
GEN_DISABLED_SOURCES = $(addsuffix .c,$(addprefix generators/, $(GEN_DISABLED)))
GEN_ALL_SOURCES = $(filter-out $(GEN_DISABLED_SOURCES), $(wildcard generators/*.c))
GEN_SOURCES = $(filter-out $(GEN_CUSTOM_SOURCES), $(GEN_ALL_SOURCES))
GEN_OBJFILES = $(patsubst %.c,%.o,$(subst generators/,$(BINDIR)/generators/obj/,$(GEN_SOURCES)))
GEN_SHARED = $(patsubst %.c,%$(SO),$(subst generators/,$(BINDIR)/generators/, $(GEN_ALL_SOURCES)))
GEN_BINDIR = $(BINDIR)/generators
#-----------------------------------------------------------------------------
all: $(CORE_LIB) $(BAT_LIB) $(addprefix $(BINDIR)/, $(addsuffix $(EXE),$(EXEC_NAMES))) \
$(addprefix $(BINDIR)/, $(addsuffix $(EXE),$(EXECXX_NAMES))) generators \
$(BINDIR)/bat_example$(SO)
$(CORE_LIB): $(LIB_OBJFILES)
$(AR) rcu $@ $^
$(BAT_LIB): $(BATLIB_OBJFILES)
$(AR) rcu $@ $^
$(BINDIR)/sr_tiny$(EXE): $(APPSRCDIR)/sr_tiny.c $(SRCDIR)/specfuncs.c include/smokerand/specfuncs.h
$(CC) $(CFLAGS89) $(LINKFLAGS) $(APPSRCDIR)/sr_tiny.c $(SRCDIR)/specfuncs.c -o $@ -lm $(INCLUDE)
$(BINDIR)/sr_speed$(EXE): $(OBJDIR)/sr_speed.o $(CORE_LIB) $(BAT_LIB) $(BAT_HEADERS)
$(CC) $(LINKFLAGS) $< -o $@ $(LFLAGS) $(INCLUDE)
$(BINDIR)/smokerand$(EXE): $(OBJDIR)/smokerand.o $(CORE_LIB) $(BAT_LIB) $(BAT_HEADERS)
$(CC) $(LINKFLAGS) $< -o $@ $(LFLAGS) $(INCLUDE)
$(BINDIR)/calibrate_dc6$(EXE): $(OBJDIR)/calibrate_dc6.o $(CORE_LIB) $(BAT_LIB)
$(CC) $(LINKFLAGS) $< -o $@ $(LFLAGS) $(INCLUDE)
$(BINDIR)/calibrate_linearcomp$(EXE): $(OBJDIR)/calibrate_linearcomp.o $(CORE_LIB)
$(CC) $(LINKFLAGS) $< -o $@ $(LFLAGS) $(INCLUDE)
$(BINDIR)/find_xorshift_params$(EXE): $(OBJDIR)/find_xorshift_params.o $(CORE_LIB)
$(CC) $(LINKFLAGS) $< -o $@ $(LFLAGS) $(INCLUDE)
$(BINDIR)/test_base64$(EXE): $(OBJDIR)/test_base64.o $(CORE_LIB) $(BAT_LIB)
$(CC) $(LINKFLAGS) $< -o $@ $(LFLAGS) $(INCLUDE)
$(BINDIR)/test_chacha$(EXE): $(OBJDIR)/test_chacha.o $(CORE_LIB) $(BAT_LIB)
$(CXX) $(LINKFLAGS) $< -o $@ $(LFLAGS) $(INCLUDE)
$(BINDIR)/test_cpp11$(EXE): $(OBJDIR)/test_cpp11.o $(CORE_LIB) $(BAT_LIB)
$(CXX) $(LINKFLAGS) $< -o $@ $(LFLAGS) $(INCLUDE)
$(BINDIR)/test_crand$(EXE): $(OBJDIR)/test_crand.o $(CORE_LIB) $(BAT_LIB)
$(CC) $(LINKFLAGS) $< -o $@ $(LFLAGS) $(INCLUDE)
$(BINDIR)/test_funcs$(EXE): $(OBJDIR)/test_funcs.o $(CORE_LIB) $(BAT_LIB)
$(CC) $(LINKFLAGS) $< -o $@ $(LFLAGS) $(INCLUDE)
$(BINDIR)/test_rdseed$(EXE): $(OBJDIR)/test_rdseed.o $(CORE_LIB) $(BAT_LIB)
$(CC) $(LINKFLAGS) $< -o $@ $(LFLAGS) $(INCLUDE)
$(BINDIR)/test_lfsr_period$(EXE): $(OBJDIR)/test_lfsr_period.o $(CORE_LIB) $(BAT_LIB)
$(CC) $(LINKFLAGS) $< -o $@ $(LFLAGS) $(INCLUDE)
$(BINDIR)/test_syscrypto$(EXE): $(OBJDIR)/test_syscrypto.o $(CORE_LIB) $(BAT_LIB)
$(CC) $(LINKFLAGS) $< -o $@ $(LFLAGS) $(INCLUDE)
$(BINDIR)/bat_example$(SO): $(OBJDIR)/bat_example.o
$(CC) -shared $(LINKFLAGS) $< -o $@ $(INCLUDE)
$(OBJDIR)/bat_example.o: $(APPSRCDIR)/bat_example.c $(INTERFACE_HEADERS)
$(CC) $(SHARED_CFLAGS) $(INCLUDE) -c $< -o $@
$(LIB_OBJFILES) $(BATLIB_OBJFILES): $(OBJDIR)/%.o : $(SRCDIR)/%.c $(LIB_HEADERS)
$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@
$(EXEC_OBJFILES): $(OBJDIR)/%.o : $(APPSRCDIR)/%.c $(LIB_HEADERS)
$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@
$(EXECXX_OBJFILES): $(OBJDIR)/%.o : $(APPSRCDIR)/%.cpp $(APPSRCDIR)/chacha.h $(LIB_HEADERS)
$(CXX) $(CXXFLAGS) $(INCLUDE) -c $< -o $@
.PHONY: clean generators install uninstall
generators: $(GEN_SHARED)
# Generic rules for linking PRNG plugins
ifeq ($(PLATFORM_NAME), DJGPP)
$(GEN_BINDIR)/%$(SO): $(GEN_BINDIR)/obj/%.o
dxe3gen $< -o $@
else
$(GEN_BINDIR)/%$(SO): $(GEN_BINDIR)/obj/%.o
$(CC) $(LINKFLAGS) -shared $(GEN_CFLAGS) $< -s $(GEN_LFLAGS) -o $@
endif
$(GEN_OBJFILES): $(BINDIR)/generators/obj/%.o : generators/%.c $(INTERFACE_HEADERS)
$(CC) $(CFLAGS) $(INCLUDE) $(GEN_CFLAGS) -c $< -o $@
# Generators that depend on some extra header files that should be taken
# into account in their dependency rules.
$(GEN_BINDIR)/obj/ranluxpp.o : generators/ranluxpp.c \
generators/ranluxpp_helpers.h generators/ranluxpp_mulmod.h $(INTERFACE_HEADERS)
$(CC) $(CFLAGS) $(INCLUDE) $(GEN_CFLAGS) -c $< -o $@
clean:
ifeq ($(OS), Windows_NT)
cmd /c "del $(BINDIR)\smokerand.exe"
cmd /c "del $(BINDIR)\bat_example.dll"
cmd /c "del $(BINDIR)\calibrate_dc6.exe"
cmd /c "del $(BINDIR)\calibrate_linearcomp.exe"
cmd /c "del $(BINDIR)\sr_speed.exe"
cmd /c "del $(BINDIR)\sr_tiny.exe"
cmd /c "del $(BINDIR)\test_base64.exe"
cmd /c "del $(BINDIR)\test_chacha.exe"
cmd /c "del $(BINDIR)\test_crand.exe"
cmd /c "del $(BINDIR)\test_cpp11.exe"
cmd /c "del $(BINDIR)\test_funcs.exe"
cmd /c "del $(BINDIR)\test_rdseed.exe"
cmd /c "del $(BINDIR)\test_syscrypto.exe"
cmd /c "del $(OBJDIR)\*.o /q"
cmd /c "del $(LIBDIR)\*.a /q"
cmd /c "del $(BINDIR)\generators\*.dll /q"
cmd /c "del $(BINDIR)\generators\obj\*.o"
cmd /c "del $(BINDIR)\generators\*.a /q"
else
rm -f $(BINDIR)/smokerand
rm -f $(BINDIR)/bat_example.so
rm -f $(BINDIR)/calibrate_dc6
rm -f $(BINDIR)/calibrate_linearcomp
rm -f $(BINDIR)/sr_speed
rm -f $(BINDIR)/sr_tiny
rm -f $(BINDIR)/test_base64
rm -f $(BINDIR)/test_chacha
rm -f $(BINDIR)/test_crand
rm -f $(BINDIR)/test_funcs
rm -f $(BINDIR)/test_cpp11
rm -f $(BINDIR)/test_rdseed
rm -f $(BINDIR)/test_syscrypto
rm -f $(OBJDIR)/*.o
rm -f $(LIBDIR)/*
rm -f $(BINDIR)/generators/*.so
rm -f $(BINDIR)/generators/obj/*.o
endif
install:
ifeq ($(OS), Windows_NT)
echo `make install` is supported only for UNIX-like systems.
else
install -d $(DESTDIR)$(PREFIX)/bin
install -d $(DESTDIR)$(PREFIX)/lib
install -d $(DESTDIR)$(PREFIX)/man
install -m 755 $(BINDIR)/smokerand $(DESTDIR)$(PREFIX)/bin
install -m 644 $(LIBDIR)/libsmokerand_bat.a $(DESTDIR)$(PREFIX)/lib
install -m 644 $(LIBDIR)/libsmokerand_core.a $(DESTDIR)$(PREFIX)/lib
gzip -c smokerand.1 > smokerand.1.gz
install -d $(DESTDIR)$(PREFIX)/man/man1
install -m 644 smokerand.1.gz $(DESTDIR)$(PREFIX)/man/man1
install -d $(DESTDIR)$(PREFIX)/include/smokerand
install -m 644 include/smokerand/*.h $(DESTDIR)$(PREFIX)/include/smokerand
install -m 644 include/smokerand_bat.h $(DESTDIR)$(PREFIX)/include
install -m 644 include/smokerand_core.h $(DESTDIR)$(PREFIX)/include
install -d $(DESTDIR)$(PREFIX)/lib/smokerand/generators
install -m 644 $(GEN_BINDIR)/*.so $(DESTDIR)$(PREFIX)/lib/smokerand/generators
install -d $(DESTDIR)$(PREFIX)/src/smokerand
install -d $(DESTDIR)$(PREFIX)/src/smokerand/generators
install -d $(DESTDIR)$(PREFIX)/src/smokerand/src
install -d $(DESTDIR)$(PREFIX)/src/smokerand/apps
install -m 644 src/*.c $(DESTDIR)$(PREFIX)/src/smokerand/src
install -m 644 apps/*.c $(DESTDIR)$(PREFIX)/src/smokerand/apps
install -m 644 apps/*.asm $(DESTDIR)$(PREFIX)/src/smokerand/apps
install -m 644 Makefile.gnu $(DESTDIR)$(PREFIX)/src/smokerand
install -m 644 CMakeLists.txt $(DESTDIR)$(PREFIX)/src/smokerand
install -m 644 generators/*.c $(DESTDIR)$(PREFIX)/src/smokerand/generators
install -m 644 generators/*.h $(DESTDIR)$(PREFIX)/src/smokerand/generators
install -d $(DESTDIR)$(PREFIX)/etc/smokerand
install -m 644 batscripts/*.cfg $(DESTDIR)$(PREFIX)/etc/smokerand
endif
uninstall:
ifeq ($(OS), Windows_NT)
echo `make uninstall` is supported only for UNIX-like systems.
else
rm -f $(DESTDIR)$(PREFIX)/bin/smokerand
rm -f $(DESTDIR)$(PREFIX)/lib/libsmokerand_bat.a
rm -f $(DESTDIR)$(PREFIX)/lib/libsmokerand_core.a
rm -f $(DESTDIR)$(PREFIX)/man/man1/smokerand.1.gz
rm -f $(DESTDIR)$(PREFIX)/include/smokerand/*
rm -f $(DESTDIR)$(PREFIX)/include/smokerand_bat.h
rm -f $(DESTDIR)$(PREFIX)/include/smokerand_core.h
rm -fd $(DESTDIR)$(PREFIX)/include/smokerand
rm -f $(DESTDIR)$(PREFIX)/lib/smokerand/generators/*.so
rm -fd $(DESTDIR)$(PREFIX)/lib/smokerand/generators
rm -fd $(DESTDIR)$(PREFIX)/lib/smokerand
rm -f $(DESTDIR)$(PREFIX)/src/smokerand/generators/*
rm -fd $(DESTDIR)$(PREFIX)/src/smokerand/generators
rm -f $(DESTDIR)$(PREFIX)/src/smokerand/src/*
rm -fd $(DESTDIR)$(PREFIX)/src/smokerand/src
rm -f $(DESTDIR)$(PREFIX)/src/smokerand/apps/*
rm -fd $(DESTDIR)$(PREFIX)/src/smokerand/apps
rm -f $(DESTDIR)$(PREFIX)/src/smokerand/*
rm -fd $(DESTDIR)$(PREFIX)/src/smokerand
rm -f $(DESTDIR)$(PREFIX)/etc/smokerand/*.cfg
rm -fd $(DESTDIR)$(PREFIX)/etc/smokerand
endif