Makefile.target 9.7 KB
Newer Older
B
bellard 已提交
1 2
include config.mak

B
bellard 已提交
3 4 5 6
TARGET_BASE_ARCH:=$(TARGET_ARCH)
ifeq ($(TARGET_ARCH), x86_64)
TARGET_BASE_ARCH:=i386
endif
B
bellard 已提交
7 8 9
ifeq ($(TARGET_ARCH), sparc64)
TARGET_BASE_ARCH:=sparc
endif
B
bellard 已提交
10
TARGET_PATH=$(SRC_PATH)/target-$(TARGET_BASE_ARCH)
B
bellard 已提交
11
VPATH=$(SRC_PATH):$(TARGET_PATH):$(SRC_PATH)/hw:$(SRC_PATH)/audio
B
bellard 已提交
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
B
bellard 已提交
17
CFLAGS=-Wall -O2 -g -fno-strict-aliasing
B
bellard 已提交
18
#CFLAGS+=-Werror
B
bellard 已提交
19 20 21
LDFLAGS=-g
LIBS=
HELPER_CFLAGS=$(CFLAGS)
B
bellard 已提交
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)
B
bellard 已提交
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

B
bellard 已提交
44
ifdef CONFIG_USER_ONLY
45
PROGS=$(QEMU_USER)
B
bellard 已提交
46
else
47
PROGS+=$(QEMU_SYSTEM)
B
bellard 已提交
48 49 50
ifndef CONFIG_SOFTMMU
CONFIG_STATIC=y
endif
B
update  
bellard 已提交
51
endif # !CONFIG_USER_ONLY
B
bellard 已提交
52 53 54 55 56 57 58 59 60

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)
61
OP_CFLAGS+= -falign-functions=0 -fno-gcse
B
bellard 已提交
62 63 64
else
OP_CFLAGS+= -malign-functions=0
endif
B
bellard 已提交
65

B
bellard 已提交
66
ifdef TARGET_GPROF
B
bellard 已提交
67 68 69 70 71 72
USE_I386_LD=y
endif
ifdef CONFIG_STATIC
USE_I386_LD=y
endif
ifdef USE_I386_LD
B
bellard 已提交
73 74 75 76 77 78 79 80 81
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

B
bellard 已提交
82
ifeq ($(ARCH),x86_64)
83
OP_CFLAGS=$(CFLAGS) -falign-functions=0
B
bellard 已提交
84
LDFLAGS+=-Wl,-T,$(SRC_PATH)/x86_64.ld
85 86
endif

B
bellard 已提交
87
ifeq ($(ARCH),ppc)
88
CFLAGS+= -D__powerpc__
B
bellard 已提交
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
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)
B
bellard 已提交
123
CFLAGS += -mno-sdata
B
bellard 已提交
124
OP_CFLAGS=$(CFLAGS)
B
bellard 已提交
125
LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld
B
bellard 已提交
126 127 128
endif

ifeq ($(ARCH),arm)
B
bellard 已提交
129
OP_CFLAGS=$(CFLAGS) -mno-sched-prolog -fno-omit-frame-pointer
B
bellard 已提交
130 131 132
LDFLAGS+=-Wl,-T,$(SRC_PATH)/arm.ld
endif

B
bellard 已提交
133 134 135 136 137
ifeq ($(ARCH),m68k)
OP_CFLAGS=$(CFLAGS) -fomit-frame-pointer
LDFLAGS+=-Wl,-T,m68k.ld
endif

B
bellard 已提交
138 139 140 141 142
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

143 144
ifeq ($(CONFIG_DARWIN),yes)
OP_CFLAGS+= -mdynamic-no-pic
B
bellard 已提交
145
LIBS+=-lmx
146 147
endif

B
bellard 已提交
148 149
#########################################################

B
bellard 已提交
150
DEFINES+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
B
bellard 已提交
151
LIBS+=-lm
B
bellard 已提交
152 153 154
ifndef CONFIG_USER_ONLY
LIBS+=-lz
endif
B
bellard 已提交
155
ifdef CONFIG_WIN32
156
LIBS+=-lwinmm -lws2_32 -liphlpapi
B
bellard 已提交
157
endif
B
bellard 已提交
158 159 160 161 162 163 164

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

