]> git.proxmox.com Git - qemu.git/blame - Makefile.target
windows support for kqemu (Filip Navara)
[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
FB
235nwfpe/fpa11_cpdt.o nwfpe/fpa11_cprt.o nwfpe/fpopcode.o nwfpe/single_cpdo.o \
236 nwfpe/double_cpdo.o nwfpe/extended_cpdo.o
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
301
1e43adfc 302all: $(PROGS)
626df76a 303
1e43adfc 304$(QEMU_USER): $(OBJS)
626df76a
FB
305 $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
306ifeq ($(ARCH),alpha)
307# Mark as 32 bit binary, i. e. it will be mapped into the low 31 bit of
308# the address space (31 bit so sign extending doesn't matter)
309 echo -ne '\001\000\000\000' | dd of=qemu bs=1 seek=48 count=4 conv=notrunc
310endif
311
312# must use static linking to avoid leaving stuff in virtual address space
b932caba 313VL_OBJS=vl.o osdep.o block.o readline.o monitor.o pci.o console.o
585d0ed9 314VL_OBJS+=block-cow.o block-qcow.o aes.o block-vmdk.o block-cloop.o block-dmg.o
a541f297 315
85571bc7 316SOUND_HW = sb16.o
7372f88d 317AUDIODRV = audio.o noaudio.o wavaudio.o
fb065187
FB
318ifdef CONFIG_SDL
319AUDIODRV += sdlaudio.o
320endif
321ifdef CONFIG_OSS
322AUDIODRV += ossaudio.o
323endif
324
325pc.o: DEFINES := -DUSE_SB16 $(DEFINES)
85571bc7 326
fb065187 327ifdef CONFIG_ADLIB
85571bc7 328SOUND_HW += fmopl.o adlib.o
85571bc7
FB
329endif
330
102a52e4 331ifdef CONFIG_FMOD
85571bc7 332AUDIODRV += fmodaudio.o
102a52e4
FB
333audio.o fmodaudio.o: DEFINES := -I$(CONFIG_FMOD_INC) $(DEFINES)
334LIBS += $(CONFIG_FMOD_LIB)
85571bc7
FB
335endif
336
0b0babc6 337ifeq ($(TARGET_BASE_ARCH), i386)
a541f297 338# Hardware support
85571bc7
FB
339VL_OBJS+= ide.o ne2000.o pckbd.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)
340VL_OBJS+= fdc.o mc146818rtc.o serial.o i8259.o i8254.o pc.o
6508fe59 341VL_OBJS+= cirrus_vga.o mixeng.o apic.o parallel.o
67b915a5 342endif
728c9fd5 343ifeq ($(TARGET_ARCH), ppc)
85571bc7 344VL_OBJS+= ppc.o ide.o ne2000.o pckbd.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)
64201201 345VL_OBJS+= mc146818rtc.o serial.o i8259.o i8254.o fdc.o m48t59.o
85571bc7 346VL_OBJS+= ppc_prep.o ppc_chrp.o cuda.o adb.o openpic.o mixeng.o
a541f297 347endif
64b3ab24 348ifeq ($(TARGET_BASE_ARCH), sparc)
6f7e9aec 349VL_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 esp.o
e95c8d51 350endif
a541f297
FB
351ifdef CONFIG_GDBSTUB
352VL_OBJS+=gdbstub.o
728c9fd5 353endif
626df76a
FB
354ifdef CONFIG_SDL
355VL_OBJS+=sdl.o
de5eaa64 356endif
5b0753e0
FB
357ifdef CONFIG_COCOA
358VL_OBJS+=cocoa.o
359COCOA_LIBS=-F/System/Library/Frameworks -framework Cocoa
360endif
7c1f25b4
FB
361ifdef CONFIG_SLIRP
362DEFINES+=-I$(SRC_PATH)/slirp
363SLIRP_OBJS=cksum.o if.o ip_icmp.o ip_input.o ip_output.o \
364slirp.o mbuf.o misc.o sbuf.o socket.o tcp_input.o tcp_output.o \
c7f74643 365tcp_subr.o tcp_timer.o udp.o bootp.o debug.o tftp.o
7c1f25b4 366VL_OBJS+=$(addprefix slirp/, $(SLIRP_OBJS))
626df76a
FB
367endif
368
c321f673
FB
369VL_LDFLAGS=
370# specific flags are needed for non soft mmu emulator
c321f673
FB
371ifdef CONFIG_STATIC
372VL_LDFLAGS+=-static
373endif
de5eaa64
FB
374ifndef CONFIG_SOFTMMU
375VL_LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386-vl.ld
376endif
83fb7adf 377ifndef CONFIG_DARWIN
11d9f695
FB
378ifndef CONFIG_WIN32
379VL_LIBS=-lutil
380endif
83fb7adf 381endif
e3086fbf
FB
382ifdef TARGET_GPROF
383vl.o: CFLAGS+=-p
384VL_LDFLAGS+=-p
385endif
c321f673 386
b8076a74
FB
387ifeq ($(ARCH),ia64)
388VL_LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld
389endif
390
1e43adfc 391$(QEMU_SYSTEM): $(VL_OBJS) libqemu.a
5b0753e0
FB
392 $(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(VL_LIBS)
393
394cocoa.o: cocoa.m
395 $(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
626df76a 396
3d11d0eb 397sdl.o: sdl.c keymaps.c sdl_keysym.h
626df76a
FB
398 $(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<
399
9f059eca
FB
400sdlaudio.o: sdlaudio.c
401 $(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<
402
626df76a 403depend: $(SRCS)
16e9b7de 404 $(CC) -MM $(CFLAGS) $(DEFINES) $^ 1>.depend
626df76a
FB
405
406# libqemu
407
408libqemu.a: $(LIBOBJS)
409 rm -f $@
410 $(AR) rcs $@ $(LIBOBJS)
411
1e43adfc 412translate.o: translate.c gen-op.h opc.h cpu.h
626df76a 413
158142c2
FB
414translate-all.o: translate-all.c opc.h cpu.h
415
416translate-op.o: translate-all.c op.h opc.h cpu.h
626df76a 417
1e43adfc 418op.h: op.o $(DYNGEN)
626df76a
FB
419 $(DYNGEN) -o $@ $<
420
1e43adfc 421opc.h: op.o $(DYNGEN)
626df76a
FB
422 $(DYNGEN) -c -o $@ $<
423
1e43adfc 424gen-op.h: op.o $(DYNGEN)
626df76a
FB
425 $(DYNGEN) -g -o $@ $<
426
1e43adfc 427op.o: op.c
626df76a
FB
428 $(CC) $(OP_CFLAGS) $(DEFINES) -c -o $@ $<
429
1e43adfc 430helper.o: helper.c
626df76a
FB
431 $(CC) $(HELPER_CFLAGS) $(DEFINES) -c -o $@ $<
432
0b0babc6 433ifeq ($(TARGET_BASE_ARCH), i386)
664e0f19 434op.o: op.c opreg_template.h ops_template.h ops_template_mem.h ops_mem.h ops_sse.h
1e43adfc
FB
435endif
436
437ifeq ($(TARGET_ARCH), arm)
438op.o: op.c op_template.h
439endif
626df76a 440
64b3ab24 441ifeq ($(TARGET_BASE_ARCH), sparc)
e95c8d51 442op.o: op.c op_template.h op_mem.h
1e43adfc 443endif
626df76a 444
728c9fd5
FB
445ifeq ($(TARGET_ARCH), ppc)
446op.o: op.c op_template.h op_mem.h
447op_helper.o: op_helper_mem.h
448endif
449
85571bc7
FB
450mixeng.o: mixeng.c mixeng.h mixeng_template.h
451
626df76a
FB
452%.o: %.c
453 $(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
454
f72b519c
FB
455%.o: %.S
456 $(CC) $(DEFINES) -c -o $@ $<
457
626df76a 458clean:
7c1f25b4 459 rm -f *.o *.a *~ $(PROGS) gen-op.h opc.h op.h nwfpe/*.o slirp/*.o
1e43adfc
FB
460
461install: all
9b14bb04 462ifneq ($(PROGS),)
11d9f695 463 install -m 755 -s $(PROGS) "$(bindir)"
9b14bb04 464endif
626df76a
FB
465
466ifneq ($(wildcard .depend),)
467include .depend
468endif