Makefile.target 9.68 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
bellard's avatar
bellard committed
7
8
9
ifeq ($(TARGET_ARCH), sparc64)
TARGET_BASE_ARCH:=sparc
endif
bellard's avatar
bellard committed
10
TARGET_PATH=$(SRC_PATH)/target-$(TARGET_BASE_ARCH)
bellard's avatar
bellard committed
11
VPATH=$(SRC_PATH):$(TARGET_PATH):$(SRC_PATH)/hw:$(SRC_PATH)/audio
bellard's avatar
bellard committed
12
13
14
15
16
DEFINES=-I. -I$(TARGET_PATH) -I$(SRC_PATH)
ifdef CONFIG_USER_ONLY
VPATH+=:$(SRC_PATH)/linux-user
DEFINES+=-I$(SRC_PATH)/linux-user -I$(SRC_PATH)/linux-user/$(TARGET_ARCH)
endif
bellard's avatar
bellard committed
17
CFLAGS=-Wall -O2 -g -fno-strict-aliasing
bellard's avatar
bellard committed
18
#CFLAGS+=-Werror
bellard's avatar
bellard committed
19
20
21
LDFLAGS=-g
LIBS=
HELPER_CFLAGS=$(CFLAGS)
bellard's avatar
bellard committed
22
DYNGEN=../dyngen$(EXESUF)
23
# user emulator name
24
25
26
27
28
29
30
31
32
ifeq ($(TARGET_ARCH),arm)
  ifeq ($(TARGET_WORDS_BIGENDIAN),yes)
    QEMU_USER=qemu-armeb
  else
    QEMU_USER=qemu-arm
  endif
else
  QEMU_USER=qemu-$(TARGET_ARCH)
endif
33
34
# system emulator name
ifdef CONFIG_SOFTMMU
35
ifeq ($(TARGET_ARCH), i386)
bellard's avatar
bellard committed
36
QEMU_SYSTEM=qemu$(EXESUF)
37
else
38
39
40
QEMU_SYSTEM=qemu-system-$(TARGET_ARCH)$(EXESUF)
endif
else
41
QEMU_SYSTEM=qemu-fast
42
43
endif

bellard's avatar
bellard committed
44
ifdef CONFIG_USER_ONLY
45
PROGS=$(QEMU_USER)
bellard's avatar
bellard committed
46
47
else
ifeq ($(TARGET_ARCH), i386)
48
49
50

ifeq ($(ARCH), i386)
PROGS+=$(QEMU_SYSTEM)
bellard's avatar
bellard committed
51
52
53
ifndef CONFIG_SOFTMMU
CONFIG_STATIC=y
endif
bellard's avatar
bellard committed
54
55
else
# the system emulator using soft mmu is portable
56
ifdef CONFIG_SOFTMMU
bellard's avatar
bellard committed
57
58
PROGS+=$(QEMU_SYSTEM)
endif
bellard's avatar
bellard committed
59
endif # ARCH != i386
60

bellard's avatar
bellard committed
61
endif # TARGET_ARCH = i386
bellard's avatar
update    
bellard committed
62

bellard's avatar
bellard committed
63
64
65
66
67
68
ifeq ($(TARGET_ARCH), x86_64)
ifdef CONFIG_SOFTMMU
PROGS+=$(QEMU_SYSTEM)
endif
endif # TARGET_ARCH = x86_64

bellard's avatar
update    
bellard committed
69
70
71
72
73
74
75
76
77
ifeq ($(TARGET_ARCH), ppc)

ifeq ($(ARCH), ppc)
PROGS+=$(QEMU_SYSTEM)
endif

ifeq ($(ARCH), i386)
ifdef CONFIG_SOFTMMU
PROGS+=$(QEMU_SYSTEM)
bellard's avatar
bellard committed
78
endif
bellard's avatar
update    
bellard committed
79
80
endif # ARCH = i386

bellard's avatar
bellard committed
81
ifeq ($(ARCH), x86_64)
bellard's avatar
bellard committed
82
83
84
ifdef CONFIG_SOFTMMU
PROGS+=$(QEMU_SYSTEM)
endif
bellard's avatar
bellard committed
85
endif # ARCH = x86_64
bellard's avatar
bellard committed
86

bellard's avatar
update    
bellard committed
87
endif # TARGET_ARCH = ppc
88
89
90
91
92
93
94
95
96
97
98
99
100

