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

3 4 5 6
ifndef CONFIG_DYNGEN_OP
CC=$(HOST_CC)
endif

B
bellard 已提交
7 8 9 10
TARGET_BASE_ARCH:=$(TARGET_ARCH)
ifeq ($(TARGET_ARCH), x86_64)
TARGET_BASE_ARCH:=i386
endif
11 12 13
ifeq ($(TARGET_ARCH), mipsn32)
TARGET_BASE_ARCH:=mips
endif
T
ths 已提交
14 15 16
ifeq ($(TARGET_ARCH), mips64)
TARGET_BASE_ARCH:=mips
endif
B
bellard 已提交
17 18 19
ifeq ($(TARGET_ARCH), ppc64)
TARGET_BASE_ARCH:=ppc
endif
20 21 22
ifeq ($(TARGET_ARCH), ppc64h)
TARGET_BASE_ARCH:=ppc
endif
23 24 25
ifeq ($(TARGET_ARCH), ppcemb)
TARGET_BASE_ARCH:=ppc
endif
B
bellard 已提交
26 27 28
ifeq ($(TARGET_ARCH), sparc64)
TARGET_BASE_ARCH:=sparc
endif
B
bellard 已提交
29
TARGET_PATH=$(SRC_PATH)/target-$(TARGET_BASE_ARCH)
B
bellard 已提交
30
VPATH=$(SRC_PATH):$(TARGET_PATH):$(SRC_PATH)/hw
B
balrog 已提交
31
CPPFLAGS=-I. -I.. -I$(TARGET_PATH) -I$(SRC_PATH) -MMD -MT $@ -MP -DNEED_CPU_H
B
bellard 已提交
32
#CFLAGS+=-Werror
B
bellard 已提交
33
LIBS=
B
bellard 已提交
34
DYNGEN=../dyngen$(EXESUF)
35
# user emulator name
B
bellard 已提交
36
ifndef TARGET_ARCH2
B
bellard 已提交
37
TARGET_ARCH2=$(TARGET_ARCH)
B
bellard 已提交
38
endif
39 40
ifeq ($(TARGET_ARCH),arm)
  ifeq ($(TARGET_WORDS_BIGENDIAN),yes)
B
bellard 已提交
41
    TARGET_ARCH2=armeb
42
  endif
B
bellard 已提交
43
endif
P
pbrook 已提交
44 45 46 47 48
ifeq ($(TARGET_ARCH),sh4)
  ifeq ($(TARGET_WORDS_BIGENDIAN),yes)
    TARGET_ARCH2=sh4eb
  endif
endif
B
bellard 已提交
49
ifeq ($(TARGET_ARCH),mips)
B
bellard 已提交
50 51
  ifneq ($(TARGET_WORDS_BIGENDIAN),yes)
    TARGET_ARCH2=mipsel
B
bellard 已提交
52 53
  endif
endif
54 55 56 57 58
ifeq ($(TARGET_ARCH),mipsn32)
  ifneq ($(TARGET_WORDS_BIGENDIAN),yes)
    TARGET_ARCH2=mipsn32el
  endif
endif
T
ths 已提交
59 60 61 62 63
ifeq ($(TARGET_ARCH),mips64)
  ifneq ($(TARGET_WORDS_BIGENDIAN),yes)
    TARGET_ARCH2=mips64el
  endif
endif
64 65 66 67 68

ifdef CONFIG_USER_ONLY
# user emulator name
QEMU_PROG=qemu-$(TARGET_ARCH2)
else
69
# system emulator name
70
ifeq ($(TARGET_ARCH), i386)
71
QEMU_PROG=qemu$(EXESUF)
72
else
73
QEMU_PROG=qemu-system-$(TARGET_ARCH2)$(EXESUF)
74
endif
B
bellard 已提交
75
endif
B
bellard 已提交
76

77
PROGS=$(QEMU_PROG)
B
bellard 已提交
78

79
# We require -O2 to avoid the stack setup prologue in EXIT_TB
B
blueswir1 已提交
80 81
OP_CFLAGS := -O2 -g -fno-strict-aliasing
OP_CFLAGS += -Wall -Wundef -Wendif-labels -Wwrite-strings
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96

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

99 100
HELPER_CFLAGS=

B
bellard 已提交
101
ifeq ($(ARCH),i386)
102 103
HELPER_CFLAGS+=-fomit-frame-pointer
OP_CFLAGS+=-mpreferred-stack-boundary=2 -fomit-frame-pointer
104 105 106 107 108 109
# 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
110 111
endif

