Statistics
| Branch: | Revision:

root / Makefile.target @ 38ca2abc

History | View | Annotate | Download (6 kB)

1
include config.mak
2

    
3
TARGET_PATH=$(SRC_PATH)/target-$(TARGET_ARCH)
4
VPATH=$(SRC_PATH):$(TARGET_PATH)
5
CFLAGS=-Wall -O2 -g
6
LDFLAGS=-g
7
LIBS=
8
DEFINES=-I. -I$(TARGET_PATH) -I$(SRC_PATH)
9
HELPER_CFLAGS=$(CFLAGS)
10
DYNGEN=../dyngen
11
# user emulator name
12
QEMU_USER=qemu-$(TARGET_ARCH)
13
# system emulator name
14
ifdef CONFIG_SOFTMMU
15
QEMU_SYSTEM=qemu
16
else
17
QEMU_SYSTEM=qemu-fast
18
endif
19

    
20
ifdef CONFIG_USER_ONLY
21
PROGS=$(QEMU_USER)
22
else
23
ifeq ($(TARGET_ARCH), i386)
24

    
25
ifeq ($(ARCH), i386)
26
PROGS+=$(QEMU_SYSTEM)
27
ifndef CONFIG_SOFTMMU
28
CONFIG_STATIC=y
29
endif
30
else
31
# the system emulator using soft mmu is portable
32
ifdef CONFIG_SOFTMMU
33
PROGS+=$(QEMU_SYSTEM)
34
endif
35
endif # ARCH != i386
36

    
37
endif # TARGET_ARCH = i386
38

    
39
ifeq ($(TARGET_ARCH), ppc)
40

    
41
ifeq ($(ARCH), ppc)
42
PROGS+=$(QEMU_SYSTEM)
43
endif
44

    
45
ifeq ($(ARCH), i386)
46
ifdef CONFIG_SOFTMMU
47
PROGS+=$(QEMU_SYSTEM)
48
endif
49
endif # ARCH = i386
50

    
51
endif # TARGET_ARCH = ppc
52
endif # !CONFIG_USER_ONLY
53

    
54
ifdef CONFIG_STATIC
55
LDFLAGS+=-static
56
endif
57

    
58
ifeq ($(ARCH),i386)
59
CFLAGS+=-fomit-frame-pointer
60
OP_CFLAGS=$(CFLAGS) -mpreferred-stack-boundary=2
61
ifeq ($(HAVE_GCC3_OPTIONS),yes)
62
OP_CFLAGS+= -falign-functions=0
63
else
64
OP_CFLAGS+= -malign-functions=0
65
endif
66

    
67
ifdef TARGET_GPROF
68
USE_I386_LD=y
69
endif
70
ifdef CONFIG_STATIC
71
USE_I386_LD=y
72
endif
73
ifdef USE_I386_LD
74
LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386.ld
75
else
76
# WARNING: this LDFLAGS is _very_ tricky : qemu is an ELF shared object
77
# that the kernel ELF loader considers as an executable. I think this
78
# is the simplest way to make it self virtualizable!
79
LDFLAGS+=-Wl,-shared
80
endif
81
endif
82

    
83
ifeq ($(ARCH),ppc)
84
OP_CFLAGS=$(CFLAGS)
85
LDFLAGS+=-Wl,-T,$(SRC_PATH)/ppc.ld
86
endif
87

    
88
ifeq ($(ARCH),s390)
89
OP_CFLAGS=$(CFLAGS)
90
LDFLAGS+=-Wl,-T,$(SRC_PATH)/s390.ld
91
endif
92

    
93
ifeq ($(ARCH),sparc)
94
CFLAGS+=-m32 -ffixed-g1 -ffixed-g2 -ffixed-g3 -ffixed-g6
95
LDFLAGS+=-m32
96
OP_CFLAGS=$(CFLAGS) -fno-delayed-branch -ffixed-i0
97
HELPER_CFLAGS=$(CFLAGS) -ffixed-i0 -mflat
98
# -static is used to avoid g1/g3 usage by the dynamic linker
99
LDFLAGS+=-Wl,-T,$(SRC_PATH)/sparc.ld -static
100
endif
101

    
102
ifeq ($(ARCH),sparc64)
103
CFLAGS+=-m64 -ffixed-g1 -ffixed-g2 -ffixed-g3 -ffixed-g6
104
LDFLAGS+=-m64
105
OP_CFLAGS=$(CFLAGS) -fno-delayed-branch -ffixed-i0
106
endif
107

    
108
ifeq ($(ARCH),alpha)
109
# -msmall-data is not used because we want two-instruction relocations
110
# for the constant constructions
111
OP_CFLAGS=-Wall -O2 -g
112
# Ensure there's only a single GP
113
CFLAGS += -msmall-data
114
LDFLAGS+=-Wl,-T,$(SRC_PATH)/alpha.ld
115
endif
116

    
117
ifeq ($(ARCH),ia64)
118
OP_CFLAGS=$(CFLAGS)
119
endif
120

    
121
ifeq ($(ARCH),arm)
122
OP_CFLAGS=$(CFLAGS) -mno-sched-prolog
123
LDFLAGS+=-Wl,-T,$(SRC_PATH)/arm.ld
124
endif
125

    
126
ifeq ($(ARCH),m68k)
127
OP_CFLAGS=$(CFLAGS) -fomit-frame-pointer
128
LDFLAGS+=-Wl,-T,m68k.ld
129
endif
130

    
131
ifeq ($(HAVE_GCC3_OPTIONS),yes)
132
# very important to generate a return at the end of every operation
133
OP_CFLAGS+=-fno-reorder-blocks -fno-optimize-sibling-calls
134
endif
135

    
136
#########################################################
137

    
138
DEFINES+=-D_GNU_SOURCE
139
LIBS+=-lm
140

    
141
# profiling code
142
ifdef TARGET_GPROF
143
LDFLAGS+=-p
144
main.o: CFLAGS+=-p
145
endif
146

    
147
OBJS= elfload.o main.o syscall.o mmap.o signal.o path.o osdep.o
148
ifeq ($(TARGET_ARCH), i386)
149
OBJS+= vm86.o
150
endif
151
ifeq ($(TARGET_ARCH), arm)
152
OBJS+=nwfpe/softfloat.o nwfpe/fpa11.o nwfpe/fpa11_cpdo.o \
153
nwfpe/fpa11_cpdt.o nwfpe/fpa11_cprt.o nwfpe/fpopcode.o nwfpe/single_cpdo.o \
154
 nwfpe/double_cpdo.o nwfpe/extended_cpdo.o
