8 HELPER_CFLAGS=$(CFLAGS)
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
24 OP_CFLAGS+= -malign-functions=0
27 LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386.ld
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!
34 ifeq ($(TARGET_ARCH), i386)
41 LDFLAGS+=-Wl,-T,$(SRC_PATH)/ppc.ld
46 LDFLAGS+=-Wl,-T,$(SRC_PATH)/s390.ld
50 CFLAGS+=-m32 -ffixed-g1 -ffixed-g2 -ffixed-g3 -ffixed-g6
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
58 ifeq ($(ARCH),sparc64)
59 CFLAGS+=-m64 -ffixed-g1 -ffixed-g2 -ffixed-g3 -ffixed-g6
61 OP_CFLAGS=$(CFLAGS) -fno-delayed-branch -ffixed-i0
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
78 OP_CFLAGS=$(CFLAGS) -mno-sched-prolog
79 LDFLAGS+=-Wl,-T,$(SRC_PATH)/arm.ld
83 OP_CFLAGS=$(CFLAGS) -fomit-frame-pointer
84 LDFLAGS+=-Wl,-T,m68k.ld
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
92 #########################################################
94 DEFINES+=-D_GNU_SOURCE
103 OBJS= elfload.o main.o syscall.o mmap.o signal.o path.o
104 ifeq ($(TARGET_ARCH), i386)
110 # cpu emulator library
111 LIBOBJS=thunk.o exec.o translate.o cpu-exec.o gdbstub.o
113 ifeq ($(TARGET_ARCH), i386)
114 LIBOBJS+=translate-i386.o op-i386.o helper-i386.o helper2-i386.o
116 ifeq ($(TARGET_ARCH), arm)
117 LIBOBJS+=translate-arm.o op-arm.o
120 # NOTE: the disassembler code is only needed for debugging
122 ifeq ($(findstring i386, $(TARGET_ARCH) $(ARCH)),i386)
125 ifeq ($(findstring alpha, $(TARGET_ARCH) $(ARCH)),alpha)
128 ifeq ($(findstring ppc, $(TARGET_ARCH) $(ARCH)),ppc)
131 ifeq ($(findstring sparc, $(TARGET_ARCH) $(ARCH)),sparc)
134 ifeq ($(findstring arm, $(TARGET_ARCH) $(ARCH)),arm)
139 OBJS += ia64-syscall.o
142 all: $(PROGS) qemu-doc.html
145 $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
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
152 # must use static linking to avoid leaving stuff in virtual address space
153 VL_OBJS=vl.o block.o vga.o
156 SDL_LIBS+=-L/usr/X11R6/lib -lX11 -lXext -lXv -ldl
159 vl: $(VL_OBJS) libqemu.a
160 $(CC) -static -Wl,-T,$(SRC_PATH)/i386-vl.ld -o $@ $^ $(LIBS) $(SDL_LIBS)
163 $(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<
166 $(CC) -MM $(CFLAGS) $^ 1>.depend
170 libqemu.a: $(LIBOBJS)
172 $(AR) rcs $@ $(LIBOBJS)
174 translate-$(TARGET_ARCH).o: translate-$(TARGET_ARCH).c gen-op-$(TARGET_ARCH).h opc-$(TARGET_ARCH).h cpu-$(TARGET_ARCH).h
176 translate.o: translate.c op-$(TARGET_ARCH).h opc-$(TARGET_ARCH).h cpu-$(TARGET_ARCH).h
178 op-$(TARGET_ARCH).h: op-$(TARGET_ARCH).o $(DYNGEN)
181 opc-$(TARGET_ARCH).h: op-$(TARGET_ARCH).o $(DYNGEN)
182 $(DYNGEN) -c -o $@ $<
184 gen-op-$(TARGET_ARCH).h: op-$(TARGET_ARCH).o $(DYNGEN)
185 $(DYNGEN) -g -o $@ $<
187 op-$(TARGET_ARCH).o: op-$(TARGET_ARCH).c
188 $(CC) $(OP_CFLAGS) $(DEFINES) -c -o $@ $<
190 helper-$(TARGET_ARCH).o: helper-$(TARGET_ARCH).c
191 $(CC) $(HELPER_CFLAGS) $(DEFINES) -c -o $@ $<
193 op-i386.o: op-i386.c opreg_template.h ops_template.h ops_template_mem.h ops_mem.h
195 op-arm.o: op-arm.c op-arm-template.h
198 $(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
201 rm -f *.o *.a *~ $(PROGS) \
202 gen-op-$(TARGET_ARCH).h opc-$(TARGET_ARCH).h op-$(TARGET_ARCH).h
204 ifneq ($(wildcard .depend),)