Makefile.target 18.2 KB
Newer Older
B
bellard 已提交
1 2
include config.mak

B
bellard 已提交
3 4 5 6
TARGET_BASE_ARCH:=$(TARGET_ARCH)
ifeq ($(TARGET_ARCH), x86_64)
TARGET_BASE_ARCH:=i386
endif
7 8 9
ifeq ($(TARGET_ARCH), mipsn32)
TARGET_BASE_ARCH:=mips
endif
T
ths 已提交
10 11 12
ifeq ($(TARGET_ARCH), mips64)
TARGET_BASE_ARCH:=mips
endif
B
bellard 已提交
13 14 15
ifeq ($(TARGET_ARCH), ppc64)
TARGET_BASE_ARCH:=ppc
endif
16 17 18
ifeq ($(TARGET_ARCH), ppc64h)
TARGET_BASE_ARCH:=ppc
endif
19 20 21
ifeq ($(TARGET_ARCH), ppcemb)
TARGET_BASE_ARCH:=ppc
endif
B
bellard 已提交
22 23 24
ifeq ($(TARGET_ARCH), sparc64)
TARGET_BASE_ARCH:=sparc
endif
B
bellard 已提交
25
TARGET_PATH=$(SRC_PATH)/target-$(TARGET_BASE_ARCH)
B
bellard 已提交
26
VPATH=$(SRC_PATH):$(TARGET_PATH):$(SRC_PATH)/hw:$(SRC_PATH)/audio
27
CPPFLAGS=-I. -I.. -I$(TARGET_PATH) -I$(SRC_PATH)
28 29 30 31 32
ifdef CONFIG_DARWIN_USER
VPATH+=:$(SRC_PATH)/darwin-user
CPPFLAGS+=-I$(SRC_PATH)/darwin-user -I$(SRC_PATH)/darwin-user/$(TARGET_ARCH)
endif
ifdef CONFIG_LINUX_USER
B
bellard 已提交
33
VPATH+=:$(SRC_PATH)/linux-user
34 35 36 37
ifndef TARGET_ABI_DIR
  TARGET_ABI_DIR=$(TARGET_ARCH)
endif
CPPFLAGS+=-I$(SRC_PATH)/linux-user -I$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR)
B
bellard 已提交
38
endif
39 40
BASE_CFLAGS=
BASE_LDFLAGS=
B
bellard 已提交
41
#CFLAGS+=-Werror
B
bellard 已提交
42 43
LIBS=
HELPER_CFLAGS=$(CFLAGS)
B
bellard 已提交
44
DYNGEN=../dyngen$(EXESUF)
45
# user emulator name
B
bellard 已提交
46
TARGET_ARCH2=$(TARGET_ARCH)
47 48
ifeq ($(TARGET_ARCH),arm)
  ifeq ($(TARGET_WORDS_BIGENDIAN),yes)
B
bellard 已提交
49
    TARGET_ARCH2=armeb
50
  endif
B
bellard 已提交
51
endif
P
pbrook 已提交
52 53 54 55 56
ifeq ($(TARGET_ARCH),sh4)
  ifeq ($(TARGET_WORDS_BIGENDIAN),yes)
    TARGET_ARCH2=sh4eb
  endif
endif
B
bellard 已提交
57
ifeq ($(TARGET_ARCH),mips)
B
bellard 已提交
58 59
  ifneq ($(TARGET_WORDS_BIGENDIAN),yes)
    TARGET_ARCH2=mipsel
B
bellard 已提交
60 61
  endif
endif
62 63 64 65 66
ifeq ($(TARGET_ARCH),mipsn32)
  ifneq ($(TARGET_WORDS_BIGENDIAN),yes)
    TARGET_ARCH2=mipsn32el
  endif
endif
T
ths 已提交
67 68 69 70 71
ifeq ($(TARGET_ARCH),mips64)
  ifneq ($(TARGET_WORDS_BIGENDIAN),yes)
    TARGET_ARCH2=mips64el
  endif
endif
72 73 74 75 76
ifeq ($(TARGET_ARCH),sparc64)
  ifeq ($(TARGET_ABI_DIR),sparc)
    TARGET_ARCH2=sparc32plus
  endif
endif
B
bellard 已提交
77
QEMU_USER=qemu-$(TARGET_ARCH2)
78 79
# system emulator name
ifdef CONFIG_SOFTMMU
80
ifeq ($(TARGET_ARCH), i386)
B
bellard 已提交
81
QEMU_SYSTEM=qemu$(EXESUF)
82
else
B
bellard 已提交
83
QEMU_SYSTEM=qemu-system-$(TARGET_ARCH2)$(EXESUF)
84 85
endif
else
86
QEMU_SYSTEM=qemu-fast
87 88
endif

B
bellard 已提交
89
ifdef CONFIG_USER_ONLY
90
PROGS=$(QEMU_USER)
B
bellard 已提交
91
else
92
PROGS+=$(QEMU_SYSTEM)
B
bellard 已提交
93 94 95
ifndef CONFIG_SOFTMMU
CONFIG_STATIC=y
endif
B
update  
bellard 已提交
96
endif # !CONFIG_USER_ONLY
B
bellard 已提交
97 98

