Makefile.target 16.6 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
27
CPPFLAGS=-I. -I.. -I$(TARGET_PATH) -I$(SRC_PATH) -MMD -MT $@ -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
blueswir1's avatar
blueswir1 committed
76 77
OP_CFLAGS := -O2 -g -fno-strict-aliasing
OP_CFLAGS += -Wall -Wundef -Wendif-labels -Wwrite-strings
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92

# 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, ""))
93
OP_CFLAGS+=$(call cc-option, -fno-section-anchors, "")
94

95 96
HELPER_CFLAGS=

bellard's avatar
bellard committed
97
ifeq ($(ARCH),i386)
98 99
HELPER_CFLAGS+=-fomit-frame-pointer
OP_CFLAGS+=-mpreferred-stack-boundary=2 -fomit-frame-pointer
100 101 102 103 104 105
# op.c and helper.c need this on 32-bit x86 system to avoid
# a compiler spill error. This can probably go away
# once the SSE ops have been converted to TCG
ifeq ($(HAVE_GT_GCC_3_3), true)
I386_CFLAGS=-march=i586 -mtune=i686
endif
106 107
endif

bellard's avatar
bellard committed
108
ifeq ($(ARCH),ppc)
109
CPPFLAGS+= -D__powerpc__
110
OP_CFLAGS+= -mlongcall
bellard's avatar
bellard committed
111 112 113
endif

ifeq ($(ARCH),sparc)
114
  CFLAGS+=-ffixed-g2 -ffixed-g3
115 116 117 118
  OP_CFLAGS+=-fno-delayed-branch -ffixed-i0
  ifeq ($(CONFIG_SOLARIS),yes)
    OP_CFLAGS+=-fno-omit-frame-pointer
  else
119 120
    CFLAGS+=-ffixed-g1 -ffixed-g6
    HELPER_CFLAGS+=-ffixed-i0
121
  endif
122
endif
bellard's avatar
bellard committed
123 124

ifeq ($(ARCH),sparc64)
125 126
  OP_CFLAGS+=-mcpu=ultrasparc -m64 -fno-delayed-branch -ffixed-i0
  ifneq ($(CONFIG_SOLARIS),yes)
127 128 129 130
    CFLAGS+=-ffixed-g5 -ffixed-g6 -ffixed-g7
    OP_CFLAGS+=-ffixed-g5 -ffixed-g6 -ffixed-g7
  else
    CFLAGS+=-ffixed-g1 -ffixed-g4 -ffixed-g5 -ffixed-g7
131
  endif
bellard's avatar
bellard committed
132 133 134
endif

ifeq ($(ARCH),alpha)
135 136
# -msmall-data is not used for OP_CFLAGS because we want two-instruction
# relocations for the constant constructions
bellard's avatar
bellard committed
137
# Ensure there's only a single GP
138
CFLAGS+=-msmall-data
bellard's avatar
bellard committed
139 140
endif

aurel32's avatar
aurel32 committed
141 142 143 144 145
ifeq ($(ARCH),hppa)
OP_CFLAGS=-O1 -fno-delayed-branch
BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif

bellard's avatar
bellard committed
146
ifeq ($(ARCH),ia64)
147
CFLAGS+=-mno-sdata
148
OP_CFLAGS+=-mno-sdata
bellard's avatar
bellard committed
149 150 151
endif

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

bellard's avatar
bellard committed
155
ifeq ($(ARCH),m68k)
156 157 158 159
OP_CFLAGS+=-fomit-frame-pointer
endif

ifeq ($(ARCH),mips)
ths's avatar
ths committed
160
OP_CFLAGS+=-mabi=32 -G0 -fno-PIC -mno-abicalls -fomit-frame-pointer -fno-delayed-branch -Wa,-O0
ths's avatar
ths committed
161 162 163
endif

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

167 168
CFLAGS+=$(OS_CFLAGS) $(ARCH_CFLAGS)
LDFLAGS+=$(OS_LDFLAGS) $(ARCH_LDFLAGS)
169
OP_CFLAGS+=$(OS_CFLAGS) $(ARCH_CFLAGS)
bellard's avatar
bellard committed
170

