Makefile.target 18.4 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
B
balrog 已提交
27
CPPFLAGS=-I. -I.. -I$(TARGET_PATH) -I$(SRC_PATH) -MMD -MT $@ -MP -DNEED_CPU_H
B
bellard 已提交
28
#CFLAGS+=-Werror
B
bellard 已提交
29
LIBS=
30
# user emulator name
B
bellard 已提交
31
ifndef TARGET_ARCH2
B
bellard 已提交
32
TARGET_ARCH2=$(TARGET_ARCH)
B
bellard 已提交
33
endif
34 35
ifeq ($(TARGET_ARCH),arm)
  ifeq ($(TARGET_WORDS_BIGENDIAN),yes)
B
bellard 已提交
36
    TARGET_ARCH2=armeb
37
  endif
B
bellard 已提交
38
endif
P
pbrook 已提交
39 40 41 42 43
ifeq ($(TARGET_ARCH),sh4)
  ifeq ($(TARGET_WORDS_BIGENDIAN),yes)
    TARGET_ARCH2=sh4eb
  endif
endif
B
bellard 已提交
44
ifeq ($(TARGET_ARCH),mips)
B
bellard 已提交
45 46
  ifneq ($(TARGET_WORDS_BIGENDIAN),yes)
    TARGET_ARCH2=mipsel
B
bellard 已提交
47 48
  endif
endif
49 50 51 52 53
ifeq ($(TARGET_ARCH),mipsn32)
  ifneq ($(TARGET_WORDS_BIGENDIAN),yes)
    TARGET_ARCH2=mipsn32el
  endif
endif
T
ths 已提交
54 55 56 57 58
ifeq ($(TARGET_ARCH),mips64)
  ifneq ($(TARGET_WORDS_BIGENDIAN),yes)
    TARGET_ARCH2=mips64el
  endif
endif
59 60 61 62 63

ifdef CONFIG_USER_ONLY
# user emulator name
QEMU_PROG=qemu-$(TARGET_ARCH2)
else
64
# system emulator name
65
ifeq ($(TARGET_ARCH), i386)
66
QEMU_PROG=qemu$(EXESUF)
67
else
68
QEMU_PROG=qemu-system-$(TARGET_ARCH2)$(EXESUF)
69
endif
B
bellard 已提交
70
endif
B
bellard 已提交
71

72
PROGS=$(QEMU_PROG)
B
bellard 已提交
73

74
# We require -O2 to avoid the stack setup prologue in EXIT_TB
B
blueswir1 已提交
75
OP_CFLAGS := -O2 -g -fno-strict-aliasing
B
blueswir1 已提交
76
OP_CFLAGS += -Wall -Wundef -Wendif-labels -Wwrite-strings -Wmissing-prototypes -Wstrict-prototypes
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91

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

B
bellard 已提交
96
ifeq ($(ARCH),i386)
97 98
HELPER_CFLAGS+=-fomit-frame-pointer
OP_CFLAGS+=-mpreferred-stack-boundary=2 -fomit-frame-pointer
99 100
endif

B
bellard 已提交
101
ifeq ($(ARCH),ppc)
102
CPPFLAGS+= -D__powerpc__
103
OP_CFLAGS+= -mlongcall
B
bellard 已提交
104 105 106
endif

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

ifeq ($(ARCH),sparc64)
118 119
  OP_CFLAGS+=-mcpu=ultrasparc -m64 -fno-delayed-branch -ffixed-i0
  ifneq ($(CONFIG_SOLARIS),yes)
120 121 122 123
    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
124
  endif
B
bellard 已提交
125 126 127
endif

ifeq ($(ARCH),alpha)
128 129
# -msmall-data is not used for OP_CFLAGS because we want two-instruction
# relocations for the constant constructions
B
bellard 已提交
130
# Ensure there's only a single GP
131
CFLAGS+=-msmall-data
B
bellard 已提交
132 133
endif

A
aurel32 已提交
134 135 136 137 138
ifeq ($(ARCH),hppa)
OP_CFLAGS=-O1 -fno-delayed-branch
BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif

B
bellard 已提交
139
ifeq ($(ARCH),ia64)
140
CFLAGS+=-mno-sdata
141
OP_CFLAGS+=-mno-sdata
B
bellard 已提交
142 143 144
endif

ifeq ($(ARCH),arm)
145
OP_CFLAGS+=-mno-sched-prolog -fno-omit-frame-pointer
B
bellard 已提交
146 147
endif

