Makefile.target 15.8 KB
Newer Older
bellard's avatar
bellard committed
1 2
include config.mak

bellard's avatar
bellard committed
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
ths's avatar
ths committed
10 11 12
ifeq ($(TARGET_ARCH), mips64)
TARGET_BASE_ARCH:=mips
endif
bellard's avatar
bellard committed
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
bellard's avatar
bellard committed
22 23 24
ifeq ($(TARGET_ARCH), sparc64)
TARGET_BASE_ARCH:=sparc
endif
bellard's avatar
bellard committed
25
TARGET_PATH=$(SRC_PATH)/target-$(TARGET_BASE_ARCH)
bellard's avatar
bellard committed
26
VPATH=$(SRC_PATH):$(TARGET_PATH):$(SRC_PATH)/hw
pbrook's avatar
pbrook committed
27
CPPFLAGS=-I. -I.. -I$(TARGET_PATH) -I$(SRC_PATH) -MMD -MP -DNEED_CPU_H
bellard's avatar
bellard committed
28
#CFLAGS+=-Werror
bellard's avatar
bellard committed
29
LIBS=
bellard's avatar
bellard committed
30
DYNGEN=../dyngen$(EXESUF)
31
# user emulator name
bellard's avatar
bellard committed
32
ifndef TARGET_ARCH2
bellard's avatar
bellard committed
33
TARGET_ARCH2=$(TARGET_ARCH)
bellard's avatar
bellard committed
34
endif
35 36
ifeq ($(TARGET_ARCH),arm)
  ifeq ($(TARGET_WORDS_BIGENDIAN),yes)
bellard's avatar
bellard committed
37
    TARGET_ARCH2=armeb
38
  endif
bellard's avatar
bellard committed
39
endif
pbrook's avatar
pbrook committed
40 41 42 43 44
ifeq ($(TARGET_ARCH),sh4)
  ifeq ($(TARGET_WORDS_BIGENDIAN),yes)
    TARGET_ARCH2=sh4eb
  endif
endif
bellard's avatar
bellard committed
45
ifeq ($(TARGET_ARCH),mips)
bellard's avatar
bellard committed
46 47
  ifneq ($(TARGET_WORDS_BIGENDIAN),yes)
    TARGET_ARCH2=mipsel
bellard's avatar
bellard committed
48 49
  endif
endif
50 51 52 53 54
ifeq ($(TARGET_ARCH),mipsn32)
  ifneq ($(TARGET_WORDS_BIGENDIAN),yes)
    TARGET_ARCH2=mipsn32el
  endif
endif
ths's avatar
ths committed
55 56 57 58 59
ifeq ($(TARGET_ARCH),mips64)
  ifneq ($(TARGET_WORDS_BIGENDIAN),yes)
    TARGET_ARCH2=mips64el
  endif
endif
60 61 62 63 64

ifdef CONFIG_USER_ONLY
# user emulator name
QEMU_PROG=qemu-$(TARGET_ARCH2)
else
65
# system emulator name
66
ifeq ($(TARGET_ARCH), i386)
67
QEMU_PROG=qemu$(EXESUF)
68
else
69
QEMU_PROG=qemu-system-$(TARGET_ARCH2)$(EXESUF)
70
endif
bellard's avatar
bellard committed
71
endif
bellard's avatar
bellard committed
72

73
PROGS=$(QEMU_PROG)
bellard's avatar
bellard committed
74

75
# We require -O2 to avoid the stack setup prologue in EXIT_TB
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
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, ""))
92
OP_CFLAGS+=$(call cc-option, -fno-section-anchors, "")
93

94 95
HELPER_CFLAGS=

bellard's avatar
bellard committed
96
ifeq ($(ARCH),i386)
97 98
HELPER_CFLAGS+=-fomit-frame-pointer
OP_CFLAGS+=-mpreferred-stack-boundary=2 -fomit-frame-pointer
99 100
endif

bellard's avatar
bellard committed
101
ifeq ($(ARCH),ppc)
102
CPPFLAGS+= -D__powerpc__
bellard's avatar
bellard committed
103 104 105
endif

ifeq ($(ARCH),sparc)
106
  CFLAGS+=-ffixed-g2 -ffixed-g3
107 108 109 110
  OP_CFLAGS+=-fno-delayed-branch -ffixed-i0
  ifeq ($(CONFIG_SOLARIS),yes)
    OP_CFLAGS+=-fno-omit-frame-pointer
  else
