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