B
bellard 已提交
112
ifeq ($(ARCH),ppc)
113
CPPFLAGS+= -D__powerpc__
114
OP_CFLAGS+= -mlongcall
B
bellard 已提交
115 116 117
endif

ifeq ($(ARCH),sparc)
118
  CFLAGS+=-ffixed-g2 -ffixed-g3
119 120 121 122
  OP_CFLAGS+=-fno-delayed-branch -ffixed-i0
  ifeq ($(CONFIG_SOLARIS),yes)
    OP_CFLAGS+=-fno-omit-frame-pointer
  else
123 124
    CFLAGS+=-ffixed-g1 -ffixed-g6
    HELPER_CFLAGS+=-ffixed-i0
125
  endif
B
bellard 已提交
126
endif
B
bellard 已提交
127 128

ifeq ($(ARCH),sparc64)
129 130
  OP_CFLAGS+=-mcpu=ultrasparc -m64 -fno-delayed-branch -ffixed-i0
  ifneq ($(CONFIG_SOLARIS),yes)
131 132 133 134
    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
135
  endif
B
bellard 已提交
136 137 138
endif

ifeq ($(ARCH),alpha)
139 140
# -msmall-data is not used for OP_CFLAGS because we want two-instruction
# relocations for the constant constructions
B
bellard 已提交
141
# Ensure there's only a single GP
142
CFLAGS+=-msmall-data
B
bellard 已提交
143 144
endif

A
aurel32 已提交
145 146 147 148 149
ifeq ($(ARCH),hppa)
OP_CFLAGS=-O1 -fno-delayed-branch
BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif

B
bellard 已提交
150
ifeq ($(ARCH),ia64)
151
CFLAGS+=-mno-sdata
152
OP_CFLAGS+=-mno-sdata
B
bellard 已提交
153 154 155
endif

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

B
bellard 已提交
159
ifeq ($(ARCH),m68k)
160 161 162 163
OP_CFLAGS+=-fomit-frame-pointer
endif

ifeq ($(ARCH),mips)
T
ths 已提交
164
OP_CFLAGS+=-mabi=32 -G0 -fno-PIC -mno-abicalls -fomit-frame-pointer -fno-delayed-branch -Wa,-O0
T
ths 已提交
165 166 167
endif

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

171 172
CFLAGS+=$(OS_CFLAGS) $(ARCH_CFLAGS)
LDFLAGS+=$(OS_LDFLAGS) $(ARCH_LDFLAGS)
173
OP_CFLAGS+=$(OS_CFLAGS) $(ARCH_CFLAGS)
B
bellard 已提交
174

175
CPPFLAGS+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
B
bellard 已提交
176
LIBS+=-lm
B
bellard 已提交
177
ifdef CONFIG_WIN32
178
LIBS+=-lwinmm -lws2_32 -liphlpapi
B
bellard 已提交
179
endif
B
bellard 已提交
180 181
ifdef CONFIG_SOLARIS
LIBS+=-lsocket -lnsl -lresolv
T
ths 已提交
182 183 184 185
ifdef NEEDS_LIBSUNMATH
LIBS+=-lsunmath
LDFLAGS+=-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib
OP_CFLAGS+=-I/opt/SUNWspro/prod/include/cc
186
CFLAGS+=-I/opt/SUNWspro/prod/include/cc
B
bellard 已提交
187
endif
188 189
endif

A
aliguori 已提交
190 191 192
kvm.o: CFLAGS+=$(KVM_CFLAGS)
kvm-all.o: CFLAGS+=$(KVM_CFLAGS)

193
all: $(PROGS)
B
bellard 已提交
194

195
#########################################################
B
bellard 已提交
196
# cpu emulator library
B
bellard 已提交
197
LIBOBJS=exec.o kqemu.o translate-all.o cpu-exec.o\
198
        translate.o host-utils.o
199
ifdef CONFIG_DYNGEN_OP
200
exec.o: dyngen-opc.h
201 202
LIBOBJS+=op.o
endif
B
bellard 已提交
203 204 205
# 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)
B
blueswir1 已提交
206 207 208
ifeq ($(ARCH),sparc64)
CPPFLAGS+=-I$(SRC_PATH)/tcg/sparc
endif
B
bellard 已提交
209 210 211 212 213
ifdef CONFIG_SOFTFLOAT
LIBOBJS+=fpu/softfloat.o
else
LIBOBJS+=fpu/softfloat-native.o
endif
214
CPPFLAGS+=-I$(SRC_PATH)/fpu
215 216
LIBOBJS+= op_helper.o helper.o

