Makefile.target 16 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
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 101 102 103 104
# 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
105 106
endif

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

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

ifeq ($(ARCH),sparc64)
124
  CFLAGS+=-ffixed-g1 -ffixed-g4 -ffixed-g5 -ffixed-g7
125 126 127 128
  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
129 130 131
endif

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

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

bellard's avatar
bellard committed
143
ifeq ($(ARCH),ia64)
144
CFLAGS+=-mno-sdata
145
OP_CFLAGS+=-mno-sdata
bellard's avatar
bellard committed
146 147 148
endif

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

bellard's avatar
bellard committed
152
ifeq ($(ARCH),m68k)
153 154 155 156
OP_CFLAGS+=-fomit-frame-pointer
endif

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

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

164 165
CFLAGS+=$(OS_CFLAGS) $(ARCH_CFLAGS)
LDFLAGS+=$(OS_LDFLAGS) $(ARCH_LDFLAGS)
166
OP_CFLAGS+=$(OS_CFLAGS) $(ARCH_CFLAGS)
bellard's avatar
bellard committed
167

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

183
all: $(PROGS)
bellard's avatar
bellard committed
184

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

bellard's avatar
bellard committed
207
ifeq ($(TARGET_BASE_ARCH), arm)
208
LIBOBJS+= neon_helper.o iwmmxt_helper.o
pbrook's avatar
pbrook committed
209 210
endif

211
ifeq ($(TARGET_BASE_ARCH), alpha)
212
LIBOBJS+= alpha_palcode.o
213 214
endif

215 216 217 218 219 220 221 222
ifeq ($(TARGET_BASE_ARCH), cris)
LIBOBJS+= cris-dis.o

ifndef CONFIG_USER_ONLY
LIBOBJS+= mmu.o
endif
endif

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

262 263
# libqemu

264
ifdef CONFIG_DYNGEN_OP
265
OPC_H = gen-op.h dyngen-opc.h op.h
266
endif
267

268 269 270 271
libqemu.a: $(LIBOBJS)
	rm -f $@
	$(AR) rcs $@ $(LIBOBJS)

272 273 274 275 276
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)
277

278
tcg/tcg-dyngen.o: $(OPC_H)
279

280
tcg/tcg-runtime.o: $(OPC_H)
281 282 283 284

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

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

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

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

aurel32's avatar
aurel32 committed
294 295 296
machine.o: machine.c
	$(CC) $(OP_CFLAGS) $(CPPFLAGS) -c -o $@ $<

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

302
cpu-exec.o: cpu-exec.c $(OPC_H)
303 304 305 306 307 308 309 310 311 312
	$(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
313
VPATH+=:$(SRC_PATH)/linux-user:$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR)
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
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

413 414 415
ifdef CONFIG_GDBSTUB
OBJS+=gdbstub.o
endif
bellard's avatar
bellard committed
416

417 418 419 420 421 422
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
423

424
$(QEMU_PROG): $(OBJS) ../libqemu_user.a
425
	$(CC) $(LDFLAGS) -o $@ $^  $(LIBS)
bellard's avatar
bellard committed
426 427 428 429 430 431
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

432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468
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

aurel32's avatar
aurel32 committed
469
OBJS=vl.o osdep.o monitor.o pci.o loader.o isa_mmio.o machine.o
470
ifdef CONFIG_WIN32
471
OBJS+=block-raw-win32.o
472
else
473
OBJS+=block-raw-posix.o
474
endif
475

476
LIBS+=-lz
477 478 479
ifdef CONFIG_ALSA
LIBS += -lasound
endif
480 481 482
ifdef CONFIG_ESD
LIBS += -lesd
endif
483 484
ifdef CONFIG_DSOUND
LIBS += -lole32 -ldxguid
bellard's avatar
bellard committed
485
endif
bellard's avatar
bellard committed
486 487
ifdef CONFIG_FMOD
LIBS += $(CONFIG_FMOD_LIB)
bellard's avatar
bellard committed
488
endif
bellard's avatar
bellard committed
489 490

