forked from trailofbits/uthenticode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
GNUmakefile
112 lines (94 loc) · 2.78 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
103
104
105
106
107
108
109
110
111
112
.DEFAULT: build
ifeq ($(CFG),)
CFG:=DEBUG
endif
COMPILE.cpp = $(CXX) $(CXXFLAGS) $(CXXFLAGS.$(CFG)) $(CPPFLAGS) $(CPPFLAGS.$(CFG)) $(TARGET_ARCH) -c
LINK.cpp = $(CXX) $(LDFLAGS) $(TARGET_ARCH)
SOURCES.PEPARSE:=$(filter-out %/unicode_winapi.cpp,$(wildcard pe-parse/pe-parser-library/src/*.cpp))
SOURCES.UTHENTICODE:=$(wildcard src/*.cpp)
SOURCES.SVCLI:=$(wildcard src/svcli/*.cpp)
VERSION.PEPARSE:=$(shell cat pe-parse/VERSION)
VERSION.UTHENTICODE:=$(shell cat VERSION)
OBJECTS.PEPARSE:=$(addprefix obj/,$(SOURCES.PEPARSE:.cpp=.o))
OBJECTS.UTHENTICODE:=$(addprefix obj/,$(SOURCES.UTHENTICODE:.cpp=.o))
OBJECTS.SVCLI:=$(addprefix obj/,$(SOURCES.SVCLI:.cpp=.o))
OBJECTS:=$(OBJECTS.PEPARSE) $(OBJECTS.UTHENTICODE) $(OBJECTS.UTHENTICODE)
CPPFLAGS.RELEASE:=-DNDEBUG
CXXFLAGS.RELEASE:=-O3
CPPFLAGS.DEBUG:=-DDEBUG -D_DEBUG
CXXFLAGS.DEBUG:=-O0
LDLIBS:= \
-l:libcrypto.a
CPPFLAGS:= \
-MMD
CPPFLAGS.UTHENTICODE:= \
-DUTHENTICODE_VERSION=\"$(VERSION.UTHENTICODE)\" \
-Isrc/include
CPPFLAGS.PEPARSE:= \
-DPEPARSE_VERSION=\"$(VERSION.PEPARSE)\" \
-Ipe-parse/pe-parser-library/include
CXXFLAGS:= \
-g3 \
-ggdb \
-fPIC \
-std=c++17 \
-Wall \
-Wextra \
-pedantic \
-Werror
CXXFLAGS.PEPARSE:= \
-Wcast-align \
-Wcast-qual \
-Wcomment \
-Wctor-dtor-privacy \
-Wdisabled-optimization \
-Wformat=2 \
-Winit-self \
-Wlong-long \
-Wmissing-declarations \
-Wmissing-include-dirs \
-Wno-missing-declarations \
-Wno-strict-overflow \
-Wold-style-cast \
-Woverloaded-virtual \
-Wredundant-decls \
-Wshadow \
-Wsign-conversion \
-Wsign-promo \
-Wstrict-overflow=5 \
-Wswitch-default \
-Wundef \
-Wuninitialized \
-Wunused
ifneq ($(VERBOSE),)
LDFLAGS:= $(LDFLAGS) \
-Wl,--verbose
CXXFLAGS:= $(CXXFLAGS) \
--verbose
endif
$(OBJECTS.PEPARSE): CXXFLAGS+=$(CXXFLAGS.PEPARSE)
$(OBJECTS.PEPARSE): CPPFLAGS+=$(CPPFLAGS.PEPARSE)
$(OBJECTS.UTHENTICODE) $(OBJECTS.SVCLI): CPPFLAGS+=$(CPPFLAGS.UTHENTICODE) $(filter -I%,$(CPPFLAGS.PEPARSE))
$(OBJECTS.UTHENTICODE) $(SOURCES.PEPARSE): pe-parse
obj/%.o: %.cpp
@test -d $(@D) || mkdir -p $(@D)
$(strip $(COMPILE.cpp) $(OUTPUT_OPTION) $<)
svcli: $(OBJECTS.PEPARSE) $(OBJECTS.UTHENTICODE) $(OBJECTS.SVCLI)
$(strip $(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@)
libpe-parse.so: $(OBJECTS.PEPARSE) $(OBJECTS.UTHENTICODE)
$(strip $(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@)
libpe-parse.so: LDFLAGS+=-shared -Wl,-soname,libpe-parse.so
build: svcli libpe-parse.so
include ./Makefile
pe-parse::
test -d $@ || git clone https://github.com/trailofbits/pe-parse.git $@
git -C $@ pull --all
clean:
rm -f -- svcli libpe-parse.so
rm -rf -- build obj svcli
mrproper: clean
rm -rf -- pe-parse
rebuild: clean build
.PHONY: build clean mrproper pe-parse rebuild
.NOTPARALLEL: pe-parse
-include $(OBJECTS:.o=.d)