Makefile.target 18.5 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=
30
# user emulator name
bellard's avatar
bellard committed
31
ifndef TARGET_ARCH2
bellard's avatar
bellard committed
32
TARGET_ARCH2=$(TARGET_ARCH)
bellard's avatar
bellard committed
33
endif
34 35
ifeq ($(TARGET_ARCH),arm)
  ifeq ($(TARGET_WORDS_BIGENDIAN),yes)
bellard's avatar
bellard committed
36
    TARGET_ARCH2=armeb
37
  endif
bellard's avatar
bellard committed
38
endif
pbrook's avatar
pbrook committed
39 40 41 42 43
ifeq ($(TARGET_ARCH),sh4)
  ifeq ($(TARGET_WORDS_BIGENDIAN),yes)
    TARGET_ARCH2=sh4eb
  endif
endif
bellard's avatar
bellard committed
44
ifeq ($(TARGET_ARCH),mips)
bellard's avatar
bellard committed
45 46
  ifneq ($(TARGET_WORDS_BIGENDIAN),yes)
    TARGET_ARCH2=mipsel
bellard's avatar
bellard committed
47 48
  endif
endif
49 50 51 52 53
ifeq ($(TARGET_ARCH),mipsn32)
  ifneq ($(TARGET_WORDS_BIGENDIAN),yes)
    TARGET_ARCH2=mipsn32el
  endif
endif
ths's avatar
ths committed
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
bellard's avatar
bellard committed
70
endif
bellard's avatar
bellard committed
71

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

74
# We require -O2 to avoid the stack setup prologue in EXIT_TB
blueswir1's avatar
blueswir1 committed
75
OP_CFLAGS := -O2 -g -fno-strict-aliasing
76
OP_CFLAGS += -Wall -Wundef -Wendif-labels -Wwrite-strings -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls
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=

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

bellard's avatar
bellard committed
101
ifeq ($(ARCH),ppc)
102
CPPFLAGS+= -D__powerpc__
103
OP_CFLAGS+= -mlongcall
bellard's avatar
bellard committed
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
115
endif
bellard's avatar
bellard committed
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
bellard's avatar
bellard committed
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
bellard's avatar
bellard committed
130
# Ensure there's only a single GP
131
CFLAGS+=-msmall-data
bellard's avatar
bellard committed
132 133
endif

aurel32's avatar
aurel32 committed
134 135 136 137 138
ifeq ($(ARCH),hppa)
OP_CFLAGS=-O1 -fno-delayed-branch
BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif

bellard's avatar
bellard committed
139
ifeq ($(ARCH),ia64)
140
CFLAGS+=-mno-sdata
141
OP_CFLAGS+=-mno-sdata
bellard's avatar
bellard committed
142 143 144
endif

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

bellard's avatar
bellard committed
148
ifeq ($(ARCH),m68k)
149 150 151 152
OP_CFLAGS+=-fomit-frame-pointer
endif

ifeq ($(ARCH),mips)
ths's avatar
ths committed
153
OP_CFLAGS+=-mabi=32 -G0 -fno-PIC -mno-abicalls -fomit-frame-pointer -fno-delayed-branch -Wa,-O0
ths's avatar
ths committed
154 155 156
endif

ifeq ($(ARCH),mips64)
ths's avatar
ths committed
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)
bellard's avatar
bellard committed
163

164
CPPFLAGS+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
bellard's avatar
bellard committed
165
LIBS+=-lm
bellard's avatar
bellard committed
166
ifdef CONFIG_WIN32
167
LIBS+=-lwinmm -lws2_32 -liphlpapi
bellard's avatar
bellard committed
168
endif
bellard's avatar
bellard committed
169 170
ifdef CONFIG_SOLARIS
LIBS+=-lsocket -lnsl -lresolv
ths's avatar
ths committed
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
bellard's avatar
bellard committed
176
endif
177 178
endif

aliguori's avatar
aliguori committed
179 180 181
kvm.o: CFLAGS+=$(KVM_CFLAGS)
kvm-all.o: CFLAGS+=$(KVM_CFLAGS)

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

184
#########################################################
bellard's avatar
bellard committed
185
# cpu emulator library
bellard's avatar
bellard committed
186
LIBOBJS=exec.o kqemu.o translate-all.o cpu-exec.o\
187
        translate.o host-utils.o