ifdef CONFIG_STATIC
99
BASE_LDFLAGS+=-static
B
bellard 已提交
100 101
endif

102
# We require -O2 to avoid the stack setup prologue in EXIT_TB
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
OP_CFLAGS := -Wall -O2 -g -fno-strict-aliasing

# cc-option
# Usage: OP_CFLAGS+=$(call cc-option, -falign-functions=0, -malign-functions=0)

cc-option = $(shell if $(CC) $(OP_CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
              > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)

OP_CFLAGS+=$(call cc-option, -fno-reorder-blocks, "")
OP_CFLAGS+=$(call cc-option, -fno-gcse, "")
OP_CFLAGS+=$(call cc-option, -fno-tree-ch, "")
OP_CFLAGS+=$(call cc-option, -fno-optimize-sibling-calls, "")
OP_CFLAGS+=$(call cc-option, -fno-crossjumping, "")
OP_CFLAGS+=$(call cc-option, -fno-align-labels, "")
OP_CFLAGS+=$(call cc-option, -fno-align-jumps, "")
OP_CFLAGS+=$(call cc-option, -fno-align-functions, $(call cc-option, -malign-functions=0, ""))
119
OP_CFLAGS+=$(call cc-option, -fno-section-anchors, "")
120

B
bellard 已提交
121
ifeq ($(ARCH),i386)
122 123
HELPER_CFLAGS+=-fomit-frame-pointer
OP_CFLAGS+=-mpreferred-stack-boundary=2 -fomit-frame-pointer
B
bellard 已提交
124
ifdef TARGET_GPROF
B
bellard 已提交
125 126 127 128 129 130
USE_I386_LD=y
endif
ifdef CONFIG_STATIC
USE_I386_LD=y
endif
ifdef USE_I386_LD
131
BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
B
bellard 已提交
132
else
133
ifdef CONFIG_LINUX_USER
B
bellard 已提交
134 135 136
# WARNING: this LDFLAGS is _very_ tricky : qemu is an ELF shared object
# that the kernel ELF loader considers as an executable. I think this
# is the simplest way to make it self virtualizable!
137
BASE_LDFLAGS+=-Wl,-shared
B
bellard 已提交
138 139
endif
endif
140
endif
B
bellard 已提交
141

B
bellard 已提交
142
ifeq ($(ARCH),x86_64)
143
BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
144 145
endif

B
bellard 已提交
146
ifeq ($(ARCH),ppc)
147
CPPFLAGS+= -D__powerpc__
148
ifdef CONFIG_LINUX_USER
149
BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
B
bellard 已提交
150
endif
151
endif
B
bellard 已提交
152 153

ifeq ($(ARCH),s390)
154
BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
B
bellard 已提交
155 156 157
endif

ifeq ($(ARCH),sparc)
158 159 160 161 162 163 164 165 166 167
  BASE_CFLAGS+=-ffixed-g2 -ffixed-g3
  OP_CFLAGS+=-fno-delayed-branch -ffixed-i0
  ifeq ($(CONFIG_SOLARIS),yes)
    OP_CFLAGS+=-fno-omit-frame-pointer
  else
    BASE_CFLAGS+=-ffixed-g1 -ffixed-g6
    HELPER_CFLAGS=$(CFLAGS) -ffixed-i0 -mflat
    # -static is used to avoid g1/g3 usage by the dynamic linker
    BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld -static
  endif
B
bellard 已提交
168
endif
B
bellard 已提交
169 170

ifeq ($(ARCH),sparc64)
171 172 173 174 175 176
  BASE_CFLAGS+=-ffixed-g1 -ffixed-g4 -ffixed-g5 -ffixed-g7
  OP_CFLAGS+=-mcpu=ultrasparc -m64 -fno-delayed-branch -ffixed-i0
  ifneq ($(CONFIG_SOLARIS),yes)
    BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
    OP_CFLAGS+=-ffixed-g1 -ffixed-g4 -ffixed-g5 -ffixed-g7
  endif
B
bellard 已提交
177 178 179
endif

ifeq ($(ARCH),alpha)
180 181
# -msmall-data is not used for OP_CFLAGS because we want two-instruction
# relocations for the constant constructions
B
bellard 已提交
182
# Ensure there's only a single GP
183 184
BASE_CFLAGS+=-msmall-data
BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
B
bellard 已提交
185 186 187
endif

ifeq ($(ARCH),ia64)
188 189 190
BASE_CFLAGS+=-mno-sdata
OP_CFLAGS+=-mno-sdata
BASE_LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/$(ARCH).ld
B
bellard 已提交
191 192 193
endif

ifeq ($(ARCH),arm)
194 195
OP_CFLAGS+=-mno-sched-prolog -fno-omit-frame-pointer
BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
B
bellard 已提交
196 197
endif

B
bellard 已提交
198
ifeq ($(ARCH),m68k)
199 200 201 202 203
OP_CFLAGS+=-fomit-frame-pointer
BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif

ifeq ($(ARCH),mips)
T
ths 已提交
204
OP_CFLAGS+=-mabi=32 -G0 -fno-PIC -mno-abicalls -fomit-frame-pointer -fno-delayed-branch -Wa,-O0
T
ths 已提交
205 206 207 208 209 210 211 212
ifeq ($(WORDS_BIGENDIAN),yes)
BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
else
BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH)el.ld
endif
endif