ifeq ($(TARGET_ARCH), sparc)

ifeq ($(ARCH), ppc)
PROGS+=$(QEMU_SYSTEM)
endif

ifeq ($(ARCH), i386)
ifdef CONFIG_SOFTMMU
PROGS+=$(QEMU_SYSTEM)
endif
endif # ARCH = i386

bellard's avatar
bellard committed
101
ifeq ($(ARCH), x86_64)
102
103
104
ifdef CONFIG_SOFTMMU
PROGS+=$(QEMU_SYSTEM)
endif
bellard's avatar
bellard committed
105
endif # ARCH = x86_64
106
107

endif # TARGET_ARCH = sparc
bellard's avatar
bellard committed
108
109
110
111
112
113
114

ifeq ($(TARGET_ARCH), sparc64)
ifdef CONFIG_SOFTMMU
PROGS+=$(QEMU_SYSTEM)
endif
endif # TARGET_ARCH = sparc64

bellard's avatar
update    
bellard committed
115
endif # !CONFIG_USER_ONLY
bellard's avatar
bellard committed
116
117
118
119
120
121
122
123
124

ifdef CONFIG_STATIC
LDFLAGS+=-static
endif

ifeq ($(ARCH),i386)
CFLAGS+=-fomit-frame-pointer
OP_CFLAGS=$(CFLAGS) -mpreferred-stack-boundary=2
ifeq ($(HAVE_GCC3_OPTIONS),yes)
125
OP_CFLAGS+= -falign-functions=0 -fno-gcse
bellard's avatar
bellard committed
126
127
128
else
OP_CFLAGS+= -malign-functions=0
endif
bellard's avatar
bellard committed
129

bellard's avatar
bellard committed
130
ifdef TARGET_GPROF
bellard's avatar
bellard committed
131
132
133
134
135
136
USE_I386_LD=y
endif
ifdef CONFIG_STATIC
USE_I386_LD=y
endif
ifdef USE_I386_LD
bellard's avatar
bellard committed
137
138
139
140
141
142
143
144
145
LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386.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

bellard's avatar
bellard committed
146
ifeq ($(ARCH),x86_64)
147
OP_CFLAGS=$(CFLAGS) -falign-functions=0
bellard's avatar
bellard committed
148
LDFLAGS+=-Wl,-T,$(SRC_PATH)/x86_64.ld
149
150
endif

bellard's avatar
bellard committed
151
ifeq ($(ARCH),ppc)
152
CFLAGS+= -D__powerpc__
bellard's avatar
bellard committed
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
OP_CFLAGS=$(CFLAGS)
LDFLAGS+=-Wl,-T,$(SRC_PATH)/ppc.ld
endif

ifeq ($(ARCH),s390)
OP_CFLAGS=$(CFLAGS)
LDFLAGS+=-Wl,-T,$(SRC_PATH)/s390.ld
endif

ifeq ($(ARCH),sparc)
CFLAGS+=-m32 -ffixed-g1 -ffixed-g2 -ffixed-g3 -ffixed-g6
LDFLAGS+=-m32
OP_CFLAGS=$(CFLAGS) -fno-delayed-branch -ffixed-i0
HELPER_CFLAGS=$(CFLAGS) -ffixed-i0 -mflat
# -static is used to avoid g1/g3 usage by the dynamic linker
LDFLAGS+=-Wl,-T,$(SRC_PATH)/sparc.ld -static
endif

ifeq ($(ARCH),sparc64)
CFLAGS+=-m64 -ffixed-g1 -ffixed-g2 -ffixed-g3 -ffixed-g6
LDFLAGS+=-m64
OP_CFLAGS=$(CFLAGS) -fno-delayed-branch -ffixed-i0
endif

ifeq ($(ARCH),alpha)
# -msmall-data is not used because we want two-instruction relocations
# for the constant constructions
OP_CFLAGS=-Wall -O2 -g
# Ensure there's only a single GP
CFLAGS += -msmall-data
LDFLAGS+=-Wl,-T,$(SRC_PATH)/alpha.ld
endif

ifeq ($(ARCH),ia64)
OP_CFLAGS=$(CFLAGS)
endif

ifeq ($(ARCH),arm)
191
OP_CFLAGS=$(CFLAGS) -mno-sched-prolog -fno-omit-frame-pointer
bellard's avatar
bellard committed
192
193
194
LDFLAGS+=-Wl,-T,$(SRC_PATH)/arm.ld
endif