171
CPPFLAGS+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
bellard's avatar
bellard committed
172
LIBS+=-lm
bellard's avatar
bellard committed
173
ifdef CONFIG_WIN32
174
LIBS+=-lwinmm -lws2_32 -liphlpapi
bellard's avatar
bellard committed
175
endif
bellard's avatar
bellard committed
176 177
ifdef CONFIG_SOLARIS
LIBS+=-lsocket -lnsl -lresolv
ths's avatar
ths committed
178 179 180 181
ifdef NEEDS_LIBSUNMATH
LIBS+=-lsunmath
LDFLAGS+=-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib
OP_CFLAGS+=-I/opt/SUNWspro/prod/include/cc
182
CFLAGS+=-I/opt/SUNWspro/prod/include/cc
bellard's avatar
bellard committed
183
endif
184 185
endif

186
all: $(PROGS)
bellard's avatar
bellard committed
187

188
#########################################################
bellard's avatar
bellard committed
189
# cpu emulator library
bellard's avatar
bellard committed
190
LIBOBJS=exec.o kqemu.o translate-all.o cpu-exec.o\
191
        translate.o host-utils.o
192
ifdef CONFIG_DYNGEN_OP
193
exec.o: dyngen-opc.h
194 195
LIBOBJS+=op.o
endif
bellard's avatar
bellard committed
196 197 198
# 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
199 200 201
ifeq ($(ARCH),sparc64)
CPPFLAGS+=-I$(SRC_PATH)/tcg/sparc
endif
bellard's avatar
bellard committed
202 203 204 205 206
ifdef CONFIG_SOFTFLOAT
LIBOBJS+=fpu/softfloat.o
else
LIBOBJS+=fpu/softfloat-native.o
endif
207
CPPFLAGS+=-I$(SRC_PATH)/fpu
208 209
LIBOBJS+= op_helper.o helper.o

bellard's avatar
bellard committed
210
ifeq ($(TARGET_BASE_ARCH), arm)
211
LIBOBJS+= neon_helper.o iwmmxt_helper.o
pbrook's avatar
pbrook committed
212 213
endif

214
ifeq ($(TARGET_BASE_ARCH), alpha)
215
LIBOBJS+= alpha_palcode.o
216 217
endif

218 219 220 221 222 223 224 225
ifeq ($(TARGET_BASE_ARCH), cris)
LIBOBJS+= cris-dis.o

ifndef CONFIG_USER_ONLY
LIBOBJS+= mmu.o
endif
endif

bellard's avatar
bellard committed
226
# NOTE: the disassembler code is only needed for debugging
227
LIBOBJS+=disas.o
bellard's avatar
bellard committed
228
ifeq ($(findstring i386, $(TARGET_ARCH) $(ARCH)),i386)
229 230
USE_I386_DIS=y
endif
bellard's avatar
bellard committed
231
ifeq ($(findstring x86_64, $(TARGET_ARCH) $(ARCH)),x86_64)
232 233 234
USE_I386_DIS=y
endif
ifdef USE_I386_DIS
bellard's avatar
bellard committed
235 236 237 238 239
LIBOBJS+=i386-dis.o
endif
ifeq ($(findstring alpha, $(TARGET_ARCH) $(ARCH)),alpha)
LIBOBJS+=alpha-dis.o
endif
bellard's avatar
bellard committed
240
ifeq ($(findstring ppc, $(TARGET_BASE_ARCH) $(ARCH)),ppc)
bellard's avatar
bellard committed
241 242
LIBOBJS+=ppc-dis.o
endif
ths's avatar
ths committed
243
ifeq ($(findstring mips, $(TARGET_BASE_ARCH) $(ARCH)),mips)
bellard's avatar
bellard committed
244 245
LIBOBJS+=mips-dis.o
endif
bellard's avatar
bellard committed
246
ifeq ($(findstring sparc, $(TARGET_BASE_ARCH) $(ARCH)),sparc)
bellard's avatar
bellard committed
247 248 249 250 251
LIBOBJS+=sparc-dis.o
endif
ifeq ($(findstring arm, $(TARGET_ARCH) $(ARCH)),arm)
LIBOBJS+=arm-dis.o
endif
bellard's avatar
bellard committed
252 253 254
ifeq ($(findstring m68k, $(TARGET_ARCH) $(ARCH)),m68k)
LIBOBJS+=m68k-dis.o
endif
bellard's avatar
bellard committed
255 256 257
ifeq ($(findstring sh4, $(TARGET_ARCH) $(ARCH)),sh4)
LIBOBJS+=sh4-dis.o
endif
aurel32's avatar
aurel32 committed
258 259 260
ifeq ($(findstring hppa, $(TARGET_BASE_ARCH) $(ARCH)),hppa)
LIBOBJS+=hppa-dis.o
endif
261 262 263
ifeq ($(findstring s390, $(TARGET_ARCH) $(ARCH)),s390)
LIBOBJS+=s390-dis.o
endif
bellard's avatar
bellard committed
264

