Redhat 9 fixes
[qemu] / Makefile.target
1 include config.mak
2
3 VPATH=$(SRC_PATH)
4 CFLAGS=-Wall -O2 -g
5 LDFLAGS=-g
6 LIBS=
7 DEFINES=-I.
8 HELPER_CFLAGS=$(CFLAGS)
9 DYNGEN=../dyngen
10 ifndef CONFIG_SOFTMMU
11 PROGS=qemu
12 endif
13
14 ifdef CONFIG_STATIC
15 LDFLAGS+=-static
16 endif
17
18 ifeq ($(ARCH),i386)
19 CFLAGS+=-fomit-frame-pointer
20 OP_CFLAGS=$(CFLAGS) -mpreferred-stack-boundary=2
21 ifeq ($(HAVE_GCC3_OPTIONS),yes)
22 OP_CFLAGS+= -falign-functions=0
23 else
24 OP_CFLAGS+= -malign-functions=0
25 endif
26 ifdef TARGET_GPROF
27 LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386.ld
28 else
29 # WARNING: this LDFLAGS is _very_ tricky : qemu is an ELF shared object
30 # that the kernel ELF loader considers as an executable. I think this
31 # is the simplest way to make it self virtualizable!
32 LDFLAGS+=-Wl,-shared
33 endif
34 ifeq ($(TARGET_ARCH), i386)
35 PROGS+=vl
36 endif
37 endif
38
39 ifeq ($(ARCH),ppc)
40 OP_CFLAGS=$(CFLAGS)
41 LDFLAGS+=-Wl,-T,$(SRC_PATH)/ppc.ld
42 endif
43
44 ifeq ($(ARCH),s390)
45 OP_CFLAGS=$(CFLAGS)
46 LDFLAGS+=-Wl,-T,$(SRC_PATH)/s390.ld
47 endif
48
49 ifeq ($(ARCH),sparc)
50 CFLAGS+=-m32 -ffixed-g1 -ffixed-g2 -ffixed-g3 -ffixed-g6
51 LDFLAGS+=-m32
52 OP_CFLAGS=$(CFLAGS) -fno-delayed-branch -ffixed-i0
53 HELPER_CFLAGS=$(CFLAGS) -ffixed-i0 -mflat
54 # -static is used to avoid g1/g3 usage by the dynamic linker
55 LDFLAGS+=-Wl,-T,$(SRC_PATH)/sparc.ld -static
56 endif
57
58 ifeq ($(ARCH),sparc64)
59 CFLAGS+=-m64 -ffixed-g1 -ffixed-g2 -ffixed-g3 -ffixed-g6
60 LDFLAGS+=-m64
61 OP_CFLAGS=$(CFLAGS) -fno-delayed-branch -ffixed-i0
62 endif
63
64 ifeq ($(ARCH),alpha)
65 # -msmall-data is not used because we want two-instruction relocations
66 # for the constant constructions
67 OP_CFLAGS=-Wall -O2 -g
68 # Ensure there's only a single GP
69 CFLAGS += -msmall-data
70 LDFLAGS+=-Wl,-T,$(SRC_PATH)/alpha.ld
71 endif
72
73 ifeq ($(ARCH),ia64)
74 OP_CFLAGS=$(CFLAGS)
75 endif
76
77 ifeq ($(ARCH),arm)
78 OP_CFLAGS=$(CFLAGS) -mno-sched-prolog
79 LDFLAGS+=-Wl,-T,$(SRC_PATH)/arm.ld
80 endif
81
82 ifeq ($(ARCH),m68k)
83 OP_CFLAGS=$(CFLAGS) -fomit-frame-pointer
84 LDFLAGS+=-Wl,-T,m68k.ld
85 endif
86
87 ifeq ($(HAVE_GCC3_OPTIONS),yes)
88 # very important to generate a return at the end of every operation
89 OP_CFLAGS+=-fno-reorder-blocks -fno-optimize-sibling-calls
90 endif
91
92 #########################################################
93
94 DEFINES+=-D_GNU_SOURCE
95 LIBS+=-lm
96
97 # profiling code
98 ifdef TARGET_GPROF
99 LDFLAGS+=-p
100 main.o: CFLAGS+=-p
101 endif
102
103 OBJS= elfload.o main.o syscall.o mmap.o signal.o path.o
104 ifeq ($(TARGET_ARCH), i386)
105 OBJS+= vm86.o
106 endif
107 SRCS:= $(OBJS:.o=.c)
108 OBJS+= libqemu.a
109
110 # cpu emulator library
111 LIBOBJS=thunk.o exec.o translate.o cpu-exec.o gdbstub.o
112
113 ifeq ($(TARGET_ARCH), i386)
114 LIBOBJS+=translate-i386.o op-i386.o helper-i386.o helper2-i386.o
115 endif
116 ifeq ($(TARGET_ARCH), arm)
117 LIBOBJS+=translate-arm.o op-arm.o
118 endif
119
120 # NOTE: the disassembler code is only needed for debugging
121 LIBOBJS+=disas.o 
122 ifeq ($(findstring i386, $(TARGET_ARCH) $(ARCH)),i386)
123 LIBOBJS+=i386-dis.o
124 endif
125 ifeq ($(findstring alpha, $(TARGET_ARCH) $(ARCH)),alpha)
126 LIBOBJS+=alpha-dis.o
127 endif
128 ifeq ($(findstring ppc, $(TARGET_ARCH) $(ARCH)),ppc)
129 LIBOBJS+=ppc-dis.o
130 endif
131 ifeq ($(findstring sparc, $(TARGET_ARCH) $(ARCH)),sparc)
132 LIBOBJS+=sparc-dis.o
133 endif
134 ifeq ($(findstring arm, $(TARGET_ARCH) $(ARCH)),arm)
135 LIBOBJS+=arm-dis.o
136 endif
137
138 ifeq ($(ARCH),ia64)
139 OBJS += ia64-syscall.o
140 endif
141
142 all: $(PROGS) qemu-doc.html
143
144 qemu: $(OBJS)
145         $(CC) $(LDFLAGS) -o $@ $^  $(LIBS)
146 ifeq ($(ARCH),alpha)
147 # Mark as 32 bit binary, i. e. it will be mapped into the low 31 bit of
148 # the address space (31 bit so sign extending doesn't matter)
149         echo -ne '\001\000\000\000' | dd of=qemu bs=1 seek=48 count=4 conv=notrunc
150 endif
151
152 # must use static linking to avoid leaving stuff in virtual address space
153 VL_OBJS=vl.o block.o vga.o
154 ifdef CONFIG_SDL
155 VL_OBJS+=sdl.o
156 SDL_LIBS+=-L/usr/X11R6/lib -lX11 -lXext -lXv -ldl -lm
157 endif
158
159 vl: $(VL_OBJS) libqemu.a
160         $(CC) -static -Wl,-T,$(SRC_PATH)/i386-vl.ld -o $@ $^ $(LIBS) $(SDL_LIBS)
161
162 sdl.o: sdl.c
163         $(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<
164
165 depend: $(SRCS)
166         $(CC) -MM $(CFLAGS) $^ 1>.depend
167
168 # libqemu 
169
170 libqemu.a: $(LIBOBJS)
171         rm -f $@
172         $(AR) rcs $@ $(LIBOBJS)
173
174 translate-$(TARGET_ARCH).o: translate-$(TARGET_ARCH).c gen-op-$(TARGET_ARCH).h opc-$(TARGET_ARCH).h cpu-$(TARGET_ARCH).h
175
176 translate.o: translate.c op-$(TARGET_ARCH).h opc-$(TARGET_ARCH).h cpu-$(TARGET_ARCH).h
177
178 op-$(TARGET_ARCH).h: op-$(TARGET_ARCH).o $(DYNGEN)
179         $(DYNGEN) -o $@ $<
180
181 opc-$(TARGET_ARCH).h: op-$(TARGET_ARCH).o $(DYNGEN)
182         $(DYNGEN) -c -o $@ $<
183
184 gen-op-$(TARGET_ARCH).h: op-$(TARGET_ARCH).o $(DYNGEN)
185         $(DYNGEN) -g -o $@ $<
186
187 op-$(TARGET_ARCH).o: op-$(TARGET_ARCH).c
188         $(CC) $(OP_CFLAGS) $(DEFINES) -c -o $@ $<
189
190 helper-$(TARGET_ARCH).o: helper-$(TARGET_ARCH).c
191         $(CC) $(HELPER_CFLAGS) $(DEFINES) -c -o $@ $<
192
193 op-i386.o: op-i386.c opreg_template.h ops_template.h ops_template_mem.h ops_mem.h
194
195 op-arm.o: op-arm.c op-arm-template.h
196
197 %.o: %.c
198         $(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
199
200 clean:
201         rm -f *.o  *.a *~ $(PROGS) \
202            gen-op-$(TARGET_ARCH).h opc-$(TARGET_ARCH).h op-$(TARGET_ARCH).h
203
204 ifneq ($(wildcard .depend),)
205 include .depend
206 endif