bellard's avatar
bellard committed
195
196
197
198
199
ifeq ($(ARCH),m68k)
OP_CFLAGS=$(CFLAGS) -fomit-frame-pointer
LDFLAGS+=-Wl,-T,m68k.ld
endif

bellard's avatar
bellard committed
200
201
202
203
204
ifeq ($(HAVE_GCC3_OPTIONS),yes)
# very important to generate a return at the end of every operation
OP_CFLAGS+=-fno-reorder-blocks -fno-optimize-sibling-calls
endif

205
206
ifeq ($(CONFIG_DARWIN),yes)
OP_CFLAGS+= -mdynamic-no-pic
bellard's avatar
bellard committed
207
LIBS+=-lmx
208
209
endif

bellard's avatar
bellard committed
210
211
#########################################################

bellard's avatar
bellard committed
212
DEFINES+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
bellard's avatar
bellard committed
213
LIBS+=-lm
bellard's avatar
bellard committed
214
215
216
ifndef CONFIG_USER_ONLY
LIBS+=-lz
endif
bellard's avatar
bellard committed
217
ifdef CONFIG_WIN32
218
LIBS+=-lwinmm -lws2_32 -liphlpapi
bellard's avatar
bellard committed
219
endif
bellard's avatar
bellard committed
220
221
222
223
224
225
226

# profiling code
ifdef TARGET_GPROF
LDFLAGS+=-p
main.o: CFLAGS+=-p
endif

bellard's avatar
bellard committed
227
OBJS= elfload.o main.o syscall.o mmap.o signal.o path.o osdep.o thunk.o 
bellard's avatar
bellard committed
228
229
230
ifeq ($(TARGET_ARCH), i386)
OBJS+= vm86.o
endif
bellard's avatar
bellard committed
231
232
233
234
235
ifeq ($(TARGET_ARCH), arm)
OBJS+=nwfpe/softfloat.o 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
endif
bellard's avatar
bellard committed
236
237
238
239
SRCS:= $(OBJS:.o=.c)
OBJS+= libqemu.a

# cpu emulator library
bellard's avatar
bellard committed
240
241
LIBOBJS=exec.o kqemu.o translate-all.o cpu-exec.o\
        translate.o op.o 
bellard's avatar
bellard committed
242
243

ifeq ($(TARGET_ARCH), i386)
244
LIBOBJS+=helper.o helper2.o
bellard's avatar
bellard committed
245
246
247
ifeq ($(ARCH), i386)
LIBOBJS+=translate-copy.o
endif
bellard's avatar
bellard committed
248
249
endif

bellard's avatar
bellard committed
250
251
252
253
ifeq ($(TARGET_ARCH), x86_64)
LIBOBJS+=helper.o helper2.o
endif

254
ifeq ($(TARGET_ARCH), ppc)
bellard's avatar
update    
bellard committed
255
LIBOBJS+= op_helper.o helper.o
256
257
endif

bellard's avatar
bellard committed
258
ifeq ($(TARGET_BASE_ARCH), sparc)
259
260
261
LIBOBJS+= op_helper.o helper.o
endif

bellard's avatar
bellard committed
262
263
264
265
ifeq ($(TARGET_BASE_ARCH), arm)
LIBOBJS+= op_helper.o
endif

bellard's avatar
bellard committed
266
267
268
# NOTE: the disassembler code is only needed for debugging
LIBOBJS+=disas.o 
ifeq ($(findstring i386, $(TARGET_ARCH) $(ARCH)),i386)
269
270
USE_I386_DIS=y
endif
bellard's avatar
bellard committed
271
ifeq ($(findstring x86_64, $(TARGET_ARCH) $(ARCH)),x86_64)
272
273
274
USE_I386_DIS=y
endif
ifdef USE_I386_DIS
bellard's avatar
bellard committed
275
276
277
278
279
280
281
282
LIBOBJS+=i386-dis.o
endif
ifeq ($(findstring alpha, $(TARGET_ARCH) $(ARCH)),alpha)
LIBOBJS+=alpha-dis.o
endif
ifeq ($(findstring ppc, $(TARGET_ARCH) $(ARCH)),ppc)
LIBOBJS+=ppc-dis.o
endif
bellard's avatar
bellard committed
283
ifeq ($(findstring sparc, $(TARGET_BASE_ARCH) $(ARCH)),sparc)
bellard's avatar
bellard committed
284
285
286
287
288
289
290
291
292
293
LIBOBJS+=sparc-dis.o
endif
ifeq ($(findstring arm, $(TARGET_ARCH) $(ARCH)),arm)
LIBOBJS+=arm-dis.o
endif