265 266
# libqemu

267
ifdef CONFIG_DYNGEN_OP
268
OPC_H = gen-op.h dyngen-opc.h op.h
269
endif
270

271 272 273 274
libqemu.a: $(LIBOBJS)
	rm -f $@
	$(AR) rcs $@ $(LIBOBJS)

275 276 277 278 279
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)
280

281
tcg/tcg-dyngen.o: $(OPC_H)
282

283
tcg/tcg-runtime.o: $(OPC_H)
284 285 286 287

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

bellard's avatar
bellard committed
288
dyngen-opc.h: op.o $(DYNGEN)
289 290 291 292 293 294
	$(DYNGEN) -c -o $@ $<

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

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

aurel32's avatar
aurel32 committed
297 298 299
machine.o: machine.c
	$(CC) $(OP_CFLAGS) $(CPPFLAGS) -c -o $@ $<

300 301 302
# HELPER_CFLAGS is used for all the code compiled with static register
# variables
op_helper.o: op_helper.c
303
	$(CC) $(HELPER_CFLAGS) $(CPPFLAGS) $(CFLAGS) $(I386_CFLAGS) -c -o $@ $<
304

305
cpu-exec.o: cpu-exec.c $(OPC_H)
306 307 308 309 310 311 312 313 314 315
	$(CC) $(HELPER_CFLAGS) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

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

ifdef CONFIG_LINUX_USER

ifndef TARGET_ABI_DIR
  TARGET_ABI_DIR=$(TARGET_ARCH)
endif
316
VPATH+=:$(SRC_PATH)/linux-user:$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR)
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
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

malc's avatar
malc committed
348 349 350 351
ifeq ($(ARCH),ppc64)
LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif

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
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

397
OBJS= main.o syscall.o strace.o mmap.o signal.o path.o thunk.o \
398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419
      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

420
ifdef CONFIG_GDBSTUB
421
OBJS+=gdbstub.o gdbstub-xml.o
422
endif
bellard's avatar
bellard committed
423

424 425 426 427 428 429
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
430

431
$(QEMU_PROG): $(OBJS) ../libqemu_user.a
432
	$(CC) $(LDFLAGS) -o $@ $^  $(LIBS)
bellard's avatar
bellard committed
433 434 435 436 437 438
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

439 440 441 442 443 444 445 446 447 448 449 450 451 452 453
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

454
OBJS= main.o commpage.o machload.o mmap.o signal.o syscall.o thunk.o
455 456 457 458

OBJS+= libqemu.a

ifdef CONFIG_GDBSTUB
459
OBJS+=gdbstub.o gdbstub-xml.o
460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475
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

476
OBJS=vl.o osdep.o monitor.o pci.o loader.o isa_mmio.o machine.o net-checksum.o
477
OBJS+=fw_cfg.o aio.o buffered_file.o migration.o migration-tcp.o
478
ifdef CONFIG_WIN32
479
OBJS+=block-raw-win32.o
480
else
481 482 483
OBJS+=block-raw-posix.o
endif

484
LIBS+=-lz
485 486 487
ifdef CONFIG_ALSA
LIBS += -lasound
endif
488 489 490
ifdef CONFIG_ESD
LIBS += -lesd
endif
malc's avatar
malc committed
491 492 493
ifdef CONFIG_PA
LIBS += -lpulse-simple
endif
494 495
ifdef CONFIG_DSOUND
LIBS += -lole32 -ldxguid
bellard's avatar
bellard committed
496
endif
bellard's avatar
bellard committed
497 498
ifdef CONFIG_FMOD
LIBS += $(CONFIG_FMOD_LIB)
bellard's avatar
bellard committed
499
endif
blueswir1's avatar
blueswir1 committed
500 501 502
ifdef CONFIG_OSS
LIBS += $(CONFIG_OSS_LIB)
endif
bellard's avatar
bellard committed
503 504

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