111 112
    CFLAGS+=-ffixed-g1 -ffixed-g6
    HELPER_CFLAGS+=-ffixed-i0
113
  endif
114
endif
bellard's avatar
bellard committed
115 116

ifeq ($(ARCH),sparc64)
117
  CFLAGS+=-ffixed-g1 -ffixed-g4 -ffixed-g5 -ffixed-g7
118 119 120 121
  OP_CFLAGS+=-mcpu=ultrasparc -m64 -fno-delayed-branch -ffixed-i0
  ifneq ($(CONFIG_SOLARIS),yes)
    OP_CFLAGS+=-ffixed-g1 -ffixed-g4 -ffixed-g5 -ffixed-g7
  endif
bellard's avatar
bellard committed
122 123 124
endif

ifeq ($(ARCH),alpha)
125 126
# -msmall-data is not used for OP_CFLAGS because we want two-instruction
# relocations for the constant constructions
bellard's avatar
bellard committed
127
# Ensure there's only a single GP
128
CFLAGS+=-msmall-data
bellard's avatar
bellard committed
129 130 131
endif

ifeq ($(ARCH),ia64)
132
CFLAGS+=-mno-sdata
133
OP_CFLAGS+=-mno-sdata
bellard's avatar
bellard committed
134 135 136
endif

ifeq ($(ARCH),arm)
137
OP_CFLAGS+=-mno-sched-prolog -fno-omit-frame-pointer
bellard's avatar
bellard committed
138 139
endif

bellard's avatar
bellard committed
140
ifeq ($(ARCH),m68k)
141 142 143 144
OP_CFLAGS+=-fomit-frame-pointer
endif

ifeq ($(ARCH),mips)
ths's avatar
ths committed
145
OP_CFLAGS+=-mabi=32 -G0 -fno-PIC -mno-abicalls -fomit-frame-pointer -fno-delayed-branch -Wa,-O0
ths's avatar
ths committed
146 147 148
endif

ifeq ($(ARCH),mips64)
ths's avatar
ths committed
149
OP_CFLAGS+=-mabi=n32 -G0 -fno-PIC -mno-abicalls -fomit-frame-pointer -fno-delayed-branch -Wa,-O0
150 151
endif

152 153
CFLAGS+=$(OS_CFLAGS) $(ARCH_CFLAGS)
LDFLAGS+=$(OS_LDFLAGS) $(ARCH_LDFLAGS)
154
OP_CFLAGS+=$(OS_CFLAGS) $(ARCH_CFLAGS)
bellard's avatar
bellard committed
155

156
CPPFLAGS+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
bellard's avatar
bellard committed
157
LIBS+=-lm
bellard's avatar
bellard committed
158
ifdef CONFIG_WIN32
159
LIBS+=-lwinmm -lws2_32 -liphlpapi
bellard's avatar
bellard committed
160
endif
bellard's avatar
bellard committed
161 162
ifdef CONFIG_SOLARIS
LIBS+=-lsocket -lnsl -lresolv
ths's avatar
ths committed
163 164 165 166
ifdef NEEDS_LIBSUNMATH
LIBS+=-lsunmath
LDFLAGS+=-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib
OP_CFLAGS+=-I/opt/SUNWspro/prod/include/cc
167
CFLAGS+=-I/opt/SUNWspro/prod/include/cc
bellard's avatar
bellard committed
168
endif
169 170
endif

171
all: $(PROGS)
bellard's avatar
bellard committed
172

173
#########################################################
bellard's avatar
bellard committed
174
# cpu emulator library
bellard's avatar
bellard committed
175
LIBOBJS=exec.o kqemu.o translate-all.o cpu-exec.o\
176 177 178 179
        translate.o host-utils.o
ifndef CONFIG_NO_DYNGEN_OP
LIBOBJS+=op.o
endif
bellard's avatar
bellard committed
180 181 182
# TCG code generator
LIBOBJS+= tcg/tcg.o tcg/tcg-dyngen.o tcg/tcg-runtime.o
CPPFLAGS+=-I$(SRC_PATH)/tcg -I$(SRC_PATH)/tcg/$(ARCH)
blueswir1's avatar
blueswir1 committed
183 184 185
ifeq ($(ARCH),sparc64)
CPPFLAGS+=-I$(SRC_PATH)/tcg/sparc
endif
bellard's avatar
bellard committed
186 187 188 189 190
ifdef CONFIG_SOFTFLOAT
LIBOBJS+=fpu/softfloat.o
else
LIBOBJS+=fpu/softfloat-native.o
endif
191
CPPFLAGS+=-I$(SRC_PATH)/fpu
bellard's avatar
bellard committed
192 193

