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

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

B
bellard 已提交
28
ifdef CONFIG_USER_ONLY
29
PROGS=$(QEMU_USER)
B
bellard 已提交
30 31
else
ifeq ($(TARGET_ARCH), i386)
32 33 34

ifeq ($(ARCH), i386)
PROGS+=$(QEMU_SYSTEM)
B
bellard 已提交
35 36 37
ifndef CONFIG_SOFTMMU
CONFIG_STATIC=y
endif
B
bellard 已提交
38 39
else
# the system emulator using soft mmu is portable
40
ifdef CONFIG_SOFTMMU
B
bellard 已提交
41 42
PROGS+=$(QEMU_SYSTEM)
endif
B
bellard 已提交
43
endif # ARCH != i386
44

B
bellard 已提交
45
endif # TARGET_ARCH = i386
B
update  
bellard 已提交
46 47 48 49 50 51 52 53 54 55

ifeq ($(TARGET_ARCH), ppc)

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

ifeq ($(ARCH), i386)
ifdef CONFIG_SOFTMMU
PROGS+=$(QEMU_SYSTEM)
B
bellard 已提交
56
endif
B
update  
bellard 已提交
57 58
endif # ARCH = i386

B
bellard 已提交
59 60 61 62 63 64
ifeq ($(ARCH), amd64)
ifdef CONFIG_SOFTMMU
PROGS+=$(QEMU_SYSTEM)
endif
endif # ARCH = amd64

B
update  
bellard 已提交
65
endif # TARGET_ARCH = ppc
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85

ifeq ($(TARGET_ARCH), sparc)

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

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

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

endif # TARGET_ARCH = sparc
B
update  
bellard 已提交
86
endif # !CONFIG_USER_ONLY
B
bellard 已提交
87 88 89 90 91 92 93 94 95

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)
96
OP_CFLAGS+= -falign-functions=0 -fno-gcse
B
bellard 已提交
97 98 99
else
OP_CFLAGS+= -malign-functions=0
endif
B
bellard 已提交
100

B
bellard 已提交
101
ifdef TARGET_GPROF
B
bellard 已提交
102 103 104 105 106 107
USE_I386_LD=y
endif
ifdef CONFIG_STATIC
USE_I386_LD=y
endif
ifdef USE_I386_LD
B
bellard 已提交
108 109 110 111 112 113 114 115 116
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

117 118 119 120 121
ifeq ($(ARCH),amd64)
OP_CFLAGS=$(CFLAGS) -falign-functions=0
LDFLAGS+=-Wl,-T,$(SRC_PATH)/amd64.ld
endif

B
bellard 已提交
122
ifeq ($(ARCH),ppc)
123
CFLAGS+= -D__powerpc__
B
bellard 已提交
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
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 已提交
166 167 168 169 170
ifeq ($(ARCH),m68k)
OP_CFLAGS=$(CFLAGS) -fomit-frame-pointer
LDFLAGS+=-Wl,-T,m68k.ld
endif

B
bellard 已提交
171 172 173 174 175
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

176 177 178 179
ifeq ($(CONFIG_DARWIN),yes)
OP_CFLAGS+= -mdynamic-no-pic
endif

B
bellard 已提交
180 181
#########################################################

B
bellard 已提交
182
DEFINES+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
B
bellard 已提交
183
LIBS+=-lm
B
bellard 已提交
184 185 186
ifndef CONFIG_USER_ONLY
LIBS+=-lz
endif
B
bellard 已提交
187
ifdef CONFIG_WIN32
188
LIBS+=-lwinmm -lws2_32 -liphlpapi
B
bellard 已提交
189
endif
B
bellard 已提交
190 191 192 193 194 195 196

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

B
bellard 已提交
197
OBJS= elfload.o main.o syscall.o mmap.o signal.o path.o osdep.o thunk.o 
B
bellard 已提交
198 199 200
ifeq ($(TARGET_ARCH), i386)
OBJS+= vm86.o
endif
B
bellard 已提交
201 202 203 204 205
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 已提交
206 207 208 209
SRCS:= $(OBJS:.o=.c)
OBJS+= libqemu.a

# cpu emulator library
210
LIBOBJS=exec.o translate-all.o cpu-exec.o\
211
        translate.o op.o
B
bellard 已提交
212 213

ifeq ($(TARGET_ARCH), i386)
214
LIBOBJS+=helper.o helper2.o
B
bellard 已提交
215 216 217
ifeq ($(ARCH), i386)
LIBOBJS+=translate-copy.o
endif
B
bellard 已提交
218 219
endif

220
ifeq ($(TARGET_ARCH), ppc)
B
update  
bellard 已提交
221
LIBOBJS+= op_helper.o helper.o
222 223
endif

224 225 226 227
ifeq ($(TARGET_ARCH), sparc)
LIBOBJS+= op_helper.o helper.o
endif

B
bellard 已提交
228 229 230
# NOTE: the disassembler code is only needed for debugging
LIBOBJS+=disas.o 
ifeq ($(findstring i386, $(TARGET_ARCH) $(ARCH)),i386)
231 232 233 234 235 236
USE_I386_DIS=y
endif
ifeq ($(findstring amd64, $(TARGET_ARCH) $(ARCH)),amd64)
USE_I386_DIS=y
endif
ifdef USE_I386_DIS
B
bellard 已提交
237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
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

256
all: $(PROGS)
B
bellard 已提交
257