ifeq ($(ARCH),ia64)
OBJS += ia64-syscall.o
endif

294
all: $(PROGS)
bellard's avatar
bellard committed
295

296
$(QEMU_USER): $(OBJS)
bellard's avatar
bellard committed
297
298
299
300
301
302
303
304
	$(CC) $(LDFLAGS) -o $@ $^  $(LIBS)
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

# must use static linking to avoid leaving stuff in virtual address space
bellard's avatar
bellard committed
305
VL_OBJS=vl.o osdep.o block.o readline.o monitor.o pci.o console.o 
306
VL_OBJS+=block-cow.o block-qcow.o aes.o block-vmdk.o block-cloop.o block-dmg.o
307

bellard's avatar
bellard committed
308
SOUND_HW = sb16.o
bellard's avatar
bellard committed
309
AUDIODRV = audio.o noaudio.o wavaudio.o
310
311
312
313
314
315
316
317
ifdef CONFIG_SDL
AUDIODRV += sdlaudio.o
endif
ifdef CONFIG_OSS
AUDIODRV += ossaudio.o
endif

pc.o: DEFINES := -DUSE_SB16 $(DEFINES)
bellard's avatar
bellard committed
318

319
ifdef CONFIG_ADLIB
bellard's avatar
bellard committed
320
321
322
SOUND_HW += fmopl.o adlib.o
endif

bellard's avatar
bellard committed
323
ifdef CONFIG_FMOD
bellard's avatar
bellard committed
324
AUDIODRV += fmodaudio.o
bellard's avatar
bellard committed
325
326
audio.o fmodaudio.o: DEFINES := -I$(CONFIG_FMOD_INC) $(DEFINES)
LIBS += $(CONFIG_FMOD_LIB)
bellard's avatar
bellard committed
327
328
endif

bellard's avatar
bellard committed
329
ifeq ($(TARGET_BASE_ARCH), i386)
330
# Hardware support
bellard's avatar
bellard committed
331
332
VL_OBJS+= ide.o ne2000.o pckbd.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)
VL_OBJS+= fdc.o mc146818rtc.o serial.o i8259.o i8254.o pc.o
333
VL_OBJS+= cirrus_vga.o mixeng.o apic.o parallel.o
bellard's avatar
bellard committed
334
endif
bellard's avatar
update    
bellard committed
335
ifeq ($(TARGET_ARCH), ppc)
bellard's avatar
bellard committed
336
VL_OBJS+= ppc.o ide.o ne2000.o pckbd.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)
bellard's avatar
bellard committed
337
VL_OBJS+= mc146818rtc.o serial.o i8259.o i8254.o fdc.o m48t59.o
bellard's avatar
bellard committed
338
VL_OBJS+= ppc_prep.o ppc_chrp.o cuda.o adb.o openpic.o mixeng.o
339
endif
bellard's avatar
bellard committed
340
ifeq ($(TARGET_BASE_ARCH), sparc)
bellard's avatar
bellard committed
341
VL_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
342
endif
343
344
ifdef CONFIG_GDBSTUB
VL_OBJS+=gdbstub.o 
bellard's avatar
update    
bellard committed
345
endif
bellard's avatar
bellard committed
346
347
ifdef CONFIG_SDL
VL_OBJS+=sdl.o
bellard's avatar
bellard committed
348
endif
349
350
351
352
ifdef CONFIG_COCOA
VL_OBJS+=cocoa.o
COCOA_LIBS=-F/System/Library/Frameworks -framework Cocoa
endif
bellard's avatar
bellard committed
353
354
355
356
ifdef CONFIG_SLIRP
DEFINES+=-I$(SRC_PATH)/slirp
SLIRP_OBJS=cksum.o if.o ip_icmp.o ip_input.o ip_output.o \
slirp.o mbuf.o misc.o sbuf.o socket.o tcp_input.o tcp_output.o \
bellard's avatar
bellard committed
357
tcp_subr.o tcp_timer.o udp.o bootp.o debug.o tftp.o
bellard's avatar
bellard committed
358
VL_OBJS+=$(addprefix slirp/, $(SLIRP_OBJS))
bellard's avatar
bellard committed
359
360
endif