155
endif
156
SRCS:= $(OBJS:.o=.c)
157
OBJS+= libqemu.a
158

    
159
# cpu emulator library
160
LIBOBJS=thunk.o exec.o translate-all.o cpu-exec.o gdbstub.o \
161
        translate.o op.o
162

    
163
ifeq ($(TARGET_ARCH), i386)
164
LIBOBJS+=helper.o helper2.o
165
ifeq ($(ARCH), i386)
166
LIBOBJS+=translate-copy.o
167
endif
168
endif
169

    
170
ifeq ($(TARGET_ARCH), ppc)
171
LIBOBJS+= op_helper.o helper.o
172
endif
173

    
174
# NOTE: the disassembler code is only needed for debugging
175
LIBOBJS+=disas.o 
176
ifeq ($(findstring i386, $(TARGET_ARCH) $(ARCH)),i386)
177
LIBOBJS+=i386-dis.o
178
endif
179
ifeq ($(findstring alpha, $(TARGET_ARCH) $(ARCH)),alpha)
180
LIBOBJS+=alpha-dis.o
181
endif
182
ifeq ($(findstring ppc, $(TARGET_ARCH) $(ARCH)),ppc)
183
LIBOBJS+=ppc-dis.o
184
endif
185
ifeq ($(findstring sparc, $(TARGET_ARCH) $(ARCH)),sparc)
186
LIBOBJS+=sparc-dis.o
187
endif
188
ifeq ($(findstring arm, $(TARGET_ARCH) $(ARCH)),arm)
189
LIBOBJS+=arm-dis.o
190
endif
191

    
192
ifeq ($(ARCH),ia64)
193
OBJS += ia64-syscall.o
194
endif
195

    
196
all: $(PROGS)
197

    
198
$(QEMU_USER): $(OBJS)
199
	$(CC) $(LDFLAGS) -o $@ $^  $(LIBS)