258
$(QEMU_USER): $(OBJS)
B
bellard 已提交
259 260 261 262 263 264 265 266
	$(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 已提交
267
VL_OBJS=vl.o osdep.o block.o readline.o monitor.o pci.o console.o 
268
VL_OBJS+=block-cow.o block-qcow.o aes.o block-vmdk.o block-cloop.o block-dmg.o
269

B
bellard 已提交
270
SOUND_HW = sb16.o
B
bellard 已提交
271
AUDIODRV = audio.o noaudio.o wavaudio.o
B
bellard 已提交
272 273 274 275 276 277 278 279
ifdef CONFIG_SDL
AUDIODRV += sdlaudio.o
endif
ifdef CONFIG_OSS
AUDIODRV += ossaudio.o
endif

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

B
bellard 已提交
281
ifdef CONFIG_ADLIB
B
bellard 已提交
282 283 284
SOUND_HW += fmopl.o adlib.o
endif

B
bellard 已提交
285
ifdef CONFIG_FMOD
B
bellard 已提交
286
AUDIODRV += fmodaudio.o
B
bellard 已提交
287 288
audio.o fmodaudio.o: DEFINES := -I$(CONFIG_FMOD_INC) $(DEFINES)
LIBS += $(CONFIG_FMOD_LIB)
B
bellard 已提交
289 290
endif

291 292
ifeq ($(TARGET_ARCH), i386)
# Hardware support
B
bellard 已提交
293 294 295
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
VL_OBJS+= cirrus_vga.o mixeng.o
B
bellard 已提交
296
endif
B
update  
bellard 已提交
297
ifeq ($(TARGET_ARCH), ppc)
B
bellard 已提交
298
VL_OBJS+= ppc.o ide.o ne2000.o pckbd.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)
B
bellard 已提交
299
VL_OBJS+= mc146818rtc.o serial.o i8259.o i8254.o fdc.o m48t59.o
B
bellard 已提交
300
VL_OBJS+= ppc_prep.o ppc_chrp.o cuda.o adb.o openpic.o mixeng.o
301
endif
302
ifeq ($(TARGET_ARCH), sparc)
B
bellard 已提交
303
VL_OBJS+= sun4m.o tcx.o lance.o iommu.o sched.o m48t08.o magic-load.o timer.o
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
B
bellard 已提交
311 312 313 314
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 已提交
315
tcp_subr.o tcp_timer.o udp.o bootp.o debug.o tftp.o
B
bellard 已提交
316
VL_OBJS+=$(addprefix slirp/, $(SLIRP_OBJS))
B
bellard 已提交
317 318
endif

319 320 321 322 323
VL_LDFLAGS=
# specific flags are needed for non soft mmu emulator
ifdef CONFIG_STATIC
VL_LDFLAGS+=-static
endif
B
bellard 已提交
324 325 326
ifndef CONFIG_SOFTMMU
VL_LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386-vl.ld 
endif
327
ifndef CONFIG_DARWIN
B
bellard 已提交
328 329 330
ifndef CONFIG_WIN32
VL_LIBS=-lutil
endif
331
endif
332

333
$(QEMU_SYSTEM): $(VL_OBJS) libqemu.a
B
bellard 已提交
334
	$(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(VL_LIBS)
B
bellard 已提交
335

336
sdl.o: sdl.c keymaps.c sdl_keysym.h
B
bellard 已提交
337 338
	$(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<

B
bellard 已提交
339 340 341
sdlaudio.o: sdlaudio.c
	$(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<

B
bellard 已提交
342
depend: $(SRCS)
B
bellard 已提交
343
	$(CC) -MM $(CFLAGS) $(DEFINES) $^ 1>.depend
B
bellard 已提交
344 345 346 347 348 349 350

# libqemu 

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

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

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

355
op.h: op.o $(DYNGEN)
B
bellard 已提交
356 357
	$(DYNGEN) -o $@ $<

358
opc.h: op.o $(DYNGEN)
B
bellard 已提交
359 360
	$(DYNGEN) -c -o $@ $<

361
gen-op.h: op.o $(DYNGEN)
B
bellard 已提交
362 363
	$(DYNGEN) -g -o $@ $<

364
op.o: op.c
B
bellard 已提交
365 366
	$(CC) $(OP_CFLAGS) $(DEFINES) -c -o $@ $<

367
helper.o: helper.c
B
bellard 已提交
368 369
	$(CC) $(HELPER_CFLAGS) $(DEFINES) -c -o $@ $<

370 371 372 373 374 375 376
ifeq ($(TARGET_ARCH), i386)
op.o: op.c opreg_template.h ops_template.h ops_template_mem.h ops_mem.h
endif

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

378
ifeq ($(TARGET_ARCH), sparc)
379
op.o: op.c op_template.h op_mem.h
380
endif
B
bellard 已提交
381

B
update  
bellard 已提交
382 383 384 385 386
ifeq ($(TARGET_ARCH), ppc)
op.o: op.c op_template.h op_mem.h
op_helper.o: op_helper_mem.h
endif

B
bellard 已提交
387 388
mixeng.o: mixeng.c mixeng.h mixeng_template.h

B
bellard 已提交
389 390 391
%.o: %.c
	$(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<

B
bellard 已提交
392 393 394
%.o: %.S
	$(CC) $(DEFINES) -c -o $@ $<

B
bellard 已提交
395
clean:
B
bellard 已提交
396
	rm -f *.o  *.a *~ $(PROGS) gen-op.h opc.h op.h nwfpe/*.o slirp/*.o
397 398

install: all 
B
bellard 已提交
399
ifneq ($(PROGS),)
B
bellard 已提交
400
	install -m 755 -s $(PROGS) "$(bindir)"
B
bellard 已提交
401
endif
B
bellard 已提交
402 403 404 405

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