361
362
363
364
365
VL_LDFLAGS=
# specific flags are needed for non soft mmu emulator
ifdef CONFIG_STATIC
VL_LDFLAGS+=-static
endif
bellard's avatar
bellard committed
366
367
368
ifndef CONFIG_SOFTMMU
VL_LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386-vl.ld 
endif
369
ifndef CONFIG_DARWIN
bellard's avatar
bellard committed
370
371
372
ifndef CONFIG_WIN32
VL_LIBS=-lutil
endif
373
endif
bellard's avatar
bellard committed
374
375
376
377
ifdef TARGET_GPROF
vl.o: CFLAGS+=-p
VL_LDFLAGS+=-p
endif
378

379
$(QEMU_SYSTEM): $(VL_OBJS) libqemu.a
380
381
382
383
	$(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(VL_LIBS)

cocoa.o: cocoa.m
	$(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
bellard's avatar
bellard committed
384

385
sdl.o: sdl.c keymaps.c sdl_keysym.h
bellard's avatar
bellard committed
386
387
	$(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<

bellard's avatar
bellard committed
388
389
390
sdlaudio.o: sdlaudio.c
	$(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<

bellard's avatar
bellard committed
391
depend: $(SRCS)
bellard's avatar
bellard committed
392
	$(CC) -MM $(CFLAGS) $(DEFINES) $^ 1>.depend
bellard's avatar
bellard committed
393
394
395
396
397
398
399

# libqemu 

libqemu.a: $(LIBOBJS)
	rm -f $@
	$(AR) rcs $@ $(LIBOBJS)

400
translate.o: translate.c gen-op.h opc.h cpu.h
bellard's avatar
bellard committed
401

402
translate-all.o: translate-all.c op.h opc.h cpu.h
bellard's avatar
bellard committed
403

404
op.h: op.o $(DYNGEN)
bellard's avatar
bellard committed
405
406
	$(DYNGEN) -o $@ $<

407
opc.h: op.o $(DYNGEN)
bellard's avatar
bellard committed
408
409
	$(DYNGEN) -c -o $@ $<

410
gen-op.h: op.o $(DYNGEN)
bellard's avatar
bellard committed
411
412
	$(DYNGEN) -g -o $@ $<

413
op.o: op.c
bellard's avatar
bellard committed
414
415
	$(CC) $(OP_CFLAGS) $(DEFINES) -c -o $@ $<

416
helper.o: helper.c
bellard's avatar
bellard committed
417
418
	$(CC) $(HELPER_CFLAGS) $(DEFINES) -c -o $@ $<

bellard's avatar
bellard committed
419
ifeq ($(TARGET_BASE_ARCH), i386)
bellard's avatar
bellard committed
420
op.o: op.c opreg_template.h ops_template.h ops_template_mem.h ops_mem.h ops_sse.h
421
422
423
424
425
endif

ifeq ($(TARGET_ARCH), arm)
op.o: op.c op_template.h
endif
bellard's avatar
bellard committed
426

bellard's avatar
bellard committed
427
ifeq ($(TARGET_BASE_ARCH), sparc)
428
op.o: op.c op_template.h op_mem.h
429
endif
bellard's avatar
bellard committed
430

bellard's avatar
update    
bellard committed
431
432
433
434
435
ifeq ($(TARGET_ARCH), ppc)
op.o: op.c op_template.h op_mem.h
op_helper.o: op_helper_mem.h
endif

bellard's avatar
bellard committed
436
437
mixeng.o: mixeng.c mixeng.h mixeng_template.h

bellard's avatar
bellard committed
438
439
440
%.o: %.c
	$(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<

bellard's avatar
bellard committed
441
442
443
%.o: %.S
	$(CC) $(DEFINES) -c -o $@ $<

bellard's avatar
bellard committed
444
clean:
bellard's avatar
bellard committed
445
	rm -f *.o  *.a *~ $(PROGS) gen-op.h opc.h op.h nwfpe/*.o slirp/*.o
446
447

install: all 
bellard's avatar
bellard committed
448
ifneq ($(PROGS),)
bellard's avatar
bellard committed
449
	install -m 755 -s $(PROGS) "$(bindir)"
bellard's avatar
bellard committed
450
endif
bellard's avatar
bellard committed
451
452
453
454

ifneq ($(wildcard .depend),)
include .depend
endif