ifeq ($(TARGET_ARCH), i386)
194
LIBOBJS+=helper.o helper2.o
bellard's avatar
bellard committed
195 196
endif

bellard's avatar
bellard committed
197 198 199 200
ifeq ($(TARGET_ARCH), x86_64)
LIBOBJS+=helper.o helper2.o
endif

bellard's avatar
bellard committed
201
ifeq ($(TARGET_BASE_ARCH), ppc)
bellard's avatar
bellard committed
202
LIBOBJS+= op_helper.o helper.o
203 204
endif

ths's avatar
ths committed
205
ifeq ($(TARGET_BASE_ARCH), mips)
bellard's avatar
bellard committed
206 207 208
LIBOBJS+= op_helper.o helper.o
endif

bellard's avatar
bellard committed
209
ifeq ($(TARGET_BASE_ARCH), sparc)
210 211 212
LIBOBJS+= op_helper.o helper.o
endif

bellard's avatar
bellard committed
213
ifeq ($(TARGET_BASE_ARCH), arm)
pbrook's avatar
pbrook committed
214
LIBOBJS+= op_helper.o helper.o neon_helper.o iwmmxt_helper.o
bellard's avatar
bellard committed
215 216
endif

bellard's avatar
bellard committed
217 218 219 220
ifeq ($(TARGET_BASE_ARCH), sh4)
LIBOBJS+= op_helper.o helper.o
endif

pbrook's avatar
pbrook committed
221
ifeq ($(TARGET_BASE_ARCH), m68k)
pbrook's avatar
pbrook committed
222
LIBOBJS+= op_helper.o helper.o
pbrook's avatar
pbrook committed
223 224
endif

225 226 227 228
ifeq ($(TARGET_BASE_ARCH), alpha)
LIBOBJS+= op_helper.o helper.o alpha_palcode.o
endif

229 230 231 232 233 234 235 236 237
ifeq ($(TARGET_BASE_ARCH), cris)
LIBOBJS+= op_helper.o helper.o
LIBOBJS+= cris-dis.o

ifndef CONFIG_USER_ONLY
LIBOBJS+= mmu.o
endif
endif

bellard's avatar
bellard committed
238
# NOTE: the disassembler code is only needed for debugging
239
LIBOBJS+=disas.o
bellard's avatar
bellard committed
240
ifeq ($(findstring i386, $(TARGET_ARCH) $(ARCH)),i386)
241 242
USE_I386_DIS=y
endif
bellard's avatar
bellard committed
243
ifeq ($(findstring x86_64, $(TARGET_ARCH) $(ARCH)),x86_64)
244 245 246
USE_I386_DIS=y
endif
ifdef USE_I386_DIS
bellard's avatar
bellard committed
247 248 249 250 251
LIBOBJS+=i386-dis.o
endif
ifeq ($(findstring alpha, $(TARGET_ARCH) $(ARCH)),alpha)
LIBOBJS+=alpha-dis.o
endif
bellard's avatar
bellard committed
252
ifeq ($(findstring ppc, $(TARGET_BASE_ARCH) $(ARCH)),ppc)
bellard's avatar
bellard committed
253 254
LIBOBJS+=ppc-dis.o
endif
ths's avatar
ths committed
255
ifeq ($(findstring mips, $(TARGET_BASE_ARCH) $(ARCH)),mips)
bellard's avatar
bellard committed
256 257
LIBOBJS+=mips-dis.o
endif
bellard's avatar
bellard committed
258
ifeq ($(findstring sparc, $(TARGET_BASE_ARCH) $(ARCH)),sparc)
bellard's avatar
bellard committed
259 260 261 262 263
LIBOBJS+=sparc-dis.o
endif
ifeq ($(findstring arm, $(TARGET_ARCH) $(ARCH)),arm)
LIBOBJS+=arm-dis.o
endif
bellard's avatar
bellard committed
264 265 266
ifeq ($(findstring m68k, $(TARGET_ARCH) $(ARCH)),m68k)
LIBOBJS+=m68k-dis.o
endif
bellard's avatar
bellard committed
267 268 269
ifeq ($(findstring sh4, $(TARGET_ARCH) $(ARCH)),sh4)
LIBOBJS+=sh4-dis.o
endif
270 271 272
ifeq ($(findstring s390, $(TARGET_ARCH) $(ARCH)),s390)
LIBOBJS+=s390-dis.o
endif
bellard's avatar
bellard committed
273