ifeq ($(ARCH),mips64)
T
ths 已提交
213
OP_CFLAGS+=-mabi=n32 -G0 -fno-PIC -mno-abicalls -fomit-frame-pointer -fno-delayed-branch -Wa,-O0
T
ths 已提交
214
ifeq ($(WORDS_BIGENDIAN),yes)
215
BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
T
ths 已提交
216 217 218
else
BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH)el.ld
endif
B
bellard 已提交
219 220
endif

221
ifeq ($(CONFIG_DARWIN),yes)
B
bellard 已提交
222
LIBS+=-lmx
223 224
endif

225 226 227 228 229
ifdef CONFIG_DARWIN_USER
# Leave some space for the regular program loading zone
BASE_LDFLAGS+=-Wl,-segaddr,__STD_PROG_ZONE,0x1000 -image_base 0x0e000000
endif

230 231 232 233
BASE_CFLAGS+=$(OS_CFLAGS) $(ARCH_CFLAGS)
BASE_LDFLAGS+=$(OS_LDFLAGS) $(ARCH_LDFLAGS)
OP_CFLAGS+=$(OS_CFLAGS) $(ARCH_CFLAGS)
OP_LDFLAGS+=$(OS_LDFLAGS) $(ARCH_LDFLAGS)
234

B
bellard 已提交
235 236
#########################################################

237
CPPFLAGS+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
B
bellard 已提交
238
LIBS+=-lm
B
bellard 已提交
239 240 241
ifndef CONFIG_USER_ONLY
LIBS+=-lz
endif
B
bellard 已提交
242
ifdef CONFIG_WIN32
243
LIBS+=-lwinmm -lws2_32 -liphlpapi
B
bellard 已提交
244
endif
B
bellard 已提交
245 246
ifdef CONFIG_SOLARIS
LIBS+=-lsocket -lnsl -lresolv
T
ths 已提交
247 248 249 250 251 252
ifdef NEEDS_LIBSUNMATH
LIBS+=-lsunmath
LDFLAGS+=-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib
OP_CFLAGS+=-I/opt/SUNWspro/prod/include/cc
BASE_CFLAGS+=-I/opt/SUNWspro/prod/include/cc
endif
B
bellard 已提交
253
endif
B
bellard 已提交
254 255 256

# profiling code
ifdef TARGET_GPROF
257 258
BASE_LDFLAGS+=-p
main.o: BASE_CFLAGS+=-p
B
bellard 已提交
259 260
endif

261
ifdef CONFIG_LINUX_USER
P
pbrook 已提交
262 263
OBJS= main.o syscall.o mmap.o signal.o path.o osdep.o thunk.o \
      elfload.o linuxload.o
264
LIBS+= $(AIOLIBS)
P
pbrook 已提交
265 266 267
ifdef TARGET_HAS_BFLT
OBJS+= flatload.o
endif
268 269 270 271
ifdef TARGET_HAS_ELFLOAD32
OBJS+= elfload32.o
elfload32.o: elfload.c
endif
P
pbrook 已提交
272

B
bellard 已提交
273 274 275
ifeq ($(TARGET_ARCH), i386)
OBJS+= vm86.o
endif
B
bellard 已提交
276
ifeq ($(TARGET_ARCH), arm)
B
bellard 已提交
277
OBJS+=nwfpe/fpa11.o nwfpe/fpa11_cpdo.o \
B
bellard 已提交
278
nwfpe/fpa11_cpdt.o nwfpe/fpa11_cprt.o nwfpe/fpopcode.o nwfpe/single_cpdo.o \
279
 nwfpe/double_cpdo.o nwfpe/extended_cpdo.o arm-semi.o
B
bellard 已提交
280
endif
P
pbrook 已提交
281 282 283
ifeq ($(TARGET_ARCH), m68k)
OBJS+= m68k-sim.o m68k-semi.o
endif
284 285 286 287 288 289
endif #CONFIG_LINUX_USER

ifdef CONFIG_DARWIN_USER
OBJS= main.o commpage.o machload.o mmap.o osdep.o signal.o syscall.o thunk.o
endif

B
bellard 已提交
290 291 292 293
SRCS:= $(OBJS:.o=.c)
OBJS+= libqemu.a

# cpu emulator library
B
bellard 已提交
294
LIBOBJS=exec.o kqemu.o translate-op.o translate-all.o cpu-exec.o\
295
        translate.o op.o host-utils.o
