Makefile.target 7.6 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 66
endif # TARGET_ARCH = ppc
endif # !CONFIG_USER_ONLY
B
bellard 已提交
67 68 69 70 71 72 73 74 75

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)
76
OP_CFLAGS+= -falign-functions=0 -fno-gcse
B
bellard 已提交
77 78 79
else
OP_CFLAGS+= -malign-functions=0
endif
B
bellard 已提交
80

B
bellard 已提交
81
ifdef TARGET_GPROF
B
bellard 已提交
82 83 84 85 86 87
USE_I386_LD=y
endif
ifdef CONFIG_STATIC
USE_I386_LD=y
endif
ifdef USE_I386_LD
B
bellard 已提交
88 89 90 91 92 93 94 95 96
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

97 98 99 100 101
ifeq ($(ARCH),amd64)
OP_CFLAGS=$(CFLAGS) -falign-functions=0
LDFLAGS+=-Wl,-T,$(SRC_PATH)/amd64.ld
endif

B
bellard 已提交
102
ifeq ($(ARCH),ppc)
103
CFLAGS+= -D__powerpc__
B
bellard 已提交
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
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 已提交
146 147 148 149 150
ifeq ($(ARCH),m68k)
OP_CFLAGS=$(CFLAGS) -fomit-frame-pointer
LDFLAGS+=-Wl,-T,m68k.ld
endif

B
bellard 已提交
151 152 153 154 155
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

156 157 158 159
ifeq ($(CONFIG_DARWIN),yes)
OP_CFLAGS+= -mdynamic-no-pic
endif

B
bellard 已提交
160 161
#########################################################

B
bellard 已提交
162
DEFINES+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
B
bellard 已提交
163
LIBS+=-lm
B
bellard 已提交
164 165 166
ifndef CONFIG_USER_ONLY
LIBS+=-lz
endif
B
bellard 已提交
167
ifdef CONFIG_WIN32
168
LIBS+=-lwinmm -lws2_32 -liphlpapi
B
bellard 已提交
169
endif
B
bellard 已提交
170 171 172 173 174 175 176

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

B
bellard 已提交
177
OBJS= elfload.o main.o syscall.o mmap.o signal.o path.o osdep.o thunk.o 
B
bellard 已提交
178 179 180
ifeq ($(TARGET_ARCH), i386)
OBJS+= vm86.o
endif
B
bellard 已提交
181 182 183 184 185
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 已提交
186 187 188 189
SRCS:= $(OBJS:.o=.c)
OBJS+= libqemu.a

# cpu emulator library
190
LIBOBJS=exec.o translate-all.o cpu-exec.o\
191
        translate.o op.o
B
bellard 已提交
192 193

ifeq ($(TARGET_ARCH), i386)
194
LIBOBJS+=helper.o helper2.o
B
bellard 已提交
195 196 197
ifeq ($(ARCH), i386)
LIBOBJS+=translate-copy.o
endif
B
bellard 已提交
198 199
endif

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

B
bellard 已提交
204 205 206
# NOTE: the disassembler code is only needed for debugging
LIBOBJS+=disas.o 
ifeq ($(findstring i386, $(TARGET_ARCH) $(ARCH)),i386)
207 208 209 210 211 212
USE_I386_DIS=y
endif
ifeq ($(findstring amd64, $(TARGET_ARCH) $(ARCH)),amd64)
USE_I386_DIS=y
endif
ifdef USE_I386_DIS
B
bellard 已提交
213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231
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

232
all: $(PROGS)
B
bellard 已提交
233