274 275
# libqemu

276
ifndef CONFIG_NO_DYNGEN_OP
277
OPC_H = gen-op.h dyngen-opc.h op.h
278
endif
279

280 281 282 283
libqemu.a: $(LIBOBJS)
	rm -f $@
	$(AR) rcs $@ $(LIBOBJS)

284 285 286 287 288
translate.o: translate.c cpu.h $(OPC_H)

translate-all.o: translate-all.c cpu.h $(OPC_H)

tcg/tcg.o: cpu.h $(OPC_H)
289

290
tcg/tcg-dyngen.o: $(OPC_H)
291

292
tcg/tcg-runtime.o: $(OPC_H)
293 294 295 296

op.h: op.o $(DYNGEN)
	$(DYNGEN) -o $@ $<

bellard's avatar
bellard committed
297
dyngen-opc.h: op.o $(DYNGEN)
298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427
	$(DYNGEN) -c -o $@ $<

gen-op.h: op.o $(DYNGEN)
	$(DYNGEN) -g -o $@ $<

op.o: op.c
	$(CC) $(OP_CFLAGS) $(CPPFLAGS) -c -o $@ $<

# 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
helper.o: helper.c
	$(CC) $(HELPER_CFLAGS) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
else
op_helper.o: op_helper.c
	$(CC) $(HELPER_CFLAGS) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
endif

cpu-exec.o: cpu-exec.c
	$(CC) $(HELPER_CFLAGS) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

#########################################################
# Linux user emulator target

ifdef CONFIG_LINUX_USER

VPATH+=:$(SRC_PATH)/linux-user
ifndef TARGET_ABI_DIR
  TARGET_ABI_DIR=$(TARGET_ARCH)
endif
CPPFLAGS+=-I$(SRC_PATH)/linux-user -I$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR)

ifdef CONFIG_STATIC
LDFLAGS+=-static
endif

ifeq ($(ARCH),i386)
ifdef TARGET_GPROF
USE_I386_LD=y
endif
ifdef CONFIG_STATIC
USE_I386_LD=y
endif
ifdef USE_I386_LD
LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
else
# 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!
LDFLAGS+=-Wl,-shared
endif
endif

ifeq ($(ARCH),x86_64)
LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif

ifeq ($(ARCH),ppc)
LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif

ifeq ($(ARCH),s390)
LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif

ifeq ($(ARCH),sparc)
# -static is used to avoid g1/g3 usage by the dynamic linker	
LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld -static
endif

ifeq ($(ARCH),sparc64)
LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif

ifeq ($(ARCH),alpha)
LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif

ifeq ($(ARCH),ia64)
LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif

ifeq ($(ARCH),arm)
LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif

ifeq ($(ARCH),m68k)
LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif

ifeq ($(ARCH),mips)
ifeq ($(WORDS_BIGENDIAN),yes)
LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
else
LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH)el.ld
endif
endif

ifeq ($(ARCH),mips64)
ifeq ($(WORDS_BIGENDIAN),yes)
LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
else
LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH)el.ld
endif
endif

OBJS= main.o syscall.o strace.o mmap.o signal.o path.o osdep.o thunk.o \
      elfload.o linuxload.o uaccess.o
LIBS+= $(AIOLIBS)
ifdef TARGET_HAS_BFLT
OBJS+= flatload.o
endif
ifdef TARGET_HAS_ELFLOAD32
OBJS+= elfload32.o
elfload32.o: elfload.c
endif

ifeq ($(TARGET_ARCH), i386)
OBJS+= vm86.o
endif
ifeq ($(TARGET_ARCH), arm)
OBJS+=nwfpe/fpa11.o nwfpe/fpa11_cpdo.o \
nwfpe/fpa11_cpdt.o nwfpe/fpa11_cprt.o nwfpe/fpopcode.o nwfpe/single_cpdo.o \
 nwfpe/double_cpdo.o nwfpe/extended_cpdo.o arm-semi.o
