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

B
bellard 已提交
3 4 5 6 7
TARGET_BASE_ARCH:=$(TARGET_ARCH)
ifeq ($(TARGET_ARCH), x86_64)
TARGET_BASE_ARCH:=i386
endif
TARGET_PATH=$(SRC_PATH)/target-$(TARGET_BASE_ARCH)
B
bellard 已提交
8
VPATH=$(SRC_PATH):$(TARGET_PATH):$(SRC_PATH)/hw:$(SRC_PATH)/audio
B
bellard 已提交
9 10 11 12 13
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 已提交
14
CFLAGS=-Wall -O2 -g -fno-strict-aliasing
B
bellard 已提交
15
#CFLAGS+=-Werror
B
bellard 已提交
16 17 18
LDFLAGS=-g
LIBS=
HELPER_CFLAGS=$(CFLAGS)
B
bellard 已提交
19
DYNGEN=../dyngen$(EXESUF)
20
# user emulator name
21 22 23 24 25 26 27 28 29
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
30 31
# system emulator name
ifdef CONFIG_SOFTMMU
32
ifeq ($(TARGET_ARCH), i386)
B
bellard 已提交
33
QEMU_SYSTEM=qemu$(EXESUF)
34
else
35 36 37
QEMU_SYSTEM=qemu-system-$(TARGET_ARCH)$(EXESUF)
endif
else
38
QEMU_SYSTEM=qemu-fast
39 40
endif

B
bellard 已提交
41
ifdef CONFIG_USER_ONLY
42
PROGS=$(QEMU_USER)
B
bellard 已提交
43 44
else
ifeq ($(TARGET_ARCH), i386)
45 46 47

ifeq ($(ARCH), i386)
PROGS+=$(QEMU_SYSTEM)
B
bellard 已提交
48 49 50
ifndef CONFIG_SOFTMMU
CONFIG_STATIC=y
endif
B
bellard 已提交
51 52
else
# the system emulator using soft mmu is portable
53
ifdef CONFIG_SOFTMMU
B
bellard 已提交
54 55
PROGS+=$(QEMU_SYSTEM)
endif
B
bellard 已提交
56
endif # ARCH != i386
57

B
bellard 已提交
58
endif # TARGET_ARCH = i386
B
update  
bellard 已提交
59

B
bellard 已提交
60 61 62 63 64 65
ifeq ($(TARGET_ARCH), x86_64)
ifdef CONFIG_SOFTMMU
PROGS+=$(QEMU_SYSTEM)
endif
endif # TARGET_ARCH = x86_64

B
update  
bellard 已提交
66 67 68 69 70 71 72 73 74
ifeq ($(TARGET_ARCH), ppc)

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

ifeq ($(ARCH), i386)
ifdef CONFIG_SOFTMMU
PROGS+=$(QEMU_SYSTEM)
B
bellard 已提交
75
endif
B
update  
bellard 已提交
76 77
endif # ARCH = i386

B
bellard 已提交
78
ifeq ($(ARCH), x86_64)
B
bellard 已提交
79 80 81
ifdef CONFIG_SOFTMMU
PROGS+=$(QEMU_SYSTEM)
endif
B
bellard 已提交
82
endif # ARCH = x86_64
B
bellard 已提交
83

B
update  
bellard 已提交
84
endif # TARGET_ARCH = ppc
85 86 87 88 89 90 91 92 93 94 95 96 97

ifeq ($(TARGET_ARCH), sparc)

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

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

B
bellard 已提交
98
ifeq ($(ARCH), x86_64)
99 100 101
ifdef CONFIG_SOFTMMU
PROGS+=$(QEMU_SYSTEM)
endif
B
bellard 已提交
102
endif # ARCH = x86_64
103 104

endif # TARGET_ARCH = sparc
B
update  
bellard 已提交
105
endif # !CONFIG_USER_ONLY
B
bellard 已提交
106 107 108 109 110 111 112 113 114

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)
115
OP_CFLAGS+= -falign-functions=0 -fno-gcse
B
bellard 已提交
116 117 118
else
OP_CFLAGS+= -malign-functions=0
endif
B
bellard 已提交
119

B
bellard 已提交
120
ifdef TARGET_GPROF
B
bellard 已提交
121 122 123 124 125 126
USE_I386_LD=y
endif
ifdef CONFIG_STATIC
USE_I386_LD=y
endif
ifdef USE_I386_LD
B
bellard 已提交
127 128 129 130 131 132 133 134 135
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 已提交
136
ifeq ($(ARCH),x86_64)
137
OP_CFLAGS=$(CFLAGS) -falign-functions=0
B
bellard 已提交
138
LDFLAGS+=-Wl,-T,$(SRC_PATH)/x86_64.ld
139 140
endif