518 519 520 521 522
ifdef CONFIG_VNC_TLS
CPPFLAGS += $(CONFIG_VNC_TLS_CFLAGS)
LIBS += $(CONFIG_VNC_TLS_LIBS)
endif

523 524 525 526
ifdef CONFIG_BLUEZ
LIBS += $(CONFIG_BLUEZ_LIBS)
endif

pbrook's avatar
pbrook committed
527
# SCSI layer
528
OBJS+= lsi53c895a.o esp.o
pbrook's avatar
pbrook committed
529

bellard's avatar
bellard committed
530
# USB layer
531
OBJS+= usb-ohci.o
bellard's avatar
bellard committed
532

ths's avatar
ths committed
533
# EEPROM emulation
534
OBJS += eeprom93xx.o
ths's avatar
ths committed
535

536
# PCI network cards
537 538 539 540
OBJS += eepro100.o
OBJS += ne2000.o
OBJS += pcnet.o
OBJS += rtl8139.o
541
OBJS += e1000.o
542

bellard's avatar
bellard committed
543
ifeq ($(TARGET_BASE_ARCH), i386)
544
# Hardware support
545 546 547 548
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
549
CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE
bellard's avatar
bellard committed
550
endif
bellard's avatar
bellard committed
551
ifeq ($(TARGET_BASE_ARCH), ppc)
552
CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE
553
# shared objects
554
OBJS+= ppc.o ide.o vga.o $(SOUND_HW) dma.o openpic.o
555
# PREP target
556 557
OBJS+= pckbd.o ps2.o serial.o i8259.o i8254.o fdc.o m48t59.o mc146818rtc.o
OBJS+= prep_pci.o ppc_prep.o
558
# Mac shared devices
559
OBJS+= macio.o cuda.o adb.o mac_nvram.o mac_dbdma.o
560
# OldWorld PowerMac
561
OBJS+= heathrow_pic.o grackle_pci.o ppc_oldworld.o
562
# NewWorld PowerMac
563
OBJS+= unin_pci.o ppc_chrp.o
564
# PowerPC 4xx boards
565
OBJS+= pflash_cfi02.o ppc4xx_devs.o ppc405_uc.o ppc405_boards.o
566
endif
ths's avatar
ths committed
567
ifeq ($(TARGET_BASE_ARCH), mips)
aurel32's avatar
aurel32 committed
568
OBJS+= mips_r4k.o mips_jazz.o mips_malta.o mips_mipssim.o
aurel32's avatar
aurel32 committed
569 570
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
571
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
572
OBJS+= piix_pci.o parallel.o cirrus_vga.o pcspk.o $(SOUND_HW)
573 574
OBJS+= mipsnet.o
OBJS+= pflash_cfi01.o
aurel32's avatar
aurel32 committed
575
CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE
bellard's avatar
bellard committed
576
endif
577
ifeq ($(TARGET_BASE_ARCH), cris)
578
OBJS+= etraxfs.o
edgar_igl's avatar
edgar_igl committed
579
OBJS+= etraxfs_dma.o
580
OBJS+= etraxfs_pic.o
edgar_igl's avatar
edgar_igl committed
581
OBJS+= etraxfs_eth.o
582 583
OBJS+= etraxfs_timer.o
OBJS+= etraxfs_ser.o
584 585

