1 2 PUB_HEADERS = pub/libvex_basictypes.h \ 3 pub/libvex_ir.h \ 4 pub/libvex.h \ 5 pub/libvex_trc_values.h \ 6 pub/libvex_emwarn.h \ 7 pub/libvex_guest_x86.h \ 8 pub/libvex_guest_amd64.h \ 9 pub/libvex_guest_arm.h \ 10 pub/libvex_guest_ppc32.h \ 11 pub/libvex_guest_ppc64.h \ 12 pub/libvex_guest_s390x.h \ 13 pub/libvex_s390x_common.h \ 14 pub/libvex_guest_offsets.h 15 16 PRIV_HEADERS = priv/host_x86_defs.h \ 17 priv/host_amd64_defs.h \ 18 priv/host_arm_defs.h \ 19 priv/host_ppc_defs.h \ 20 priv/host_s390_defs.h \ 21 priv/host_s390_disasm.h \ 22 priv/host_generic_regs.h \ 23 priv/host_generic_simd64.h \ 24 priv/host_generic_simd128.h \ 25 priv/main_globals.h \ 26 priv/main_util.h \ 27 priv/guest_generic_x87.h \ 28 priv/guest_generic_bb_to_IR.h \ 29 priv/guest_x86_defs.h \ 30 priv/guest_amd64_defs.h \ 31 priv/guest_arm_defs.h \ 32 priv/guest_ppc_defs.h \ 33 priv/ir_match.h \ 34 priv/ir_opt.h 35 36 LIB_OBJS = priv/ir_defs.o \ 37 priv/ir_match.o \ 38 priv/ir_opt.o \ 39 priv/main_main.o \ 40 priv/main_globals.o \ 41 priv/main_util.o \ 42 priv/host_x86_defs.o \ 43 priv/host_amd64_defs.o \ 44 priv/host_arm_defs.o \ 45 priv/host_ppc_defs.o \ 46 priv/host_s390_defs.o \ 47 priv/host_x86_isel.o \ 48 priv/host_amd64_isel.o \ 49 priv/host_arm_isel.o \ 50 priv/host_ppc_isel.o \ 51 priv/host_s390_isel.o \ 52 priv/host_s390_disasm.o \ 53 priv/host_generic_regs.o \ 54 priv/host_generic_simd64.o \ 55 priv/host_generic_simd128.o \ 56 priv/host_generic_reg_alloc2.o \ 57 priv/guest_generic_x87.o \ 58 priv/guest_generic_bb_to_IR.o \ 59 priv/guest_x86_helpers.o \ 60 priv/guest_amd64_helpers.o \ 61 priv/guest_arm_helpers.o \ 62 priv/guest_ppc_helpers.o \ 63 priv/guest_s390_helpers.o \ 64 priv/guest_x86_toIR.o \ 65 priv/guest_amd64_toIR.o \ 66 priv/guest_arm_toIR.o \ 67 priv/guest_ppc_toIR.o \ 68 priv/guest_s390_toIR.o 69 70 PUB_INCLUDES = -Ipub 71 72 # Do not add any priv/host-ARCH or priv/guest-ARCH directories to this 73 # list, as they contain duplicate file names (each host has a hdefs.h, 74 # for example). 75 PRIV_INCLUDES = -Ipriv 76 77 78 ifndef CC 79 CC = gcc 80 endif 81 ifndef AR 82 AR = ar 83 endif 84 85 # Put -g -O2 after any flags we inherit from V. -O2 vs -O 86 # makes a significant difference, at least with gcc4. 87 CCFLAGS = -Wall -Wmissing-prototypes -Wshadow \ 88 -Wpointer-arith -Wbad-function-cast -Wcast-qual \ 89 -Wcast-align -Wmissing-declarations \ 90 -Wno-pointer-sign \ 91 $(EXTRA_CFLAGS) -g -O2 -fstrict-aliasing 92 93 #CC = icc 94 #CCFLAGS = -g -Wall -wd981 -wd279 -wd1287 -wd869 -wd111 -wd188 -wd186 95 # 981: operands are evaluated in unspecified order 96 # 279: controlling expression is constant 97 # 1287: invalid attribute for parameter 98 # 869: parameter "..." was never referenced 99 # 111: statement is unreachable 100 # 188: enumerated type mixed with another type 101 # (the above are for icc 8.0 -- 8.0.0.55 I think) 102 # 186: pointless comparison of unsigned integer with zero 103 104 # kludge: stops V biarch builds screwing up at -j 2 or above 105 # The Right fix is to autoconf/automake-ise vex. 106 .NOTPARALLEL: 107 108 all: vex 109 110 # Empty, needed for Valgrind 111 install: 112 113 scratch: clean all 114 115 vex: libvex.a test_main.o 116 $(CC) $(CCFLAGS) -o vex test_main.o libvex.a 117 118 libvex.a: $(LIB_OBJS) 119 rm -f libvex.a 120 $(AR) crus libvex.a $(LIB_OBJS) 121 122 123 # The idea with these TAG-s is to mark the flavour of libvex.a 124 # most recently built, so if the same target is re-requested, we 125 # don't rebuild everything, but if a different one is requested 126 # then we scrub everything and start over. 127 128 libvex-x86-linux.a: TAG-x86-linux libvex.a 129 mv -f libvex.a libvex-x86-linux.a 130 TAG-x86-linux: 131 if [ ! -f TAG-x86-linux ] ; then rm -f $(LIB_OBJS) TAG-* libvex.a ; fi 132 touch TAG-x86-linux 133 134 libvex-amd64-linux.a: TAG-amd64-linux libvex.a 135 mv -f libvex.a libvex-amd64-linux.a 136 TAG-amd64-linux: 137 if [ ! -f TAG-amd64-linux ] ; then rm -f $(LIB_OBJS) TAG-* libvex.a ; fi 138 touch TAG-amd64-linux 139 140 libvex-ppc32-linux.a: TAG-ppc32-linux libvex.a 141 mv -f libvex.a libvex-ppc32-linux.a 142 TAG-ppc32-linux: 143 if [ ! -f TAG-ppc32-linux ] ; then rm -f $(LIB_OBJS) TAG-* libvex.a ; fi 144 touch TAG-ppc32-linux 145 146 libvex-ppc64-linux.a: TAG-ppc64-linux libvex.a 147 mv -f libvex.a libvex-ppc64-linux.a 148 TAG-ppc64-linux: 149 if [ ! -f TAG-ppc64-linux ] ; then rm -f $(LIB_OBJS) TAG-* libvex.a ; fi 150 touch TAG-ppc64-linux 151 152 libvex-ppc32-aix5.a: TAG-ppc32-aix5 libvex.a 153 mv -f libvex.a libvex-ppc32-aix5.a 154 TAG-ppc32-aix5: 155 if [ ! -f TAG-ppc32-aix5 ] ; then rm -f $(LIB_OBJS) TAG-* libvex.a ; fi 156 touch TAG-ppc32-aix5 157 158 libvex-ppc64-aix5.a: TAG-ppc64-aix5 libvex.a 159 mv -f libvex.a libvex-ppc64-aix5.a 160 TAG-ppc64-aix5: 161 if [ ! -f TAG-ppc64-aix5 ] ; then rm -f $(LIB_OBJS) TAG-* libvex.a ; fi 162 touch TAG-ppc64-aix5 163 164 libvex-x86-darwin.a: TAG-x86-darwin libvex.a 165 mv -f libvex.a libvex-x86-darwin.a 166 TAG-x86-darwin: 167 if [ ! -f TAG-x86-darwin ] ; then rm -f $(LIB_OBJS) TAG-* libvex.a ; fi 168 touch TAG-x86-darwin 169 170 libvex-amd64-darwin.a: TAG-amd64-darwin libvex.a 171 mv -f libvex.a libvex-amd64-darwin.a 172 TAG-amd64-darwin: 173 if [ ! -f TAG-amd64-darwin ] ; then rm -f $(LIB_OBJS) TAG-* libvex.a ; fi 174 touch TAG-amd64-darwin 175 176 177 clean: 178 rm -f $(LIB_OBJS) *.a vex test_main.o TAG-* \ 179 pub/libvex_guest_offsets.h \ 180 auxprogs/genoffsets.s 181 182 minidist: 183 rm -f vex--minidist-2005MMDD.tar 184 tar cf vex--minidist-2005MMDD.tar $(PUB_HEADERS) $(PRIV_HEADERS) \ 185 test_main.c test_main.h \ 186 Makefile \ 187 `echo $(LIB_OBJS) | sed "s/\.o/\.c/g"` 188 @echo 189 @echo minidist done, size follows: 190 @ls -l vex--minidist-2005MMDD.tar 191 @echo 192 193 # This is very uggerly. Need to sed out both "xyzzyN" and 194 # "xyzzy$N" since gcc on different targets emits the constants 195 # differently -- with a leading $ on x86/amd64 but none on ppc32/64. 196 pub/libvex_guest_offsets.h: 197 rm -f auxprogs/genoffsets.s 198 $(CC) $(CCFLAGS) -O -S -o auxprogs/genoffsets.s \ 199 auxprogs/genoffsets.c 200 grep xyzzy auxprogs/genoffsets.s | grep define \ 201 | sed "s/xyzzy\\$$//g" \ 202 | sed "s/xyzzy#//g" \ 203 | sed "s/xyzzy//g" \ 204 > pub/libvex_guest_offsets.h 205 rm -f auxprogs/genoffsets.s 206 207 208 ALL_HEADERS = $(PUB_HEADERS) $(PRIV_HEADERS) 209 ALL_INCLUDES = $(PUB_INCLUDES) $(PRIV_INCLUDES) 210 211 test_main.o: $(PUB_HEADERS) test_main.c test_main.h 212 $(CC) $(CCFLAGS) $(PUB_INCLUDES) -o test_main.o \ 213 -c test_main.c 214 215 priv/ir_defs.o: $(ALL_HEADERS) priv/ir_defs.c 216 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/ir_defs.o \ 217 -c priv/ir_defs.c 218 219 priv/ir_match.o: $(ALL_HEADERS) priv/ir_match.c 220 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/ir_match.o \ 221 -c priv/ir_match.c 222 223 priv/ir_opt.o: $(ALL_HEADERS) priv/ir_opt.c 224 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/ir_opt.o \ 225 -c priv/ir_opt.c 226 227 priv/main_main.o: $(ALL_HEADERS) priv/main_main.c 228 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/main_main.o \ 229 -c priv/main_main.c 230 231 priv/main_globals.o: $(ALL_HEADERS) priv/main_globals.c 232 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/main_globals.o \ 233 -c priv/main_globals.c 234 235 priv/main_util.o: $(ALL_HEADERS) priv/main_util.c 236 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/main_util.o \ 237 -c priv/main_util.c 238 239 priv/host_x86_defs.o: $(ALL_HEADERS) priv/host_x86_defs.c 240 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_x86_defs.o \ 241 -c priv/host_x86_defs.c 242 243 priv/host_amd64_defs.o: $(ALL_HEADERS) priv/host_amd64_defs.c 244 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_amd64_defs.o \ 245 -c priv/host_amd64_defs.c 246 247 priv/host_arm_defs.o: $(ALL_HEADERS) priv/host_arm_defs.c 248 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_arm_defs.o \ 249 -c priv/host_arm_defs.c 250 251 priv/host_ppc_defs.o: $(ALL_HEADERS) priv/host_ppc_defs.c 252 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_ppc_defs.o \ 253 -c priv/host_ppc_defs.c 254 255 priv/host_s390_defs.o: $(ALL_HEADERS) priv/host_s390_defs.c 256 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_s390_defs.o \ 257 -c priv/host_s390_defs.c 258 259 priv/host_x86_isel.o: $(ALL_HEADERS) priv/host_x86_isel.c 260 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_x86_isel.o \ 261 -c priv/host_x86_isel.c 262 263 priv/host_amd64_isel.o: $(ALL_HEADERS) priv/host_amd64_isel.c 264 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_amd64_isel.o \ 265 -c priv/host_amd64_isel.c 266 267 priv/host_arm_isel.o: $(ALL_HEADERS) priv/host_arm_isel.c 268 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_arm_isel.o \ 269 -c priv/host_arm_isel.c 270 271 priv/host_ppc_isel.o: $(ALL_HEADERS) priv/host_ppc_isel.c 272 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_ppc_isel.o \ 273 -c priv/host_ppc_isel.c 274 275 priv/host_s390_isel.o: $(ALL_HEADERS) priv/host_s390_isel.c 276 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_s390_isel.o \ 277 -c priv/host_s390_isel.c 278 279 priv/host_generic_regs.o: $(ALL_HEADERS) priv/host_generic_regs.c 280 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_generic_regs.o \ 281 -c priv/host_generic_regs.c 282 283 priv/host_generic_simd64.o: $(ALL_HEADERS) priv/host_generic_simd64.c 284 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_generic_simd64.o \ 285 -c priv/host_generic_simd64.c 286 287 priv/host_generic_simd128.o: $(ALL_HEADERS) priv/host_generic_simd128.c 288 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_generic_simd128.o \ 289 -c priv/host_generic_simd128.c 290 291 priv/host_generic_reg_alloc2.o: $(ALL_HEADERS) priv/host_generic_reg_alloc2.c 292 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_generic_reg_alloc2.o \ 293 -c priv/host_generic_reg_alloc2.c 294 295 priv/guest_x86_toIR.o: $(ALL_HEADERS) priv/guest_x86_toIR.c 296 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest_x86_toIR.o \ 297 -c priv/guest_x86_toIR.c 298 299 priv/guest_generic_x87.o: $(ALL_HEADERS) priv/guest_generic_x87.c 300 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest_generic_x87.o \ 301 -c priv/guest_generic_x87.c 302 303 priv/guest_generic_bb_to_IR.o: $(ALL_HEADERS) priv/guest_generic_bb_to_IR.c 304 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest_generic_bb_to_IR.o \ 305 -c priv/guest_generic_bb_to_IR.c 306 307 priv/guest_x86_helpers.o: $(ALL_HEADERS) priv/guest_x86_helpers.c 308 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest_x86_helpers.o \ 309 -c priv/guest_x86_helpers.c 310 311 priv/guest_amd64_helpers.o: $(ALL_HEADERS) priv/guest_amd64_helpers.c 312 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest_amd64_helpers.o \ 313 -c priv/guest_amd64_helpers.c 314 315 priv/guest_amd64_toIR.o: $(ALL_HEADERS) priv/guest_amd64_toIR.c 316 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest_amd64_toIR.o \ 317 -c priv/guest_amd64_toIR.c 318 319 priv/guest_arm_helpers.o: $(ALL_HEADERS) priv/guest_arm_helpers.c 320 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest_arm_helpers.o \ 321 -c priv/guest_arm_helpers.c 322 323 priv/guest_arm_toIR.o: $(ALL_HEADERS) priv/guest_arm_toIR.c 324 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest_arm_toIR.o \ 325 -c priv/guest_arm_toIR.c 326 327 priv/guest_ppc_helpers.o: $(ALL_HEADERS) priv/guest_ppc_helpers.c 328 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest_ppc_helpers.o \ 329 -c priv/guest_ppc_helpers.c 330 331 priv/guest_s390_helpers.o: $(ALL_HEADERS) priv/guest_s390_helpers.c 332 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest_s390_helpers.o \ 333 -c priv/guest_s390_helpers.c 334 335 priv/guest_ppc_toIR.o: $(ALL_HEADERS) priv/guest_ppc_toIR.c 336 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest_ppc_toIR.o \ 337 -c priv/guest_ppc_toIR.c 338 339 priv/guest_s390_toIR.o: $(ALL_HEADERS) priv/guest_s390_toIR.c 340 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest_s390_toIR.o \ 341 -c priv/guest_s390_toIR.c 342 343 priv/host_s390_disasm.o: $(ALL_HEADERS) priv/host_s390_disasm.c 344 $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_s390_disasm.o \ 345 -c priv/host_s390_disasm.c 346