B
bellard 已提交
141
ifeq ($(ARCH),ppc)
142
CFLAGS+= -D__powerpc__
B
bellard 已提交
143 144 145 146 147 148 149 150 151 152 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
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)
OP_CFLAGS=$(CFLAGS) -mno-sched-prolog
LDFLAGS+=-Wl,-T,$(SRC_PATH)/arm.ld
endif

B
bellard 已提交
185 186 187 188 189
ifeq ($(ARCH),m68k)
OP_CFLAGS=$(CFLAGS) -fomit-frame-pointer
LDFLAGS+=-Wl,-T,m68k.ld
endif

B
bellard 已提交
190 191 192 193 194
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

195 196
ifeq ($(CONFIG_DARWIN),yes)
OP_CFLAGS+= -mdynamic-no-pic
B
bellard 已提交
197
LIBS+=-lmx
198 199
endif

B
bellard 已提交
200 201
#########################################################

B
bellard 已提交
202
DEFINES+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
B
bellard 已提交
203
LIBS+=-lm
B
bellard 已提交
204 205 206
ifndef CONFIG_USER_ONLY
LIBS+=-lz
endif
B
bellard 已提交
207
ifdef CONFIG_WIN32
208
LIBS+=-lwinmm -lws2_32 -liphlpapi
B
bellard 已提交
209
endif
B
bellard 已提交
210 211 212 213 214 215 216

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

B
bellard 已提交
217
OBJS= elfload.o main.o syscall.o mmap.o signal.o path.o osdep.o thunk.o 
B
bellard 已提交
218 219 220
ifeq ($(TARGET_ARCH), i386)
OBJS+= vm86.o
endif
B
bellard 已提交
221 222 223 224 225
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
B
bellard 已提交
226 227 228 229
SRCS:= $(OBJS:.o=.c)
OBJS+= libqemu.a

# cpu emulator library
230
LIBOBJS=exec.o translate-all.o cpu-exec.o\
231
        translate.o op.o
B
bellard 已提交
232 233

ifeq ($(TARGET_ARCH), i386)
234
LIBOBJS+=helper.o helper2.o
B
bellard 已提交
235 236 237
ifeq ($(ARCH), i386)
LIBOBJS+=translate-copy.o
endif
B
bellard 已提交
238 239
endif

B
bellard 已提交
240 241 242 243
ifeq ($(TARGET_ARCH), x86_64)
LIBOBJS+=helper.o helper2.o
endif

244
ifeq ($(TARGET_ARCH), ppc)
B
update  
bellard 已提交
245
LIBOBJS+= op_helper.o helper.o
246 247
endif

248 249 250 251
ifeq ($(TARGET_ARCH), sparc)
LIBOBJS+= op_helper.o helper.o
endif

B
bellard 已提交
252 253 254
# NOTE: the disassembler code is only needed for debugging
LIBOBJS+=disas.o 
ifeq ($(findstring i386, $(TARGET_ARCH) $(ARCH)),i386)
255 256
USE_I386_DIS=y
endif
B
bellard 已提交
257
ifeq ($(findstring x86_64, $(TARGET_ARCH) $(ARCH)),x86_64)
258 259 260
USE_I386_DIS=y
endif
ifdef USE_I386_DIS
B
bellard 已提交
261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279
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
ifeq ($(findstring sparc, $(TARGET_ARCH) $(ARCH)),sparc)
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

280
all: $(PROGS)
B
bellard 已提交
281