B
bellard 已提交
217
ifeq ($(TARGET_BASE_ARCH), arm)
218
LIBOBJS+= neon_helper.o iwmmxt_helper.o
P
pbrook 已提交
219 220
endif

221
ifeq ($(TARGET_BASE_ARCH), alpha)
222
LIBOBJS+= alpha_palcode.o
223 224
endif

225 226 227 228 229 230 231 232
ifeq ($(TARGET_BASE_ARCH), cris)
LIBOBJS+= cris-dis.o

ifndef CONFIG_USER_ONLY
LIBOBJS+= mmu.o
endif
endif

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

272 273
# libqemu

274
ifdef CONFIG_DYNGEN_OP
275
OPC_H = gen-op.h dyngen-opc.h op.h
276
endif
277

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

282 283 284 285 286
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)
287

288
tcg/tcg-dyngen.o: $(OPC_H)
289

290
tcg/tcg-runtime.o: $(OPC_H)
291 292 293 294

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

B
bellard 已提交
295
dyngen-opc.h: op.o $(DYNGEN)
296 297 298 299 300 301
	$(DYNGEN) -c -o $@ $<

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

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

A
aurel32 已提交
304 305 306
machine.o: machine.c
	$(CC) $(OP_CFLAGS) $(CPPFLAGS) -c -o $@ $<

307 308 309
# HELPER_CFLAGS is used for all the code compiled with static register
# variables
op_helper.o: op_helper.c
310
	$(CC) $(HELPER_CFLAGS) $(CPPFLAGS) $(CFLAGS) $(I386_CFLAGS) -c -o $@ $<
311

312
cpu-exec.o: cpu-exec.c $(OPC_H)
313 314 315 316 317 318 319 320 321 322
	$(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
323
VPATH+=:$(SRC_PATH)/linux-user:$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR)
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
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 已提交
355 356 357 358
ifeq ($(ARCH),ppc64)
LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif

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
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 已提交
404 405 406 407 408 409
# profiling code
ifdef TARGET_GPROF
LDFLAGS+=-p
CFLAGS+=-p
endif

410
OBJS= main.o syscall.o strace.o mmap.o signal.o path.o thunk.o \
411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432
      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 已提交
433
ifdef CONFIG_GDBSTUB
P
pbrook 已提交
434
OBJS+=gdbstub.o gdbstub-xml.o
B
bellard 已提交
435
endif
B
bellard 已提交
436

437 438 439 440 441 442
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 已提交
443

444
$(QEMU_PROG): $(OBJS) ../libqemu_user.a
445
	$(CC) $(LDFLAGS) -o $@ $^  $(LIBS)
B
bellard 已提交
446 447 448 449 450 451
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

452 453 454 455 456 457 458 459 460 461 462 463 464 465 466
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

467
OBJS= main.o commpage.o machload.o mmap.o signal.o syscall.o thunk.o
468 469 470 471

OBJS+= libqemu.a

ifdef CONFIG_GDBSTUB
P
pbrook 已提交
472
OBJS+=gdbstub.o gdbstub-xml.o
473 474 475 476 477 478 479 480 481 482 483 484
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 已提交
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 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589
#########################################################
# 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

590 591 592 593
#########################################################
# System emulator target
ifndef CONFIG_USER_ONLY

594
OBJS=vl.o osdep.o monitor.o pci.o loader.o isa_mmio.o machine.o net-checksum.o
A
aliguori 已提交
595
OBJS+=fw_cfg.o aio.o buffered_file.o migration.o migration-tcp.o qemu-char.o
596
OBJS+=net.o
A
aliguori 已提交
597 598 599
ifdef CONFIG_KVM
OBJS+=kvm.o kvm-all.o
endif
600
ifdef CONFIG_WIN32
601
OBJS+=block-raw-win32.o
602
else
603 604 605
OBJS+=block-raw-posix.o
endif

606
LIBS+=-lz
607 608 609
ifdef CONFIG_ALSA
LIBS += -lasound
endif
610 611 612
ifdef CONFIG_ESD
LIBS += -lesd
endif
M
malc 已提交
613 614 615
ifdef CONFIG_PA
LIBS += -lpulse-simple
endif
616 617
ifdef CONFIG_DSOUND
LIBS += -lole32 -ldxguid
B
bellard 已提交
618
endif
B
bellard 已提交
619 620
ifdef CONFIG_FMOD
LIBS += $(CONFIG_FMOD_LIB)
B
bellard 已提交
621
endif
B
blueswir1 已提交
622 623 624
ifdef CONFIG_OSS
LIBS += $(CONFIG_OSS_LIB)
endif
B
bellard 已提交
625 626

