source: trunk/ffigen4/Makefile@ 57

Last change on this file since 57 was 51, checked in by gb, 16 years ago

Try not to assume that /bin/arch exists on Linux.
Maybe handle 32-bit x86 Linux (needs testing.)

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