B
bellard 已提交
148
ifeq ($(ARCH),m68k)
149 150 151 152
OP_CFLAGS+=-fomit-frame-pointer
endif

ifeq ($(ARCH),mips)
T
ths 已提交
153
OP_CFLAGS+=-mabi=32 -G0 -fno-PIC -mno-abicalls -fomit-frame-pointer -fno-delayed-branch -Wa,-O0
T
ths 已提交
154 155 156
endif

ifeq ($(ARCH),mips64)
T
ths 已提交
157
OP_CFLAGS+=-mabi=n32 -G0 -fno-PIC -mno-abicalls -fomit-frame-pointer -fno-delayed-branch -Wa,-O0
158 159
endif

160 161
CFLAGS+=$(OS_CFLAGS) $(ARCH_CFLAGS)
LDFLAGS+=$(OS_LDFLAGS) $(ARCH_LDFLAGS)
162
OP_CFLAGS+=$(OS_CFLAGS) $(ARCH_CFLAGS)
B
bellard 已提交
163

164
CPPFLAGS+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
B
bellard 已提交
165
LIBS+=-lm
B
bellard 已提交
166
ifdef CONFIG_WIN32
167
LIBS+=-lwinmm -lws2_32 -liphlpapi
B
bellard 已提交
168
endif
B
bellard 已提交
169 170
ifdef CONFIG_SOLARIS
LIBS+=-lsocket -lnsl -lresolv
T
ths 已提交
171 172 173 174
ifdef NEEDS_LIBSUNMATH
LIBS+=-lsunmath
LDFLAGS+=-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib
OP_CFLAGS+=-I/opt/SUNWspro/prod/include/cc
175
CFLAGS+=-I/opt/SUNWspro/prod/include/cc
B
bellard 已提交
176
endif
177 178
endif

A
aliguori 已提交
179 180 181
kvm.o: CFLAGS+=$(KVM_CFLAGS)
kvm-all.o: CFLAGS+=$(KVM_CFLAGS)

182
all: $(PROGS)
B
bellard 已提交
183

184
#########################################################
B
bellard 已提交
185
# cpu emulator library
B
bellard 已提交
186
LIBOBJS=exec.o kqemu.o translate-all.o cpu-exec.o\
187
        translate.o host-utils.o
B
bellard 已提交
188
# TCG code generator
A
aurel32 已提交
189
LIBOBJS+= tcg/tcg.o tcg/tcg-runtime.o
B
bellard 已提交
190
CPPFLAGS+=-I$(SRC_PATH)/tcg -I$(SRC_PATH)/tcg/$(ARCH)
B
blueswir1 已提交
191 192 193
ifeq ($(ARCH),sparc64)
CPPFLAGS+=-I$(SRC_PATH)/tcg/sparc
endif
B
bellard 已提交
194 195 196 197 198
ifdef CONFIG_SOFTFLOAT
LIBOBJS+=fpu/softfloat.o
else
LIBOBJS+=fpu/softfloat-native.o
endif
199
CPPFLAGS+=-I$(SRC_PATH)/fpu
200 201
LIBOBJS+= op_helper.o helper.o

B
bellard 已提交
202
ifeq ($(TARGET_BASE_ARCH), arm)
203
LIBOBJS+= neon_helper.o iwmmxt_helper.o
P
pbrook 已提交
204 205
endif

206
ifeq ($(TARGET_BASE_ARCH), alpha)
207
LIBOBJS+= alpha_palcode.o
208 209
endif

210 211 212 213 214 215 216 217
ifeq ($(TARGET_BASE_ARCH), cris)
LIBOBJS+= cris-dis.o

ifndef CONFIG_USER_ONLY
LIBOBJS+= mmu.o
endif
endif

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

257 258 259 260 261 262
# libqemu

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

263
translate.o: translate.c cpu.h
264

265
translate-all.o: translate-all.c cpu.h
266

267
tcg/tcg.o: cpu.h
268

A
aurel32 已提交
269 270 271
machine.o: machine.c
	$(CC) $(OP_CFLAGS) $(CPPFLAGS) -c -o $@ $<

272 273 274
# HELPER_CFLAGS is used for all the code compiled with static register
# variables
op_helper.o: op_helper.c
275
	$(CC) $(HELPER_CFLAGS) $(CPPFLAGS) $(CFLAGS) $(I386_CFLAGS) -c -o $@ $<
