-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathGNUmakefile
More file actions
65 lines (50 loc) · 1.84 KB
/
GNUmakefile
File metadata and controls
65 lines (50 loc) · 1.84 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
# This makefile will work for GCC on both Linux and Windows.
# It builds out-of-source, into build/Windows or build/Linux,
# and provides dependecy checks.
#
# Tested on Windows with TDM-GCC-64 9.2.0: built executables requires no external DLLs.
# It includes mingw32-make.exe This makefile also require mkdir and rm, which are found in
# C:\Program Files\Git\usr\bin if Git is installed. Use make -j or mingw32-make -j for
# fast parallel compilation.
ifeq ($(OS),Windows_NT)
EXE := .exe
SYS := build/Windows
else
SYS := build/$(shell uname)
endif
OBJ_DIR := $(SYS)/obj
BIN_DIR := $(SYS)/bin
PRAND := PractRand
LIB_SRCS := $(wildcard src/*.cpp) $(wildcard src/RNGs/*.cpp) $(wildcard src/RNGs/other/*.cpp)
LIB_OBJS := $(LIB_SRCS:%.cpp=$(OBJ_DIR)/%.o)
LIB_DEPS := $(LIB_SRCS:%.cpp=$(OBJ_DIR)/%.d)
PRAND_LIB := $(OBJ_DIR)/lib$(PRAND).a
PNAMES := RNG_test RNG_benchmark RNG_output # Test_calibration
PROGRAMS := $(PNAMES:%=$(BIN_DIR)/%$(EXE))
PROG_SRCS := $(PNAMES:%=tools/%.cpp)
PROG_OBJS := $(PROG_SRCS:%.cpp=$(OBJ_DIR)/%.o)
PROG_DEPS := $(PROG_SRCS:%.cpp=$(OBJ_DIR)/%.d)
CXX := g++
CXXFLAGS ?= -std=c++11 -O2 -MMD -Iinclude -Wno-shift-count-overflow
LDFLAGS ?= -pthread
AR_RCS := ar rcs
MKDIR_P := mkdir -p
RM_F := rm -f
STRIP := strip
all: $(PROGRAMS)
clean:
$(RM_F) $(LIB_OBJS) $(PROG_OBJS) $(LIB_DEPS) $(PROG_DEPS) $(PRAND_LIB)
distclean:
$(RM_F) $(OBJ_DIR) $(BIN_DIR)
$(PRAND_LIB): $(LIB_OBJS)
$(AR_RCS) $@ $(LIB_OBJS)
$(OBJ_DIR)/%.o: %.cpp
@$(MKDIR_P) $(@D)
$(CXX) -o $@ $< -c $(CXXFLAGS)
$(BIN_DIR)/%$(EXE): $(OBJ_DIR)/tools/%.o $(PRAND_LIB)
@$(MKDIR_P) $(@D)
$(CXX) -o $@ $< -L$(OBJ_DIR) $(LDFLAGS) -l$(PRAND)
$(STRIP) $@
.SECONDARY: $(PROG_OBJS) # Prevent deleting objs after building
.PHONY: all clean distclean
-include $(LIB_DEPS) $(PROG_DEPS)