Makefile.target 7.4 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 76 77 78 79

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)
OP_CFLAGS+= -falign-functions=0
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 162 163
#########################################################

DEFINES+=-D_GNU_SOURCE
LIBS+=-lm
B
bellard 已提交
164 165 166
ifdef CONFIG_WIN32
LIBS+=-lwinmm
endif
B
bellard 已提交
167 168 169 170 171 172 173

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

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

# cpu emulator library
187
LIBOBJS=exec.o translate-all.o cpu-exec.o\
188
        translate.o op.o
B
bellard 已提交
189 190

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

197
ifeq ($(TARGET_ARCH), ppc)
B
update  
bellard 已提交
198
LIBOBJS+= op_helper.o helper.o
199 200
endif

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

229
all: $(PROGS)
B
bellard 已提交
230

231
$(QEMU_USER): $(OBJS)
B
bellard 已提交
232 233 234 235 236 237 238 239
	$(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 已提交
240
VL_OBJS=vl.o osdep.o block.o monitor.o pci.o
241 242 243 244

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

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

281
$(QEMU_SYSTEM): $(VL_OBJS) libqemu.a
B
bellard 已提交
282
	$(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(VL_LIBS)
B
bellard 已提交
283 284 285 286 287

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

depend: $(SRCS)
B
bellard 已提交
288
	$(CC) -MM $(CFLAGS) $(DEFINES) $^ 1>.depend
B
bellard 已提交
289 290 291 292 293 294 295

# libqemu 

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

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

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

300
op.h: op.o $(DYNGEN)
B
bellard 已提交
301 302
	$(DYNGEN) -o $@ $<

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

306
gen-op.h: op.o $(DYNGEN)
B
bellard 已提交
307 308
	$(DYNGEN) -g -o $@ $<

309
op.o: op.c
B
bellard 已提交
310 311
	$(CC) $(OP_CFLAGS) $(DEFINES) -c -o $@ $<

312
helper.o: helper.c
B
bellard 已提交
313 314
	$(CC) $(HELPER_CFLAGS) $(DEFINES) -c -o $@ $<

315 316 317 318 319 320 321
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 已提交
322

323 324 325
ifeq ($(TARGET_ARCH), sparc)
op.o: op.c op_template.h
endif
B
bellard 已提交
326

B
update  
bellard 已提交
327 328 329 330 331
ifeq ($(TARGET_ARCH), ppc)
op.o: op.c op_template.h op_mem.h
op_helper.o: op_helper_mem.h
endif

B
bellard 已提交
332 333 334
%.o: %.c
	$(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<

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

B
bellard 已提交
338
clean:
B
bellard 已提交
339
	rm -f *.o  *.a *~ $(PROGS) gen-op.h opc.h op.h nwfpe/*.o slirp/*.o
340 341

install: all 
B
bellard 已提交
342
ifneq ($(PROGS),)
B
bellard 已提交
343
	install -m 755 -s $(PROGS) "$(bindir)"
B
bellard 已提交
344
endif
B
bellard 已提交
345 346 347 348

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