B
bellard 已提交
296 297 298 299 300
ifdef CONFIG_SOFTFLOAT
LIBOBJS+=fpu/softfloat.o
else
LIBOBJS+=fpu/softfloat-native.o
endif
301
CPPFLAGS+=-I$(SRC_PATH)/fpu
B
bellard 已提交
302 303

ifeq ($(TARGET_ARCH), i386)
304
LIBOBJS+=helper.o helper2.o
B
bellard 已提交
305 306 307
ifeq ($(ARCH), i386)
LIBOBJS+=translate-copy.o
endif
B
bellard 已提交
308 309
endif

B
bellard 已提交
310 311 312 313
ifeq ($(TARGET_ARCH), x86_64)
LIBOBJS+=helper.o helper2.o
endif

B
bellard 已提交
314
ifeq ($(TARGET_BASE_ARCH), ppc)
B
update  
bellard 已提交
315
LIBOBJS+= op_helper.o helper.o
316 317
endif

T
ths 已提交
318
ifeq ($(TARGET_BASE_ARCH), mips)
B
bellard 已提交
319 320 321
LIBOBJS+= op_helper.o helper.o
endif

B
bellard 已提交
322
ifeq ($(TARGET_BASE_ARCH), sparc)
323 324 325
LIBOBJS+= op_helper.o helper.o
endif

B
bellard 已提交
326
ifeq ($(TARGET_BASE_ARCH), arm)
B
bellard 已提交
327
LIBOBJS+= op_helper.o helper.o
B
bellard 已提交
328 329
endif

B
bellard 已提交
330 331 332 333
ifeq ($(TARGET_BASE_ARCH), sh4)
LIBOBJS+= op_helper.o helper.o
endif

P
pbrook 已提交
334
ifeq ($(TARGET_BASE_ARCH), m68k)
P
pbrook 已提交
335
LIBOBJS+= op_helper.o helper.o
P
pbrook 已提交
336 337
endif

338 339 340 341
ifeq ($(TARGET_BASE_ARCH), alpha)
LIBOBJS+= op_helper.o helper.o alpha_palcode.o
endif

342 343 344 345 346 347 348 349 350
ifeq ($(TARGET_BASE_ARCH), cris)
LIBOBJS+= op_helper.o helper.o
LIBOBJS+= cris-dis.o

ifndef CONFIG_USER_ONLY
LIBOBJS+= mmu.o
endif
endif

B
bellard 已提交
351
# NOTE: the disassembler code is only needed for debugging
352
LIBOBJS+=disas.o
B
bellard 已提交
353
ifeq ($(findstring i386, $(TARGET_ARCH) $(ARCH)),i386)
354 355
USE_I386_DIS=y
endif
B
bellard 已提交
356
ifeq ($(findstring x86_64, $(TARGET_ARCH) $(ARCH)),x86_64)
357 358 359
USE_I386_DIS=y
endif
ifdef USE_I386_DIS
B
bellard 已提交
360 361 362 363 364
LIBOBJS+=i386-dis.o
endif
ifeq ($(findstring alpha, $(TARGET_ARCH) $(ARCH)),alpha)
LIBOBJS+=alpha-dis.o
endif
B
bellard 已提交
365
ifeq ($(findstring ppc, $(TARGET_BASE_ARCH) $(ARCH)),ppc)
B
bellard 已提交
366 367
LIBOBJS+=ppc-dis.o
endif
T
ths 已提交
368
ifeq ($(findstring mips, $(TARGET_BASE_ARCH) $(ARCH)),mips)
B
bellard 已提交
369 370
LIBOBJS+=mips-dis.o
endif
B
bellard 已提交
371
ifeq ($(findstring sparc, $(TARGET_BASE_ARCH) $(ARCH)),sparc)
B
bellard 已提交
372 373 374 375 376
LIBOBJS+=sparc-dis.o
endif
ifeq ($(findstring arm, $(TARGET_ARCH) $(ARCH)),arm)
LIBOBJS+=arm-dis.o
endif
B
bellard 已提交
377 378 379
ifeq ($(findstring m68k, $(TARGET_ARCH) $(ARCH)),m68k)
LIBOBJS+=m68k-dis.o
endif
B
bellard 已提交
380 381 382
ifeq ($(findstring sh4, $(TARGET_ARCH) $(ARCH)),sh4)
LIBOBJS+=sh4-dis.o
endif
383 384 385
ifeq ($(findstring s390, $(TARGET_ARCH) $(ARCH)),s390)
LIBOBJS+=s390-dis.o
endif
B
bellard 已提交
386

B
bellard 已提交
387 388 389
ifdef CONFIG_GDBSTUB
OBJS+=gdbstub.o
endif
B
bellard 已提交
390

391
all: $(PROGS)
B
bellard 已提交
392

393
$(QEMU_USER): $(OBJS)
394
	$(CC) $(LDFLAGS) $(BASE_LDFLAGS) -o $@ $^  $(LIBS)