200
ifeq ($(ARCH),alpha)
201
# Mark as 32 bit binary, i. e. it will be mapped into the low 31 bit of
202
# the address space (31 bit so sign extending doesn't matter)
203
	echo -ne '\001\000\000\000' | dd of=qemu bs=1 seek=48 count=4 conv=notrunc
204
endif
205

    
206
# must use static linking to avoid leaving stuff in virtual address space
207
VL_OBJS=vl.o block.o ide.o vga.o sb16.o dma.o oss.o fdc.o osdep.o
208
ifeq ($(TARGET_ARCH), ppc)
209
VL_OBJS+= hw.o
210
endif
211
ifdef CONFIG_SDL
212
VL_OBJS+=sdl.o
213
ifdef CONFIG_STATIC
214
SDL_LIBS:=$(SDL_STATIC_LIBS)
215
endif
216
endif
217

    
218
VL_LDFLAGS=
219
# specific flags are needed for non soft mmu emulator
220
ifdef CONFIG_STATIC
221
VL_LDFLAGS+=-static
222
endif
223
ifndef CONFIG_SOFTMMU
224
VL_LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386-vl.ld 
225
endif
226

    
227
$(QEMU_SYSTEM): $(VL_OBJS) libqemu.a
228
	$(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS)
229

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

    
233
depend: $(SRCS)
234
	$(CC) -MM $(CFLAGS) $(DEFINES) $^ 1>.depend
235

    
236
# libqemu 
237

    
238
libqemu.a: $(LIBOBJS)
239
	rm -f $@
240
	$(AR) rcs $@ $(LIBOBJS)
241

    
242
translate.o: translate.c gen-op.h opc.h cpu.h
243

    
244
translate-all.o: translate-all.c op.h opc.h cpu.h
245

    
246
op.h: op.o $(DYNGEN)
247
	$(DYNGEN) -o $@ $<
248

    
249
opc.h: op.o $(DYNGEN)
250
	$(DYNGEN) -c -o $@ $<
251

    
252
gen-op.h: op.o $(DYNGEN)
253
	$(DYNGEN) -g -o $@ $<
254

    
255
op.o: op.c
256
	$(CC) $(OP_CFLAGS) $(DEFINES) -c -o $@ $<
257

    
258
helper.o: helper.c
259
	$(CC) $(HELPER_CFLAGS) $(DEFINES) -c -o $@ $<
260

    
261
ifeq ($(TARGET_ARCH), i386)
262
op.o: op.c opreg_template.h ops_template.h ops_template_mem.h ops_mem.h
263
endif
264

    
265
ifeq ($(TARGET_ARCH), arm)
266
op.o: op.c op_template.h
267
endif
268

    
269
ifeq ($(TARGET_ARCH), sparc)
270
op.o: op.c op_template.h
271
endif
272

    
273
ifeq ($(TARGET_ARCH), ppc)
274
op.o: op.c op_template.h op_mem.h
275
op_helper.o: op_helper_mem.h
276
endif
277

    
278
%.o: %.c
279
	$(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
280

    
281
%.o: %.S
282
	$(CC) $(DEFINES) -c -o $@ $<
283

    
284
clean:
285
	rm -f *.o  *.a *~ $(PROGS) gen-op.h opc.h op.h nwfpe/*.o
286

    
287
install: all 
288
	install -m 755 -s $(PROGS) $(prefix)/bin
289

    
290
ifneq ($(wildcard .depend),)
291
include .depend
292
endif