Repository navigation
Expand file tree
/
Copy pathmk_shared
More file actions
45 lines (36 loc) · 1.71 KB
/
Copy pathmk_shared
File metadata and controls
45 lines (36 loc) · 1.71 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
# capstone library name (without prefix 'lib' and suffix '.so')
# -Wall attiva tutti i warning
# preso un target:dipendenze -> %@ indica il target, %< la prima dipendenza, %^ tutte le dipendenze
LIB_CAPSTONE := -lcapstone
LIB_HIDDER := -lhidder
LIB_KEYSTONE_LDFLAGS := -lkeystone -lstdc++ -lm
CC := gcc
HEADER := ./header
PATH_LIB_HIDDER := ./lib
HIDDER_LIB_NAME := libhidder.so
OBJ_DIR := ./obj
SRC_DIR := ./src
# wildcard viene sostituito con tutti i file che matchano le regex successive separate da una virgola
# ovvero in questo caso tutti i .c in SRC_DIR
SRC_FILES := $(wildcard $(SRC_DIR)/*.c)
# patsubst pattern, replacement, text := questo comando sostituice da TEXT tutti i match di PATTERN
# con REPLACEMENT, ovvero in questo caso sostituisce tutti i path ./src/***.c con ./obj/***.o.
# questi 2 comandi sono usati per compilare in automatico tutti i .c in src e mettere in obj il .o
OBJ_FILES := $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SRC_FILES))
#
start: makedir library main
makedir:
@mkdir -p $(OBJ_DIR)
@mkdir -p $(PATH_LIB_HIDDER)
# questo comando linka il main.o con le librerie e crea l'eseguibile main.exe
main :
${CC} -O3 -Wall -L$(PATH_LIB_HIDDER) main.c -I$(HEADER) $(LIB_HIDDER) $(LIB_CAPSTONE) ${LIB_KEYSTONE_LDFLAGS} -o main
library : $(OBJ_FILES)
${CC} -shared -Wall $(LIB_CAPSTONE) ${LIB_KEYSTONE_LDFLAGS} -o $(PATH_LIB_HIDDER)/$(HIDDER_LIB_NAME) $(OBJ_FILES)
# il comando interno (-c) compila un .c in un .o non eseguibile ( un file oggetto "binario" )
# %.o è come una regex, indica che il target viene chiamato da ogni *.o es main.o/compare.o...
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
${CC} -c -fpic $< -o $@ -I$(HEADER)
clean:
@rm -rf $(OBJ_DIR) $(PATH_LIB_HIDDER)
@rm main *.o $(HIDDER_LIB_NAME)