276

277
cpu-exec.o: cpu-exec.c
278 279 280 281 282 283 284 285 286 287
	$(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
288
VPATH+=:$(SRC_PATH)/linux-user:$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR)
289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319
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

M
malc 已提交
320 321 322 323
ifeq ($(ARCH),ppc64)
LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif

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

A
aurel32 已提交
369 370 371 372 373 374
# profiling code
ifdef TARGET_GPROF
LDFLAGS+=-p
CFLAGS+=-p
endif

375
OBJS= main.o syscall.o strace.o mmap.o signal.o path.o thunk.o \
376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397
      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

B
bellard 已提交
398
ifdef CONFIG_GDBSTUB
P
pbrook 已提交
399
OBJS+=gdbstub.o gdbstub-xml.o
B
bellard 已提交
400
endif
B
bellard 已提交
401

402 403 404 405 406 407
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 $@ $<
B
bellard 已提交
408

409
$(QEMU_PROG): $(OBJS) ../libqemu_user.a
410
	$(CC) $(LDFLAGS) -o $@ $^  $(LIBS)
B
bellard 已提交
411 412 413 414 415 416
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

417 418 419 420 421 422 423 424 425 426 427 428 429 430 431
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

432
OBJS= main.o commpage.o machload.o mmap.o signal.o syscall.o thunk.o
433 434 435 436

OBJS+= libqemu.a

ifdef CONFIG_GDBSTUB
P
pbrook 已提交
437
OBJS+=gdbstub.o gdbstub-xml.o
438 439 440 441 442 443 444 445 446 447 448 449
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

B
blueswir1 已提交
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 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554
#########################################################
# BSD user emulator target

ifdef CONFIG_BSD_USER

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

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),ppc64)
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 bsdload.o elfload.o mmap.o path.o signal.o strace.o syscall.o
OBJS+= uaccess.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) ../libqemu_user.a
	$(CC) $(LDFLAGS) -o $@ $^  $(LIBS)

endif #CONFIG_BSD_USER

555 556 557 558
#########################################################
# System emulator target
ifndef CONFIG_USER_ONLY

559 560
OBJS=vl.o osdep.o monitor.o pci.o loader.o isa_mmio.o machine.o
OBJS+=fw_cfg.o
A
aliguori 已提交
561 562 563
ifdef CONFIG_KVM
OBJS+=kvm.o kvm-all.o
endif
564
ifdef CONFIG_WIN32
565
OBJS+=block-raw-win32.o
566
else
567
OBJS+=block-raw-posix.o
568 569
endif

570
LIBS+=-lz
571 572 573
ifdef CONFIG_ALSA
LIBS += -lasound
endif
574 575 576
ifdef CONFIG_ESD
LIBS += -lesd
endif
M
malc 已提交
577 578 579
ifdef CONFIG_PA
LIBS += -lpulse-simple
endif
580 581
ifdef CONFIG_DSOUND
LIBS += -lole32 -ldxguid
B
bellard 已提交
582
endif
B
bellard 已提交
583 584
ifdef CONFIG_FMOD
LIBS += $(CONFIG_FMOD_LIB)
B
bellard 已提交
585
endif
B
blueswir1 已提交
586 587 588
ifdef CONFIG_OSS
LIBS += $(CONFIG_OSS_LIB)
endif
B
bellard 已提交
589 590

SOUND_HW = sb16.o es1370.o
591 592 593
ifdef CONFIG_AC97
SOUND_HW += ac97.o
endif
594 595
ifdef CONFIG_ADLIB
SOUND_HW += fmopl.o adlib.o
596
fmopl.o: CFLAGS := ${CFLAGS} -DBUILD_Y8950=0
597
endif
598 599 600
ifdef CONFIG_GUS
SOUND_HW += gus.o gusemu_hal.o gusemu_mixer.o
endif
M
malc 已提交
601 602 603
ifdef CONFIG_CS4231A
SOUND_HW += cs4231a.o
endif
B
bellard 已提交
604

605 606 607 608 609
ifdef CONFIG_VNC_TLS
CPPFLAGS += $(CONFIG_VNC_TLS_CFLAGS)
LIBS += $(CONFIG_VNC_TLS_LIBS)
endif

