Makefile.target 10.1 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
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
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
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
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
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
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)
187
CFLAGS += -mno-sdata
bellard's avatar
bellard committed
188
OP_CFLAGS=$(CFLAGS)
189
LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld
bellard's avatar
bellard committed
190 191 192
endif

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

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

bellard's avatar
bellard committed
202 203 204 205 206
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

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

bellard's avatar
bellard committed
212 213
#########################################################

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

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

bellard's avatar
bellard committed
229
OBJS= elfload.o main.o syscall.o mmap.o signal.o path.o osdep.o thunk.o 
bellard's avatar
bellard committed
230 231 232
ifeq ($(TARGET_ARCH), i386)
OBJS+= vm86.o
endif
bellard's avatar
bellard committed
233
ifeq ($(TARGET_ARCH), arm)
bellard's avatar
bellard committed
234
OBJS+=nwfpe/fpa11.o nwfpe/fpa11_cpdo.o \
bellard's avatar
bellard committed
235
nwfpe/fpa11_cpdt.o nwfpe/fpa11_cprt.o nwfpe/fpopcode.o nwfpe/single_cpdo.o \
236
 nwfpe/double_cpdo.o nwfpe/extended_cpdo.o arm-semi.o
bellard's avatar
bellard committed
237
endif
bellard's avatar
bellard committed
238 239 240 241
SRCS:= $(OBJS:.o=.c)
OBJS+= libqemu.a

# cpu emulator library
bellard's avatar
bellard committed
242
LIBOBJS=exec.o kqemu.o translate-op.o translate-all.o cpu-exec.o\
bellard's avatar
bellard committed
243
        translate.o op.o 
bellard's avatar
bellard committed
244 245 246 247 248 249
ifdef CONFIG_SOFTFLOAT
LIBOBJS+=fpu/softfloat.o
else
LIBOBJS+=fpu/softfloat-native.o
endif
DEFINES+=-I$(SRC_PATH)/fpu
bellard's avatar
bellard committed
250 251

ifeq ($(TARGET_ARCH), i386)
252
LIBOBJS+=helper.o helper2.o
bellard's avatar
bellard committed
253 254 255
ifeq ($(ARCH), i386)
LIBOBJS+=translate-copy.o
endif
bellard's avatar
bellard committed
256 257
endif

bellard's avatar
bellard committed
258 259 260 261
ifeq ($(TARGET_ARCH), x86_64)
LIBOBJS+=helper.o helper2.o
endif

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

bellard's avatar
bellard committed
266
ifeq ($(TARGET_BASE_ARCH), sparc)
267 268 269
LIBOBJS+= op_helper.o helper.o
endif

bellard's avatar
bellard committed
270 271 272 273
ifeq ($(TARGET_BASE_ARCH), arm)
LIBOBJS+= op_helper.o
endif

bellard's avatar
bellard committed
274 275 276
# NOTE: the disassembler code is only needed for debugging
LIBOBJS+=disas.o 
ifeq ($(findstring i386, $(TARGET_ARCH) $(ARCH)),i386)
277 278
USE_I386_DIS=y
endif
bellard's avatar
bellard committed
279
ifeq ($(findstring x86_64, $(TARGET_ARCH) $(ARCH)),x86_64)
280 281 282
USE_I386_DIS=y
endif
ifdef USE_I386_DIS
bellard's avatar
bellard committed
283 284 285 286 287 288 289 290
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
291
ifeq ($(findstring sparc, $(TARGET_BASE_ARCH) $(ARCH)),sparc)
bellard's avatar
bellard committed
292 293 294 295 296 297 298 299 300
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
301 302 303
ifdef CONFIG_GDBSTUB
OBJS+=gdbstub.o
endif
bellard's avatar
bellard committed
304

305
all: $(PROGS)
bellard's avatar
bellard committed
306