B
bellard 已提交
165
OBJS= elfload.o main.o syscall.o mmap.o signal.o path.o osdep.o thunk.o 
B
bellard 已提交
166 167 168
ifeq ($(TARGET_ARCH), i386)
OBJS+= vm86.o
endif
B
bellard 已提交
169
ifeq ($(TARGET_ARCH), arm)
B
bellard 已提交
170
OBJS+=nwfpe/fpa11.o nwfpe/fpa11_cpdo.o \
B
bellard 已提交
171
nwfpe/fpa11_cpdt.o nwfpe/fpa11_cprt.o nwfpe/fpopcode.o nwfpe/single_cpdo.o \
172
 nwfpe/double_cpdo.o nwfpe/extended_cpdo.o arm-semi.o
B
bellard 已提交
173
endif
B
bellard 已提交
174 175 176 177
SRCS:= $(OBJS:.o=.c)
OBJS+= libqemu.a

# cpu emulator library
B
bellard 已提交
178
LIBOBJS=exec.o kqemu.o translate-op.o translate-all.o cpu-exec.o\
B
bellard 已提交
179
        translate.o op.o 
B
bellard 已提交
180 181 182 183 184 185
ifdef CONFIG_SOFTFLOAT
LIBOBJS+=fpu/softfloat.o
else
LIBOBJS+=fpu/softfloat-native.o
endif
DEFINES+=-I$(SRC_PATH)/fpu
B
bellard 已提交
186 187

ifeq ($(TARGET_ARCH), i386)
188
LIBOBJS+=helper.o helper2.o
B
bellard 已提交
189 190 191
ifeq ($(ARCH), i386)
LIBOBJS+=translate-copy.o
endif
B
bellard 已提交
192 193
endif

B
bellard 已提交
194 195 196 197
ifeq ($(TARGET_ARCH), x86_64)
LIBOBJS+=helper.o helper2.o
endif

198
ifeq ($(TARGET_ARCH), ppc)
B
update  
bellard 已提交
199
LIBOBJS+= op_helper.o helper.o
200 201
endif

B
bellard 已提交
202 203 204 205
ifeq ($(TARGET_ARCH), mips)
LIBOBJS+= op_helper.o helper.o
endif

B
bellard 已提交
206
ifeq ($(TARGET_BASE_ARCH), sparc)
207 208 209
LIBOBJS+= op_helper.o helper.o
endif

B
bellard 已提交
210 211 212 213
ifeq ($(TARGET_BASE_ARCH), arm)
LIBOBJS+= op_helper.o
endif

B
bellard 已提交
214 215 216
# NOTE: the disassembler code is only needed for debugging
LIBOBJS+=disas.o 
ifeq ($(findstring i386, $(TARGET_ARCH) $(ARCH)),i386)
217 218
USE_I386_DIS=y
endif
B
bellard 已提交
219
ifeq ($(findstring x86_64, $(TARGET_ARCH) $(ARCH)),x86_64)
220 221 222
USE_I386_DIS=y
endif
ifdef USE_I386_DIS
B
bellard 已提交
223 224 225 226 227 228 229 230
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
B
bellard 已提交
231 232 233
ifeq ($(findstring mips, $(TARGET_ARCH) $(ARCH)),mips)
LIBOBJS+=mips-dis.o
endif
B
bellard 已提交
234
ifeq ($(findstring sparc, $(TARGET_BASE_ARCH) $(ARCH)),sparc)
B
bellard 已提交
235 236 237 238 239 240 241 242 243
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
B
bellard 已提交
244 245 246
ifdef CONFIG_GDBSTUB
OBJS+=gdbstub.o
endif
B
bellard 已提交
247

248
all: $(PROGS)
B
bellard 已提交
249

