3
# Build gcc-mingw-w64 using gcc-4.5-source.
4
# Copyright © 2010 Stephen Kitt <steve@sk2.org>
6
# Uncomment this to turn on verbose mode.
9
top_dir := $(shell pwd)
10
gcc_dir := /usr/src/gcc-4.5
11
upstream_dir := $(top_dir)/src
12
build_dir := $(top_dir)/build
13
stampdir := $(top_dir)/stamp
14
deb_version := $(shell dpkg-query -W -f="\$${Version}\n" gcc-4.5-source)
15
deb_upstream_version := $(shell echo $(deb_version) | cut -d- -f1)
16
gnu_upstream_version := $(shell echo $(deb_upstream_version) | cut -d. -f1-3)
17
base_version := $(shell echo $(deb_version) | sed -e 's/\([1-9]\.[0-9]\).*-.*/\1/')
19
# Include the rules variant - symlink rules.bootstrap to produce the
20
# minimal gcc required to build mingw-w64, or rules.full to produce
22
include debian/rules.variant
24
targets := i686-w64-mingw32 x86_64-w64-mingw32
26
CFLAGS = $(shell dpkg-buildflags --get CFLAGS)
29
# Number of jobs to run for build
30
ifeq ($(USE_NJOBS),no)
34
# Increase to 192 if building Java
36
NUM_CPUS := $(shell if echo $(USE_NJOBS) | grep -q -E '^[0-9]+$$'; \
37
then echo $(USE_NJOBS); \
38
else getconf _NPROCESSORS_ONLN 2>/dev/null || echo 1; fi)
39
USE_CPUS := $(shell mt=`awk '/^MemTotal/ { print $$2 }' /proc/meminfo`; \
40
awk -vn=$(NUM_CPUS) -vmt=$$mt -vm=$(MEM_PER_CPU) \
41
'END { mt/=1024; n2 = int(mt/m); print n==1 ? 1 : n2<n+1 ? n2 : n+1}' < /dev/null)
42
ifneq (,$(strip $(USE_CPUS)))
43
NJOBS := -j $(USE_CPUS)
47
# Support parallel=<n> in DEB_BUILD_OPTIONS (see #209008)
48
ifneq (,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS))))
49
NJOBS := -j $(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS))))
53
patchdir = $(gcc_dir)/debian/patches
55
unpack_stamp = $(stampdir)/unpack
56
patch_stamp = $(stampdir)/patch
57
GFDL_INVARIANT_FREE=yes
58
srcdir=$(upstream_dir)
59
include $(gcc_dir)/debian/rules.patch
61
unpack: $(unpack_stamp)
63
tar xf $(gcc_dir)/gcc-$(gnu_upstream_version)-dfsg.tar.*
64
rm -rf $(upstream_dir)
65
mv gcc-$(deb_upstream_version) $(upstream_dir)
68
# Apply our extra patch here...
69
patch -p0 < debian/patches/mingw-include.patch
70
patch -p0 < debian/patches/disable-multilib.patch
75
rm -rf $(stampdir) $(build_dir) $(upstream_dir) .pc autotools_files series
78
# Configuration constructed as in the gcc package
81
libexecdir=$(PF)/$(libdir)
83
# Standard Debian configuration flags
84
# TODO Re-enable shared, multilib and linker-build-id
89
--enable-linker-build-id \
91
--libexecdir=/$(libexecdir) \
92
--without-included-gettext
94
--libdir=/$(PF)/$(libdir) \
95
--enable-libstdcxx-time=yes \
99
--enable-version-specific-runtime-libs
100
# version-specific-runtime-libs puts target-specific libraries in
101
# /usr/lib/gcc rather than /usr/$(target)
104
--enable-languages=$(languages)
105
#CONFFLAGS = --disable-shared --disable-multilib --prefix=/usr --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-languages=c,c++,fortran --with-gnu-ld --with-gnu-as --enable-leading-mingw64-underscores
107
configure-stamp: $(patch_stamp)
110
for target in $(targets); do \
111
dh_auto_configure -B$(build_dir)/$$target -D$(upstream_dir) -- \
114
--with-gxx-include-dir=/$(PF)/include/c++/$(base_version) \
115
--with-as=/usr/bin/$$target-as \
116
--with-ld=/usr/bin/$$target-ld; \
121
build-stamp: configure-stamp
124
for target in $(targets); do \
125
cd $(build_dir)/$$target && $(MAKE) $(NJOBS) $(BUILD_TARGET); \
129
install: install-stamp
130
install-stamp: build-stamp
135
for target in $(targets); do \
136
cd $(build_dir)/$$target && $(MAKE) DESTDIR=$(top_dir)/debian/$(package) $(INSTALL_TARGET); \
139
# Remove files which conflict with other packages
141
rm -rf $(top_dir)/debian/$(package)/usr/share/locale
143
rm -f $(top_dir)/debian/$(package)/usr/lib/libiberty.a
144
# libstdc++6-4.5-dbg (potentially)
145
rm -rf $(top_dir)/debian/$(package)/usr/share/gcc-$(gnu_upstream_version)/python
147
ls -1 $(top_dir)/debian/$(package)/usr/include/c++/$(base_version)/|grep -v w64-mingw32|xargs -I{} rm -rf $(top_dir)/debian/$(package)/usr/include/c++/$(base_version)/{}
149
rm -rf $(top_dir)/debian/$(package)/usr/share/info
150
rm -rf $(top_dir)/debian/$(package)/usr/share/man/man7
152
# No need to ship empty manpages
153
rm -rf $(top_dir)/debian/$(package)/usr/share/man/man1
155
# We don't need libiberty
156
rm -f $(patsubst %,$(top_dir)/debian/$(package)/$(PF)/%/lib/libiberty.a,$(targets))
159
rm -f $(patsubst %,$(top_dir)/debian/$(package)/$(PF)/lib/gcc/%/$(gnu_upstream_version)/*.la,$(targets))
161
# Move libraries to base directories and add version-specific links
162
ifneq ($(base_version),$(gnu_upstream_version))
163
[ -d $(top_dir)/debian/$(package)/usr/include/c++ ] && cd $(top_dir)/debian/$(package)/usr/include/c++ && ln -s $(base_version) $(gnu_upstream_version) || true
164
for target in $(targets); do \
165
cd $(top_dir)/debian/$(package)/$(PF)/lib/gcc/$$target && \
166
mv $(gnu_upstream_version) $(base_version) && \
167
ln -s $(base_version) $(gnu_upstream_version); \
172
find $(top_dir)/debian/$(package)/ -type d -empty | while read i; do rmdir $$i; done; \
178
binary-arch: build install
183
dh_installchangelogs $(upstream_dir)/ChangeLog
184
dh_strip -Xw64-mingw32/lib -Xw64-mingw32/$(base_version)/lib
190
dh_gencontrol -- -v$(deb_version) -Vlocal:Version=$(deb_upstream_version)
194
binary: binary-indep binary-arch
196
.PHONY: binary-indep binary-arch binary clean build install