vmware-svga/lib/Makefile.rules
Micah Dowty 68478eab4b There are many new tests and examples that we wrote internally at VMware,
but couldn't release immediately since they depended on virtual GPU features
which were not yet publicly released in any products.  This checkin moves those
features from our internal repository to the open source repository. Future   
development on these tests and examples will take place directly in the open
source repository.

The primary feature added by this patch is 'Screen Object', a new dynamic
display management extension supported by Workstation 7.0 and Fusion 3.0.
See the README for a quick explanation.
2009-10-21 20:20:49 +00:00

136 lines
3.9 KiB
Makefile

#
# Common GNU Make rules for the VMware SVGA examples.
#
# To build your own apps, you just need a makefile which
# defines a few variables and includes this one. For example:
#
# LIB_DIR = path/to/lib
# TARGET = myapp.img
# APP_MODULES = main
# include $(LIB_DIR)/Makefile.rules
#
# All examples get compiled with all library code, and we let
# GCC garbage collect modules that aren't being used.
#
# Basic options necessary to produce our standalone binary.
# Produce 32-bit code, even on 64-bit machines. Don't use
# the standard library at all. Begin the text segment at 1MB.
CFLAGS := -m32 -ffreestanding -nostdinc -fno-stack-protector
LDFLAGS := -nostdlib -Wl,-T,$(LIB_DIR)/metalkit/image.ld
# Extra warnings
CFLAGS += -Wall -Werror
# Size Optimizations.
CFLAGS += -Os -Wl,--gc-sections -ffunction-sections -fdata-sections
# This enables extra gcc builtins for floating point math.
CFLAGS += -march=i686 -ffast-math
# Generate debug symbols. These only show up in the .elf file, not the
# final image. Recent versions of VMware have a gdb debug stub that
# you can use along with these symbols for source-level debugging of
# Metalkit apps.
CFLAGS += -g
# Most of the examples only need 4MB of memory. Some examples
# override this, so only set it if it isn't already defined.
ifeq ($(VMX_MEMSIZE),)
VMX_MEMSIZE = 4
endif
CFLAGS += \
-I$(LIB_DIR)/metalkit \
-I$(LIB_DIR)/util \
-I$(LIB_DIR)/refdriver \
-I$(LIB_DIR)/vmware \
SOURCES := \
$(LIB_DIR)/metalkit/boot.S \
$(LIB_DIR)/metalkit/pci.c \
$(LIB_DIR)/metalkit/intr.c \
$(LIB_DIR)/metalkit/console.c \
$(LIB_DIR)/metalkit/console_vga.c \
$(LIB_DIR)/metalkit/puff.c \
$(LIB_DIR)/metalkit/timer.c \
$(LIB_DIR)/metalkit/keyboard.c \
$(LIB_DIR)/metalkit/bios.c \
$(LIB_DIR)/metalkit/apm.c \
$(LIB_DIR)/metalkit/gcc_support.c \
$(LIB_DIR)/util/matrix.c \
$(LIB_DIR)/util/svga3dutil.c \
$(LIB_DIR)/util/svga3dtext.c \
$(LIB_DIR)/util/screendraw.c \
$(LIB_DIR)/util/bitstream-vera-15.font.z.data.o \
$(LIB_DIR)/util/vmbackdoor.c \
$(LIB_DIR)/util/mt19937ar.c \
$(LIB_DIR)/util/png.c \
$(LIB_DIR)/refdriver/svga.c \
$(LIB_DIR)/refdriver/svga3d.c \
$(LIB_DIR)/refdriver/gmr.c \
$(LIB_DIR)/refdriver/screen.c \
$(APP_SOURCES)
ELF_TARGET := $(subst .img,.elf,$(TARGET))
LST_TARGET := $(subst .img,.lst,$(TARGET))
VMX_TARGET := $(subst .img,.vmx,$(TARGET))
PLAIN_TARGET := $(subst .img,,$(TARGET))
.PHONY: all target clean sizeprof listing
target: $(TARGET) $(VMX_TARGET)
%.lst: %.elf
objdump -d $< > $@
%.img: %.elf
objcopy -O binary $< $@
# Stackable rules for processing data files
%.data.o: %
objcopy -I binary -O elf32-i386 -B i386 $< $@
%.z: %
python $(LIB_DIR)/metalkit/deflate.py < $< > $@
# To optimize size, we compile all input files in one step. This
# lets GCC use information available from all files during its
# optimization phase.
$(ELF_TARGET): $(SOURCES)
$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $(SOURCES)
clean:
rm -f $(TARGET) $(ELF_TARGET) $(LST_TARGET) $(VMX_TARGET) *.o
# This is a phony target which prints a list of symbols, sorted by
# size, and excluding the BSS segment. This is a quick way to see
# which functions and initialized data are taking the most space in
# the final binary.
sizeprof: $(ELF_TARGET)
@nm --size-sort -S $< | egrep -v " [bBsS] "
# Another phony target, for convenience, which dumps an assembly
# listing to stdout.
listing: $(ELF_TARGET)
objdump -d $<
# Generate a .vmx config file for VMware
$(VMX_TARGET):
@echo config.version = 8 > $(VMX_TARGET)
@echo virtualHW.version = 7 >> $(VMX_TARGET)
@echo memsize = $(VMX_MEMSIZE) >> $(VMX_TARGET)
@echo displayname = $(PLAIN_TARGET) >> $(VMX_TARGET)
@echo guestOS = other >> $(VMX_TARGET)
@echo mks.enable3d = TRUE >> $(VMX_TARGET)
@echo floppy0.startConnected = TRUE >> $(VMX_TARGET)
@echo floppy0.fileType = file >> $(VMX_TARGET)
@echo floppy0.fileName = $(TARGET) >> $(VMX_TARGET)