Makefile.target 8.1 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
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 
B
bellard 已提交
268
VL_OBJS+=block-cow.o block-qcow.o aes.o block-vmdk.o block-cloop.o
269 270 271 272

ifeq ($(TARGET_ARCH), i386)
# Hardware support
VL_OBJS+= ide.o ne2000.o pckbd.o vga.o sb16.o dma.o oss.o
B
bellard 已提交
273 274
VL_OBJS+= fdc.o mc146818rtc.o serial.o i8259.o i8254.o pc.o 
VL_OBJS+= cirrus_vga.o
B
bellard 已提交
275
endif
B
update  
bellard 已提交
276
ifeq ($(TARGET_ARCH), ppc)
B
bellard 已提交
277
VL_OBJS+= ppc.o ide.o ne2000.o pckbd.o vga.o sb16.o dma.o oss.o
B
bellard 已提交
278
VL_OBJS+= mc146818rtc.o serial.o i8259.o i8254.o fdc.o m48t59.o
B
bellard 已提交
279
VL_OBJS+= ppc_prep.o ppc_chrp.o cuda.o adb.o openpic.o
280
endif
281
ifeq ($(TARGET_ARCH), sparc)
B
bellard 已提交
282
VL_OBJS+= sun4m.o tcx.o lance.o iommu.o sched.o m48t08.o magic-load.o timer.o
283
endif
284 285
ifdef CONFIG_GDBSTUB
VL_OBJS+=gdbstub.o 
B
update  
bellard 已提交
286
endif
B
bellard 已提交
287 288
ifdef CONFIG_SDL
VL_OBJS+=sdl.o
B
bellard 已提交
289
endif
B
bellard 已提交
290 291 292 293
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 已提交
294
tcp_subr.o tcp_timer.o udp.o bootp.o debug.o tftp.o
B
bellard 已提交
295
VL_OBJS+=$(addprefix slirp/, $(SLIRP_OBJS))
B
bellard 已提交
296 297
endif

298 299 300 301 302
VL_LDFLAGS=
# specific flags are needed for non soft mmu emulator
ifdef CONFIG_STATIC
VL_LDFLAGS+=-static
endif
B
bellard 已提交
303 304 305
ifndef CONFIG_SOFTMMU
VL_LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386-vl.ld 
endif
306
ifndef CONFIG_DARWIN
B
bellard 已提交
307 308 309
ifndef CONFIG_WIN32
VL_LIBS=-lutil
endif
310
endif
311

312
$(QEMU_SYSTEM): $(VL_OBJS) libqemu.a
B
bellard 已提交
313
	$(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(VL_LIBS)
B
bellard 已提交
314 315 316 317 318

sdl.o: sdl.c
	$(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<

depend: $(SRCS)
B
bellard 已提交
319
	$(CC) -MM $(CFLAGS) $(DEFINES) $^ 1>.depend
B
bellard 已提交
320 321 322 323 324 325 326

# libqemu 

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

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

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

331
op.h: op.o $(DYNGEN)
B
bellard 已提交
332 333
	$(DYNGEN) -o $@ $<

334
opc.h: op.o $(DYNGEN)
B
bellard 已提交
335 336
	$(DYNGEN) -c -o $@ $<

337
gen-op.h: op.o $(DYNGEN)
B
bellard 已提交
338 339
	$(DYNGEN) -g -o $@ $<

340
op.o: op.c
B
bellard 已提交
341 342
	$(CC) $(OP_CFLAGS) $(DEFINES) -c -o $@ $<

343
helper.o: helper.c
B
bellard 已提交
344 345
	$(CC) $(HELPER_CFLAGS) $(DEFINES) -c -o $@ $<

346 347 348 349 350 351 352
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 已提交
353

354
ifeq ($(TARGET_ARCH), sparc)
355
op.o: op.c op_template.h op_mem.h
356
endif
B
bellard 已提交
357

B
update  
bellard 已提交
358 359 360 361 362
ifeq ($(TARGET_ARCH), ppc)
op.o: op.c op_template.h op_mem.h
op_helper.o: op_helper_mem.h
endif

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

B
bellard 已提交
366 367 368
%.o: %.S
	$(CC) $(DEFINES) -c -o $@ $<

B
bellard 已提交
369
clean:
B
bellard 已提交
370
	rm -f *.o  *.a *~ $(PROGS) gen-op.h opc.h op.h nwfpe/*.o slirp/*.o
371 372

install: all 
B
bellard 已提交
373
ifneq ($(PROGS),)
B
bellard 已提交
374
	install -m 755 -s $(PROGS) "$(bindir)"
B
bellard 已提交
375
endif
B
bellard 已提交
376 377 378 379

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