B
bellard 已提交
395 396 397 398 399 400 401
ifeq ($(ARCH),alpha)
# Mark as 32 bit binary, i. e. it will be mapped into the low 31 bit of
# the address space (31 bit so sign extending doesn't matter)
	echo -ne '\001\000\000\000' | dd of=qemu bs=1 seek=48 count=4 conv=notrunc
endif

# must use static linking to avoid leaving stuff in virtual address space
P
pbrook 已提交
402
VL_OBJS=vl.o osdep.o readline.o monitor.o pci.o console.o loader.o isa_mmio.o
B
bellard 已提交
403
VL_OBJS+=cutils.o
B
bellard 已提交
404
VL_OBJS+=block.o block-raw.o
405
VL_OBJS+=block-cow.o block-qcow.o aes.o block-vmdk.o block-cloop.o block-dmg.o block-bochs.o block-vpc.o block-vvfat.o block-qcow2.o block-parallels.o
P
pbrook 已提交
406
VL_OBJS+=irq.o
B
bellard 已提交
407 408 409
ifdef CONFIG_WIN32
VL_OBJS+=tap-win32.o
endif
410

411
SOUND_HW = sb16.o es1370.o
412
AUDIODRV = audio.o noaudio.o wavaudio.o mixeng.o
B
bellard 已提交
413 414 415 416 417 418
ifdef CONFIG_SDL
AUDIODRV += sdlaudio.o
endif
ifdef CONFIG_OSS
AUDIODRV += ossaudio.o
endif
419 420 421 422 423 424 425 426 427 428
ifdef CONFIG_COREAUDIO
AUDIODRV += coreaudio.o
endif
ifdef CONFIG_ALSA
AUDIODRV += alsaaudio.o
LIBS += -lasound
endif
ifdef CONFIG_DSOUND
AUDIODRV += dsoundaudio.o
LIBS += -lole32 -ldxguid
B
bellard 已提交
429
endif
B
bellard 已提交
430
ifdef CONFIG_FMOD
B
bellard 已提交
431
AUDIODRV += fmodaudio.o
432
audio.o fmodaudio.o: CPPFLAGS := -I$(CONFIG_FMOD_INC) $(CPPFLAGS)
B
bellard 已提交
433
LIBS += $(CONFIG_FMOD_LIB)
B
bellard 已提交
434
endif
435 436 437
ifdef CONFIG_ADLIB
SOUND_HW += fmopl.o adlib.o
endif
B
bellard 已提交
438
AUDIODRV+= wavcapture.o
B
bellard 已提交
439

440 441 442 443 444
ifdef CONFIG_VNC_TLS
CPPFLAGS += $(CONFIG_VNC_TLS_CFLAGS)
LIBS += $(CONFIG_VNC_TLS_LIBS)
endif

P
pbrook 已提交
445 446
VL_OBJS += i2c.o smbus.o

P
pbrook 已提交
447
# SCSI layer
P
pbrook 已提交
448
VL_OBJS+= scsi-disk.o cdrom.o lsi53c895a.o
P
pbrook 已提交
449

B
bellard 已提交
450
# USB layer
P
pbrook 已提交
451
VL_OBJS+= usb.o usb-hub.o usb-linux.o usb-hid.o usb-ohci.o usb-msd.o
452
VL_OBJS+= usb-wacom.o
B
bellard 已提交
453

T
ths 已提交
454 455 456
# EEPROM emulation
VL_OBJS += eeprom93xx.o

457
# PCI network cards
T
ths 已提交
458 459 460 461
VL_OBJS += eepro100.o
VL_OBJS += ne2000.o
VL_OBJS += pcnet.o
VL_OBJS += rtl8139.o
462