bellard's avatar
bellard committed
188
# TCG code generator
aurel32's avatar
aurel32 committed
189
LIBOBJS+= tcg/tcg.o tcg/tcg-runtime.o
bellard's avatar
bellard committed
190
CPPFLAGS+=-I$(SRC_PATH)/tcg -I$(SRC_PATH)/tcg/$(ARCH)
blueswir1's avatar
blueswir1 committed
191 192 193
ifeq ($(ARCH),sparc64)
CPPFLAGS+=-I$(SRC_PATH)/tcg/sparc
endif
bellard's avatar
bellard committed
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

bellard's avatar
bellard committed
202
ifeq ($(TARGET_BASE_ARCH), arm)
203
LIBOBJS+= neon_helper.o iwmmxt_helper.o
pbrook's avatar
pbrook committed
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

bellard's avatar
bellard committed
218
# NOTE: the disassembler code is only needed for debugging
219
LIBOBJS+=disas.o
bellard's avatar
bellard committed
220
ifeq ($(findstring i386, $(TARGET_ARCH) $(ARCH)),i386)
221 222
USE_I386_DIS=y
endif
bellard's avatar
bellard committed
223
ifeq ($(findstring x86_64, $(TARGET_ARCH) $(ARCH)),x86_64)
224 225 226
USE_I386_DIS=y
endif
ifdef USE_I386_DIS
bellard's avatar
bellard committed
227 228 229 230 231
LIBOBJS+=i386-dis.o
endif
ifeq ($(findstring alpha, $(TARGET_ARCH) $(ARCH)),alpha)
LIBOBJS+=alpha-dis.o
endif
bellard's avatar
bellard committed
232
ifeq ($(findstring ppc, $(TARGET_BASE_ARCH) $(ARCH)),ppc)
bellard's avatar
bellard committed
233 234
LIBOBJS+=ppc-dis.o
endif
ths's avatar
ths committed
235
ifeq ($(findstring mips, $(TARGET_BASE_ARCH) $(ARCH)),mips)
bellard's avatar
bellard committed
236 237
LIBOBJS+=mips-dis.o
endif
bellard's avatar
bellard committed
238
ifeq ($(findstring sparc, $(TARGET_BASE_ARCH) $(ARCH)),sparc)
bellard's avatar
bellard committed
239 240 241 242 243
LIBOBJS+=sparc-dis.o
endif
ifeq ($(findstring arm, $(TARGET_ARCH) $(ARCH)),arm)
LIBOBJS+=arm-dis.o
endif
bellard's avatar
bellard committed
244 245 246
ifeq ($(findstring m68k, $(TARGET_ARCH) $(ARCH)),m68k)
LIBOBJS+=m68k-dis.o
endif
bellard's avatar
bellard committed
247 248 249
ifeq ($(findstring sh4, $(TARGET_ARCH) $(ARCH)),sh4)
LIBOBJS+=sh4-dis.o
endif
aurel32's avatar
aurel32 committed
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
bellard's avatar
bellard committed
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

aurel32's avatar
aurel32 committed
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

malc's avatar
malc committed
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

aurel32's avatar
aurel32 committed
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

398
ifdef CONFIG_GDBSTUB
399
OBJS+=gdbstub.o gdbstub-xml.o
400
endif
bellard's avatar
bellard committed
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 $@ $<
bellard's avatar
bellard committed
408

409
$(QEMU_PROG): $(OBJS) ../libqemu_user.a
410
	$(CC) $(LDFLAGS) -o $@ $^  $(LIBS)
bellard's avatar
bellard committed
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
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

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
aliguori's avatar
aliguori committed
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 568 569
ifdef CONFIG_AIO
OBJS+=posix-aio-compat.o
endif
570
OBJS+=block-raw-posix.o
571 572
endif

573
LIBS+=-lz
574 575 576
ifdef CONFIG_ALSA
LIBS += -lasound
endif
577 578 579
ifdef CONFIG_ESD
LIBS += -lesd
endif
malc's avatar
malc committed
580 581 582
ifdef CONFIG_PA
LIBS += -lpulse-simple
endif
583 584
ifdef CONFIG_DSOUND
LIBS += -lole32 -ldxguid
bellard's avatar
bellard committed
585
endif
bellard's avatar
bellard committed
586 587
ifdef CONFIG_FMOD
LIBS += $(CONFIG_FMOD_LIB)
bellard's avatar
bellard committed
588
endif
blueswir1's avatar
blueswir1 committed
589 590 591
ifdef CONFIG_OSS
LIBS += $(CONFIG_OSS_LIB)
endif
bellard's avatar
bellard committed
592 593

