Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
134 lines (109 loc) · 4.48 KB
/
Copy pathMakefile
File metadata and controls
134 lines (109 loc) · 4.48 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
CC ?= gcc
R2_CFLAGS ?= $(shell r2 -H R2_CFLAGS)
R2_LDFLAGS ?= $(shell r2 -H R2_LDFLAGS)
R2_LIBS ?= $(shell r2 -H R2_LIBS)
CFLAGS ?= -Wall -Wextra -O2 -fPIC
CFLAGS += -Iinclude -Iinclude/r2flutter
CFLAGS += $(R2_CFLAGS)
LDFLAGS += $(R2_LDFLAGS)
LDLIBS += $(R2_LIBS)
DEPFLAGS = -MMD -MP
R2R_JOBS ?= 1
R2R_TIMEOUT ?= 30
R2_LIBR_PLUGINS=$(shell r2 -H R2_LIBR_PLUGINS 2> /dev/null)
R2_LIBEXT=$(shell r2 -H R2_LIBEXT 2> /dev/null)
-include config.mk
PREFIX?=/usr/local
# Directories
SRC_DIR = src/lib
BUILD_DIR = build
BIN_DIR = bin
# Source files
LIB_SRC = $(SRC_DIR)/dart_app.c $(SRC_DIR)/dart_dumper.c $(SRC_DIR)/dart_pool_snapshot.c $(SRC_DIR)/dart_pool_discovery.c $(SRC_DIR)/dart_pool_names.c $(SRC_DIR)/dart_pool_strings.c $(SRC_DIR)/dart_pool_data_image.c $(SRC_DIR)/dart_pool_it.c $(SRC_DIR)/dart_pool_xrefs.c $(SRC_DIR)/dart_object.c $(SRC_DIR)/dart_sbom.c $(SRC_DIR)/dart_pool_clusters.c $(SRC_DIR)/dart_pool_classes.c $(SRC_DIR)/dart_pool_model.c $(SRC_DIR)/dart_pool_parse.c $(SRC_DIR)/dart_pool_modern.c $(SRC_DIR)/dart_version.c $(SRC_DIR)/dart_cid.c $(SRC_DIR)/dart_obf.c
MAIN_SRC = src/tool/main.c
ANALYSIS_SRC = src/r2/flutter_analysis.c
# Object files
LIB_OBJ = $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%.o,$(LIB_SRC))
MAIN_OBJ = $(BUILD_DIR)/main.o
ANALYSIS_OBJ = $(BUILD_DIR)/flutter_analysis.o
DEP_FILES = $(LIB_OBJ:.o=.d) $(MAIN_OBJ:.o=.d) $(ANALYSIS_OBJ:.o=.d)
# Artifacts
BIN_FILE = $(BIN_DIR)/r2flutter
STATIC_LIB = $(BUILD_DIR)/libr2flutter.a
INC_VER = include/r2flutter/r2flutter_version.h
all: $(BIN_FILE) $(INC_VER)
# Regenerate C files from offsets.json (the single source of truth)
gen:
python3 scripts/update-dart-version --generate
$(INC_VER):
./configure
$(STATIC_LIB): $(LIB_OBJ)
ar rcs $@ $^
$(BIN_FILE): $(STATIC_LIB) $(MAIN_OBJ) $(ANALYSIS_OBJ) | $(shell mkdir -p $(BIN_DIR))
$(CC) $(CFLAGS) -o $@ $(MAIN_OBJ) $(ANALYSIS_OBJ) -L$(BUILD_DIR) -lr2flutter $(LDFLAGS) $(LDLIBS) -Wl,-rpath,$(PREFIX)/lib -g
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) $(DEPFLAGS) -g -c $< -o $@
$(MAIN_OBJ): $(MAIN_SRC)
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) $(DEPFLAGS) -g -c $< -o $@
$(ANALYSIS_OBJ): $(ANALYSIS_SRC) src/r2/flutter_analysis.h
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) $(DEPFLAGS) -g -c $< -o $@
r2 plugin:
$(MAKE) $(STATIC_LIB)
$(MAKE) -C src/r2
$(MAKE) -C src/r2 user-install
user-install user-uninstall:
$(MAKE) $(STATIC_LIB)
$(MAKE) -C src/r2
$(MAKE) -C src/r2 $@
# Binary package for r2pm -bi: bin/ and plugins/ for this r2 version and platform
# r2 <= 6.2.2 lacks r2pm -H R2PM_TRIPLET, fallback to the host asm.* defaults
PKG_TRIPLET := $(or $(shell r2pm -H R2PM_TRIPLET 2> /dev/null),$(shell r2 -N -qc '?e `e asm.os`-`e asm.arch`-`e asm.bits`' -- 2> /dev/null))
BINDIST_ZIP = r2flutter-$(shell r2 -qv)-$(PKG_TRIPLET).zip
BINDIST_DIR = $(BUILD_DIR)/bindist
BINDIST_FILES = $(BINDIST_DIR)/bin/r2flutter $(BINDIST_DIR)/plugins/core_flutter.$(R2_LIBEXT)
STRIP ?= strip
bindist: $(BIN_FILE)
$(MAKE) $(STATIC_LIB)
$(MAKE) -C src/r2
rm -rf $(BINDIST_DIR) $(BINDIST_ZIP)
mkdir -p $(BINDIST_DIR)/bin $(BINDIST_DIR)/plugins
cp -f $(BIN_FILE) $(BINDIST_DIR)/bin/
cp -f src/r2/core_flutter.$(R2_LIBEXT) $(BINDIST_DIR)/plugins/
cp -f dist/README.md $(BINDIST_DIR)/
ifeq ($(R2_LIBEXT),dylib)
$(STRIP) -x $(BINDIST_FILES)
codesign -f -s - $(BINDIST_FILES)
else
$(STRIP) --strip-unneeded $(BINDIST_FILES)
endif
cd $(BINDIST_DIR) && zip -r $(CURDIR)/$(BINDIST_ZIP) README.md bin plugins
install: uninstall
mkdir -p "$(DESTDIR)$(PREFIX)/bin"
cp -f bin/r2flutter "$(DESTDIR)$(PREFIX)/bin/r2flutter"
mkdir -p "$(DESTDIR)$(R2_LIBR_PLUGINS)"
cp -f src/r2/core_flutter.$(R2_LIBEXT) "$(DESTDIR)$(R2_LIBR_PLUGINS)"/core_flutter.$(R2_LIBEXT)
symstall: uninstall
mkdir -p "$(DESTDIR)$(PREFIX)/bin"
ln -fs $(shell pwd)/bin/r2flutter "$(DESTDIR)$(PREFIX)/bin/r2flutter"
mkdir -p "$(DESTDIR)$(R2_LIBR_PLUGINS)"
ln -fs $(shell pwd)/src/r2/core_flutter.$(R2_LIBEXT) "$(DESTDIR)$(R2_LIBR_PLUGINS)"/core_flutter.$(R2_LIBEXT)
uninstall:
rm -f "$(DESTDIR)$(PREFIX)/bin/r2flutter"
rm -f $(DESTDIR)$(R2_LIBR_PLUGINS)/core_flutter.$(R2_LIBEXT)
fmt indent format:
clang-format-radare2 $(shell find src include -name '*.[ch]')
clean:
rm -rf $(BUILD_DIR) $(BIN_DIR)/r2flutter
$(MAKE) -C src/r2 clean
test-r2r: $(BIN_FILE)
$(MAKE) -C src/r2
r2r -u -j$(R2R_JOBS) -t $(R2R_TIMEOUT) test/db
test: $(BIN_FILE)
@$(MAKE) -C src/r2
@echo "Running custom testsuite"
@python3 scripts/run_tests.py
.PHONY: all clean test test-r2r r2 plugin user-install user-uninstall fmt indent format bindist
-include $(DEP_FILES)