307
$(QEMU_USER): $(OBJS)
bellard's avatar
bellard committed
308 309 310 311 312 313 314 315
	$(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
316
VL_OBJS=vl.o osdep.o block.o readline.o monitor.o pci.o console.o
317
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
318

bellard's avatar
bellard committed
319
SOUND_HW = sb16.o
bellard's avatar
bellard committed
320
AUDIODRV = audio.o noaudio.o wavaudio.o
321 322 323 324 325 326 327 328
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
329

330
ifdef CONFIG_ADLIB
bellard's avatar
bellard committed
331 332 333
SOUND_HW += fmopl.o adlib.o
endif

bellard's avatar
bellard committed
334
ifdef CONFIG_FMOD
bellard's avatar
bellard committed
335
AUDIODRV += fmodaudio.o
bellard's avatar
bellard committed
336 337
audio.o fmodaudio.o: DEFINES := -I$(CONFIG_FMOD_INC) $(DEFINES)
LIBS += $(CONFIG_FMOD_LIB)
bellard's avatar
bellard committed
338 339
endif

bellard's avatar
bellard committed
340
ifeq ($(TARGET_BASE_ARCH), i386)
341
# Hardware support
bellard's avatar
bellard committed
342 343
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
344
VL_OBJS+= cirrus_vga.o mixeng.o apic.o parallel.o
bellard's avatar
bellard committed
345
endif
bellard's avatar
bellard committed
346
ifeq ($(TARGET_ARCH), ppc)
bellard's avatar
bellard committed
347
VL_OBJS+= ppc.o ide.o ne2000.o pckbd.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)
bellard's avatar
bellard committed
348
VL_OBJS+= mc146818rtc.o serial.o i8259.o i8254.o fdc.o m48t59.o
bellard's avatar
bellard committed
349
VL_OBJS+= ppc_prep.o ppc_chrp.o cuda.o adb.o openpic.o heathrow_pic.o mixeng.o
350
endif
bellard's avatar
bellard committed
351
ifeq ($(TARGET_BASE_ARCH), sparc)
bellard's avatar
bellard committed
352
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
353
endif
354 355
ifdef CONFIG_GDBSTUB
VL_OBJS+=gdbstub.o 
bellard's avatar
bellard committed
356
endif
bellard's avatar
bellard committed
357 358
ifdef CONFIG_SDL
VL_OBJS+=sdl.o
bellard's avatar
bellard committed
359
endif
360 361 362 363
ifdef CONFIG_COCOA
VL_OBJS+=cocoa.o
COCOA_LIBS=-F/System/Library/Frameworks -framework Cocoa
endif
bellard's avatar
bellard committed
364 365 366 367
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
368
tcp_subr.o tcp_timer.o udp.o bootp.o debug.o tftp.o
bellard's avatar
bellard committed
369
VL_OBJS+=$(addprefix slirp/, $(SLIRP_OBJS))
bellard's avatar
bellard committed
370 371
endif

372 373 374 375 376
VL_LDFLAGS=
# specific flags are needed for non soft mmu emulator
ifdef CONFIG_STATIC
VL_LDFLAGS+=-static
endif
bellard's avatar
bellard committed
377 378 379
ifndef CONFIG_SOFTMMU
VL_LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386-vl.ld 
endif
380
ifndef CONFIG_DARWIN
bellard's avatar
bellard committed
381 382 383
ifndef CONFIG_WIN32
VL_LIBS=-lutil
endif
384
endif
bellard's avatar
bellard committed
385 386 387 388
ifdef TARGET_GPROF
vl.o: CFLAGS+=-p
VL_LDFLAGS+=-p
endif
389

390 391 392 393
ifeq ($(ARCH),ia64)
VL_LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld
endif

394
$(QEMU_SYSTEM): $(VL_OBJS) libqemu.a
395 396 397 398
	$(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
399

400
sdl.o: sdl.c keymaps.c sdl_keysym.h
bellard's avatar
bellard committed
401 402
	$(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<

bellard's avatar
bellard committed
403 404 405
sdlaudio.o: sdlaudio.c
	$(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<

bellard's avatar
bellard committed
406
depend: $(SRCS)
bellard's avatar
bellard committed
407
	$(CC) -MM $(CFLAGS) $(DEFINES) $^ 1>.depend
bellard's avatar
bellard committed
408 409 410 411 412 413 414

# libqemu 

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

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

bellard's avatar
bellard committed
417 418 419
translate-all.o: translate-all.c opc.h cpu.h

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

421
op.h: op.o $(DYNGEN)
bellard's avatar
bellard committed
422 423
	$(DYNGEN) -o $@ $<

424
opc.h: op.o $(DYNGEN)
bellard's avatar
bellard committed
425 426
	$(DYNGEN) -c -o $@ $<

427
gen-op.h: op.o $(DYNGEN)
bellard's avatar
bellard committed
428 429
	$(DYNGEN) -g -o $@ $<

430
op.o: op.c
bellard's avatar
bellard committed
431 432
	$(CC) $(OP_CFLAGS) $(DEFINES) -c -o $@ $<

433
helper.o: helper.c
bellard's avatar
bellard committed
434 435
	$(CC) $(HELPER_CFLAGS) $(DEFINES) -c -o $@ $<

bellard's avatar
bellard committed
436
ifeq ($(TARGET_BASE_ARCH), i386)
bellard's avatar
bellard committed
437
op.o: op.c opreg_template.h ops_template.h ops_template_mem.h ops_mem.h ops_sse.h
438 439 440 441 442
endif

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

bellard's avatar
bellard committed
444
ifeq ($(TARGET_BASE_ARCH), sparc)
445
op.o: op.c op_template.h op_mem.h
446
endif
bellard's avatar
bellard committed
447

bellard's avatar
bellard committed
448 449 450 451 452
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
453 454
mixeng.o: mixeng.c mixeng.h mixeng_template.h

bellard's avatar
bellard committed
455 456 457
%.o: %.c
	$(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<

bellard's avatar
bellard committed
458 459 460
%.o: %.S
	$(CC) $(DEFINES) -c -o $@ $<

bellard's avatar
bellard committed
461
clean:
bellard's avatar
bellard committed
462
	rm -f *.o  *.a *~ $(PROGS) gen-op.h opc.h op.h nwfpe/*.o slirp/*.o fpu/*.o
463 464

install: all 
bellard's avatar
bellard committed
465
ifneq ($(PROGS),)
bellard's avatar
bellard committed
466
	install -m 755 -s $(PROGS) "$(bindir)"
bellard's avatar
bellard committed
467
endif
bellard's avatar
bellard committed
468 469 470 471

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