endif
ifeq ($(TARGET_ARCH), m68k)
OBJS+= m68k-sim.o m68k-semi.o
endif

428 429 430
ifdef CONFIG_GDBSTUB
OBJS+=gdbstub.o
endif
bellard's avatar
bellard committed
431

432 433 434 435 436 437
OBJS+= libqemu.a

# Note: this is a workaround. The real fix is to avoid compiling
# cpu_signal_handler() in cpu-exec.c.
signal.o: signal.c
	$(CC) $(HELPER_CFLAGS) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
bellard's avatar
bellard committed
438

439 440
$(QEMU_PROG): $(OBJS)
	$(CC) $(LDFLAGS) -o $@ $^  $(LIBS)
bellard's avatar
bellard committed
441 442 443 444 445 446
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

447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484
endif #CONFIG_LINUX_USER

#########################################################
# Darwin user emulator target

ifdef CONFIG_DARWIN_USER

VPATH+=:$(SRC_PATH)/darwin-user
CPPFLAGS+=-I$(SRC_PATH)/darwin-user -I$(SRC_PATH)/darwin-user/$(TARGET_ARCH)

# Leave some space for the regular program loading zone
LDFLAGS+=-Wl,-segaddr,__STD_PROG_ZONE,0x1000 -image_base 0x0e000000

LIBS+=-lmx

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

OBJS+= libqemu.a

ifdef CONFIG_GDBSTUB
OBJS+=gdbstub.o
endif

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

$(QEMU_PROG): $(OBJS)
	$(CC) $(LDFLAGS) -o $@ $^  $(LIBS)

endif #CONFIG_DARWIN_USER

#########################################################
# System emulator target
ifndef CONFIG_USER_ONLY

OBJS=vl.o osdep.o monitor.o pci.o loader.o isa_mmio.o
485
ifdef CONFIG_WIN32
486
OBJS+=block-raw-win32.o
487
else
488
OBJS+=block-raw-posix.o
489
endif
490

491
LIBS+=-lz
492 493 494
ifdef CONFIG_ALSA
LIBS += -lasound
endif
495 496 497
ifdef CONFIG_ESD
LIBS += -lesd
endif
498 499
ifdef CONFIG_DSOUND
LIBS += -lole32 -ldxguid
bellard's avatar
bellard committed
500
endif
bellard's avatar
bellard committed
501 502
ifdef CONFIG_FMOD
LIBS += $(CONFIG_FMOD_LIB)
bellard's avatar
bellard committed
503
endif
bellard's avatar
bellard committed
504 505

SOUND_HW = sb16.o es1370.o
506 507 508
ifdef CONFIG_AC97
SOUND_HW += ac97.o
endif
509 510 511
ifdef CONFIG_ADLIB
SOUND_HW += fmopl.o adlib.o
endif
512 513 514
ifdef CONFIG_GUS
SOUND_HW += gus.o gusemu_hal.o gusemu_mixer.o
endif
bellard's avatar
bellard committed
515

516 517 518 519 520
ifdef CONFIG_VNC_TLS
CPPFLAGS += $(CONFIG_VNC_TLS_CFLAGS)
LIBS += $(CONFIG_VNC_TLS_LIBS)
endif

pbrook's avatar
pbrook committed
521
# SCSI layer
522
OBJS+= lsi53c895a.o esp.o
pbrook's avatar
pbrook committed
523

bellard's avatar
bellard committed
524
# USB layer
525
OBJS+= usb-ohci.o
bellard's avatar
bellard committed
526

ths's avatar
ths committed
527
# EEPROM emulation
528
OBJS += eeprom93xx.o
ths's avatar
ths committed
529

530
# PCI network cards
531 532 533 534
OBJS += eepro100.o
OBJS += ne2000.o
OBJS += pcnet.o
OBJS += rtl8139.o
535
OBJS += e1000.o
536