250
$(QEMU_USER): $(OBJS)
B
bellard 已提交
251 252 253 254 255 256 257 258
	$(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
259
VL_OBJS=vl.o osdep.o block.o readline.o monitor.o pci.o console.o
260
VL_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
261

B
bellard 已提交
262
SOUND_HW = sb16.o
B
bellard 已提交
263
AUDIODRV = audio.o noaudio.o wavaudio.o
B
bellard 已提交
264 265 266 267 268 269 270 271
ifdef CONFIG_SDL
AUDIODRV += sdlaudio.o
endif
ifdef CONFIG_OSS
AUDIODRV += ossaudio.o
endif

pc.o: DEFINES := -DUSE_SB16 $(DEFINES)
B
bellard 已提交
272

B
bellard 已提交
273
ifdef CONFIG_ADLIB
B
bellard 已提交
274 275 276
SOUND_HW += fmopl.o adlib.o
endif

B
bellard 已提交
277
ifdef CONFIG_FMOD
B
bellard 已提交
278
AUDIODRV += fmodaudio.o
B
bellard 已提交
279 280
audio.o fmodaudio.o: DEFINES := -I$(CONFIG_FMOD_INC) $(DEFINES)
LIBS += $(CONFIG_FMOD_LIB)
B
bellard 已提交
281 282
endif

B
bellard 已提交
283
ifeq ($(TARGET_BASE_ARCH), i386)
284
# Hardware support
B
bellard 已提交
285 286
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
287
VL_OBJS+= cirrus_vga.o mixeng.o apic.o parallel.o
B
bellard 已提交
288
endif
B
update  
bellard 已提交
289
ifeq ($(TARGET_ARCH), ppc)
B
bellard 已提交
290
VL_OBJS+= ppc.o ide.o ne2000.o pckbd.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)
B
bellard 已提交
291
VL_OBJS+= mc146818rtc.o serial.o i8259.o i8254.o fdc.o m48t59.o
B
bellard 已提交
292
VL_OBJS+= ppc_prep.o ppc_chrp.o cuda.o adb.o openpic.o heathrow_pic.o mixeng.o
293
endif
B
bellard 已提交
294
ifeq ($(TARGET_ARCH), mips)
B
bellard 已提交
295 296
VL_OBJS+= mips_r4k.o dma.o vga.o serial.o ne2000.o i8259.o
#VL_OBJS+= #ide.o pckbd.o i8254.o fdc.o m48t59.o
B
bellard 已提交
297
endif
B
bellard 已提交
298
ifeq ($(TARGET_BASE_ARCH), sparc)
B
bellard 已提交
299 300 301 302 303
ifeq ($(TARGET_ARCH), sparc64)
VL_OBJS+= sun4u.o m48t08.o magic-load.o slavio_serial.o
else
VL_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
endif
304
endif
305 306
ifdef CONFIG_GDBSTUB
VL_OBJS+=gdbstub.o 
B
update  
bellard 已提交
307
endif
B
bellard 已提交
308 309
ifdef CONFIG_SDL
VL_OBJS+=sdl.o
B
bellard 已提交
310
endif
311 312 313 314
ifdef CONFIG_COCOA
VL_OBJS+=cocoa.o
COCOA_LIBS=-F/System/Library/Frameworks -framework Cocoa
endif
B
bellard 已提交
315 316 317 318
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 \
B
bellard 已提交
319
tcp_subr.o tcp_timer.o udp.o bootp.o debug.o tftp.o
B
bellard 已提交
320
VL_OBJS+=$(addprefix slirp/, $(SLIRP_OBJS))
B
bellard 已提交
321 322
endif

323 324 325 326 327
VL_LDFLAGS=
# specific flags are needed for non soft mmu emulator
ifdef CONFIG_STATIC
VL_LDFLAGS+=-static
endif
B
bellard 已提交
328 329 330
ifndef CONFIG_SOFTMMU
VL_LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386-vl.ld 
endif
331
ifndef CONFIG_DARWIN
B
bellard 已提交
332 333 334
ifndef CONFIG_WIN32
VL_LIBS=-lutil
endif
335
endif
B
bellard 已提交
336 337 338 339
ifdef TARGET_GPROF
vl.o: CFLAGS+=-p
VL_LDFLAGS+=-p
endif
340