B
balrog 已提交
610 611 612 613
ifdef CONFIG_BLUEZ
LIBS += $(CONFIG_BLUEZ_LIBS)
endif

P
pbrook 已提交
614
# SCSI layer
615
OBJS+= lsi53c895a.o esp.o
P
pbrook 已提交
616

B
bellard 已提交
617
# USB layer
618
OBJS+= usb-ohci.o
B
bellard 已提交
619

T
ths 已提交
620
# EEPROM emulation
621
OBJS += eeprom93xx.o
T
ths 已提交
622

623
# PCI network cards
624 625 626 627
OBJS += eepro100.o
OBJS += ne2000.o
OBJS += pcnet.o
OBJS += rtl8139.o
628
OBJS += e1000.o
629

B
bellard 已提交
630
ifeq ($(TARGET_BASE_ARCH), i386)
631
# Hardware support
632 633 634 635
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
A
aliguori 已提交
636
# virtio support
A
aliguori 已提交
637
OBJS+= virtio.o virtio-blk.o virtio-balloon.o
638
CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE
B
bellard 已提交
639
endif
B
bellard 已提交
640
ifeq ($(TARGET_BASE_ARCH), ppc)
641
CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE
J
j_mayer 已提交
642
# shared objects
643
OBJS+= ppc.o ide.o vga.o $(SOUND_HW) dma.o openpic.o
J
j_mayer 已提交
644
# PREP target
645 646
OBJS+= pckbd.o ps2.o serial.o i8259.o i8254.o fdc.o m48t59.o mc146818rtc.o
OBJS+= prep_pci.o ppc_prep.o
J
j_mayer 已提交
647
# Mac shared devices
648
OBJS+= macio.o cuda.o adb.o mac_nvram.o mac_dbdma.o
J
j_mayer 已提交
649
# OldWorld PowerMac
650
OBJS+= heathrow_pic.o grackle_pci.o ppc_oldworld.o
J
j_mayer 已提交
651
# NewWorld PowerMac
652
OBJS+= unin_pci.o ppc_chrp.o
J
j_mayer 已提交
653
# PowerPC 4xx boards
654
OBJS+= pflash_cfi02.o ppc4xx_devs.o ppc4xx_pci.o ppc405_uc.o ppc405_boards.o
A
aliguori 已提交
655
# virtio support
A
aliguori 已提交
656
OBJS+= virtio.o virtio-blk.o virtio-balloon.o
657
endif
T
ths 已提交
658
ifeq ($(TARGET_BASE_ARCH), mips)
A
aurel32 已提交
659
OBJS+= mips_r4k.o mips_jazz.o mips_malta.o mips_mipssim.o
A
aurel32 已提交
660 661
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
662
OBJS+= ide.o gt64xxx.o pckbd.o ps2.o fdc.o mc146818rtc.o usb-uhci.o acpi.o ds1225y.o
A
aurel32 已提交
663
OBJS+= piix_pci.o parallel.o cirrus_vga.o pcspk.o $(SOUND_HW)
664 665
OBJS+= mipsnet.o
OBJS+= pflash_cfi01.o
A
aurel32 已提交
666
CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE
B
bellard 已提交
667
endif
668
ifeq ($(TARGET_BASE_ARCH), cris)
669
OBJS+= etraxfs.o
E
edgar_igl 已提交
670
OBJS+= etraxfs_dma.o
671
OBJS+= etraxfs_pic.o
E
edgar_igl 已提交
672
OBJS+= etraxfs_eth.o
673 674
OBJS+= etraxfs_timer.o
OBJS+= etraxfs_ser.o
675 676