bellard's avatar
bellard committed
537
ifeq ($(TARGET_BASE_ARCH), i386)
538
# Hardware support
539 540 541 542
OBJS+= ide.o pckbd.o ps2.o vga.o $(SOUND_HW) dma.o
OBJS+= fdc.o mc146818rtc.o serial.o i8259.o i8254.o pcspk.o pc.o
OBJS+= cirrus_vga.o apic.o parallel.o acpi.o piix_pci.o
OBJS+= usb-uhci.o vmmouse.o vmport.o vmware_vga.o
543
CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE
bellard's avatar
bellard committed
544
endif
bellard's avatar
bellard committed
545
ifeq ($(TARGET_BASE_ARCH), ppc)
546
CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE
547
# shared objects
548
OBJS+= ppc.o ide.o vga.o $(SOUND_HW) dma.o openpic.o
549
# PREP target
550 551
OBJS+= pckbd.o ps2.o serial.o i8259.o i8254.o fdc.o m48t59.o mc146818rtc.o
OBJS+= prep_pci.o ppc_prep.o
552
# Mac shared devices
553
OBJS+= macio.o cuda.o adb.o mac_nvram.o mac_dbdma.o
554
# OldWorld PowerMac
555
OBJS+= heathrow_pic.o grackle_pci.o ppc_oldworld.o
556
# NewWorld PowerMac
557
OBJS+= unin_pci.o ppc_chrp.o
558
# PowerPC 4xx boards
559
OBJS+= pflash_cfi02.o ppc4xx_devs.o ppc405_uc.o ppc405_boards.o
560
endif
ths's avatar
ths committed
561
ifeq ($(TARGET_BASE_ARCH), mips)
aurel32's avatar
aurel32 committed
562
OBJS+= mips_r4k.o mips_jazz.o mips_malta.o mips_mipssim.o
aurel32's avatar
aurel32 committed
563 564
OBJS+= mips_timer.o mips_int.o dma.o vga.o serial.o i8254.o i8259.o rc4030.o
OBJS+= g364fb.o jazz_led.o
565
OBJS+= ide.o gt64xxx.o pckbd.o ps2.o fdc.o mc146818rtc.o usb-uhci.o acpi.o ds1225y.o
aurel32's avatar
aurel32 committed
566
OBJS+= piix_pci.o parallel.o cirrus_vga.o pcspk.o $(SOUND_HW)
567 568
OBJS+= mipsnet.o
OBJS+= pflash_cfi01.o
aurel32's avatar
aurel32 committed
569
CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE
bellard's avatar
bellard committed
570
endif
571
ifeq ($(TARGET_BASE_ARCH), cris)
572
OBJS+= etraxfs.o
573
OBJS+= etraxfs_pic.o
574 575
OBJS+= etraxfs_timer.o
OBJS+= etraxfs_ser.o
576 577 578

OBJS+= ptimer.o
OBJS+= pflash_cfi01.o
579
endif
bellard's avatar
bellard committed
580
ifeq ($(TARGET_BASE_ARCH), sparc)
bellard's avatar
bellard committed
581
ifeq ($(TARGET_ARCH), sparc64)
582 583 584
OBJS+= sun4u.o ide.o pckbd.o ps2.o vga.o apb_pci.o
OBJS+= fdc.o mc146818rtc.o serial.o m48t59.o
OBJS+= cirrus_vga.o parallel.o ptimer.o
bellard's avatar
bellard committed
585
else
586
OBJS+= sun4m.o tcx.o pcnet.o iommu.o m48t59.o slavio_intctl.o
587
OBJS+= slavio_timer.o slavio_serial.o slavio_misc.o fdc.o sparc32_dma.o
588
OBJS+= cs4231.o ptimer.o eccmemctl.o sbi.o sun4c_intctl.o
bellard's avatar
bellard committed
589
endif
590
endif
bellard's avatar
bellard committed
591
ifeq ($(TARGET_BASE_ARCH), arm)
592 593 594 595 596 597 598 599 600 601 602
OBJS+= integratorcp.o versatilepb.o ps2.o smc91c111.o arm_pic.o arm_timer.o
OBJS+= arm_boot.o pl011.o pl031.o pl050.o pl080.o pl110.o pl181.o pl190.o
OBJS+= versatile_pci.o ptimer.o
OBJS+= realview_gic.o realview.o arm_sysctl.o mpcore.o
OBJS+= armv7m.o armv7m_nvic.o stellaris.o pl022.o stellaris_enet.o
OBJS+= pl061.o
OBJS+= arm-semi.o
OBJS+= pxa2xx.o pxa2xx_pic.o pxa2xx_gpio.o pxa2xx_timer.o pxa2xx_dma.o
OBJS+= pxa2xx_lcd.o pxa2xx_mmci.o pxa2xx_pcmcia.o pxa2xx_keypad.o
OBJS+= pflash_cfi01.o gumstix.o
OBJS+= spitz.o ide.o serial.o nand.o ecc.o
balrog's avatar
balrog committed
603
OBJS+= omap1.o omap_lcdc.o omap_dma.o omap_clk.o omap_mmc.o omap_i2c.o
604 605
OBJS+= palm.o tsc210x.o
OBJS+= mst_fpga.o mainstone.o
606
CPPFLAGS += -DHAS_AUDIO
bellard's avatar
bellard committed
607
endif
bellard's avatar
bellard committed
608
ifeq ($(TARGET_BASE_ARCH), sh4)
609 610
OBJS+= shix.o r2d.o sh7750.o sh7750_regnames.o tc58128.o
OBJS+= sh_timer.o ptimer.o sh_serial.o sh_intc.o
bellard's avatar
bellard committed
611
endif
pbrook's avatar
pbrook committed
612
ifeq ($(TARGET_BASE_ARCH), m68k)
613 614
OBJS+= an5206.o mcf5206.o ptimer.o mcf_uart.o mcf_intc.o mcf5208.o mcf_fec.o
OBJS+= m68k-semi.o dummy_m68k.o
pbrook's avatar
pbrook committed
615
endif
616
ifdef CONFIG_GDBSTUB
617
OBJS+=gdbstub.o
bellard's avatar
bellard committed
618
endif
619
ifdef CONFIG_COCOA
620 621 622 623
COCOA_LIBS=-F/System/Library/Frameworks -framework Cocoa -framework IOKit
ifdef CONFIG_COREAUDIO
COCOA_LIBS+=-framework CoreAudio
endif
624
endif
bellard's avatar
bellard committed
625
ifdef CONFIG_SLIRP
626
CPPFLAGS+=-I$(SRC_PATH)/slirp
bellard's avatar
bellard committed
627 628
endif