SOUND_HW = sb16.o es1370.o
491 492 493
ifdef CONFIG_AC97
SOUND_HW += ac97.o
endif
494 495 496
ifdef CONFIG_ADLIB
SOUND_HW += fmopl.o adlib.o
endif
497 498 499
ifdef CONFIG_GUS
SOUND_HW += gus.o gusemu_hal.o gusemu_mixer.o
endif
bellard's avatar
bellard committed
500

501 502 503 504 505
ifdef CONFIG_VNC_TLS
CPPFLAGS += $(CONFIG_VNC_TLS_CFLAGS)
LIBS += $(CONFIG_VNC_TLS_LIBS)
endif

pbrook's avatar
pbrook committed
506
# SCSI layer
507
OBJS+= lsi53c895a.o esp.o
pbrook's avatar
pbrook committed
508

bellard's avatar
bellard committed
509
# USB layer
510
OBJS+= usb-ohci.o
bellard's avatar
bellard committed
511

ths's avatar
ths committed
512
# EEPROM emulation
513
OBJS += eeprom93xx.o
ths's avatar
ths committed
514

515
# PCI network cards
516 517 518 519
OBJS += eepro100.o
OBJS += ne2000.o
OBJS += pcnet.o
OBJS += rtl8139.o
520
OBJS += e1000.o
521

bellard's avatar
bellard committed
522
ifeq ($(TARGET_BASE_ARCH), i386)
523
# Hardware support
524 525 526 527
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
528
CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE
bellard's avatar
bellard committed
529
endif
bellard's avatar
bellard committed
530
ifeq ($(TARGET_BASE_ARCH), ppc)
531
CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE
532
# shared objects
533
OBJS+= ppc.o ide.o vga.o $(SOUND_HW) dma.o openpic.o
534
# PREP target
535 536
OBJS+= pckbd.o ps2.o serial.o i8259.o i8254.o fdc.o m48t59.o mc146818rtc.o
OBJS+= prep_pci.o ppc_prep.o
537
# Mac shared devices
538
OBJS+= macio.o cuda.o adb.o mac_nvram.o mac_dbdma.o
539
# OldWorld PowerMac
540
OBJS+= heathrow_pic.o grackle_pci.o ppc_oldworld.o
541
# NewWorld PowerMac
542
OBJS+= unin_pci.o ppc_chrp.o
543
# PowerPC 4xx boards
544
OBJS+= pflash_cfi02.o ppc4xx_devs.o ppc405_uc.o ppc405_boards.o
545
endif
ths's avatar
ths committed
546
ifeq ($(TARGET_BASE_ARCH), mips)
aurel32's avatar
aurel32 committed
547
OBJS+= mips_r4k.o mips_jazz.o mips_malta.o mips_mipssim.o
aurel32's avatar
aurel32 committed
548 549
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
550
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
551
OBJS+= piix_pci.o parallel.o cirrus_vga.o pcspk.o $(SOUND_HW)
552 553
OBJS+= mipsnet.o
OBJS+= pflash_cfi01.o
aurel32's avatar
aurel32 committed
554
CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE
bellard's avatar
bellard committed
555
endif
556
ifeq ($(TARGET_BASE_ARCH), cris)
557
OBJS+= etraxfs.o
edgar_igl's avatar
edgar_igl committed
558
OBJS+= etraxfs_dma.o
559
OBJS+= etraxfs_pic.o
edgar_igl's avatar
edgar_igl committed
560
OBJS+= etraxfs_eth.o
561 562
OBJS+= etraxfs_timer.o
OBJS+= etraxfs_ser.o
563 564

