]> git.proxmox.com Git - qemu.git/blame - Makefile.target
use mask in C0_status (Ralf Baechle)
[qemu.git] / Makefile.target
CommitLineData
626df76a
FB
1include config.mak
2
0b0babc6
FB
3TARGET_BASE_ARCH:=$(TARGET_ARCH)
4ifeq ($(TARGET_ARCH), x86_64)
5TARGET_BASE_ARCH:=i386
6endif
64b3ab24
FB
7ifeq ($(TARGET_ARCH), sparc64)
8TARGET_BASE_ARCH:=sparc
9endif
0b0babc6 10TARGET_PATH=$(SRC_PATH)/target-$(TARGET_BASE_ARCH)
85571bc7 11VPATH=$(SRC_PATH):$(TARGET_PATH):$(SRC_PATH)/hw:$(SRC_PATH)/audio
3035f7ff
FB
12DEFINES=-I. -I$(TARGET_PATH) -I$(SRC_PATH)
13ifdef CONFIG_USER_ONLY
14VPATH+=:$(SRC_PATH)/linux-user
15DEFINES+=-I$(SRC_PATH)/linux-user -I$(SRC_PATH)/linux-user/$(TARGET_ARCH)
16endif
ab2572d7 17CFLAGS=-Wall -O2 -g -fno-strict-aliasing
0b0babc6 18#CFLAGS+=-Werror
626df76a
FB
19LDFLAGS=-g
20LIBS=
626df76a 21HELPER_CFLAGS=$(CFLAGS)
67b915a5 22DYNGEN=../dyngen$(EXESUF)
1e43adfc 23# user emulator name
808c4954
FB
24ifeq ($(TARGET_ARCH),arm)
25 ifeq ($(TARGET_WORDS_BIGENDIAN),yes)
26 QEMU_USER=qemu-armeb
27 else
28 QEMU_USER=qemu-arm
29 endif
30else
31 QEMU_USER=qemu-$(TARGET_ARCH)
32endif
1e43adfc
FB
33# system emulator name
34ifdef CONFIG_SOFTMMU
a541f297 35ifeq ($(TARGET_ARCH), i386)
67b915a5 36QEMU_SYSTEM=qemu$(EXESUF)
0db63474 37else
a541f297
FB
38QEMU_SYSTEM=qemu-system-$(TARGET_ARCH)$(EXESUF)
39endif
40else
0db63474 41QEMU_SYSTEM=qemu-fast
1e43adfc
FB
42endif
43
16e9b7de 44ifdef CONFIG_USER_ONLY
1e43adfc 45PROGS=$(QEMU_USER)
16e9b7de 46else
16e9b7de 47ifeq ($(TARGET_ARCH), i386)
c321f673
FB
48
49ifeq ($(ARCH), i386)
50PROGS+=$(QEMU_SYSTEM)
de5eaa64
FB
51ifndef CONFIG_SOFTMMU
52CONFIG_STATIC=y
53endif
38ca2abc
FB
54else
55# the system emulator using soft mmu is portable
c321f673 56ifdef CONFIG_SOFTMMU
16e9b7de
FB
57PROGS+=$(QEMU_SYSTEM)
58endif
38ca2abc 59endif # ARCH != i386
c321f673 60
38ca2abc 61endif # TARGET_ARCH = i386
728c9fd5 62
0b0babc6
FB
63ifeq ($(TARGET_ARCH), x86_64)
64ifdef CONFIG_SOFTMMU
65PROGS+=$(QEMU_SYSTEM)
66endif
67endif # TARGET_ARCH = x86_64
68
728c9fd5
FB
69ifeq ($(TARGET_ARCH), ppc)
70
71ifeq ($(ARCH), ppc)
72PROGS+=$(QEMU_SYSTEM)
73endif
74
6af0bf9c
FB
75endif # TARGET_ARCH = ppc
76
77ifeq ($(TARGET_ARCH), mips)
78
728c9fd5
FB
79ifeq ($(ARCH), i386)
80ifdef CONFIG_SOFTMMU
81PROGS+=$(QEMU_SYSTEM)
626df76a 82endif
728c9fd5
FB
83endif # ARCH = i386
84
0b0babc6 85ifeq ($(ARCH), x86_64)
75dfaa1e
FB
86ifdef CONFIG_SOFTMMU
87PROGS+=$(QEMU_SYSTEM)
88endif
0b0babc6 89endif # ARCH = x86_64
75dfaa1e 90
6af0bf9c 91endif # TARGET_ARCH = mips
e95c8d51
FB
92
93ifeq ($(TARGET_ARCH), sparc)
94
95ifeq ($(ARCH), ppc)
96PROGS+=$(QEMU_SYSTEM)
97endif
98
99ifeq ($(ARCH), i386)
100ifdef CONFIG_SOFTMMU
101PROGS+=$(QEMU_SYSTEM)
102endif
103endif # ARCH = i386
104
0b0babc6 105ifeq ($(ARCH), x86_64)
e95c8d51
FB
106ifdef CONFIG_SOFTMMU
107PROGS+=$(QEMU_SYSTEM)
108endif
0b0babc6 109endif # ARCH = x86_64
e95c8d51
FB
110
111endif # TARGET_ARCH = sparc
64b3ab24
FB
112
113ifeq ($(TARGET_ARCH), sparc64)
114ifdef CONFIG_SOFTMMU
115PROGS+=$(QEMU_SYSTEM)
116endif
117endif # TARGET_ARCH = sparc64
118
728c9fd5 119endif # !CONFIG_USER_ONLY
626df76a
FB
120
121ifdef CONFIG_STATIC
122LDFLAGS+=-static
123endif
124
125ifeq ($(ARCH),i386)
126CFLAGS+=-fomit-frame-pointer
127OP_CFLAGS=$(CFLAGS) -mpreferred-stack-boundary=2
128ifeq ($(HAVE_GCC3_OPTIONS),yes)
3611a29c 129OP_CFLAGS+= -falign-functions=0 -fno-gcse
626df76a
FB
130else
131OP_CFLAGS+= -malign-functions=0
132endif
3a4739d6 133
626df76a 134ifdef TARGET_GPROF
3a4739d6
FB
135USE_I386_LD=y
136endif
137ifdef CONFIG_STATIC
138USE_I386_LD=y
139endif
140ifdef USE_I386_LD
626df76a
FB
141LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386.ld
142else
143# WARNING: this LDFLAGS is _very_ tricky : qemu is an ELF shared object
144# that the kernel ELF loader considers as an executable. I think this
145# is the simplest way to make it self virtualizable!
146LDFLAGS+=-Wl,-shared
147endif
626df76a
FB
148endif
149
0b0babc6 150ifeq ($(ARCH),x86_64)
bc51c5c9 151OP_CFLAGS=$(CFLAGS) -falign-functions=0
0b0babc6 152LDFLAGS+=-Wl,-T,$(SRC_PATH)/x86_64.ld
bc51c5c9
FB
153endif
154
626df76a 155ifeq ($(ARCH),ppc)
83fb7adf 156CFLAGS+= -D__powerpc__
626df76a
FB
157OP_CFLAGS=$(CFLAGS)
158LDFLAGS+=-Wl,-T,$(SRC_PATH)/ppc.ld
159endif
160
161ifeq ($(ARCH),s390)
162OP_CFLAGS=$(CFLAGS)
163LDFLAGS+=-Wl,-T,$(SRC_PATH)/s390.ld
164endif
165
166ifeq ($(ARCH),sparc)
167CFLAGS+=-m32 -ffixed-g1 -ffixed-g2 -ffixed-g3 -ffixed-g6
168LDFLAGS+=-m32
169OP_CFLAGS=$(CFLAGS) -fno-delayed-branch -ffixed-i0
170HELPER_CFLAGS=$(CFLAGS) -ffixed-i0 -mflat
171# -static is used to avoid g1/g3 usage by the dynamic linker
172LDFLAGS+=-Wl,-T,$(SRC_PATH)/sparc.ld -static
173endif
174
175ifeq ($(ARCH),sparc64)
176CFLAGS+=-m64 -ffixed-g1 -ffixed-g2 -ffixed-g3 -ffixed-g6
177LDFLAGS+=-m64
178OP_CFLAGS=$(CFLAGS) -fno-delayed-branch -ffixed-i0
179endif
180
181ifeq ($(ARCH),alpha)
182# -msmall-data is not used because we want two-instruction relocations
183# for the constant constructions
184OP_CFLAGS=-Wall -O2 -g
185# Ensure there's only a single GP
186CFLAGS += -msmall-data
187LDFLAGS+=-Wl,-T,$(SRC_PATH)/alpha.ld
188endif
189
190ifeq ($(ARCH),ia64)
b8076a74 191CFLAGS += -mno-sdata
626df76a 192OP_CFLAGS=$(CFLAGS)
b8076a74 193LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld
626df76a
FB
194endif
195
196ifeq ($(ARCH),arm)
ba68055e 197OP_CFLAGS=$(CFLAGS) -mno-sched-prolog -fno-omit-frame-pointer
626df76a
FB
198LDFLAGS+=-Wl,-T,$(SRC_PATH)/arm.ld
199endif
200
38e584a0
FB
201ifeq ($(ARCH),m68k)
202OP_CFLAGS=$(CFLAGS) -fomit-frame-pointer
203LDFLAGS+=-Wl,-T,m68k.ld
204endif
205
626df76a
FB
206ifeq ($(HAVE_GCC3_OPTIONS),yes)
207# very important to generate a return at the end of every operation
208OP_CFLAGS+=-fno-reorder-blocks -fno-optimize-sibling-calls
209endif
210
83fb7adf
FB
211ifeq ($(CONFIG_DARWIN),yes)
212OP_CFLAGS+= -mdynamic-no-pic
e80cfcfc 213LIBS+=-lmx
83fb7adf
FB
214endif
215
626df76a
FB
216#########################################################
217
d5249393 218DEFINES+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
626df76a 219LIBS+=-lm
b932caba
FB
220ifndef CONFIG_USER_ONLY
221LIBS+=-lz
222endif
67b915a5 223ifdef CONFIG_WIN32
3db38e87 224LIBS+=-lwinmm -lws2_32 -liphlpapi
67b915a5 225endif
626df76a
FB
226
227# profiling code
228ifdef TARGET_GPROF
229LDFLAGS+=-p
230main.o: CFLAGS+=-p
231endif
232
3035f7ff 233OBJS= elfload.o main.o syscall.o mmap.o signal.o path.o osdep.o thunk.o
626df76a
FB
234ifeq ($(TARGET_ARCH), i386)
235OBJS+= vm86.o
236endif
f72b519c 237ifeq ($(TARGET_ARCH), arm)
158142c2 238OBJS+=nwfpe/fpa11.o nwfpe/fpa11_cpdo.o \
f72b519c 239nwfpe/fpa11_cpdt.o nwfpe/fpa11_cprt.o nwfpe/fpopcode.o nwfpe/single_cpdo.o \
a4f81979 240 nwfpe/double_cpdo.o nwfpe/extended_cpdo.o arm-semi.o
f72b519c 241endif
626df76a
FB
242SRCS:= $(OBJS:.o=.c)
243OBJS+= libqemu.a
244
245# cpu emulator library
158142c2 246LIBOBJS=exec.o kqemu.o translate-op.o translate-all.o cpu-exec.o\
e3086fbf 247 translate.o op.o
158142c2
FB
248ifdef CONFIG_SOFTFLOAT
249LIBOBJS+=fpu/softfloat.o
250else
251LIBOBJS+=fpu/softfloat-native.o
252endif
253DEFINES+=-I$(SRC_PATH)/fpu
626df76a
FB
254
255ifeq ($(TARGET_ARCH), i386)
1e43adfc 256LIBOBJS+=helper.o helper2.o
f72b519c
FB
257ifeq ($(ARCH), i386)
258LIBOBJS+=translate-copy.o
259endif
626df76a
FB
260endif
261
0b0babc6
FB
262ifeq ($(TARGET_ARCH), x86_64)
263LIBOBJS+=helper.o helper2.o
264endif
265
67867308 266ifeq ($(TARGET_ARCH), ppc)
728c9fd5 267LIBOBJS+= op_helper.o helper.o
67867308
FB
268endif
269
6af0bf9c
FB
270ifeq ($(TARGET_ARCH), mips)
271LIBOBJS+= op_helper.o helper.o
272endif
273
64b3ab24 274ifeq ($(TARGET_BASE_ARCH), sparc)
e95c8d51
FB
275LIBOBJS+= op_helper.o helper.o
276endif
277
b7bcbe95
FB
278ifeq ($(TARGET_BASE_ARCH), arm)
279LIBOBJS+= op_helper.o
280endif
281
626df76a
FB
282# NOTE: the disassembler code is only needed for debugging
283LIBOBJS+=disas.o
284ifeq ($(findstring i386, $(TARGET_ARCH) $(ARCH)),i386)
bc51c5c9
FB
285USE_I386_DIS=y
286endif
0b0babc6 287ifeq ($(findstring x86_64, $(TARGET_ARCH) $(ARCH)),x86_64)
bc51c5c9
FB
288USE_I386_DIS=y
289endif
290ifdef USE_I386_DIS
626df76a
FB
291LIBOBJS+=i386-dis.o
292endif
293ifeq ($(findstring alpha, $(TARGET_ARCH) $(ARCH)),alpha)
294LIBOBJS+=alpha-dis.o
295endif
296ifeq ($(findstring ppc, $(TARGET_ARCH) $(ARCH)),ppc)
297LIBOBJS+=ppc-dis.o
298endif
6af0bf9c
FB
299ifeq ($(findstring mips, $(TARGET_ARCH) $(ARCH)),mips)
300LIBOBJS+=mips-dis.o
301endif
64b3ab24 302ifeq ($(findstring sparc, $(TARGET_BASE_ARCH) $(ARCH)),sparc)
626df76a
FB
303LIBOBJS+=sparc-dis.o
304endif
305ifeq ($(findstring arm, $(TARGET_ARCH) $(ARCH)),arm)
306LIBOBJS+=arm-dis.o
307endif
308
309ifeq ($(ARCH),ia64)
310OBJS += ia64-syscall.o
311endif
1fddef4b
FB
312ifdef CONFIG_GDBSTUB
313OBJS+=gdbstub.o
314endif
626df76a 315
1e43adfc 316all: $(PROGS)
626df76a 317
1e43adfc 318$(QEMU_USER): $(OBJS)
626df76a
FB
319 $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
320ifeq ($(ARCH),alpha)
321# Mark as 32 bit binary, i. e. it will be mapped into the low 31 bit of
322# the address space (31 bit so sign extending doesn't matter)
323 echo -ne '\001\000\000\000' | dd of=qemu bs=1 seek=48 count=4 conv=notrunc
324endif
325
326# must use static linking to avoid leaving stuff in virtual address space
6a0f9e82 327VL_OBJS=vl.o osdep.o block.o readline.o monitor.o pci.o console.o
de167e41 328VL_OBJS+=block-cow.o block-qcow.o aes.o block-vmdk.o block-cloop.o block-dmg.o block-bochs.o block-vpc.o block-vvfat.o
a541f297 329
85571bc7 330SOUND_HW = sb16.o
7372f88d 331AUDIODRV = audio.o noaudio.o wavaudio.o
fb065187
FB
332ifdef CONFIG_SDL
333AUDIODRV += sdlaudio.o
334endif
335ifdef CONFIG_OSS
336AUDIODRV += ossaudio.o
337endif
338
339pc.o: DEFINES := -DUSE_SB16 $(DEFINES)
85571bc7 340
fb065187 341ifdef CONFIG_ADLIB
85571bc7 342SOUND_HW += fmopl.o adlib.o
85571bc7
FB
343endif
344
102a52e4 345ifdef CONFIG_FMOD
85571bc7 346AUDIODRV += fmodaudio.o
102a52e4
FB
347audio.o fmodaudio.o: DEFINES := -I$(CONFIG_FMOD_INC) $(DEFINES)
348LIBS += $(CONFIG_FMOD_LIB)
85571bc7
FB
349endif
350
0b0babc6 351ifeq ($(TARGET_BASE_ARCH), i386)
a541f297 352# Hardware support
85571bc7
FB
353VL_OBJS+= ide.o ne2000.o pckbd.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)
354VL_OBJS+= fdc.o mc146818rtc.o serial.o i8259.o i8254.o pc.o
6508fe59 355VL_OBJS+= cirrus_vga.o mixeng.o apic.o parallel.o
67b915a5 356endif
728c9fd5 357ifeq ($(TARGET_ARCH), ppc)
85571bc7 358VL_OBJS+= ppc.o ide.o ne2000.o pckbd.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)
64201201 359VL_OBJS+= mc146818rtc.o serial.o i8259.o i8254.o fdc.o m48t59.o
e68b9b2b 360VL_OBJS+= ppc_prep.o ppc_chrp.o cuda.o adb.o openpic.o heathrow_pic.o mixeng.o
a541f297 361endif
6af0bf9c 362ifeq ($(TARGET_ARCH), mips)
9827e95c 363VL_OBJS+= mips.o mips_r4k.o dma.o vga.o serial.o ne2000.o #ide.o pckbd.o
6af0bf9c
FB
364VL_OBJS+= #i8259.o i8254.o fdc.o m48t59.o
365endif
64b3ab24 366ifeq ($(TARGET_BASE_ARCH), sparc)
3475187d
FB
367ifeq ($(TARGET_ARCH), sparc64)
368VL_OBJS+= sun4u.o m48t08.o magic-load.o slavio_serial.o
369else
370VL_OBJS+= sun4m.o tcx.o lance.o iommu.o m48t08.o magic-load.o slavio_intctl.o slavio_timer.o slavio_serial.o slavio_misc.o fdc.o esp.o
371endif
e95c8d51 372endif
a541f297
FB
373ifdef CONFIG_GDBSTUB
374VL_OBJS+=gdbstub.o
728c9fd5 375endif
626df76a
FB
376ifdef CONFIG_SDL
377VL_OBJS+=sdl.o
de5eaa64 378endif
5b0753e0
FB
379ifdef CONFIG_COCOA
380VL_OBJS+=cocoa.o
381COCOA_LIBS=-F/System/Library/Frameworks -framework Cocoa
382endif
7c1f25b4
FB
383ifdef CONFIG_SLIRP
384DEFINES+=-I$(SRC_PATH)/slirp
385SLIRP_OBJS=cksum.o if.o ip_icmp.o ip_input.o ip_output.o \
386slirp.o mbuf.o misc.o sbuf.o socket.o tcp_input.o tcp_output.o \
c7f74643 387tcp_subr.o tcp_timer.o udp.o bootp.o debug.o tftp.o
7c1f25b4 388VL_OBJS+=$(addprefix slirp/, $(SLIRP_OBJS))
626df76a
FB
389endif
390
c321f673
FB
391VL_LDFLAGS=
392# specific flags are needed for non soft mmu emulator
c321f673
FB
393ifdef CONFIG_STATIC
394VL_LDFLAGS+=-static
395endif
de5eaa64
FB
396ifndef CONFIG_SOFTMMU
397VL_LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386-vl.ld
398endif
83fb7adf 399ifndef CONFIG_DARWIN
11d9f695
FB
400ifndef CONFIG_WIN32
401VL_LIBS=-lutil
402endif
83fb7adf 403endif
e3086fbf
FB
404ifdef TARGET_GPROF
405vl.o: CFLAGS+=-p
406VL_LDFLAGS+=-p
407endif
c321f673 408
b8076a74
FB
409ifeq ($(ARCH),ia64)
410VL_LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld
411endif
412
1e43adfc 413$(QEMU_SYSTEM): $(VL_OBJS) libqemu.a
5b0753e0
FB
414 $(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(VL_LIBS)
415
416cocoa.o: cocoa.m
417 $(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
626df76a 418
3d11d0eb 419sdl.o: sdl.c keymaps.c sdl_keysym.h
626df76a
FB
420 $(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<
421
9f059eca
FB
422sdlaudio.o: sdlaudio.c
423 $(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<
424
626df76a 425depend: $(SRCS)
16e9b7de 426 $(CC) -MM $(CFLAGS) $(DEFINES) $^ 1>.depend
626df76a
FB
427
428# libqemu
429
430libqemu.a: $(LIBOBJS)
431 rm -f $@
432 $(AR) rcs $@ $(LIBOBJS)
433
1e43adfc 434translate.o: translate.c gen-op.h opc.h cpu.h
626df76a 435
158142c2
FB
436translate-all.o: translate-all.c opc.h cpu.h
437
438translate-op.o: translate-all.c op.h opc.h cpu.h
626df76a 439
1e43adfc 440op.h: op.o $(DYNGEN)
626df76a
FB
441 $(DYNGEN) -o $@ $<
442
1e43adfc 443opc.h: op.o $(DYNGEN)
626df76a
FB
444 $(DYNGEN) -c -o $@ $<
445
1e43adfc 446gen-op.h: op.o $(DYNGEN)
626df76a
FB
447 $(DYNGEN) -g -o $@ $<
448
1e43adfc 449op.o: op.c
626df76a
FB
450 $(CC) $(OP_CFLAGS) $(DEFINES) -c -o $@ $<
451
1e43adfc 452helper.o: helper.c
626df76a
FB
453 $(CC) $(HELPER_CFLAGS) $(DEFINES) -c -o $@ $<
454
0b0babc6 455ifeq ($(TARGET_BASE_ARCH), i386)
664e0f19 456op.o: op.c opreg_template.h ops_template.h ops_template_mem.h ops_mem.h ops_sse.h
1e43adfc
FB
457endif
458
459ifeq ($(TARGET_ARCH), arm)
460op.o: op.c op_template.h
461endif
626df76a 462
64b3ab24 463ifeq ($(TARGET_BASE_ARCH), sparc)
3475187d
FB
464op.o: op.c op_template.h op_mem.h fop_template.h fbranch_template.h
465magic_load.o: elf_op.h
1e43adfc 466endif
626df76a 467
728c9fd5
FB
468ifeq ($(TARGET_ARCH), ppc)
469op.o: op.c op_template.h op_mem.h
470op_helper.o: op_helper_mem.h
471endif
472
6af0bf9c
FB
473ifeq ($(TARGET_ARCH), mips)
474op.o: op.c op_template.c op_mem.c
475op_helper.o: op_helper_mem.c
476endif
477
85571bc7
FB
478mixeng.o: mixeng.c mixeng.h mixeng_template.h
479
626df76a
FB
480%.o: %.c
481 $(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
482
f72b519c
FB
483%.o: %.S
484 $(CC) $(DEFINES) -c -o $@ $<
485
626df76a 486clean:
e362b55a 487 rm -f *.o *.a *~ $(PROGS) gen-op.h opc.h op.h nwfpe/*.o slirp/*.o fpu/*.o
1e43adfc
FB
488
489install: all
9b14bb04 490ifneq ($(PROGS),)
11d9f695 491 install -m 755 -s $(PROGS) "$(bindir)"
9b14bb04 492endif
626df76a
FB
493
494ifneq ($(wildcard .depend),)
495include .depend
496endif