B
bellard 已提交
463
ifeq ($(TARGET_BASE_ARCH), i386)
464
# Hardware support
465
VL_OBJS+= ide.o pckbd.o ps2.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)
B
bellard 已提交
466
VL_OBJS+= fdc.o mc146818rtc.o serial.o i8259.o i8254.o pcspk.o pc.o
467
VL_OBJS+= cirrus_vga.o apic.o parallel.o acpi.o piix_pci.o
468
VL_OBJS+= usb-uhci.o smbus_eeprom.o vmmouse.o vmport.o vmware_vga.o
469
CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE
B
bellard 已提交
470
endif
B
bellard 已提交
471
ifeq ($(TARGET_BASE_ARCH), ppc)
472
VL_OBJS+= ppc.o ide.o pckbd.o ps2.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)
473
VL_OBJS+= mc146818rtc.o serial.o i8259.o i8254.o fdc.o m48t59.o pflash_cfi02.o
474
VL_OBJS+= ppc_prep.o ppc_chrp.o cuda.o adb.o openpic.o heathrow_pic.o
475 476 477
VL_OBJS+= grackle_pci.o prep_pci.o unin_pci.o
# PowerPC 4xx boards
VL_OBJS+= ppc4xx_devs.o ppc405_uc.o ppc405_boards.o
478
CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE
479
endif
T
ths 已提交
480
ifeq ($(TARGET_BASE_ARCH), mips)
T
ths 已提交
481
VL_OBJS+= mips_r4k.o mips_malta.o mips_pica61.o mips_mipssim.o
T
ths 已提交
482
VL_OBJS+= mips_timer.o mips_int.o dma.o vga.o serial.o i8254.o i8259.o
483
VL_OBJS+= jazz_led.o
T
ths 已提交
484
VL_OBJS+= ide.o gt64xxx.o pckbd.o ps2.o fdc.o mc146818rtc.o usb-uhci.o acpi.o ds1225y.o
T
ths 已提交
485
VL_OBJS+= piix_pci.o smbus_eeprom.o parallel.o mixeng.o cirrus_vga.o $(SOUND_HW) $(AUDIODRV)
T
ths 已提交
486
VL_OBJS+= mipsnet.o
T
ths 已提交
487
CPPFLAGS += -DHAS_AUDIO
B
bellard 已提交
488
endif
489 490 491 492 493 494
ifeq ($(TARGET_BASE_ARCH), cris)
VL_OBJS+= etraxfs.o
VL_OBJS+= ptimer.o
VL_OBJS+= etraxfs_timer.o
VL_OBJS+= etraxfs_ser.o
endif
B
bellard 已提交
495
ifeq ($(TARGET_BASE_ARCH), sparc)
B
bellard 已提交
496
ifeq ($(TARGET_ARCH), sparc64)
P
pbrook 已提交
497
VL_OBJS+= sun4u.o ide.o pckbd.o ps2.o vga.o apb_pci.o
B
bellard 已提交
498
VL_OBJS+= fdc.o mc146818rtc.o serial.o m48t59.o
499
VL_OBJS+= cirrus_vga.o parallel.o ptimer.o
B
bellard 已提交
500
else
501 502
VL_OBJS+= sun4m.o tcx.o pcnet.o iommu.o m48t59.o slavio_intctl.o
VL_OBJS+= slavio_timer.o slavio_serial.o slavio_misc.o fdc.o esp.o sparc32_dma.o
503
VL_OBJS+= cs4231.o ptimer.o
B
bellard 已提交
504
endif
505
endif
B
bellard 已提交
506
ifeq ($(TARGET_BASE_ARCH), arm)
507
VL_OBJS+= integratorcp.o versatilepb.o ps2.o smc91c111.o arm_pic.o arm_timer.o
P
pbrook 已提交
508
VL_OBJS+= arm_boot.o pl011.o pl031.o pl050.o pl080.o pl110.o pl181.o pl190.o
509
VL_OBJS+= versatile_pci.o sd.o ptimer.o
P
pbrook 已提交
510
VL_OBJS+= arm_gic.o realview.o arm_sysctl.o
511
VL_OBJS+= arm-semi.o
512
VL_OBJS+= pxa2xx.o pxa2xx_pic.o pxa2xx_gpio.o pxa2xx_timer.o pxa2xx_dma.o
513 514
VL_OBJS+= pxa2xx_lcd.o pxa2xx_mmci.o pxa2xx_pcmcia.o max111x.o max7310.o
VL_OBJS+= spitz.o ads7846.o ide.o serial.o nand.o $(AUDIODRV) wm8750.o
515
VL_OBJS+= omap.o omap_lcdc.o omap1_clk.o omap_mmc.o palm.o ecc.o
516
CPPFLAGS += -DHAS_AUDIO
B
bellard 已提交
517
endif
B
bellard 已提交
518
ifeq ($(TARGET_BASE_ARCH), sh4)
T
ths 已提交
519
VL_OBJS+= shix.o r2d.o sh7750.o sh7750_regnames.o tc58128.o
520
VL_OBJS+= sh_timer.o ptimer.o sh_serial.o sh_intc.o
B
bellard 已提交
521
endif
P
pbrook 已提交
522
ifeq ($(TARGET_BASE_ARCH), m68k)
P
pbrook 已提交
523
VL_OBJS+= an5206.o mcf5206.o ptimer.o mcf_uart.o mcf_intc.o mcf5208.o mcf_fec.o
P
pbrook 已提交
524
VL_OBJS+= m68k-semi.o
P
pbrook 已提交
525
endif
526
ifdef CONFIG_GDBSTUB
527
VL_OBJS+=gdbstub.o
B
update  
bellard 已提交
528
endif
B
bellard 已提交
529
ifdef CONFIG_SDL
530
VL_OBJS+=sdl.o x_keymap.o
B
bellard 已提交
531
endif
532
VL_OBJS+=vnc.o d3des.o
533 534
ifdef CONFIG_COCOA
VL_OBJS+=cocoa.o
535 536 537 538
COCOA_LIBS=-F/System/Library/Frameworks -framework Cocoa -framework IOKit
ifdef CONFIG_COREAUDIO
COCOA_LIBS+=-framework CoreAudio
endif
539
endif
B
bellard 已提交
540
ifdef CONFIG_SLIRP
541
CPPFLAGS+=-I$(SRC_PATH)/slirp
B
bellard 已提交
542 543
SLIRP_OBJS=cksum.o if.o ip_icmp.o ip_input.o ip_output.o \
slirp.o mbuf.o misc.o sbuf.o socket.o tcp_input.o tcp_output.o \
B
bellard 已提交
544
tcp_subr.o tcp_timer.o udp.o bootp.o debug.o tftp.o
B
bellard 已提交
545
VL_OBJS+=$(addprefix slirp/, $(SLIRP_OBJS))
B
bellard 已提交
546 547
endif

