Tizen 2.4.0 rev3 SDK Public Release
[framework/system/swap-probe.git] / Makefile
1 INSTALLDIR = usr/lib
2 BIN_INSTALLDIR = /usr/local/bin
3 HEADER_INSTALLDIR = /usr/local/include/
4
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.
8 DEBUG_FLAGS=                                    \
9 #               -DSTDTOFILE                             \#
10
11 INCLUDE_CPPFLAGS =                              \
12                 -I./include                     \
13                 -I./probe_thread                \
14                 -I./probe_event                         \
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            \
41                 -I/usr/include/eo-1                     \
42
43 WARN_CFLAGS = -g                        \
44                 -Wall                   \
45                 -funwind-tables         \
46                 -fomit-frame-pointer    \
47                 -Xlinker                \
48                 --no-undefined          \
49                 -Werror                 \
50                 -Wextra                 \
51                 -O0                     \
52                 -Wwrite-strings         \
53                 -Wlogical-op            \
54                 -Wpacked                \
55                 -Winline                \
56                 -Wno-psabi              \
57
58 ## Since linking unneeded libraries bloats output of ldd(1), this variable
59 ## holds search paths and common libraries.
60
61 LDFLAGS = -shared       \
62         -lpthread                       \
63         -lrt                            \
64         -ldl                            \
65         -Wl,-z,noexecstack
66
67 ASMFLAG = -O0 -g
68
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.
72
73 COMMON_SRCS = $(UTILITY_SRCS) $(PROBE_SRCS)
74 UTILITY_SRCS =                          \
75         ./helper/real_functions.c       \
76         ./helper/libdaprobe.c           \
77         ./helper/dahelper.c             \
78         ./helper/btsym.c                \
79         ./helper/dacollection.c         \
80         ./helper/dacapture.c            \
81         ./helper/daforkexec.c           \
82         ./helper/damaps.c                       \
83         ./helper/dastdout.c                     \
84         ./custom_chart/da_chart.c       \
85
86 PROBE_SRCS =                                    \
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               \
99
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
104
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
114
115 ASM_SRC = ./helper/da_call_original.S
116
117 PARSE_ELF_LIB_SRC = ./elf_parsing/lib_parse_elf.c
118 PARSE_ELF_BIN_SRC = ./elf_parsing/parse_elf.c
119
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))
128
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
133
134 CPPFLAGS = $(INCLUDE_CPPFLAGS) -D_GNU_SOURCE -DSELF_LIB_NAME="\"/$(INSTALLDIR)/$(TIZEN_TARGET)\""
135 CFLAGS = $(WARN_CFLAGS) -fPIC
136 CXXFLAGS = $(WARN_CFLAGS) -fPIC
137
138 TIZEN_CPPFLAGS = -DTIZENAPP $(SWAP_PROBE_DEFS)
139 TIZEN_LDFLAGS = -lstdc++
140
141
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)
147
148 $(ASM_OBJ): $(ASM_SRC)
149         $(CC) $(ASMFLAG) -c $^ -o $@
150
151 $(PARSE_ELF_LIB_OBJ): $(PARSE_ELF_LIB_SRC)
152         $(CC) -fPIC -c $^ -o $@
153
154 $(PARSE_ELF_BIN_OBJ): $(PARSE_ELF_BIN_SRC)
155         $(CC) -c $^ -o $@
156
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
160
161 headers: $(API_NAME_LIST) $(GENERATED_HEADERS)
162 rmheaders:
163         rm -f $(API_NAME_LIST) $(GENERATED_HEADERS) $(SOURCE_HEADERS)
164
165 $(API_NAME_LIST):
166         if [ -f $@ ]; then rm $@;fi
167         cat include/api_names_global.h > $@
168         cat */api_names.txt >> $@
169
170 $(SOURCE_HEADERS): $(API_NAME_LIST)
171 $(SOURCE_HEADERS): ./scripts/gen_headers.py
172         python $< $(API_NAME_LIST) $(TIZEN_TARGET) $(INSTALLDIR) > $@ >&2
173         cat $@
174
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
177
178 da_api_map: $(GENERATED_HEADERS)
179
180 $(GENERATED_HEADERS):
181         awk -f $< < $(API_NAME_LIST) > $@
182
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 $@
188
189 $(DUMMY_TARGET): $(DUMMY_OBJS)
190         $(CC) $(LDFLAGS) $^ -o $@
191
192 $(PARSE_ELF_LIB_TARGET): $(PARSE_ELF_LIB_OBJ)
193         $(CC) $^ -shared -o $@
194
195 $(PARSE_ELF_BIN_TARGET): $(PARSE_ELF_BIN_OBJ) $(PARSE_ELF_LIB_TARGET)
196         $(CC) $^ -o $@ -L. -lparserelf
197
198 ldheader:       $(SOURCE_HEADERS)
199
200 install: install_da install_ld install_elf
201
202 install_da: all
203         [ -d "$(DESTDIR)/$(INSTALLDIR)" ] || mkdir -p $(DESTDIR)/$(INSTALLDIR)
204         install $(TIZEN_TARGET) $(DUMMY_TARGET) $(DESTDIR)/$(INSTALLDIR)/
205
206
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
213
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
218
219
220 clean:
221         rm -f *.so $(TIZEN_OBJS) $(PARSE_ELF_LIB_OBJ) $(PARSE_ELF_BIN_OBJ) $(GENERATED_HEADERS) $(API_NAME_LIST) $(SOURCE_HEADERS)
222
223 .PHONY: all capi tizen dummy clean install_ld install_da install_elf install headers