]> git.proxmox.com Git - qemu.git/blame - Makefile.target
sparc update
[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)
187OP_CFLAGS=$(CFLAGS)
188endif
189
190ifeq ($(ARCH),arm)
191OP_CFLAGS=$(CFLAGS) -mno-sched-prolog
192LDFLAGS+=-Wl,-T,$(SRC_PATH)/arm.ld
193endif
194
38e584a0
FB
195ifeq ($(ARCH),m68k)
196OP_CFLAGS=$(CFLAGS) -fomit-frame-pointer
197LDFLAGS+=-Wl,-T,m68k.ld
198endif
199
626df76a
FB
200ifeq ($(HAVE_GCC3_OPTIONS),yes)
201# very important to generate a return at the end of every operation
202OP_CFLAGS+=-fno-reorder-blocks -fno-optimize-sibling-calls
203endif
204
83fb7adf
FB
205ifeq ($(CONFIG_DARWIN),yes)
206OP_CFLAGS+= -mdynamic-no-pic
e80cfcfc 207LIBS+=-lmx
83fb7adf
FB
208endif
209
626df76a
FB
210#########################################################
211
d5249393 212DEFINES+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
626df76a 213LIBS+=-lm
b932caba
FB
214ifndef CONFIG_USER_ONLY
215LIBS+=-lz
216endif
67b915a5 217ifdef CONFIG_WIN32
3db38e87 218LIBS+=-lwinmm -lws2_32 -liphlpapi
67b915a5 219endif
626df76a
FB
220
221# profiling code
222ifdef TARGET_GPROF
223LDFLAGS+=-p
224main.o: CFLAGS+=-p
225endif
226
3035f7ff 227OBJS= elfload.o main.o syscall.o mmap.o signal.o path.o osdep.o thunk.o
626df76a
FB
228ifeq ($(TARGET_ARCH), i386)
229OBJS+= vm86.o
230endif
f72b519c
FB
231ifeq ($(TARGET_ARCH), arm)
232OBJS+=nwfpe/softfloat.o nwfpe/fpa11.o nwfpe/fpa11_cpdo.o \
233nwfpe/fpa11_cpdt.o nwfpe/fpa11_cprt.o nwfpe/fpopcode.o nwfpe/single_cpdo.o \
234 nwfpe/double_cpdo.o nwfpe/extended_cpdo.o
235endif
626df76a
FB
236SRCS:= $(OBJS:.o=.c)
237OBJS+= libqemu.a
238
239# cpu emulator library
e3086fbf
FB
240LIBOBJS=exec.o kqemu.o translate-all.o cpu-exec.o\
241 translate.o op.o
626df76a
FB
242
243ifeq ($(TARGET_ARCH), i386)
1e43adfc 244LIBOBJS+=helper.o helper2.o
f72b519c
FB
245ifeq ($(ARCH), i386)
246LIBOBJS+=translate-copy.o
247endif
626df76a
FB
248endif
249
0b0babc6
FB
250ifeq ($(TARGET_ARCH), x86_64)
251LIBOBJS+=helper.o helper2.o
252endif
253
67867308 254ifeq ($(TARGET_ARCH), ppc)
728c9fd5 255LIBOBJS+= op_helper.o helper.o
67867308
FB
256endif
257
64b3ab24 258ifeq ($(TARGET_BASE_ARCH), sparc)
e95c8d51
FB
259LIBOBJS+= op_helper.o helper.o
260endif
261
b7bcbe95
FB
262ifeq ($(TARGET_BASE_ARCH), arm)
263LIBOBJS+= op_helper.o
264endif
265
626df76a
FB
266# NOTE: the disassembler code is only needed for debugging
267LIBOBJS+=disas.o
268ifeq ($(findstring i386, $(TARGET_ARCH) $(ARCH)),i386)
bc51c5c9
FB
269USE_I386_DIS=y
270endif
0b0babc6 271ifeq ($(findstring x86_64, $(TARGET_ARCH) $(ARCH)),x86_64)
bc51c5c9
FB
272USE_I386_DIS=y
273endif
274ifdef USE_I386_DIS
626df76a
FB
275LIBOBJS+=i386-dis.o
276endif
277ifeq ($(findstring alpha, $(TARGET_ARCH) $(ARCH)),alpha)
278LIBOBJS+=alpha-dis.o
279endif
280ifeq ($(findstring ppc, $(TARGET_ARCH) $(ARCH)),ppc)
281LIBOBJS+=ppc-dis.o
282endif
64b3ab24 283ifeq ($(findstring sparc, $(TARGET_BASE_ARCH) $(ARCH)),sparc)
626df76a
FB
284LIBOBJS+=sparc-dis.o
285endif
286ifeq ($(findstring arm, $(TARGET_ARCH) $(ARCH)),arm)
287LIBOBJS+=arm-dis.o
288endif
289
290ifeq ($(ARCH),ia64)
291OBJS += ia64-syscall.o
292endif
293
1e43adfc 294all: $(PROGS)
626df76a 295
1e43adfc 296$(QEMU_USER): $(OBJS)
626df76a
FB
297 $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
298ifeq ($(ARCH),alpha)
299# Mark as 32 bit binary, i. e. it will be mapped into the low 31 bit of
300# the address space (31 bit so sign extending doesn't matter)
301 echo -ne '\001\000\000\000' | dd of=qemu bs=1 seek=48 count=4 conv=notrunc
302endif
303
304# must use static linking to avoid leaving stuff in virtual address space
b932caba 305VL_OBJS=vl.o osdep.o block.o readline.o monitor.o pci.o console.o
585d0ed9 306VL_OBJS+=block-cow.o block-qcow.o aes.o block-vmdk.o block-cloop.o block-dmg.o
a541f297 307
85571bc7 308SOUND_HW = sb16.o
7372f88d 309AUDIODRV = audio.o noaudio.o wavaudio.o
fb065187
FB
310ifdef CONFIG_SDL
311AUDIODRV += sdlaudio.o
312endif
313ifdef CONFIG_OSS
314AUDIODRV += ossaudio.o
315endif
316
317pc.o: DEFINES := -DUSE_SB16 $(DEFINES)
85571bc7 318
fb065187 319ifdef CONFIG_ADLIB
85571bc7 320SOUND_HW += fmopl.o adlib.o
85571bc7
FB
321endif
322
102a52e4 323ifdef CONFIG_FMOD
85571bc7 324AUDIODRV += fmodaudio.o
102a52e4
FB
325audio.o fmodaudio.o: DEFINES := -I$(CONFIG_FMOD_INC) $(DEFINES)
326LIBS += $(CONFIG_FMOD_LIB)
85571bc7
FB
327endif
328
0b0babc6 329ifeq ($(TARGET_BASE_ARCH), i386)
a541f297 330# Hardware support
85571bc7
FB
331VL_OBJS+= ide.o ne2000.o pckbd.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)
332VL_OBJS+= fdc.o mc146818rtc.o serial.o i8259.o i8254.o pc.o
6508fe59 333VL_OBJS+= cirrus_vga.o mixeng.o apic.o parallel.o
67b915a5 334endif
728c9fd5 335ifeq ($(TARGET_ARCH), ppc)
85571bc7 336VL_OBJS+= ppc.o ide.o ne2000.o pckbd.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)
64201201 337VL_OBJS+= mc146818rtc.o serial.o i8259.o i8254.o fdc.o m48t59.o
85571bc7 338VL_OBJS+= ppc_prep.o ppc_chrp.o cuda.o adb.o openpic.o mixeng.o
a541f297 339endif
64b3ab24 340ifeq ($(TARGET_BASE_ARCH), sparc)
e80cfcfc 341VL_OBJS+= sun4m.o tcx.o lance.o iommu.o m48t08.o magic-load.o slavio_intctl.o slavio_timer.o slavio_serial.o fdc.o
e95c8d51 342endif
a541f297
FB
343ifdef CONFIG_GDBSTUB
344VL_OBJS+=gdbstub.o
728c9fd5 345endif
626df76a
FB
346ifdef CONFIG_SDL
347VL_OBJS+=sdl.o
de5eaa64 348endif
5b0753e0
FB
349ifdef CONFIG_COCOA
350VL_OBJS+=cocoa.o
351COCOA_LIBS=-F/System/Library/Frameworks -framework Cocoa
352endif
7c1f25b4
FB
353ifdef CONFIG_SLIRP
354DEFINES+=-I$(SRC_PATH)/slirp
355SLIRP_OBJS=cksum.o if.o ip_icmp.o ip_input.o ip_output.o \
356slirp.o mbuf.o misc.o sbuf.o socket.o tcp_input.o tcp_output.o \
c7f74643 357tcp_subr.o tcp_timer.o udp.o bootp.o debug.o tftp.o
7c1f25b4 358VL_OBJS+=$(addprefix slirp/, $(SLIRP_OBJS))
626df76a
FB
359endif
360
c321f673
FB
361VL_LDFLAGS=
362# specific flags are needed for non soft mmu emulator
c321f673
FB
363ifdef CONFIG_STATIC
364VL_LDFLAGS+=-static
365endif
de5eaa64
FB
366ifndef CONFIG_SOFTMMU
367VL_LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386-vl.ld
368endif
83fb7adf 369ifndef CONFIG_DARWIN
11d9f695
FB
370ifndef CONFIG_WIN32
371VL_LIBS=-lutil
372endif
83fb7adf 373endif
e3086fbf
FB
374ifdef TARGET_GPROF
375vl.o: CFLAGS+=-p
376VL_LDFLAGS+=-p
377endif
c321f673 378
1e43adfc 379$(QEMU_SYSTEM): $(VL_OBJS) libqemu.a
5b0753e0
FB
380 $(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(VL_LIBS)
381
382cocoa.o: cocoa.m
383 $(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
626df76a 384
3d11d0eb 385sdl.o: sdl.c keymaps.c sdl_keysym.h
626df76a
FB
386 $(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<
387
9f059eca
FB
388sdlaudio.o: sdlaudio.c
389 $(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<
390
626df76a 391depend: $(SRCS)
16e9b7de 392 $(CC) -MM $(CFLAGS) $(DEFINES) $^ 1>.depend
626df76a
FB
393
394# libqemu
395
396libqemu.a: $(LIBOBJS)
397 rm -f $@
398 $(AR) rcs $@ $(LIBOBJS)
399
1e43adfc 400translate.o: translate.c gen-op.h opc.h cpu.h
626df76a 401
1e43adfc 402translate-all.o: translate-all.c op.h opc.h cpu.h
626df76a 403
1e43adfc 404op.h: op.o $(DYNGEN)
626df76a
FB
405 $(DYNGEN) -o $@ $<
406
1e43adfc 407opc.h: op.o $(DYNGEN)
626df76a
FB
408 $(DYNGEN) -c -o $@ $<
409
1e43adfc 410gen-op.h: op.o $(DYNGEN)
626df76a
FB
411 $(DYNGEN) -g -o $@ $<
412
1e43adfc 413op.o: op.c
626df76a
FB
414 $(CC) $(OP_CFLAGS) $(DEFINES) -c -o $@ $<
415
1e43adfc 416helper.o: helper.c
626df76a
FB
417 $(CC) $(HELPER_CFLAGS) $(DEFINES) -c -o $@ $<
418
0b0babc6 419ifeq ($(TARGET_BASE_ARCH), i386)
664e0f19 420op.o: op.c opreg_template.h ops_template.h ops_template_mem.h ops_mem.h ops_sse.h
1e43adfc
FB
421endif
422
423ifeq ($(TARGET_ARCH), arm)
424op.o: op.c op_template.h
425endif
626df76a 426
64b3ab24 427ifeq ($(TARGET_BASE_ARCH), sparc)
e95c8d51 428op.o: op.c op_template.h op_mem.h
1e43adfc 429endif
626df76a 430
728c9fd5
FB
431ifeq ($(TARGET_ARCH), ppc)
432op.o: op.c op_template.h op_mem.h
433op_helper.o: op_helper_mem.h
434endif
435
85571bc7
FB
436mixeng.o: mixeng.c mixeng.h mixeng_template.h
437
626df76a
FB
438%.o: %.c
439 $(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
440
f72b519c
FB
441%.o: %.S
442 $(CC) $(DEFINES) -c -o $@ $<
443
626df76a 444clean:
7c1f25b4 445 rm -f *.o *.a *~ $(PROGS) gen-op.h opc.h op.h nwfpe/*.o slirp/*.o
1e43adfc
FB
446
447install: all
9b14bb04 448ifneq ($(PROGS),)
11d9f695 449 install -m 755 -s $(PROGS) "$(bindir)"
9b14bb04 450endif
626df76a
FB
451
452ifneq ($(wildcard .depend),)
453include .depend
454endif