SOUND_HW = sb16.o es1370.o
627 628 629
ifdef CONFIG_AC97
SOUND_HW += ac97.o
endif
630 631 632
ifdef CONFIG_ADLIB
SOUND_HW += fmopl.o adlib.o
endif
633 634 635
ifdef CONFIG_GUS
SOUND_HW += gus.o gusemu_hal.o gusemu_mixer.o
endif
M
malc 已提交
636 637 638
ifdef CONFIG_CS4231A
SOUND_HW += cs4231a.o
endif
B
bellard 已提交
639

640 641 642 643 644
ifdef CONFIG_VNC_TLS
CPPFLAGS += $(CONFIG_VNC_TLS_CFLAGS)
LIBS += $(CONFIG_VNC_TLS_LIBS)
endif

B
balrog 已提交
645 646 647 648
ifdef CONFIG_BLUEZ
LIBS += $(CONFIG_BLUEZ_LIBS)
endif

P
pbrook 已提交
649
# SCSI layer
650
OBJS+= lsi53c895a.o esp.o
P
pbrook 已提交
651

B
bellard 已提交
652
# USB layer
653
OBJS+= usb-ohci.o
B
bellard 已提交
654

T
ths 已提交
655
# EEPROM emulation
656
OBJS += eeprom93xx.o
T
ths 已提交
657

658
# PCI network cards
659 660 661 662
OBJS += eepro100.o
OBJS += ne2000.o
OBJS += pcnet.o
OBJS += rtl8139.o
663
OBJS += e1000.o
664

B
bellard 已提交
665
ifeq ($(TARGET_BASE_ARCH), i386)
666
# Hardware support
667 668 669 670
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
671
CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE
B
bellard 已提交
672
endif
B
bellard 已提交
673
ifeq ($(TARGET_BASE_ARCH), ppc)
674
CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE
J
j_mayer 已提交
675
# shared objects
676
OBJS+= ppc.o ide.o vga.o $(SOUND_HW) dma.o openpic.o
J
j_mayer 已提交
677
# PREP target
678 679
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 已提交
680
# Mac shared devices
681
OBJS+= macio.o cuda.o adb.o mac_nvram.o mac_dbdma.o
J
j_mayer 已提交
682
# OldWorld PowerMac
683
OBJS+= heathrow_pic.o grackle_pci.o ppc_oldworld.o
J
j_mayer 已提交
684
# NewWorld PowerMac
685
OBJS+= unin_pci.o ppc_chrp.o
J
j_mayer 已提交
686
# PowerPC 4xx boards
687
OBJS+= pflash_cfi02.o ppc4xx_devs.o ppc405_uc.o ppc405_boards.o
688
endif
T
ths 已提交
689
ifeq ($(TARGET_BASE_ARCH), mips)
A
aurel32 已提交
690
OBJS+= mips_r4k.o mips_jazz.o mips_malta.o mips_mipssim.o
A
aurel32 已提交
691 692
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
693
OBJS+= ide.o gt64xxx.o pckbd.o ps2.o fdc.o mc146818rtc.o usb-uhci.o acpi.o ds1225y.o
A
aurel32 已提交
694
OBJS+= piix_pci.o parallel.o cirrus_vga.o pcspk.o $(SOUND_HW)
695 696
OBJS+= mipsnet.o
OBJS+= pflash_cfi01.o
A
aurel32 已提交
697
CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE
B
bellard 已提交
698
endif
699
ifeq ($(TARGET_BASE_ARCH), cris)
700
OBJS+= etraxfs.o
E
edgar_igl 已提交
701
OBJS+= etraxfs_dma.o
702
OBJS+= etraxfs_pic.o
E
edgar_igl 已提交
703
OBJS+= etraxfs_eth.o
704 705
OBJS+= etraxfs_timer.o
OBJS+= etraxfs_ser.o
706 707