OBJS+= ptimer.o
edgar_igl's avatar
edgar_igl committed
586
OBJS+= pflash_cfi02.o
587
endif
bellard's avatar
bellard committed
588
ifeq ($(TARGET_BASE_ARCH), sparc)
bellard's avatar
bellard committed
589
ifeq ($(TARGET_ARCH), sparc64)
590 591 592
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
593
else
594
OBJS+= sun4m.o tcx.o pcnet.o iommu.o m48t59.o slavio_intctl.o
595
OBJS+= slavio_timer.o slavio_serial.o slavio_misc.o fdc.o sparc32_dma.o
596
OBJS+= cs4231.o ptimer.o eccmemctl.o sbi.o sun4c_intctl.o
bellard's avatar
bellard committed
597
endif
598
endif
bellard's avatar
bellard committed
599
ifeq ($(TARGET_BASE_ARCH), arm)
600 601 602 603 604 605 606 607 608 609
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
610
OBJS+= zaurus.o ide.o serial.o nand.o ecc.o spitz.o tosa.o tc6393xb.o
balrog's avatar
balrog committed
611
OBJS+= omap1.o omap_lcdc.o omap_dma.o omap_clk.o omap_mmc.o omap_i2c.o
612
OBJS+= omap2.o omap_dss.o soc_dma.o
613
OBJS+= palm.o tsc210x.o
balrog's avatar
balrog committed
614
OBJS+= nseries.o blizzard.o onenand.o vga.o cbus.o tusb6010.o usb-musb.o
615
OBJS+= tsc2005.o bt-hci-csr.o
616
OBJS+= mst_fpga.o mainstone.o
617
OBJS+= musicpal.o pflash_cfi02.o
618
CPPFLAGS += -DHAS_AUDIO
bellard's avatar
bellard committed
619
endif
bellard's avatar
bellard committed
620
ifeq ($(TARGET_BASE_ARCH), sh4)
621 622
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
623
endif
pbrook's avatar
pbrook committed
624
ifeq ($(TARGET_BASE_ARCH), m68k)
625 626
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
627
endif
628
ifdef CONFIG_GDBSTUB
629
OBJS+=gdbstub.o gdbstub-xml.o
bellard's avatar
bellard committed
630
endif
631
ifdef CONFIG_COCOA
632 633 634 635
COCOA_LIBS=-F/System/Library/Frameworks -framework Cocoa -framework IOKit
ifdef CONFIG_COREAUDIO
COCOA_LIBS+=-framework CoreAudio
endif
636
endif
bellard's avatar
bellard committed
637
ifdef CONFIG_SLIRP
638
CPPFLAGS+=-I$(SRC_PATH)/slirp
bellard's avatar
bellard committed
639 640
endif

641
LIBS+=$(AIOLIBS)
642 643
# specific flags are needed for non soft mmu emulator
ifdef CONFIG_STATIC
644
LDFLAGS+=-static
bellard's avatar
bellard committed
645
endif
646
ifndef CONFIG_DARWIN
bellard's avatar
bellard committed
647
ifndef CONFIG_WIN32
bellard's avatar
bellard committed
648
ifndef CONFIG_SOLARIS
649
LIBS+=-lutil
bellard's avatar
bellard committed
650
endif
651
endif
bellard's avatar
bellard committed
652
endif
bellard's avatar
bellard committed
653
ifdef TARGET_GPROF
654 655
vl.o: CFLAGS+=-p
LDFLAGS+=-p
bellard's avatar
bellard committed
656
endif
657

658
ifeq ($(ARCH),ia64)
659
LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld
bellard's avatar
bellard committed
660 661
endif

662 663 664 665
ifdef CONFIG_WIN32
SDL_LIBS := $(filter-out -mwindows, $(SDL_LIBS)) -mconsole
endif

666 667 668 669
# profiling code
ifdef TARGET_GPROF
LDFLAGS+=-p
main.o: CFLAGS+=-p
bellard's avatar
bellard committed
670 671
endif

672
$(QEMU_PROG): $(OBJS) ../libqemu_common.a libqemu.a
673
	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(CURSES_LIBS) $(BRLAPI_LIBS) $(VDE_LIBS)
bellard's avatar
bellard committed
674

675
endif # !CONFIG_USER_ONLY
676

677 678 679 680 681 682 683 684
gdbstub-xml.c: $(TARGET_XML_FILES) feature_to_c.sh
	rm -f $@
ifeq ($(TARGET_XML_FILES),)
	echo > $@
else
	$(SHELL) $(SRC_PATH)/feature_to_c.sh $@ $(TARGET_XML_FILES)
endif

bellard's avatar
bellard committed
685
%.o: %.c
686
	$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
bellard's avatar
bellard committed
687

bellard's avatar
bellard committed
688
%.o: %.S
689
	$(CC) $(CPPFLAGS) -c -o $@ $<
bellard's avatar
bellard committed
690

bellard's avatar
bellard committed
691
clean:
bellard's avatar
bellard committed
692 693
	rm -f *.o *.a *~ $(PROGS) gen-op.h dyngen-opc.h op.h nwfpe/*.o fpu/*.o
	rm -f *.d */*.d tcg/*.o
694

695
install: all
bellard's avatar
bellard committed
696
ifneq ($(PROGS),)
697
	$(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
bellard's avatar
bellard committed
698
endif
bellard's avatar
bellard committed
699

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