OBJS+= ptimer.o
edgar_igl's avatar
edgar_igl committed
565
OBJS+= pflash_cfi02.o
566
endif
bellard's avatar
bellard committed
567
ifeq ($(TARGET_BASE_ARCH), sparc)
bellard's avatar
bellard committed
568
ifeq ($(TARGET_ARCH), sparc64)
569 570 571
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
572
else
573
OBJS+= sun4m.o tcx.o pcnet.o iommu.o m48t59.o slavio_intctl.o
574
OBJS+= slavio_timer.o slavio_serial.o slavio_misc.o fdc.o sparc32_dma.o
575
OBJS+= cs4231.o ptimer.o eccmemctl.o sbi.o sun4c_intctl.o
bellard's avatar
bellard committed
576
endif
577
endif
bellard's avatar
bellard committed
578
ifeq ($(TARGET_BASE_ARCH), arm)
579 580 581 582 583 584 585 586 587 588
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
589
OBJS+= zaurus.o ide.o serial.o nand.o ecc.o spitz.o tosa.o tc6393xb.o
balrog's avatar
balrog committed
590
OBJS+= omap1.o omap_lcdc.o omap_dma.o omap_clk.o omap_mmc.o omap_i2c.o
balrog's avatar
balrog committed
591
OBJS+= omap2.o omap_dss.o
592
OBJS+= palm.o tsc210x.o
balrog's avatar
balrog committed
593
OBJS+= nseries.o blizzard.o onenand.o vga.o cbus.o tusb6010.o usb-musb.o
balrog's avatar
balrog committed
594
OBJS+= tsc2005.o
595
OBJS+= mst_fpga.o mainstone.o
596
OBJS+= musicpal.o pflash_cfi02.o
597
CPPFLAGS += -DHAS_AUDIO
bellard's avatar
bellard committed
598
endif
bellard's avatar
bellard committed
599
ifeq ($(TARGET_BASE_ARCH), sh4)
600 601
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
602
endif
pbrook's avatar
pbrook committed
603
ifeq ($(TARGET_BASE_ARCH), m68k)
604 605
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
606
endif
607
ifdef CONFIG_GDBSTUB
608
OBJS+=gdbstub.o
bellard's avatar
bellard committed
609
endif
610
ifdef CONFIG_COCOA
611 612 613 614
COCOA_LIBS=-F/System/Library/Frameworks -framework Cocoa -framework IOKit
ifdef CONFIG_COREAUDIO
COCOA_LIBS+=-framework CoreAudio
endif
615
endif
bellard's avatar
bellard committed
616
ifdef CONFIG_SLIRP
617
CPPFLAGS+=-I$(SRC_PATH)/slirp
bellard's avatar
bellard committed
618 619
endif

620
LIBS+=$(AIOLIBS)
621 622
# specific flags are needed for non soft mmu emulator
ifdef CONFIG_STATIC
623
LDFLAGS+=-static
bellard's avatar
bellard committed
624
endif
625
ifndef CONFIG_DARWIN
bellard's avatar
bellard committed
626
ifndef CONFIG_WIN32
bellard's avatar
bellard committed
627
ifndef CONFIG_SOLARIS
628
LIBS+=-lutil
bellard's avatar
bellard committed
629
endif
630
endif
bellard's avatar
bellard committed
631
endif
bellard's avatar
bellard committed
632
ifdef TARGET_GPROF
633 634
vl.o: CFLAGS+=-p
LDFLAGS+=-p
bellard's avatar
bellard committed
635
endif
636

637
ifeq ($(ARCH),ia64)
638
LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld
bellard's avatar
bellard committed
639 640
endif

641 642 643 644
ifdef CONFIG_WIN32
SDL_LIBS := $(filter-out -mwindows, $(SDL_LIBS)) -mconsole
endif

645 646 647 648
# profiling code
ifdef TARGET_GPROF
LDFLAGS+=-p
main.o: CFLAGS+=-p
bellard's avatar
bellard committed
649 650
endif

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

654
endif # !CONFIG_USER_ONLY
655

bellard's avatar
bellard committed
656
%.o: %.c
657
	$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
bellard's avatar
bellard committed
658

bellard's avatar
bellard committed
659
%.o: %.S
660
	$(CC) $(CPPFLAGS) -c -o $@ $<
bellard's avatar
bellard committed
661

bellard's avatar
bellard committed
662
clean:
bellard's avatar
bellard committed
663 664
	rm -f *.o *.a *~ $(PROGS) gen-op.h dyngen-opc.h op.h nwfpe/*.o fpu/*.o
	rm -f *.d */*.d tcg/*.o
665

666
install: all
bellard's avatar
bellard committed
667
ifneq ($(PROGS),)
668
	$(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
bellard's avatar
bellard committed
669
endif
bellard's avatar
bellard committed
670

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