XEN_ROOT = $(CURDIR)/.. MINI_OS = $(XEN_ROOT)/extras/mini-os export XEN_OS=MiniOS export stubdom=y export debug=y include $(XEN_ROOT)/Config.mk -include $(XEN_ROOT)/config/Stubdom.mk GNU_TARGET_ARCH:=$(XEN_TARGET_ARCH) ifeq ($(XEN_TARGET_ARCH),x86_32) GNU_TARGET_ARCH:=i686 endif ifeq ($(GNU_TARGET_ARCH), i686) TARGET_CFLAGS= NEWLIB_CFLAGS+=-D_I386MACH_ALLOW_HW_INTERRUPTS STUBDOM_SUPPORTED=1 endif ifeq ($(GNU_TARGET_ARCH), x86_64) TARGET_CFLAGS=-mno-red-zone NEWLIB_CFLAGS+=-D_I386MACH_ALLOW_HW_INTERRUPTS STUBDOM_SUPPORTED=1 endif ifeq ($(GNU_TARGET_ARCH), ia64) TARGET_CFLAGS=-mconstant-gp endif CROSS_ROOT=cross-root-$(GNU_TARGET_ARCH) CROSS_PREFIX=$(CURDIR)/$(CROSS_ROOT) # Disable PIE/SSP if GCC supports them. They can break us. TARGET_CFLAGS += $(CFLAGS) TARGET_CPPFLAGS += $(CPPFLAGS) $(call cc-options-add,TARGET_CFLAGS,CC,$(EMBEDDED_EXTRA_CFLAGS)) # Do not use host headers and libs GCC_INSTALL = $(shell LANG=C gcc -print-search-dirs | sed -n -e 's/install: \(.*\)/\1/p') TARGET_CPPFLAGS += -U __linux__ -U __FreeBSD__ -U __sun__ TARGET_CPPFLAGS += -nostdinc TARGET_CPPFLAGS += -isystem $(MINI_OS)/include/posix TARGET_CPPFLAGS += -isystem $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include TARGET_CPPFLAGS += -isystem $(GCC_INSTALL)include TARGET_CPPFLAGS += -isystem $(CURDIR)/lwip-$(XEN_TARGET_ARCH)/src/include TARGET_CPPFLAGS += -isystem $(CURDIR)/lwip-$(XEN_TARGET_ARCH)/src/include/ipv4 TARGET_CPPFLAGS += -I$(CURDIR)/include TARGET_CPPFLAGS += -I$(XEN_ROOT)/xen/include TARGET_LDFLAGS += -nostdlib -L$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/lib TARGETS=$(STUBDOM_TARGETS) .PHONY: all all: build ifeq ($(STUBDOM_SUPPORTED),1) build: genpath $(STUBDOM_BUILD) else build: genpath endif STUBDOMPATH="stubdompath.sh" genpath-target = $(call buildmakevars2file,$(STUBDOMPATH)) $(eval $(genpath-target)) ############## # Cross-newlib ############## newlib-$(NEWLIB_VERSION).tar.gz: $(FETCHER) $@ $(NEWLIB_URL)/$@ newlib-$(NEWLIB_VERSION): newlib-$(NEWLIB_VERSION).tar.gz tar xzf $< patch -d $@ -p0 < newlib.patch patch -d $@ -p0 < newlib-chk.patch patch -d $@ -p1 < newlib-stdint-size_max-fix-from-1.17.0.patch find $@ -type f | xargs perl -i.bak \ -pe 's/\b_(tzname|daylight|timezone)\b/$$1/g' touch $@ NEWLIB_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/libc.a .PHONY: cross-newlib cross-newlib: $(NEWLIB_STAMPFILE) $(NEWLIB_STAMPFILE): mk-headers-$(XEN_TARGET_ARCH) newlib-$(NEWLIB_VERSION) mkdir -p newlib-$(XEN_TARGET_ARCH) ( cd newlib-$(XEN_TARGET_ARCH) && \ CC_FOR_TARGET="$(CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(NEWLIB_CFLAGS)" AR_FOR_TARGET=$(AR) LD_FOR_TARGET=$(LD) RANLIB_FOR_TARGET=$(RANLIB) ../newlib-$(NEWLIB_VERSION)/configure --prefix=$(CROSS_PREFIX) --verbose --target=$(GNU_TARGET_ARCH)-xen-elf --enable-newlib-io-long-long --disable-multilib && \ $(MAKE) DESTDIR= && \ $(MAKE) DESTDIR= install ) ############ # Cross-zlib ############ zlib-$(ZLIB_VERSION).tar.gz: $(FETCHER) $@ $(ZLIB_URL)/$@ zlib-$(XEN_TARGET_ARCH): zlib-$(ZLIB_VERSION).tar.gz tar xzf $< mv zlib-$(ZLIB_VERSION) $@ ZLIB_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/libz.a .PHONY: cross-zlib cross-zlib: $(ZLIB_STAMPFILE) $(ZLIB_STAMPFILE): zlib-$(XEN_TARGET_ARCH) $(NEWLIB_STAMPFILE) ( cd $< && \ CFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS)" CC=$(CC) ./configure --prefix=$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf && \ $(MAKE) DESTDIR= libz.a && \ $(MAKE) DESTDIR= install ) ############## # Cross-libpci ############## pciutils-$(LIBPCI_VERSION).tar.bz2: $(FETCHER) $@ $(LIBPCI_URL)/$@ pciutils-$(XEN_TARGET_ARCH): pciutils-$(LIBPCI_VERSION).tar.bz2 tar xjf $< mv pciutils-$(LIBPCI_VERSION) $@ patch -d $@ -p1 < pciutils.patch touch $@ LIBPCI_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/libpci.a .PHONY: cross-libpci cross-libpci: $(LIBPCI_STAMPFILE) $(LIBPCI_STAMPFILE): pciutils-$(XEN_TARGET_ARCH) $(NEWLIB_STAMPFILE) $(ZLIB_STAMPFILE) ( cd $< && \ cp ../libpci.config.h lib/config.h && \ chmod u+w lib/config.h && \ echo '#define PCILIB_VERSION "$(LIBPCI_VERSION)"' >> lib/config.h && \ ln -sf ../../libpci.config.mak lib/config.mk && \ $(MAKE) DESTDIR= CC="$(CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -I$(call realpath,$(MINI_OS)/include)" lib/libpci.a && \ $(INSTALL_DATA) lib/libpci.a $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/lib/ && \ $(INSTALL_DIR) $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include/pci && \ $(INSTALL_DATA) lib/config.h lib/header.h lib/pci.h lib/types.h $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include/pci/ \ ) ###### # lwIP ###### lwip-$(LWIP_VERSION).tar.gz: $(FETCHER) $@ $(LWIP_URL)/$@ lwip-$(XEN_TARGET_ARCH): lwip-$(LWIP_VERSION).tar.gz tar xzf $< mv lwip $@ patch -d $@ -p0 < lwip.patch-cvs touch $@ ############# # cross-gmp ############# gmp-$(GMP_VERSION).tar.bz2: $(FETCHER) $@ $(GMP_URL)/$@ .PHONY: cross-gmp ifeq ($(XEN_TARGET_ARCH), x86_32) GMPEXT=ABI=32 endif gmp-$(XEN_TARGET_ARCH): gmp-$(GMP_VERSION).tar.bz2 $(NEWLIB_STAMPFILE) tar xjf $< rm $@ -rf || : mv gmp-$(GMP_VERSION) $@ #patch -d $@ -p0 < gmp.patch cd $@; CPPFLAGS="-isystem $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include $(TARGET_CPPFLAGS)" CFLAGS="$(TARGET_CFLAGS)" CC=$(CC) $(GMPEXT) ./configure --disable-shared --enable-static --disable-fft --without-readline --prefix=$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf sed -i 's/#define HAVE_OBSTACK_VPRINTF 1/\/\/#define HAVE_OBSTACK_VPRINTF 1/' $@/config.h touch $@ GMP_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/libgmp.a cross-gmp: $(GMP_STAMPFILE) $(GMP_STAMPFILE): gmp-$(XEN_TARGET_ARCH) ( cd $< && \ $(MAKE) && \ $(MAKE) DESTDIR= install ) ############# # cross-polarssl ############# polarssl-$(POLARSSL_VERSION)-gpl.tgz: $(FETCHER) $@ $(POLARSSL_URL)/$@ polarssl-$(XEN_TARGET_ARCH): polarssl-$(POLARSSL_VERSION)-gpl.tgz tar xzf $< mv polarssl-$(POLARSSL_VERSION) $@ patch -d $@ -p1 < polarssl.patch touch $@ POLARSSL_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/libpolarssl.a cross-polarssl: $(POLARSSL_STAMPFILE) $(POLARSSL_STAMPFILE): polarssl-$(XEN_TARGET_ARCH) $(NEWLIB_STAMPFILE) lwip-$(XEN_TARGET_ARCH) ( cd $