548
VL_LDFLAGS=$(VL_OS_LDFLAGS)
549
VL_LIBS=$(AIOLIBS)
550 551 552 553
# specific flags are needed for non soft mmu emulator
ifdef CONFIG_STATIC
VL_LDFLAGS+=-static
endif
B
bellard 已提交
554
ifndef CONFIG_SOFTMMU
555
VL_LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386-vl.ld
B
bellard 已提交
556
endif
557
ifndef CONFIG_DARWIN
B
bellard 已提交
558
ifndef CONFIG_WIN32
B
bellard 已提交
559
ifndef CONFIG_SOLARIS
560
VL_LIBS+=-lutil
B
bellard 已提交
561
endif
562
endif
B
bellard 已提交
563
endif
B
bellard 已提交
564
ifdef TARGET_GPROF
565
vl.o: BASE_CFLAGS+=-p
B
bellard 已提交
566 567
VL_LDFLAGS+=-p
endif
568

B
bellard 已提交
569 570 571 572
ifeq ($(ARCH),ia64)
VL_LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld
endif

B
bellard 已提交
573
ifeq ($(ARCH),sparc64)
574 575 576 577
  VL_LDFLAGS+=-m64
  ifneq ($(CONFIG_SOLARIS),yes)
    VL_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
  endif
B
bellard 已提交
578 579
endif

580 581 582 583
ifdef CONFIG_WIN32
SDL_LIBS := $(filter-out -mwindows, $(SDL_LIBS)) -mconsole
endif

