2 BIN_INSTALLDIR = /usr/local/bin
3 HEADER_INSTALLDIR = /usr/local/include/
5 ## Since include directives do not impose additional dependencies, we can make
6 ## Makefile more clear, simply putting all includes we ever need in single
7 ## variable. Keep it alphabetic, please.
15 -I/usr/include/appfw \
16 -I/usr/include/dbus-1.0 \
17 -I/usr/include/e_dbus-1 \
18 -I/usr/include/ecore-1 \
19 -I/usr/include/ecore-x-1 \
20 -I/usr/include/ecore-input-1 \
21 -I/usr/include/ecore-evas-1 \
22 -I/usr/include/ecore-file-1 \
23 -I/usr/include/ecore-imf-1 \
24 -I/usr/include/ecore-con-1 \
25 -I/usr/include/edje-1 \
26 -I/usr/include/eet-1 \
27 -I/usr/include/efreet-1 \
28 -I/usr/include/eina-1 \
29 -I/usr/include/eina-1/eina \
30 -I/usr/include/elementary-1 \
31 -I/usr/include/eldbus-1 \
32 -I/usr/include/ethumb-1 \
33 -I/usr/include/ethumb-client-1 \
34 -I/usr/include/evas-1 \
35 -I/usr/include/pixman-1 \
36 -I/usr/include/system \
37 -I/usr/include/capi-system-runtime-info \
38 -I/usr/include/vconf \
39 -I/usr/lib/dbus-1.0/include \
40 -I/usr/include/efl-1 \
46 -fomit-frame-pointer \
58 ## Since linking unneeded libraries bloats output of ldd(1), this variable
59 ## holds search paths and common libraries.
69 ## FIXME: Ideally, UTILITY_SRCS is sources for probe infrastructure and
70 ## PROBE_SRCS is sources for actual replacement functions. Unfortunatelly,
71 ## it is not so easy and UTILITY_SRCS do not link alone.
73 COMMON_SRCS = $(UTILITY_SRCS) $(PROBE_SRCS)
75 ./helper/real_functions.c \
76 ./helper/libdaprobe.c \
79 ./helper/dacollection.c \
80 ./helper/dacapture.c \
81 ./helper/daforkexec.c \
84 ./custom_chart/da_chart.c \
87 ./probe_memory/libdamemalloc.c \
88 ./probe_memory/libdamemmanage.c \
89 ./probe_socket/libdasocket.c \
90 ./probe_event/gesture.c \
91 ./probe_event/da_event.c \
92 ./probe_event/keytouch.c \
93 ./probe_event/orientation.c \
94 ./probe_third/libdaemon.c \
95 ./probe_thread/libdathread.c \
96 ./probe_thread/libdasync.c \
97 ./probe_file/da_io_posix.c \
98 ./probe_file/da_io_stdc.c \
100 DUMMY_SRCS = ./custom_chart/da_chart_dummy.c
101 CAPI_SRCS = $(COMMON_SRCS) \
102 ./probe_capi/capi_appfw.c \
103 ./probe_ui/capi_capture.c
105 TIZEN_SRCS = $(COMMON_SRCS) $(CAPI_SRCS)\
106 ./helper/addr-tizen.c \
107 ./helper/common_probe_init.c \
108 ./probe_memory/libdanew.cpp \
109 ./probe_graphics/da_evas_gl.c \
110 ./probe_graphics/da_gl_api_init.c \
111 ./probe_graphics/da_gles20_tizen.cpp \
112 ./probe_graphics/da_gles20_native.cpp \
113 ./probe_graphics/da_gles30_native.cpp
115 ASM_SRC = ./helper/da_call_original.S
117 PARSE_ELF_LIB_SRC = ./elf_parsing/lib_parse_elf.c
118 PARSE_ELF_BIN_SRC = ./elf_parsing/parse_elf.c
120 ## Totally brain-dead.
121 ## FIXME: Rewrite this normally with eval.
122 ASM_OBJ = $(patsubst %.S,%.o, $(ASM_SRC))
123 CAPI_OBJS = $(patsubst %.c,%.o, $(CAPI_SRCS)) $(ASM_OBJ)
124 TIZEN_OBJS = $(patsubst %.cpp,%.o, $(patsubst %.c,%.o, $(TIZEN_SRCS))) $(ASM_OBJ)
125 DUMMY_OBJS = $(patsubst %.c,%.o, $(DUMMY_SRCS))
126 PARSE_ELF_LIB_OBJ = $(patsubst %.c,%.o, $(PARSE_ELF_LIB_SRC))
127 PARSE_ELF_BIN_OBJ = $(patsubst %.c,%.o, $(PARSE_ELF_BIN_SRC))
129 TIZEN_TARGET = da_probe_tizen.so
130 DUMMY_TARGET = libdaprobe.so
131 PARSE_ELF_LIB_TARGET = libparserelf.so
132 PARSE_ELF_BIN_TARGET = parse_elf
134 CPPFLAGS = $(INCLUDE_CPPFLAGS) -D_GNU_SOURCE -DSELF_LIB_NAME="\"/$(INSTALLDIR)/$(TIZEN_TARGET)\""
135 CFLAGS = $(WARN_CFLAGS) -fPIC
136 CXXFLAGS = $(WARN_CFLAGS) -fPIC
138 TIZEN_CPPFLAGS = -DTIZENAPP $(SWAP_PROBE_DEFS)
139 TIZEN_LDFLAGS = -lstdc++
142 all: elflib capi tizen dummy elfparser
143 tizen: headers $(TIZEN_TARGET)
144 dummy: headers $(DUMMY_TARGET)
145 elflib: $(PARSE_ELF_LIB_OBJ) $(PARSE_ELF_LIB_TARGET)
146 elfparser: elflib $(PARSE_ELF_BIN_OBJ) $(PARSE_ELF_BIN_TARGET)
148 $(ASM_OBJ): $(ASM_SRC)
149 $(CC) $(ASMFLAG) -c $^ -o $@
151 $(PARSE_ELF_LIB_OBJ): $(PARSE_ELF_LIB_SRC)
152 $(CC) -fPIC -c $^ -o $@
154 $(PARSE_ELF_BIN_OBJ): $(PARSE_ELF_BIN_SRC)
157 API_NAME_LIST = scripts/api_names_all.txt
158 GENERATED_HEADERS = include/api_id_mapping.h include/x_define_api_id_list.h
159 SOURCE_HEADERS = include/api_ld_mapping.h
161 headers: $(API_NAME_LIST) $(GENERATED_HEADERS)
163 rm -f $(API_NAME_LIST) $(GENERATED_HEADERS) $(SOURCE_HEADERS)
166 if [ -f $@ ]; then rm $@;fi
167 cat include/api_names_global.h > $@
168 cat */api_names.txt >> $@
170 $(SOURCE_HEADERS): $(API_NAME_LIST)
171 $(SOURCE_HEADERS): ./scripts/gen_headers.py
172 python $< $(API_NAME_LIST) $(TIZEN_TARGET) $(INSTALLDIR) > $@ >&2
175 include/api_id_mapping.h: ./scripts/gen_api_id_mapping_header.awk
176 include/x_define_api_id_list.h: ./scripts/gen_api_id_mapping_list.awk
178 da_api_map: $(GENERATED_HEADERS)
180 $(GENERATED_HEADERS):
181 awk -f $< < $(API_NAME_LIST) > $@
183 $(TIZEN_TARGET): LDFLAGS+=$(TIZEN_LDFLAGS)
184 $(TIZEN_TARGET): CPPFLAGS+=$(TIZEN_CPPFLAGS)
185 $(TIZEN_TARGET): CPPFLAGS+=$(DEBUG_FLAGS)
186 $(TIZEN_TARGET): $(TIZEN_OBJS)
187 $(CC) $(LDFLAGS) $^ -o $@
189 $(DUMMY_TARGET): $(DUMMY_OBJS)
190 $(CC) $(LDFLAGS) $^ -o $@
192 $(PARSE_ELF_LIB_TARGET): $(PARSE_ELF_LIB_OBJ)
193 $(CC) $^ -shared -o $@
195 $(PARSE_ELF_BIN_TARGET): $(PARSE_ELF_BIN_OBJ) $(PARSE_ELF_LIB_TARGET)
196 $(CC) $^ -o $@ -L. -lparserelf
198 ldheader: $(SOURCE_HEADERS)
200 install: install_da install_ld install_elf
203 [ -d "$(DESTDIR)/$(INSTALLDIR)" ] || mkdir -p $(DESTDIR)/$(INSTALLDIR)
204 install $(TIZEN_TARGET) $(DUMMY_TARGET) $(DESTDIR)/$(INSTALLDIR)/
207 install_ld: ldheader # var_addr
208 install -m 644 include/ld_preload_probes.h $(DESTDIR)/$(HEADER_INSTALLDIR)/ld_preload_probes.h
209 install -m 644 include/ld_preload_types.h $(DESTDIR)/$(HEADER_INSTALLDIR)/ld_preload_types.h
210 install -m 644 include/ld_preload_probe_lib.h $(DESTDIR)/$(HEADER_INSTALLDIR)/ld_preload_probe_lib.h
211 install -m 644 include/x_define_api_id_list.h $(DESTDIR)/$(HEADER_INSTALLDIR)/x_define_api_id_list.h
212 install -m 644 include/app_protocol.h $(DESTDIR)/$(HEADER_INSTALLDIR)/app_protocol.h
214 install_elf: elflib elfparser
215 install $(PARSE_ELF_LIB_TARGET) $(DESTDIR)/$(INSTALLDIR)/libparserelf.so
216 install $(PARSE_ELF_BIN_TARGET) $(DESTDIR)/$(BIN_INSTALLDIR)/parse_elf
217 install -m 644 elf_parsing/parse_elf.h $(DESTDIR)/$(HEADER_INSTALLDIR)/parse_elf.h
221 rm -f *.so $(TIZEN_OBJS) $(PARSE_ELF_LIB_OBJ) $(PARSE_ELF_BIN_OBJ) $(GENERATED_HEADERS) $(API_NAME_LIST) $(SOURCE_HEADERS)
223 .PHONY: all capi tizen dummy clean install_ld install_da install_elf install headers