234
$(QEMU_USER): $(OBJS)
B
bellard 已提交
235 236 237 238 239 240 241 242
	$(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 已提交
243 244
VL_OBJS=vl.o osdep.o block.o readline.o monitor.o pci.o console.o 
VL_OBJS+=block-cow.o block-qcow.o aes.o block-vmdk.o
245 246 247 248

ifeq ($(TARGET_ARCH), i386)
# Hardware support
VL_OBJS+= ide.o ne2000.o pckbd.o vga.o sb16.o dma.o oss.o
B
bellard 已提交
249 250
VL_OBJS+= fdc.o mc146818rtc.o serial.o i8259.o i8254.o pc.o 
VL_OBJS+= cirrus_vga.o
B
bellard 已提交
251
endif
B
update  
bellard 已提交
252
ifeq ($(TARGET_ARCH), ppc)
B
bellard 已提交
253
VL_OBJS+= ppc.o ide.o ne2000.o pckbd.o vga.o sb16.o dma.o oss.o
B
bellard 已提交
254
VL_OBJS+= mc146818rtc.o serial.o i8259.o i8254.o fdc.o m48t59.o
B
bellard 已提交
255
VL_OBJS+= ppc_prep.o ppc_chrp.o cuda.o adb.o openpic.o
256 257 258
endif
ifdef CONFIG_GDBSTUB
VL_OBJS+=gdbstub.o 
B
update  
bellard 已提交
259
endif
B
bellard 已提交
260 261
ifdef CONFIG_SDL
VL_OBJS+=sdl.o
B
bellard 已提交
262
endif
B
bellard 已提交
263 264 265 266
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 已提交
267
tcp_subr.o tcp_timer.o udp.o bootp.o debug.o tftp.o
B
bellard 已提交
268
VL_OBJS+=$(addprefix slirp/, $(SLIRP_OBJS))
B
bellard 已提交
269 270
endif

271 272 273 274 275
VL_LDFLAGS=
# specific flags are needed for non soft mmu emulator
ifdef CONFIG_STATIC
VL_LDFLAGS+=-static
endif
B
bellard 已提交
276 277 278
ifndef CONFIG_SOFTMMU
VL_LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386-vl.ld 
endif
279
ifndef CONFIG_DARWIN
B
bellard 已提交
280 281 282
ifndef CONFIG_WIN32
VL_LIBS=-lutil
endif
283
endif
284

285
$(QEMU_SYSTEM): $(VL_OBJS) libqemu.a
B
bellard 已提交
286
	$(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(VL_LIBS)
B
bellard 已提交
287 288 289 290 291

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

depend: $(SRCS)
B
bellard 已提交
292
	$(CC) -MM $(CFLAGS) $(DEFINES) $^ 1>.depend
B
bellard 已提交
293 294 295 296 297 298 299

# libqemu 

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

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

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

304
op.h: op.o $(DYNGEN)
B
bellard 已提交
305 306
	$(DYNGEN) -o $@ $<

307
opc.h: op.o $(DYNGEN)
B
bellard 已提交
308 309
	$(DYNGEN) -c -o $@ $<

310
gen-op.h: op.o $(DYNGEN)
B
bellard 已提交
311 312
	$(DYNGEN) -g -o $@ $<

313
op.o: op.c
B
bellard 已提交
314 315
	$(CC) $(OP_CFLAGS) $(DEFINES) -c -o $@ $<

316
helper.o: helper.c
B
bellard 已提交
317 318
	$(CC) $(HELPER_CFLAGS) $(DEFINES) -c -o $@ $<

319 320 321 322 323 324 325
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 已提交
326

327 328 329
ifeq ($(TARGET_ARCH), sparc)
op.o: op.c op_template.h
endif
B
bellard 已提交
330

B
update  
bellard 已提交
331 332 333 334 335
ifeq ($(TARGET_ARCH), ppc)
op.o: op.c op_template.h op_mem.h
op_helper.o: op_helper_mem.h
endif

B
bellard 已提交
336 337 338
%.o: %.c
	$(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<

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

B
bellard 已提交
342
clean:
B
bellard 已提交
343
	rm -f *.o  *.a *~ $(PROGS) gen-op.h opc.h op.h nwfpe/*.o slirp/*.o
344 345

install: all 
B
bellard 已提交
346
ifneq ($(PROGS),)
B
bellard 已提交
347
	install -m 755 -s $(PROGS) "$(bindir)"
B
bellard 已提交
348
endif
B
bellard 已提交
349 350 351 352

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