]> git.ipfire.org Git - people/pmueller/ipfire-3.x.git/blob - gcc/gcc.nm
gcc: Fix linking against libgcc on ARM.
[people/pmueller/ipfire-3.x.git] / gcc / gcc.nm
1 ###############################################################################
2 # IPFire.org - An Open Source Firewall Solution #
3 # Copyright (C) - IPFire Development Team <info@ipfire.org> #
4 ###############################################################################
5
6 # Configure build to compile with cloog and ppl.
7 build_cloog_ppl = 1
8
9 name = gcc
10 version = 4.6.2
11 release = 6
12
13 maintainer = Michael Tremer <michael.tremer@ipfire.org>
14 groups = Development/Compilers
15 url = http://gcc.gnu.org/
16 license = GPLv3+ and GPLv2+ with exceptions
17 summary = Various compilers (C, C++, Objective-C, Java, ...).
18
19 description
20 The gcc package contains the GNU Compiler Collection. \
21 You'll need this package in order to compile C code.
22 end
23
24 # This is the at least required version of binutils.
25 required_binutils_version = 2.21.51.0.8-1
26
27 source_dl = http://ftp.gnu.org/gnu/gcc/%{thisapp}/
28 sources = %{thisapp}.tar.gz
29
30 patches = \
31 gcc46-hack.patch0 \
32 gcc46-c++-builtin-redecl.patch0 \
33 gcc46-pr33763.patch0 \
34 gcc46-libgomp-omp_h-multilib.patch0 \
35 gcc46-libtool-no-rpath.patch0 \
36 gcc46-cloog-dl.patch0 \
37 gcc46-pr38757.patch0 \
38 gcc46-no-add-needed.patch0 \
39 gcc46-unwind-debughook-sdt.patch0 \
40 gcc46-ppl-0.10.patch \
41 gcc46-Woverlength-string.patch0 \
42 gcc46-Woverlength-string-asm.patch0 \
43 gcc-4.6.0-piepatches-20110407.patch
44
45 build
46 requires
47 autogen
48 binutils>=%{required_binutils_version}
49 dejagnu
50 elfutils-devel
51 expect
52 flex
53 glibc-devel
54 gmp-devel
55 libffi-devel
56 libmpc-devel
57 mpfr-devel
58 texinfo
59 zlib-devel
60 end
61
62 # If cloog support is enabled, we require the devel packages for build.
63 if "%{build_cloog_ppl}" == "1"
64 requires += cloog-ppl-devel ppl-devel
65 end
66
67 # Build libquadmath (only on x86).
68 build_libquadmath = 0
69
70 # A couple of configure arguments depending on the architecture and
71 # configuration.
72 configure_options =
73
74 if "%{DISTRO_ARCH}" == "x86_64"
75 configure_options = --disable-multilib
76
77 build_libquadmath = 1
78 end
79
80 if "%{DISTRO_ARCH}" == "i686"
81 configure_options = --with-arch=%{DISTRO_ARCH} --with-tune=generic
82
83 build_libquadmath = 1
84 end
85
86 if "%{DISTRO_ARCH}" == "armv5tel"
87 configure_options += --disable-sjlj-exceptions
88
89 configure_options += --with-float=soft
90 end
91
92 if "${DISTRO_ARCH}" == "armv7hl"
93 configure_options += --disable-sjlj-exceptions
94
95 configure_options += \
96 --with-cpu=cortex-a8 \
97 --with-tune=cortex-a8 \
98 --with-arch=armv7-a \
99 --with-float=hard \
100 --with-fpu=vfpv3-d16 \
101 --with-abi=aapcs-linux
102 end
103
104 if "%{build_cloog_ppl}" == "1"
105 configure_options += --with-cloog --with-ppl
106 end
107
108 # CFLAGS for hardening.
109 HARD_CFLAGS = -DEFAULT_PIE_SSP -DEFAULT_RELRO -DEFAULT_BIND_NOW
110
111 prepare_cmds
112 mkdir -v %{DIR_SRC}/gcc-build
113
114 # Remove unneeded features that will save some compile time
115 rm -rf lib{gfortran,java,objc} gcc/{fortran,java,objc,objcp}
116
117 # Apply a sed substitution that will suppress the installation of
118 # libiberty.a. The version of libiberty.a provided by Binutils will be used
119 # instead:
120 sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
121
122 # Branding gcc
123 echo "%{DISTRO_NAME} %{version}-%{release}" > gcc/DEV-PHASE
124
125 # Libgomp uses -Werror regardless of --disable-werror, and this will cause a
126 # build failure when -D_FORTIFY_SOURCE=2 causes build time warnings:
127 sed -e "s/-Werror//" -i libgomp/configure
128
129 # The fixincludes script is known to occasionally erroneously attempt to
130 # "fix" the system headers installed so far. As the headers up to this point
131 # are known to not require fixing, issue the following command to prevent
132 # the fixincludes script from running:
133 sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
134
135 sed -i gcc/Makefile.in \
136 -e "s/-fno-exceptions/& -fno-asynchronous-unwind-tables/"
137
138 # we want to be able to control the pie patch logic via something other
139 # than ALL_CFLAGS...
140 sed -i gcc/Makefile.in \
141 -e '/^ALL_CFLAGS/iHARD_CFLAGS = ' \
142 -e 's|^ALL_CFLAGS = |ALL_CFLAGS = $(HARD_CFLAGS) |'
143
144 # Enable the GCC hardening by default.
145 sed -i gcc/Makefile.in \
146 -e "s|^HARD_CFLAGS = |HARD_CFLAGS = %{HARD_CFLAGS} |"
147
148 # Compile the compiler with -fPIC as well.
149 sed -i gcc/Makefile.in \
150 -e "s|^ESP_NOPIE_CFLAGS = .*|ESP_NOPIE_CFLAGS =|"
151
152 # Default to -gdwarf-4 -fno-debug-types-section rather than -gdwarf-2
153 sed -i gcc/common.opt \
154 -e '/UInteger Var(dwarf_version)/s/Init(2)/Init(4)/' \
155 -e '/flag_debug_types_section/s/Init(1)/Init(0)/' \
156 -e '/dwarf_record_gcc_switches/s/Init(0)/Init(1)/' \
157 -e 's/\(may be either 2, 3 or 4; the default version is \)2\./\14./'
158
159 ./contrib/gcc_update --touch
160 end
161
162 build
163 cd %{DIR_SRC}/gcc-build
164
165 # Modify CFLAGS
166 CFLAGS="%{CFLAGS}"
167 CFLAGS=$(echo ${CFLAGS} | sed -e 's/\(-Wp,\)\?-D_FORTIFY_SOURCE=[12]//g')
168 CFLAGS=$(echo ${CFLAGS} | sed -e 's/-m64//g;s/-m32//g;s/-m31//g')
169 CFLAGS=$(echo ${CFLAGS} | sed -e 's/-march=i.86//g')
170 CFLAGS=$(echo ${CFLAGS} | sed -e 's/ -pipe / /g')
171 CFLAGS=$(echo "${CFLAGS}" | sed -e 's/[[:blank:]]\+/ /g')
172 CXXFLAGS=$(echo ${CFLAGS} | sed -e 's/ -Wall//g')
173
174 CFLAGS="${CFLAGS}" \
175 CXXFLAGS="${CXXFLAGS}" \
176 XCFLAGS="${CFLAGS}" \
177 TCFLAGS="${CFLAGS}" \
178 ../%{thisapp}/configure \
179 --build=%{DISTRO_BUILDTARGET} \
180 --prefix=/usr \
181 --libexecdir=/usr/lib \
182 --mandir=/usr/share/man \
183 --enable-esp \
184 --enable-shared \
185 --enable-threads=posix \
186 --enable-__cxa_atexit \
187 --enable-clocale=gnu \
188 --enable-languages=c,c++,lto \
189 --enable-bootstrap \
190 --enable-checking=release \
191 --disable-werror \
192 --disable-libssp \
193 --disable-static \
194 --with-system-zlib \
195 --with-bugurl=http://bugtracker.ipfire.org \
196 --disable-libunwind-exceptions \
197 --enable-gnu-unique-object \
198 --enable-linker-build-id \
199 %{configure_options}
200
201 # GCC does not support a parallel build.
202 make profiledbootstrap BOOT_CFLAGS="${CFLAGS}"
203 end
204
205 #test
206 # cd %{DIR_SRC}/gcc-build && make check
207 # cd %{DIR_APP} && ./contrib/test_summary
208 #end
209
210 install
211 cd %{DIR_SRC}/gcc-build
212 make install DESTDIR=%{BUILDROOT}
213
214 # Check if the installation path exists.
215 FULLPATH="%{BUILDROOT}/usr/lib/gcc/%{DISTRO_BUILDTARGET}/%{version}"
216 [ -d "${FULLPATH}" ] || exit 1
217
218 mkdir -pv %{BUILDROOT}/lib
219 ln -sfv ../usr/bin/cpp %{BUILDROOT}/lib/cpp
220 ln -sfv gcc %{BUILDROOT}/usr/bin/cc
221
222 # Move libgcc_s to /lib
223 mv -vf %{BUILDROOT}/usr/lib/libgcc_s.so.1 %{BUILDROOT}/lib/
224 case "%{DISTRO_ARCH}" in
225 arm*)
226 rm -f ${FULLPATH}/libgcc_s.so %{BUILDROOT}/usr/lib/libgcc_s.so
227 cat <<EOF >${FULLPATH}/libgcc_s.so
228 /* GNU ld script
229 Use the shared library, but some functions are only in
230 the static library, so try that secondarily. */
231 OUTPUT_FORMAT(elf32-littlearm)
232 GROUP ( /lib/libgcc_s.so.1 libgcc.a )
233 EOF
234 ;;
235 *)
236 ln -svf ../../lib/libgcc_s.so.1 ${FULLPATH}/libgcc_s.so
237 ;;
238 esac
239
240 # Remove some GNU debugger stuff.
241 rm -vf %{BUILDROOT}/usr/lib/lib*.py
242
243 # libgomp
244 mv -vf %{BUILDROOT}/usr/lib/libgomp.spec ${FULLPATH}/
245 ln -svf ../../../libgomp.so.1.0.0 ${FULLPATH}/libgomp.so
246 chmod 755 %{BUILDROOT}/usr/lib/libgomp.so.1.*
247
248 # libstdc++
249 ln -svf ../../../libstdc++.so.6.0.16 ${FULLPATH}/libstdc++.so
250
251 # libmudflap
252 ln -svf ../../../libmudflap.so.0.0.0 ${FULLPATH}/libmudflap.so
253 ln -svf ../../../libmudflapth.so.0.0.0 ${FULLPATH}/libmudflapth.so
254 chmod 755 %{BUILDROOT}/usr/lib/libmudflap{,th}.so.0.*
255
256 # libquadmath
257 if [ "%{build_libquadmath}" = "1" ]; then
258 ln -svf ../../../libquadmath.so.0.* ${FULLPATH}/libquadmath.so
259 chmod 755 %{BUILDROOT}/usr/lib/libquadmath.so.0.*
260 fi
261 end
262
263 keep_libraries
264 /usr/lib/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc.a
265 /usr/lib/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc_eh.a
266 end
267 end
268
269 packages
270 package %{name}
271 groups += Build
272
273 requires
274 binutils>=%{required_binutils_version}
275 glibc-devel
276 gmp-devel
277 cpp=%{thisver}
278 libgcc=%{thisver}
279 libgomp=%{thisver}
280 end
281
282 if "%{build_cloog_ppl}" == "1"
283 requires += cloog-ppl>=0.15
284 end
285 end
286
287 package %{name}-c++
288 summary = C++ support for GCC.
289 description
290 This package adds C++ support to the GNU Compiler Collection.
291 It includes support for most of the current C++ specification,
292 including templates and exception handling.
293 end
294
295 requires
296 gcc=%{thisver}
297 libstdc++=%{thisver}
298 libstdc++-devel=%{thisver}
299 end
300
301 files
302 /usr/bin/*++
303 /usr/lib/gcc/*/*/cc1plus
304 /usr/share/man/man*/*++*
305 end
306 end
307
308 package cpp
309 summary = The C Preprocessor.
310 description
311 Cpp is the GNU C-Compatible Compiler Preprocessor.
312 Cpp is a macro processor which is used automatically
313 by the C compiler to transform your program before actual
314 compilation. It is called a macro processor because it allows
315 you to define macros, abbreviations for longer
316 constructs.
317
318 The C preprocessor provides four separate functionalities: the
319 inclusion of header files (files of declarations that can be
320 substituted into your program); macro expansion (you can define macros,
321 and the C preprocessor will replace the macros with their definitions
322 throughout the program); conditional compilation (using special
323 preprocessing directives, you can include or exclude parts of the
324 program according to various conditions); and line control (if you use
325 a program to combine or rearrange source files into an intermediate
326 file which is then compiled, you can use line control to inform the
327 compiler about where each source line originated).
328
329 You should install this package if you are a C programmer and you use
330 macros.
331 end
332 group = Development/Languages
333
334 files
335 /lib/cpp
336 /usr/bin/cpp
337 /usr/share/man/man1/cpp.1*
338 /usr/lib/gcc/%{DISTRO_BUILDTARGET}/%{version}/cc1
339 end
340 end
341
342 package libgcc
343 summary = GCC shared support library.
344 description
345 This package contains GCC shared support library which is needed
346 e.g. for exception handling support.
347 end
348
349 files
350 /lib/libgcc*.so.*
351 end
352 end
353
354 package libstdc++
355 summary = GNU Standard C++ Library.
356 description
357 The libstdc++ package contains a rewritten standard compliant GCC Standard
358 C++ Library.
359 end
360
361 files
362 /usr/lib/libstdc++*.so.*
363 end
364 end
365
366 package libstdc++-devel
367 summary = Header files and libraries for C++ development.
368 description
369 This is the GNU implementation of the standard C++ libraries. This
370 package includes the header files and libraries needed for C++
371 development. This includes rewritten implementation of STL.
372 end
373
374 requires
375 libstdc++=%{thisver}
376 end
377
378 files
379 /usr/include/c++
380 /usr/lib/libstdc++*.so
381 end
382 end
383
384 package libgomp
385 summary = GCC OpenMP v3.0 shared support library.
386 description
387 This package contains GCC shared support library which is needed
388 for OpenMP v3.0 support.
389 end
390
391 files
392 /usr/lib/libgomp*.so.*
393 end
394 end
395
396 package libmudflap
397 summary = GCC mudflap shared support library.
398 description
399 This package contains GCC shared support library which is needed
400 for mudflap support.
401 end
402
403 files
404 /usr/lib/libmudflap*.so.*
405 end
406 end
407
408 package libmudflap-devel
409 summary = Development files for GCC mudflap support.
410 description
411 This package contains headers for building mudflap-instrumented programs.
412
413 To instrument a non-threaded program, add -fmudflap
414 option to GCC and when linking add -lmudflap, for threaded programs
415 also add -fmudflapth and -lmudflapth.
416 end
417
418 requires
419 libmudflap=%{thisver}
420 end
421
422 files
423 /usr/lib/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/mf-runtime.h
424 /usr/lib/gcc/%{DISTRO_BUILDTARGET}/%{version}/libmudflap.so
425 /usr/lib/gcc/%{DISTRO_BUILDTARGET}/%{version}/libmudflapth.so
426 end
427 end
428
429 if "%{build_libquadmath}" == "1"
430 package libquadmath
431 summary = GCC __float128 shared support library.
432 description
433 This package contains GCC shared support library which is needed
434 for __float128 math support and for Fortran REAL*16 support.
435 end
436
437 files
438 /usr/lib/libquadmath*.so.*
439 end
440 end
441
442 package libquadmath-devel
443 summary = Development files for GCC __float128 support.
444 description
445 This package contains headers for building Fortran programs using
446 REAL*16 and programs using __float128 math.
447 end
448
449 requires
450 gcc=%{thisver}
451 libquadmath=%{thisver}
452 end
453
454 files
455 /usr/lib/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/quadmath.h
456 /usr/lib/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/quadmath_weak.h
457 /usr/lib/gcc/%{DISTRO_BUILDTARGET}/%{version}/libquadmath.so
458 end
459 end
460 end
461
462 package gcc-plugin-devel
463 summary = Support for compiling GCC plugins.
464 description
465 This package contains header files and other support files
466 for compiling GCC plugins. The GCC plugin ABI is currently
467 not stable, so plugins must be rebuilt any time GCC is updated.
468 end
469
470 requires
471 gcc=%{thisver}
472 gmp-devel>=4.1.2-8
473 mpfr-devel>=2.2.1
474 libmpc-devel>=0.8.1
475 end
476
477 files
478 /usr/lib/gcc/%{DISTRO_BUILDTARGET}/%{version}/plugin
479 end
480 end
481
482 package %{name}-debuginfo
483 template DEBUGINFO
484 end
485 end