OBJS+= ptimer.o
E
edgar_igl 已提交
708
OBJS+= pflash_cfi02.o
709
endif
B
bellard 已提交
710
ifeq ($(TARGET_BASE_ARCH), sparc)
B
bellard 已提交
711
ifeq ($(TARGET_ARCH), sparc64)
712 713 714
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 已提交
715
else
716
OBJS+= sun4m.o tcx.o pcnet.o iommu.o m48t59.o slavio_intctl.o
717
OBJS+= slavio_timer.o slavio_serial.o slavio_misc.o fdc.o sparc32_dma.o
718
OBJS+= cs4231.o ptimer.o eccmemctl.o sbi.o sun4c_intctl.o
B
bellard 已提交
719
endif
720
endif
B
bellard 已提交
721
ifeq ($(TARGET_BASE_ARCH), arm)
722 723 724 725 726 727 728 729 730 731
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
732
OBJS+= zaurus.o ide.o serial.o nand.o ecc.o spitz.o tosa.o tc6393xb.o
B
balrog 已提交
733
OBJS+= omap1.o omap_lcdc.o omap_dma.o omap_clk.o omap_mmc.o omap_i2c.o
734
OBJS+= omap2.o omap_dss.o soc_dma.o
735
OBJS+= palm.o tsc210x.o
B
balrog 已提交
736
OBJS+= nseries.o blizzard.o onenand.o vga.o cbus.o tusb6010.o usb-musb.o
737
OBJS+= tsc2005.o bt-hci-csr.o
738
OBJS+= mst_fpga.o mainstone.o
739
OBJS+= musicpal.o pflash_cfi02.o
740
CPPFLAGS += -DHAS_AUDIO
B
bellard 已提交
741
endif
B
bellard 已提交
742
ifeq ($(TARGET_BASE_ARCH), sh4)
743
OBJS+= shix.o r2d.o sh7750.o sh7750_regnames.o tc58128.o
B
blueswir1 已提交
744
OBJS+= sh_timer.o ptimer.o sh_serial.o sh_intc.o sm501.o serial.o
B
bellard 已提交
745
endif
P
pbrook 已提交
746
ifeq ($(TARGET_BASE_ARCH), m68k)
747 748
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 已提交
749
endif
750
ifdef CONFIG_GDBSTUB
P
pbrook 已提交
751
OBJS+=gdbstub.o gdbstub-xml.o
B
update  
bellard 已提交
752
endif
753
ifdef CONFIG_COCOA
754 755 756 757
COCOA_LIBS=-F/System/Library/Frameworks -framework Cocoa -framework IOKit
ifdef CONFIG_COREAUDIO
COCOA_LIBS+=-framework CoreAudio
endif
758
endif
B
bellard 已提交
759
ifdef CONFIG_SLIRP
760
CPPFLAGS+=-I$(SRC_PATH)/slirp
B
bellard 已提交
761 762
endif

763
LIBS+=$(AIOLIBS)
764 765
# specific flags are needed for non soft mmu emulator
ifdef CONFIG_STATIC
766
LDFLAGS+=-static
B
bellard 已提交
767
endif
768
ifndef CONFIG_DARWIN
B
bellard 已提交
769
ifndef CONFIG_WIN32
B
bellard 已提交
770
ifndef CONFIG_SOLARIS
771
LIBS+=-lutil
B
bellard 已提交
772
endif
773
endif
B
bellard 已提交
774
endif
B
bellard 已提交
775
ifdef TARGET_GPROF
776 777
vl.o: CFLAGS+=-p
LDFLAGS+=-p
B
bellard 已提交
778
endif
779

B
bellard 已提交
780
ifeq ($(ARCH),ia64)
781
LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld
B
bellard 已提交
782 783
endif

784 785 786 787
ifdef CONFIG_WIN32
SDL_LIBS := $(filter-out -mwindows, $(SDL_LIBS)) -mconsole
endif

788 789 790 791
# profiling code
ifdef TARGET_GPROF
LDFLAGS+=-p
main.o: CFLAGS+=-p
B
bellard 已提交
792 793
endif

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

797
endif # !CONFIG_USER_ONLY
798

P
pbrook 已提交
799 800 801 802 803 804 805 806
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 已提交
807
%.o: %.c
808
	$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
B
bellard 已提交
809

B
bellard 已提交
810
%.o: %.S
811
	$(CC) $(CPPFLAGS) -c -o $@ $<
B
bellard 已提交
812

B
bellard 已提交
813
clean:
B
bellard 已提交
814 815
	rm -f *.o *.a *~ $(PROGS) gen-op.h dyngen-opc.h op.h nwfpe/*.o fpu/*.o
	rm -f *.d */*.d tcg/*.o
816

817
install: all
B
bellard 已提交
818
ifneq ($(PROGS),)
819
	$(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
B
bellard 已提交
820
endif
B
bellard 已提交
821

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