| 1 | OS = $(shell uname -s)
|
|---|
| 2 | NOW = $(shell date -u "+%F-%H-%M-%S")
|
|---|
| 3 | TAR = tar
|
|---|
| 4 | EXE =
|
|---|
| 5 |
|
|---|
| 6 | GCC_VERSION = 4.0.0
|
|---|
| 7 | ARCHIVES = gcc-core-$(GCC_VERSION).tar.bz2 gcc-objc-$(GCC_VERSION).tar.bz2
|
|---|
| 8 |
|
|---|
| 9 | ifeq ($(OS),Linux)
|
|---|
| 10 | ARCH = $(shell uname -m)
|
|---|
| 11 | ifeq ($(ARCH), ppc64)
|
|---|
| 12 | PLATFORM = linuxppc
|
|---|
| 13 | CONFIGTARGET = ppc64-unknown-linux
|
|---|
| 14 | CONFIGARGS = --target=$(CONFIGTARGET) --host=$(CONFIGTARGET) --with-cpu=default32 --enable-biarch --enable-threads=posix
|
|---|
| 15 | MAKE_FUNKY_LINK = YES
|
|---|
| 16 | COPY_OBJC_HEADERS = YES
|
|---|
| 17 | endif
|
|---|
| 18 | ifeq ($(ARCH), ppc)
|
|---|
| 19 | PLATFORM = linuxppc
|
|---|
| 20 | CONFIGTARGET = ppc64-unknown-linux
|
|---|
| 21 | CONFIGARGS = --target=$(CONFIGTARGET) --host=$(CONFIGTARGET) --with-cpu=default32 --enable-biarch --enable-threads=posix
|
|---|
| 22 | MAKE_FUNKY_LINK = YES
|
|---|
| 23 | COPY_OBJC_HEADERS = YES
|
|---|
| 24 | endif
|
|---|
| 25 | ifeq ($(ARCH), x86_64)
|
|---|
| 26 | PLATFORM = linuxx8664
|
|---|
| 27 | CONFIGTARGET = x86_64-unknown-linux
|
|---|
| 28 | CONFIGARGS = --target=$(CONFIGTARGET) --host=$(CONFIGTARGET) --enable-threads=posix --enable-biarch
|
|---|
| 29 | MAKE_FUNKY_LINK = YES
|
|---|
| 30 | COPY_OBJC_HEADERS = YES
|
|---|
| 31 | endif
|
|---|
| 32 | ifeq ($(ARCH), i686)
|
|---|
| 33 | PLATFORM = linuxx8664
|
|---|
| 34 | CONFIGTARGET = i686-unknown-linux
|
|---|
| 35 | CONFIGARGS = --target=$(CONFIGTARGET) --host=$(CONFIGTARGET) --enable-threads=posix --enable-biarch
|
|---|
| 36 | MAKE_FUNKY_LINK = YES
|
|---|
| 37 | COPY_OBJC_HEADERS = YES
|
|---|
| 38 | endif
|
|---|
| 39 | ifeq ($(ARCH), armv7l)
|
|---|
| 40 | PLATFORM = linuxarm
|
|---|
| 41 | CONFIGTARGET = armv7l-unknown-linux-gnu
|
|---|
| 42 | MAKE_FUNKY_LINK = YES
|
|---|
| 43 | COPY_OBJC_HEADERS = YES
|
|---|
| 44 | endif
|
|---|
| 45 | endif
|
|---|
| 46 |
|
|---|
| 47 | ifeq ($(OS),FreeBSD)
|
|---|
| 48 | ARCH = $(shell uname -p)
|
|---|
| 49 | ifeq ($(ARCH),amd64)
|
|---|
| 50 | PLATFORM = freebsdx8664
|
|---|
| 51 | CONFIGTARGET = amd64-unknown-freebsd6.0
|
|---|
| 52 | else
|
|---|
| 53 | PLATFORM = freebsdx86
|
|---|
| 54 | CONFIGTARGET = i386-unknown-freebsd6.0
|
|---|
| 55 | endif
|
|---|
| 56 | CONFIGARGS = --target=$(CONFIGTARGET) --host=$(CONFIGTARGET) --enable-threads=posix --enable-biarch
|
|---|
| 57 | MAKE_FUNKY_LINK = YES
|
|---|
| 58 | COPY_OBJC_HEADERS = YES
|
|---|
| 59 | endif
|
|---|
| 60 |
|
|---|
| 61 |
|
|---|
| 62 | ifeq ($(OS),Darwin)
|
|---|
| 63 | ARCH = $(shell arch)
|
|---|
| 64 | PLATFORM=darwinppc
|
|---|
| 65 | CONFIGTARGET = powerpc-apple-darwin8
|
|---|
| 66 | CONFIGARGS = --target=$(CONFIGTARGET) --with-cpu=default32 --enable-biarch
|
|---|
| 67 | MAKE_FUNKY_LINK = YES
|
|---|
| 68 | COPY_OBJC_HEADERS = NO
|
|---|
| 69 | endif
|
|---|
| 70 |
|
|---|
| 71 | ifeq ($(OS),SunOS)
|
|---|
| 72 | TAR = gtar
|
|---|
| 73 | PLATFORM = solarisx86
|
|---|
| 74 | MAKE_FUNKY_LINK = YES
|
|---|
| 75 | endif
|
|---|
| 76 |
|
|---|
| 77 | # 32-bit Cygwin, at this point
|
|---|
| 78 | ifeq (CYGWIN,$(findstring CYGWIN,$(OS)))
|
|---|
| 79 | ARCH = $(shell arch)
|
|---|
| 80 | PLATFORM=win32
|
|---|
| 81 | CONFIGTARGET=i386-pc-cygwin
|
|---|
| 82 | MAKE_FUNKY_LINK = YES
|
|---|
| 83 | COPY_OBJC_HEADERS = YES
|
|---|
| 84 | EXE = .exe
|
|---|
| 85 | endif
|
|---|
| 86 |
|
|---|
| 87 | all: package
|
|---|
| 88 | m4 -DPLATFORM=$(PLATFORM) -DGCC_VERSION=$(GCC_VERSION)-$(NOW) source/INSTALL-$(PLATFORM).m4 > INSTALL-FFIGEN-$(PLATFORM)-gcc-$(GCC_VERSION)-$(NOW).txt
|
|---|
| 89 |
|
|---|
| 90 |
|
|---|
| 91 | compile: patch
|
|---|
| 92 | mkdir build
|
|---|
| 93 | (cd build ; ../gcc-$(GCC_VERSION)/configure --enable-languages=objc $(CONFIGARGS) )
|
|---|
| 94 | ifeq ($(MAKE_FUNKY_LINK),YES)
|
|---|
| 95 | ifeq ($(OS),Darwin)
|
|---|
| 96 | (cd build ; ln -s . build-`../gcc-$(GCC_VERSION)/config.guess`)
|
|---|
| 97 | endif
|
|---|
| 98 | ifeq ($(OS),Linux)
|
|---|
| 99 | (cd build ; ln -s . build-$(CONFIGTARGET))
|
|---|
| 100 | endif
|
|---|
| 101 | ifeq ($(OS),FreeBSD)
|
|---|
| 102 | (cd build ; ln -s . build-$(CONFIGTARGET))
|
|---|
| 103 | endif
|
|---|
| 104 | ifeq ($(OS),SunOS)
|
|---|
| 105 | (cd build ; ln -s . build-`../gcc-$(GCC_VERSION)/config.guess`)
|
|---|
| 106 | endif
|
|---|
| 107 | ifeq ($(PLATFORM),win32)
|
|---|
| 108 | (cd build ; ln -s . build-`../gcc-$(GCC_VERSION)/config.guess`)
|
|---|
| 109 | endif
|
|---|
| 110 | endif
|
|---|
| 111 | (cd build ; $(MAKE) maybe-configure-libiberty maybe-configure-gcc maybe-configure-libcpp)
|
|---|
| 112 | (cd build/libiberty ; $(MAKE))
|
|---|
| 113 | (cd build/intl ; $(MAKE))
|
|---|
| 114 | (cd build/libcpp ; $(MAKE))
|
|---|
| 115 | (cd build/gcc ; $(MAKE) cc1obj$(EXE) xlimits.h)
|
|---|
| 116 |
|
|---|
| 117 | patch: extract
|
|---|
| 118 | ln -sf `pwd`/source/ffi.c gcc-$(GCC_VERSION)/gcc
|
|---|
| 119 | printf "char *ffi_version = \42%s\42;\n" "$(NOW)" > gcc-$(GCC_VERSION)/gcc/ffi-version.h
|
|---|
| 120 | for f in source/gcc-$(GCC_VERSION)*.diff ; do \
|
|---|
| 121 | (cd gcc-$(GCC_VERSION)/gcc; patch -p0 <../../$$f); \
|
|---|
| 122 | done
|
|---|
| 123 |
|
|---|
| 124 | package: compile
|
|---|
| 125 | mkdir bin
|
|---|
| 126 | cat source/$(PLATFORM)-gcc-$(GCC_VERSION)-h-to-ffi.sh source/h-to-ffi-common > bin/h-to-ffi.sh
|
|---|
| 127 | chmod +x bin/h-to-ffi.sh
|
|---|
| 128 | mkdir ffigen
|
|---|
| 129 | cp -r -p gcc-$(GCC_VERSION)/gcc/ginclude ffigen
|
|---|
| 130 | mv ffigen/ginclude ffigen/include
|
|---|
| 131 | cp -p build/gcc/xlimits.h ffigen/include/limits.h
|
|---|
| 132 | cp -p gcc-$(GCC_VERSION)/gcc/gsyslimits.h ffigen/include/syslimits.h
|
|---|
| 133 | ifeq ($(COPY_OBJC_HEADERS), YES)
|
|---|
| 134 | cp -r -p gcc-$(GCC_VERSION)/libobjc/objc ffigen/include
|
|---|
| 135 | endif
|
|---|
| 136 | mkdir ffigen/bin
|
|---|
| 137 | cp -p build/gcc/cc1obj$(EXE) ffigen/bin/ffigen$(EXE)
|
|---|
| 138 | strip ffigen/bin/ffigen$(EXE)
|
|---|
| 139 | $(TAR) cfz ffigen-bin-$(PLATFORM)-gcc-$(GCC_VERSION)-$(NOW).tar.gz bin ffigen
|
|---|
| 140 |
|
|---|
| 141 | clean:
|
|---|
| 142 | rm -rf gcc-$(GCC_VERSION) ffigen build bin ffigen*tar.gz INSTALL-FFIGEN-$(PLATFORM)-gcc-$(GCC_VERSION)*.txt
|
|---|
| 143 |
|
|---|
| 144 | %.bz2:
|
|---|
| 145 | @echo
|
|---|
| 146 | @echo Obtain the file $@ from a GNU repository \(or gcc.gnu.org mirror\) and copy it to this directory.
|
|---|
| 147 | @echo
|
|---|
| 148 | @exit 2
|
|---|
| 149 |
|
|---|
| 150 | extract: $(ARCHIVES) clean
|
|---|
| 151 | $(TAR) fxj gcc-core-$(GCC_VERSION).tar.bz2
|
|---|
| 152 | $(TAR) fxj gcc-objc-$(GCC_VERSION).tar.bz2
|
|---|