584
$(QEMU_SYSTEM): $(VL_OBJS) libqemu.a
585
	$(CC) $(VL_LDFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(VL_LIBS)
586 587

cocoa.o: cocoa.m
588
	$(CC) $(CFLAGS) $(CPPFLAGS) $(BASE_CFLAGS) -c -o $@ $<
B
bellard 已提交
589

590
sdl.o: sdl.c keymaps.c sdl_keysym.h
591
	$(CC) $(CFLAGS) $(CPPFLAGS) $(SDL_CFLAGS) $(BASE_CFLAGS) -c -o $@ $<
B
bellard 已提交
592

593
vnc.o: vnc.c keymaps.c sdl_keysym.h vnchextile.h d3des.c d3des.h
594
	$(CC) $(CFLAGS) $(CPPFLAGS) $(BASE_CFLAGS) -c -o $@ $<
B
bellard 已提交
595

B
bellard 已提交
596
sdlaudio.o: sdlaudio.c
597
	$(CC) $(CFLAGS) $(CPPFLAGS) $(SDL_CFLAGS) $(BASE_CFLAGS) -c -o $@ $<
B
bellard 已提交
598

B
bellard 已提交
599
depend: $(SRCS)
600
	$(CC) -MM $(CFLAGS) $(CPPFLAGS) $(BASE_CFLAGS) $^ 1>.depend
B
bellard 已提交
601

602
vldepend: $(VL_OBJS:.o=.c)
603
	$(CC) -MM $(CFLAGS) $(CPPFLAGS) $(BASE_CFLAGS) $^ 1>.depend
604

605
# libqemu
B
bellard 已提交
606 607 608 609 610

libqemu.a: $(LIBOBJS)
	rm -f $@
	$(AR) rcs $@ $(LIBOBJS)

611
translate.o: translate.c gen-op.h opc.h cpu.h
B
bellard 已提交
612

B
bellard 已提交
613 614 615
translate-all.o: translate-all.c opc.h cpu.h

translate-op.o: translate-all.c op.h opc.h cpu.h
B
bellard 已提交
616

617
op.h: op.o $(DYNGEN)
B
bellard 已提交
618 619
	$(DYNGEN) -o $@ $<

620
opc.h: op.o $(DYNGEN)
B
bellard 已提交
621 622
	$(DYNGEN) -c -o $@ $<

623
gen-op.h: op.o $(DYNGEN)
B
bellard 已提交
624 625
	$(DYNGEN) -g -o $@ $<

626
op.o: op.c
627
	$(CC) $(OP_CFLAGS) $(CPPFLAGS) -c -o $@ $<
B
bellard 已提交
628

B
bellard 已提交
629 630 631 632
# HELPER_CFLAGS is used for all the code compiled with static register
# variables
ifeq ($(TARGET_BASE_ARCH), i386)
# XXX: rename helper.c to op_helper.c
633
helper.o: helper.c
634
	$(CC) $(HELPER_CFLAGS) $(CPPFLAGS) $(BASE_CFLAGS) -c -o $@ $<
B
bellard 已提交
635 636
else
op_helper.o: op_helper.c
637
	$(CC) $(HELPER_CFLAGS) $(CPPFLAGS) $(BASE_CFLAGS) -c -o $@ $<
B
bellard 已提交
638 639 640
endif

cpu-exec.o: cpu-exec.c
641
	$(CC) $(HELPER_CFLAGS) $(CPPFLAGS) $(BASE_CFLAGS) -c -o $@ $<
B
bellard 已提交
642

643 644 645
# Note: this is a workaround. The real fix is to avoid compiling
# cpu_signal_handler() in cpu-exec.c.
signal.o: signal.c
646
	$(CC) $(HELPER_CFLAGS) $(CPPFLAGS) $(BASE_CFLAGS) -c -o $@ $<
647

B
blueswir1 已提交
648 649 650 651
vga.o: pixel_ops.h

tcx.o: pixel_ops.h

B
bellard 已提交
652
ifeq ($(TARGET_BASE_ARCH), i386)
B
bellard 已提交
653
op.o: op.c opreg_template.h ops_template.h ops_template_mem.h ops_mem.h ops_sse.h
654 655 656 657
endif

ifeq ($(TARGET_ARCH), arm)
op.o: op.c op_template.h
P
pbrook 已提交
658
pl110.o: pl110_template.h
659
endif
B
bellard 已提交
660

B
bellard 已提交
661
ifeq ($(TARGET_BASE_ARCH), sparc)
B
blueswir1 已提交
662 663 664 665
helper.o: cpu.h exec-all.h
op.o: op.c op_template.h op_mem.h fop_template.h fbranch_template.h exec.h cpu.h
op_helper.o: exec.h softmmu_template.h cpu.h
translate.o: cpu.h exec-all.h disas.h
666
endif
B
bellard 已提交
667

B
bellard 已提交
668
ifeq ($(TARGET_BASE_ARCH), ppc)
669 670
op.o: op.c op_template.h op_mem.h op_helper.h
op_helper.o: op_helper.c mfrom_table.c op_helper_mem.h op_helper.h
671
translate.o: translate.c translate_init.c
B
update  
bellard 已提交
672 673
endif

T
ths 已提交
674 675
ifeq ($(TARGET_BASE_ARCH), mips)
helper.o: cpu.h exec-all.h
T
ths 已提交
676
op.o: op_template.c fop_template.c op_mem.c exec.h cpu.h
677
op_helper.o: exec.h softmmu_template.h cpu.h
T
ths 已提交
678
translate.o: translate_init.c exec-all.h disas.h
B
bellard 已提交
679 680
endif

B
bellard 已提交
681 682
loader.o: loader.c elf_ops.h

B
bellard 已提交
683 684 685 686
ifeq ($(TARGET_ARCH), sh4)
op.o: op.c op_mem.c cpu.h
op_helper.o: op_helper.c exec.h cpu.h
helper.o: helper.c exec.h cpu.h
B
bellard 已提交
687 688
sh7750.o: sh7750.c sh7750_regs.h sh7750_regnames.h cpu.h
shix.o: shix.c sh7750_regs.h sh7750_regnames.h
B
bellard 已提交
689
sh7750_regnames.o: sh7750_regnames.c sh7750_regnames.h sh7750_regs.h
B
bellard 已提交
690
tc58128.o: tc58128.c
B
bellard 已提交
691 692
endif

693 694 695 696 697
ifeq ($(TARGET_BASE_ARCH), alpha)
op.o: op.c op_template.h op_mem.h
op_helper.o: op_helper_mem.h
endif

698 699
$(OBJS) $(LIBOBJS) $(VL_OBJS): config.h ../config-host.h

B
bellard 已提交
700
%.o: %.c
701
	$(CC) $(CFLAGS) $(CPPFLAGS) $(BASE_CFLAGS) -c -o $@ $<
B
bellard 已提交
702

B
bellard 已提交
703
%.o: %.S
704
	$(CC) $(CPPFLAGS) -c -o $@ $<
B
bellard 已提交
705

B
bellard 已提交
706
clean:
B
bellard 已提交
707
	rm -f *.o  *.a *~ $(PROGS) gen-op.h opc.h op.h nwfpe/*.o slirp/*.o fpu/*.o
708

709
install: all
B
bellard 已提交
710
ifneq ($(PROGS),)
711
	$(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
B
bellard 已提交
712
endif
B
bellard 已提交
713 714 715 716

ifneq ($(wildcard .depend),)
include .depend
endif
717

B
bellard 已提交
718
ifeq (1, 0)
719
audio.o sdlaudio.o dsoundaudio.o ossaudio.o wavaudio.o noaudio.o \
B
bellard 已提交
720
fmodaudio.o alsaaudio.o mixeng.o sb16.o es1370.o gus.o adlib.o: \
721 722
CFLAGS := $(CFLAGS) -Wall -Werror -W -Wsign-compare
endif