282
$(QEMU_USER): $(OBJS)
B
bellard 已提交
283 284 285 286 287 288 289 290
	$(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
B
bellard 已提交
291
VL_OBJS=vl.o osdep.o block.o readline.o monitor.o pci.o console.o 
292
VL_OBJS+=block-cow.o block-qcow.o aes.o block-vmdk.o block-cloop.o block-dmg.o
293

B
bellard 已提交
294
SOUND_HW = sb16.o
B
bellard 已提交
295
AUDIODRV = audio.o noaudio.o wavaudio.o
B
bellard 已提交
296 297 298 299 300 301 302 303
ifdef CONFIG_SDL
AUDIODRV += sdlaudio.o
endif
ifdef CONFIG_OSS
AUDIODRV += ossaudio.o
endif

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

B
bellard 已提交
305
ifdef CONFIG_ADLIB
B
bellard 已提交
306 307 308
SOUND_HW += fmopl.o adlib.o
endif

B
bellard 已提交
309
ifdef CONFIG_FMOD
B
bellard 已提交
310
AUDIODRV += fmodaudio.o
B
bellard 已提交
311 312
audio.o fmodaudio.o: DEFINES := -I$(CONFIG_FMOD_INC) $(DEFINES)
LIBS += $(CONFIG_FMOD_LIB)
B
bellard 已提交
313 314
endif

B
bellard 已提交
315
ifeq ($(TARGET_BASE_ARCH), i386)
316
# Hardware support
B
bellard 已提交
317 318
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
B
bellard 已提交
319
VL_OBJS+= cirrus_vga.o mixeng.o apic.o
B
bellard 已提交
320
endif
B
update  
bellard 已提交
321
ifeq ($(TARGET_ARCH), ppc)
B
bellard 已提交
322
VL_OBJS+= ppc.o ide.o ne2000.o pckbd.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)
B
bellard 已提交
323
VL_OBJS+= mc146818rtc.o serial.o i8259.o i8254.o fdc.o m48t59.o
B
bellard 已提交
324
VL_OBJS+= ppc_prep.o ppc_chrp.o cuda.o adb.o openpic.o mixeng.o
325
endif
326
ifeq ($(TARGET_ARCH), sparc)
B
bellard 已提交
327
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
328
endif
329 330
ifdef CONFIG_GDBSTUB
VL_OBJS+=gdbstub.o 
B
update  
bellard 已提交
331
endif
B
bellard 已提交
332 333
ifdef CONFIG_SDL
VL_OBJS+=sdl.o
B
bellard 已提交
334
endif
B
bellard 已提交
335 336 337 338
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 已提交
339
tcp_subr.o tcp_timer.o udp.o bootp.o debug.o tftp.o
B
bellard 已提交
340
VL_OBJS+=$(addprefix slirp/, $(SLIRP_OBJS))
B
bellard 已提交
341 342
endif

343 344 345 346 347
VL_LDFLAGS=
# specific flags are needed for non soft mmu emulator
ifdef CONFIG_STATIC
VL_LDFLAGS+=-static
endif
B
bellard 已提交
348 349 350
ifndef CONFIG_SOFTMMU
VL_LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386-vl.ld 
endif
351
ifndef CONFIG_DARWIN
B
bellard 已提交
352 353 354
ifndef CONFIG_WIN32
VL_LIBS=-lutil
endif
355
endif
356

357
$(QEMU_SYSTEM): $(VL_OBJS) libqemu.a
B
bellard 已提交
358
	$(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(VL_LIBS)
B
bellard 已提交
359

360
sdl.o: sdl.c keymaps.c sdl_keysym.h
B
bellard 已提交
361 362
	$(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<

B
bellard 已提交
363 364 365
sdlaudio.o: sdlaudio.c
	$(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<

B
bellard 已提交
366
depend: $(SRCS)
B
bellard 已提交
367
	$(CC) -MM $(CFLAGS) $(DEFINES) $^ 1>.depend
B
bellard 已提交
368 369 370 371 372 373 374

# libqemu 

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

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

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

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

382
opc.h: op.o $(DYNGEN)
B
bellard 已提交
383 384
	$(DYNGEN) -c -o $@ $<

385
gen-op.h: op.o $(DYNGEN)
B
bellard 已提交
386 387
	$(DYNGEN) -g -o $@ $<

388
op.o: op.c
B
bellard 已提交
389 390
	$(CC) $(OP_CFLAGS) $(DEFINES) -c -o $@ $<

391
helper.o: helper.c
B
bellard 已提交
392 393
	$(CC) $(HELPER_CFLAGS) $(DEFINES) -c -o $@ $<

B
bellard 已提交
394
ifeq ($(TARGET_BASE_ARCH), i386)
B
bellard 已提交
395
op.o: op.c opreg_template.h ops_template.h ops_template_mem.h ops_mem.h ops_sse.h
396 397 398 399 400
endif

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

402
ifeq ($(TARGET_ARCH), sparc)
403
op.o: op.c op_template.h op_mem.h
404
endif
B
bellard 已提交
405

B
update  
bellard 已提交
406 407 408 409 410
ifeq ($(TARGET_ARCH), ppc)
op.o: op.c op_template.h op_mem.h
op_helper.o: op_helper_mem.h
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
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