SOUND_HW = sb16.o es1370.o
594 595 596
ifdef CONFIG_AC97
SOUND_HW += ac97.o
endif
597 598
ifdef CONFIG_ADLIB
SOUND_HW += fmopl.o adlib.o
599
adlib.o fmopl.o: CFLAGS := ${CFLAGS} -DBUILD_Y8950=0
600
endif
601 602 603
ifdef CONFIG_GUS
SOUND_HW += gus.o gusemu_hal.o gusemu_mixer.o
endif
malc's avatar
malc committed
604 605 606
ifdef CONFIG_CS4231A
SOUND_HW += cs4231a.o
endif
bellard's avatar
bellard committed
607

608 609 610 611 612
ifdef CONFIG_VNC_TLS
CPPFLAGS += $(CONFIG_VNC_TLS_CFLAGS)
LIBS += $(CONFIG_VNC_TLS_LIBS)
endif

613 614 615 616
ifdef CONFIG_BLUEZ
LIBS += $(CONFIG_BLUEZ_LIBS)
endif

pbrook's avatar
pbrook committed
617
# SCSI layer
618
OBJS+= lsi53c895a.o esp.o
pbrook's avatar
pbrook committed
619

bellard's avatar
bellard committed
620
# USB layer
621
OBJS+= usb-ohci.o
bellard's avatar
bellard committed
622

ths's avatar
ths committed
623
# EEPROM emulation
624
OBJS += eeprom93xx.o
ths's avatar
ths committed
625

626
# PCI network cards
627 628 629 630
OBJS += eepro100.o
OBJS += ne2000.o
OBJS += pcnet.o
OBJS += rtl8139.o
631
OBJS += e1000.o
632

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

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

740
LIBS+=$(AIOLIBS)
741 742
# specific flags are needed for non soft mmu emulator
ifdef CONFIG_STATIC
743
LDFLAGS+=-static
bellard's avatar
bellard committed
744
endif
745
ifndef CONFIG_DARWIN
bellard's avatar
bellard committed
746
ifndef CONFIG_WIN32
bellard's avatar
bellard committed
747
ifndef CONFIG_SOLARIS
malc's avatar
malc committed
748
ifndef CONFIG_AIX
749
LIBS+=-lutil
bellard's avatar
bellard committed
750
endif
malc's avatar
malc committed
751
endif
752
endif
bellard's avatar
bellard committed
753
endif
bellard's avatar
bellard committed
754
ifdef TARGET_GPROF
755 756
vl.o: CFLAGS+=-p
LDFLAGS+=-p
bellard's avatar
bellard committed
757
endif
758

759
ifeq ($(ARCH),ia64)
760
LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld
bellard's avatar
bellard committed
761 762
endif

763 764 765 766
ifdef CONFIG_WIN32
SDL_LIBS := $(filter-out -mwindows, $(SDL_LIBS)) -mconsole
endif

767 768 769 770
# profiling code
ifdef TARGET_GPROF
LDFLAGS+=-p
main.o: CFLAGS+=-p
bellard's avatar
bellard committed
771 772
endif

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

776
endif # !CONFIG_USER_ONLY
777

778 779 780 781 782 783 784 785
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
786
%.o: %.c
787
	$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
bellard's avatar
bellard committed
788

bellard's avatar
bellard committed
789
%.o: %.S
790
	$(CC) $(CPPFLAGS) -c -o $@ $<
bellard's avatar
bellard committed
791

bellard's avatar
bellard committed
792
clean:
793
	rm -f *.o *.a *~ $(PROGS) nwfpe/*.o fpu/*.o
bellard's avatar
bellard committed
794
	rm -f *.d */*.d tcg/*.o
795

796
install: all
bellard's avatar
bellard committed
797
ifneq ($(PROGS),)
798
	$(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
bellard's avatar
bellard committed
799
endif
bellard's avatar
bellard committed
800

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