B
bellard 已提交
341 342 343 344
ifeq ($(ARCH),ia64)
VL_LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld
endif

345
$(QEMU_SYSTEM): $(VL_OBJS) libqemu.a
346 347 348 349
	$(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(VL_LIBS)

cocoa.o: cocoa.m
	$(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
B
bellard 已提交
350

351
sdl.o: sdl.c keymaps.c sdl_keysym.h
B
bellard 已提交
352 353
	$(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<

B
bellard 已提交
354 355 356
sdlaudio.o: sdlaudio.c
	$(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<

B
bellard 已提交
357
depend: $(SRCS)
B
bellard 已提交
358
	$(CC) -MM $(CFLAGS) $(DEFINES) $^ 1>.depend
B
bellard 已提交
359 360 361 362 363 364 365

# libqemu 

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

366
translate.o: translate.c gen-op.h opc.h cpu.h
B
bellard 已提交
367

B
bellard 已提交
368 369 370
translate-all.o: translate-all.c opc.h cpu.h

translate-op.o: translate-all.c op.h opc.h cpu.h
B
bellard 已提交
371

372
op.h: op.o $(DYNGEN)
B
bellard 已提交
373 374
	$(DYNGEN) -o $@ $<

375
opc.h: op.o $(DYNGEN)
B
bellard 已提交
376 377
	$(DYNGEN) -c -o $@ $<

378
gen-op.h: op.o $(DYNGEN)
B
bellard 已提交
379 380
	$(DYNGEN) -g -o $@ $<

381
op.o: op.c
B
bellard 已提交
382 383
	$(CC) $(OP_CFLAGS) $(DEFINES) -c -o $@ $<

384
helper.o: helper.c
B
bellard 已提交
385 386
	$(CC) $(HELPER_CFLAGS) $(DEFINES) -c -o $@ $<

B
bellard 已提交
387
ifeq ($(TARGET_BASE_ARCH), i386)
B
bellard 已提交
388
op.o: op.c opreg_template.h ops_template.h ops_template_mem.h ops_mem.h ops_sse.h
389 390 391 392 393
endif

ifeq ($(TARGET_ARCH), arm)
op.o: op.c op_template.h
endif
B
bellard 已提交
394

B
bellard 已提交
395
ifeq ($(TARGET_BASE_ARCH), sparc)
B
bellard 已提交
396 397
op.o: op.c op_template.h op_mem.h fop_template.h fbranch_template.h
magic_load.o: elf_op.h
398
endif
B
bellard 已提交
399

B
update  
bellard 已提交
400 401 402
ifeq ($(TARGET_ARCH), ppc)
op.o: op.c op_template.h op_mem.h
op_helper.o: op_helper_mem.h
403
translate.o: translate.c translate_init.c
B
update  
bellard 已提交
404 405
endif

B
bellard 已提交
406 407 408 409 410
ifeq ($(TARGET_ARCH), mips)
op.o: op.c op_template.c op_mem.c
op_helper.o: op_helper_mem.c
endif

B
bellard 已提交
411 412
mixeng.o: mixeng.c mixeng.h mixeng_template.h

B
bellard 已提交
413 414 415
%.o: %.c
	$(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<

B
bellard 已提交
416 417 418
%.o: %.S
	$(CC) $(DEFINES) -c -o $@ $<

B
bellard 已提交
419
clean:
B
bellard 已提交
420
	rm -f *.o  *.a *~ $(PROGS) gen-op.h opc.h op.h nwfpe/*.o slirp/*.o fpu/*.o
421 422

install: all 
B
bellard 已提交
423
ifneq ($(PROGS),)
B
bellard 已提交
424
	install -m 755 -s $(PROGS) "$(bindir)"
B
bellard 已提交
425
endif
B
bellard 已提交
426 427 428 429

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