629
LIBS+=$(AIOLIBS)
630 631
# specific flags are needed for non soft mmu emulator
ifdef CONFIG_STATIC
632
LDFLAGS+=-static
bellard's avatar
bellard committed
633
endif
634
ifndef CONFIG_DARWIN
bellard's avatar
bellard committed
635
ifndef CONFIG_WIN32
bellard's avatar
bellard committed
636
ifndef CONFIG_SOLARIS
637
LIBS+=-lutil
bellard's avatar
bellard committed
638
endif
639
endif
bellard's avatar
bellard committed
640
endif
bellard's avatar
bellard committed
641
ifdef TARGET_GPROF
642 643
vl.o: CFLAGS+=-p
LDFLAGS+=-p
bellard's avatar
bellard committed
644
endif
645

646
ifeq ($(ARCH),ia64)
647
LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld
bellard's avatar
bellard committed
648 649
endif

650 651 652 653
ifdef CONFIG_WIN32
SDL_LIBS := $(filter-out -mwindows, $(SDL_LIBS)) -mconsole
endif

654 655 656 657
# profiling code
ifdef TARGET_GPROF
LDFLAGS+=-p
main.o: CFLAGS+=-p
bellard's avatar
bellard committed
658 659
endif

660
$(QEMU_PROG): $(OBJS) ../libqemu_common.a libqemu.a
aurel32's avatar
aurel32 committed
661
	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(CURSES_LIBS) $(BRLAPI_LIBS)
bellard's avatar
bellard committed
662

663
endif # !CONFIG_USER_ONLY
664

bellard's avatar
bellard committed
665
%.o: %.c
666
	$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
bellard's avatar
bellard committed
667

bellard's avatar
bellard committed
668
%.o: %.S
669
	$(CC) $(CPPFLAGS) -c -o $@ $<
bellard's avatar
bellard committed
670

bellard's avatar
bellard committed
671
clean:
bellard's avatar
bellard committed
672 673
	rm -f *.o *.a *~ $(PROGS) gen-op.h dyngen-opc.h op.h nwfpe/*.o fpu/*.o
	rm -f *.d */*.d tcg/*.o
674

675
install: all
bellard's avatar
bellard committed
676
ifneq ($(PROGS),)
677
	$(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
bellard's avatar
bellard committed
678
endif
bellard's avatar
bellard committed
679

680 681
# Include automatically generated dependency files
-include $(wildcard *.d */*.d)