OBJS+= ptimer.o
E
edgar_igl 已提交
677
OBJS+= pflash_cfi02.o
678
endif
B
bellard 已提交
679
ifeq ($(TARGET_BASE_ARCH), sparc)
B
bellard 已提交
680
ifeq ($(TARGET_ARCH), sparc64)
681 682 683
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
B
bellard 已提交
684
else
685
OBJS+= sun4m.o tcx.o pcnet.o iommu.o m48t59.o slavio_intctl.o
686
OBJS+= slavio_timer.o slavio_serial.o slavio_misc.o fdc.o sparc32_dma.o
687
OBJS+= cs4231.o ptimer.o eccmemctl.o sbi.o sun4c_intctl.o
B
bellard 已提交
688
endif
689
endif
B
bellard 已提交
690
ifeq ($(TARGET_BASE_ARCH), arm)
691 692 693 694 695 696 697 698 699 700
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
701
OBJS+= zaurus.o ide.o serial.o nand.o ecc.o spitz.o tosa.o tc6393xb.o
B
balrog 已提交
702
OBJS+= omap1.o omap_lcdc.o omap_dma.o omap_clk.o omap_mmc.o omap_i2c.o
703
OBJS+= omap2.o omap_dss.o soc_dma.o
704
OBJS+= palm.o tsc210x.o
B
balrog 已提交
705
OBJS+= nseries.o blizzard.o onenand.o vga.o cbus.o tusb6010.o usb-musb.o
706
OBJS+= tsc2005.o bt-hci-csr.o
707
OBJS+= mst_fpga.o mainstone.o
708
OBJS+= musicpal.o pflash_cfi02.o
709
CPPFLAGS += -DHAS_AUDIO
B
bellard 已提交
710
endif
B
bellard 已提交
711
ifeq ($(TARGET_BASE_ARCH), sh4)
712
OBJS+= shix.o r2d.o sh7750.o sh7750_regnames.o tc58128.o
713
OBJS+= sh_timer.o ptimer.o sh_serial.o sh_intc.o sh_pci.o sm501.o serial.o
714
OBJS+= ide.o
B
bellard 已提交
715
endif
P
pbrook 已提交
716
ifeq ($(TARGET_BASE_ARCH), m68k)
717 718
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
P
pbrook 已提交
719
endif
720
ifdef CONFIG_GDBSTUB
P
pbrook 已提交
721
OBJS+=gdbstub.o gdbstub-xml.o
B
update  
bellard 已提交
722
endif
723
ifdef CONFIG_COCOA
724 725 726 727
COCOA_LIBS=-F/System/Library/Frameworks -framework Cocoa -framework IOKit
ifdef CONFIG_COREAUDIO
COCOA_LIBS+=-framework CoreAudio
endif
728
endif
B
bellard 已提交
729
ifdef CONFIG_SLIRP
730
CPPFLAGS+=-I$(SRC_PATH)/slirp
B
bellard 已提交
731 732
endif

733
LIBS+=$(AIOLIBS)
734 735
# specific flags are needed for non soft mmu emulator
ifdef CONFIG_STATIC
736
LDFLAGS+=-static
B
bellard 已提交
737
endif
738
ifndef CONFIG_DARWIN
B
bellard 已提交
739
ifndef CONFIG_WIN32
B
bellard 已提交
740
ifndef CONFIG_SOLARIS
M
malc 已提交
741
ifndef CONFIG_AIX
742
LIBS+=-lutil
B
bellard 已提交
743
endif
M
malc 已提交
744
endif
745
endif
B
bellard 已提交
746
endif
B
bellard 已提交
747
ifdef TARGET_GPROF
748 749
vl.o: CFLAGS+=-p
LDFLAGS+=-p
B
bellard 已提交
750
endif
751

B
bellard 已提交
752
ifeq ($(ARCH),ia64)
753
LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld
B
bellard 已提交
754 755
endif

756 757 758 759
ifdef CONFIG_WIN32
SDL_LIBS := $(filter-out -mwindows, $(SDL_LIBS)) -mconsole
endif

760 761 762 763
# profiling code
ifdef TARGET_GPROF
LDFLAGS+=-p
main.o: CFLAGS+=-p
B
bellard 已提交
764 765
endif

766
$(QEMU_PROG): $(OBJS) ../libqemu_common.a libqemu.a
767
	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(CURSES_LIBS) $(BRLAPI_LIBS) $(VDE_LIBS)
B
bellard 已提交
768

769
endif # !CONFIG_USER_ONLY
770

P
pbrook 已提交
771 772 773 774 775 776 777 778
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

B
bellard 已提交
779
%.o: %.c
780
	$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
B
bellard 已提交
781

B
bellard 已提交
782
%.o: %.S
783
	$(CC) $(CPPFLAGS) -c -o $@ $<
B
bellard 已提交
784

B
bellard 已提交
785
clean:
786
	rm -f *.o *.a *~ $(PROGS) nwfpe/*.o fpu/*.o
B
bellard 已提交
787
	rm -f *.d */*.d tcg/*.o
788

789
install: all
B
bellard 已提交
790
ifneq ($(PROGS),)
791
	$(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
B
bellard 已提交
792
endif
B
bellard 已提交
793

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