pstrace
/
Makefile
115 строк · 3.3 Кб
1#use Bash instead of SH
2export SHELL := /bin/bash
3
4# echo command color definitions
5ifndef NO_COLOR
6RED=\e[0;31m
7GREEN=\e[0;32m
8YELLOW=\e[1;33m
9NC=\e[0m # No Color
10COLOR=-fdiagnostics-color
11else
12RED=
13GREEN=
14YELLOW=
15NC=
16COLOR=
17endif
18
19CXX = gcc
20CC = gcc
21RM = rm -f
22AR = ar rvs
23
24BUILD_DIR = ./build
25RESULT_DIR = ./build
26
27BIN = $(RESULT_DIR)/trace
28
29# Generate module software version and build version
30#$(shell \
31# STR=`cat $(BUILD_DIR)/version.h 2> /dev/null | grep "SOFT_BUILD" | sed 's/[a-z A-Z#\-\._]//g'`; \
32# let "STR += 1";\
33# echo "#ifndef VERSION_H_" > $(BUILD_DIR)/version.h; \
34# echo "#define VERSION_H_" >> $(BUILD_DIR)/version.h; \
35# echo "/* Automatically generated file, DO NOT EDIT it !!! */" >> $(BUILD_DIR)/version.h; \
36# echo "" >> $(BUILD_DIR)/version.h; \
37# echo "#define SOFT_BUILD $$STR" >> $(BUILD_DIR)/version.h; \
38# echo "#define USER_BUILD \"$${USER}\"" >> $(BUILD_DIR)/version.h; \
39# echo "#define DATE_BUILD \"`date +"%D %T"`\"" >> $(BUILD_DIR)/version.h; \
40# echo "#define REV_BUILD \"`git rev-parse --short HEAD`\"" >> $(BUILD_DIR)/version.h; \
41# echo "" >> $(BUILD_DIR)/version.h; \
42# echo "#endif /* VERSION_H_ */" >> $(BUILD_DIR)/version.h \
43# )
44
45#source file search path. add here new directories which contains files specified for $(SRC)
46VPATH = ./tests
47
48SRC = $(shell find . -name '*.c')
49#OBJ = $(patsubst %.cpp,%.o,$(addprefix $(BUILD_DIR)/,$(notdir $(SRC))))
50OBJ = $(BUILD_DIR)/main.o
51
52LIBS = -L./ -lpthread -ldl -ldw -lunwind -lunwind-x86_64 -liberty
53LIB_STATIC = $(RESULT_DIR)/libpst.a
54LIB_DYNAMIC = $(RESULT_DIR)/libpst.so
55
56INCS = -I./include -I./src
57FLAGS = -Wall -ggdb -fPIC -O3 -rdynamic -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
58
59
60.PHONY: all clean $(BIN)
61
62all: $(BIN)
63
64$(LIB_STATIC):
65@make -C ./src
66
67clean:
68${RM} $(BUILD_DIR)/*.o $(BUILD_DIR)/*.dep $(BIN) $(BUILD_DIR)/prepare.bld $(RESULT_DIR)/prepare.res $(BUILD_DIR)/version.h \
69$(LIB_STATIC) $(LIB_DYNAMIC)
70@make clean -C ./src
71@if [ -z "$$(ls -A $(BUILD_DIR) 2>&1)" ]; then ${RM} -r $(BUILD_DIR); fi
72@if [ -z "$$(ls -A $(RESULT_DIR) 2>&1)" ]; then ${RM} -r $(RESULT_DIR); fi
73
74$(BUILD_DIR)/prepare.bld:
75@if [ ! -e $(BUILD_DIR) ]; then mkdir -vp $(BUILD_DIR); fi
76@touch $@
77
78$(RESULT_DIR)/prepare.res:
79@if [ ! -e $(RESULT_DIR) ]; then mkdir -vp $(RESULT_DIR); fi
80@touch $@
81
82$(BIN): $(BUILD_DIR)/prepare.bld $(RESULT_DIR)/prepare.res $(OBJ) $(LIB_STATIC)
83gcc -ggdb -O3 -o $(BUILD_DIR)/simple ./tests/simple.c
84@make -C ./src
85@printf "Create %-60s" $@
86@OUT=$$($(CXX) $(COLOR) -o $@ $(OBJ) $(LIB_STATIC) $(LIBS) 2>&1); \
87if [ $$? -ne "0" ]; \
88then echo -e "${RED}[FAILED]${NC}"; echo -e "$$OUT"; \
89else \
90if [ -n "$$OUT" ]; \
91then echo -e "${YELLOW}[DONE]${NC}"; echo -e "'$$OUT'"; \
92else \
93echo -e "${GREEN}[DONE]${NC}"; \
94fi; \
95fi
96
97$(BUILD_DIR)/%.o: %.c
98#compile source code directly to $BUILD_DIR directory
99@printf "Building %-60s" $@
100@OUT=$$($(CXX) $(COLOR) -o $@ -c $< $(FLAGS) $(INCS) 2>&1); \
101if [ $$? -ne "0" ]; \
102then echo -e "${RED}[FAILED]${NC}"; echo -e "$$OUT"; \
103else \
104if [ -n "$$OUT" ]; \
105then echo -e "${YELLOW}[DONE]${NC}"; echo -e "'$$OUT'"; \
106else \
107echo -e "${GREEN}[DONE]${NC}"; \
108fi; \
109fi
110#create dependencies
111@$(CXX) -MM -MT '$@' -c $< > $@.dep $(FLAGS) $(INCS)
112
113#include dependencies for track changes in source code and related header files
114DEPEND := $(OBJ:.o=.o.dep)
115-include $(DEPEND)
116