Preparing GCC Build: Difference between revisions

m
Replace deprecated enclose attributes
[unchecked revision][unchecked revision]
m (Update Gentoo notes)
m (Replace deprecated enclose attributes)
 
(26 intermediate revisions by 21 users not shown)
Line 1:
{{Rating|1}}
 
<noinclude>'''Note that this article is meant to be included into the [[GCC Cross-Compiler]] and [[Building GCC]] as they share this common section.'''</noinclude>
 
The GNU Compiler Collection is an advanced piece of software with dependencies. You need the following the following in order to build GCC:
 
* A Unix-like environment (Windows users can use the Windows Subsystem for Linux or Cygwin)
Line 15 ⟶ 17:
* Texinfo
* ISL (optional)
* CLooG (optional)
 
=== Installing Dependencies ===
Line 28 ⟶ 29:
| Cygwin
| OpenBSD
| Arch
|-
|How to install
|Normally
|'''<tt>sudo apt install</tt> ''foo'''''
|'''<tt>libcloogsudo emerge -isl-devask</tt> ''foo'''''
|?
|'''<tt>sudo dnf install</tt> ''foo'''''
|?
|Cygwin GUI setup
|?
|'''<tt>doas pkg_add</tt> ''foo'''''
|'''<tt>libcloogpacman -isl-develSyu</tt> ''foo'''''
|-
|Compiler
|N/A
|'''<tt>build-essential</tt>'''
|'''<tt>sys-devel/gcc</tt>'''
|?
|'''<tt>gcc gcc-c++</tt>'''
|?
|'''<tt>mingw64-x86_64-gcc-g++</tt>''' / '''<tt>mingw64-i686-gcc-g++</tt>'''
|?
|Preinstalled
|'''<tt>base-devel</tt>'''
|-
|Make
|N/A
|'''<tt>build-essential</tt>'''
|'''<tt>dev-build/make</tt>'''
|?
|'''<tt>make</tt>'''
|?
|'''<tt>make</tt>'''
|?
|Preinstalled
|'''<tt>base-devel</tt>'''
|-
|[https://www.gnu.org/software/bison/ Bison]
|[https://ftp.gnu.org/gnu/bison/]
|'''<tt>bison</tt>'''
|'''<tt>sys-devel/bison</tt>'''
|'''<tt>bison</tt>'''
|'''<tt>bison</tt>'''
|?
|'''<tt>base-devel</tt>'''
|?
|?
|?
|-
|[https://github.com/westes/flex Flex]
|[https://github.com/westes/flex/releases]
|'''<tt>flex</tt>'''
|'''<tt>sys-devel/flex</tt>'''
|'''<tt>flex</tt>'''
|'''<tt>flex</tt>'''
|?
|'''<tt>base-devel</tt>'''
|?
|?
|?
|-
|[https://gmplib.org/ GMP]
Line 75 ⟶ 82:
|'''<tt>gmp-devel</tt>'''
|'''<tt>libgmp-devel</tt>'''
|'''<tt>gmp</tt>'''
|'''<tt>gmp</tt>'''
|-
Line 83 ⟶ 91:
|'''<tt>libmpc-devel</tt>'''
|'''<tt>libmpc-devel</tt>'''
|'''<tt>libmpc</tt>'''
|'''<tt>libmpc</tt>'''
|-
Line 91 ⟶ 100:
|'''<tt>mpfr-devel</tt>'''
|'''<tt>libmpfr-devel</tt>'''
|'''<tt>mpfr</tt>'''
|'''<tt>mpfr</tt>'''
|-
Line 96 ⟶ 106:
|[https://ftp.gnu.org/gnu/texinfo/]
|'''<tt>texinfo</tt>'''
|'''<tt>sys-apps/texinfo</tt>'''
|?
|?
|'''<tt>texinfo</tt>'''
|'''<tt>texinfo</tt>'''
|'''<tt>texinfo</tt>'''
|-
|'''<tt>base-devel</tt>'''
|[https://www.cloog.org/ CLooG] (Optional)
|[https://www.cloog.org/ CLooG]
|'''<tt>libcloog-isl-dev</tt>'''
|?
|?
|'''<tt>libcloog-isl-devel</tt>'''
|N/A
|-
|[http://isl.gforge.inria.fr/ ISL] (Optional)
|[http://isl.gforge.inria.fr/]
|'''<tt>libisl-dev</tt>'''
|'''<tt>dev-libs/isl</tt>'''
|?
|'''<tt>isl-devel</tt>'''
|?
|'''<tt>libisl-devel</tt>'''
|N/A
|N/A
|}
 
You need to have Texinfo installed to build Binutils. You need to have GMP, MPC, and MPFR installed to build GCC. GCC optionally can make use of the CLooG and ISL librarieslibrary.
 
For instance, you can install '''<tt>libgmp3-dev</tt>''' on Debian by running the shell command: '''<tt>sudo apt install libgmp3-dev</tt>'''
Line 124 ⟶ 128:
'''Note:''' Version 5.x (or later) of Texinfo is known to be incompatible with the current Binutils 2.23.2 release (and older). You can check your current version using <tt>makeinfo --version</tt>. If your version is too new and you encounter problems during the build, you will need to either use Binutils 2.24 release (or newer) or install an older version of Texinfo - perhaps through building from source - and add it to your <tt>PATH</tt> prior and during the Binutils build.
 
'''Note:''' GCC has dropped support for CLooG in the 5.x releases [https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=r5-2770-geae1a5d419d30e], and many distributions have dropped the CLooG package (e.g. Gentoo in December 2022).
'''Note:''' Version 0.13 (or later) of ISL is incompatible with the current CLooG 0.18.1 release (and older). Use version 0.12.2 of ISL or the build '''will''' fail.
 
'''Note:''' GCC requires at least ISL version 0.15.
 
'''Note:''' If you are using '''Cygwin''', it is recommended to install the <tt>'''libintl-devel'''</tt> package (I couldn't build a cross-compiler without this package)
 
=== Downloading the Source Code ===
Line 141 ⟶ 149:
=== Gentoo Users ===
 
Gentoo letsoffers you[https://wiki.gentoo.org/wiki/Crossdev crossdev] to set up a cross-development toolchain:
 
emerge -av crossdev
Line 149 ⟶ 157:
This will install a GCC cross-compiler into a "slot", i.e. alongside already-existing compiler versions. You can install several cross-compilers that way, simply by changing target designations. An unfortunate downside is that it will also pull in gentoo patches and pass additional configure options that differ from the official [[GCC Cross-Compiler]] setup, and they might behave differently.
 
After the compilation ranfinishes successfully, you can now use your cross-compiler byis callable callingvia <target>-gcc. You can also use gcc-config to toggle between compiler versions should you need to do so. Don't replace your system compiler with a cross-compiler. The package manager will also suggest updates as soon as they become available.
 
You can uninstall the cross-compiler by calling ''crossdev --clean <target>''. Read the [httphttps://wwwwiki.gentoo.org/projwiki/en/base/embedded/cross-development.xmlCross_build_environment cross-development] document for additional information.
 
Note that the version numbers to binutils and gcc are ''Gentoo package versions'', i.e. there might be a suffix to the "official" (GNU) version that addresses additional patchsets supplied by the Gentoo maintainers. (For example, ''--binutils 2.24-r3 --gcc 4.8.3'' is the latest stable package pair at the time of this writing.) You can omit the version numbers to use the latest package available.
 
Portage uses overlays to store packages that are not part of the original package management. Crossdev needs one overlay where it can store its binutils and gcc packages before building them. You can configure one properly, or you can use PORTDIR_OVERLAY to point at where it should keep its package manager files. Using PORTDIR_OVERLAY is not a good idea with existing overlays, but by then you should know how you have personally set them up earlier anyway and how to do it properly. See [https://wiki.gentoo.org/wiki/Custom_repository#Crossdev].
 
=== OS XmacOS Users ===
Additionally, OS XmacOS users need a replacement libiconv because the system libiconv is seriously out of date. OS XmacOS users can download the latest libiconv release by visiting the [https://gnu.org/software/libiconv/ libiconv website] or directly accessing the [https://ftp.gnu.org/gnu/libiconv/ GNU main FTP mirror]. Otherwise you may get unresolved symbol errors related to libiconv when compiling GCC 4.3 or higher on OS X 10.4 and 10.5.
 
When compiling GCC 4.3 or higher on OS X 10.4 and 10.5, you may get unresolved symbol errors related to libiconv. This is because the version shipped with OS X is seriously out of date. Install a new version (compile it yourself or use MacPorts) and add <tt>--with-libiconv-prefix=/opt/local</tt> (or <tt>/usr/local</tt> if you compiled it yourself) to GCC's <tt>./configure</tt> line. Alternatively you may place the libiconv source as gcc-x.y.z/libiconv and it will be compiled as part of the GCC compilation process. (This trick also works for MPFR, GMP, and MpcMPC).
 
The makefiles of Binutils and GCC use the <sourcesyntaxhighlight lang="make" enclose="none"inline>$(CC)</sourcesyntaxhighlight> variable to invoke the compiler. On OS X, this resolves to <sourcesyntaxhighlight lang="text" enclose="none"inline>GCCgcc</sourcesyntaxhighlight> by default, which is actually not the "real thing", but <sourcesyntaxhighlight lang="bash" enclose="none"inline>Clangclang</sourcesyntaxhighlight>. NotePrior that since at leastto OS X 10.8, the Clang that came with Xcode's Command Line Tools package comeswas withnot Clang,able andto thisbuild versiona ofworking ClangGCC. doesUsers indeedrunning workOS toX compile10.7 aor workingbelow versionmay ofneed to find and install GCC, unlikeeither from [https://brew.sh Homebrew], or from somewhere on Apple's website. You can try with the old GCC that comes whatpreinstalled theseon instructionssome previouslymacOS reflectedversions.
 
<sourcesyntaxhighlight lang="bash">
Note that users running OS X 10.7 may need to find and install GCC, either from [http://brew.sh Homebrew], or from somewhere on Apple's website.
Thus, the instructions below are really only relevant for these users, but your mileage may vary.
<source lang="bash">
# This is only necessary for OS X users running 10.7 or below.
export CC=/usr/bin/gcc-4.2
Line 172 ⟶ 178:
export CPP=/usr/bin/cpp-4.2
export LD=/usr/bin/gcc-4.2
</syntaxhighlight>
</source>
 
You mightwill want to unset these exports once you compiled and installed the cross compiler, as it might confuse other builds. '''Do not''' make these permanent!
 
'''Note for Lion users:''' If you're on Lion (or above) chances are that you don't have the "real" GCC since Apple removed it from the Xcode package, but you can still install it. You can do it via Homebrew or by compiling from source, both are perfectly described on [httphttps://apple.stackexchange.com/a/38247 a StackExchange answer].
 
'''Note for Maverick users:''' You can build binutils-2.24 and gcc-4.8.3 (possible other version) with Xcode 5.1.1. Note that building GCC with LLVM is not officially supported and may cause interesting bugs, if you are willing to take this risk and save time building host-gcc just to compile a cross-gcc, follow this.
Install GMP, MPFR, Mpc with [http://httphttps://www.macports.org/ MacPorts].
 
sudo port install gmp mpfr libmpc
 
Line 194 ⟶ 201:
--with-gmp=/usr --with-mpc=/opt/local --with-mpfr=/opt/local
 
*'''Note:''' that thereThere is an issue with port's GMP, we useso the version from OS X from /usr is used instead.
'''Note2:''' If you still have some errors, try making a case-sensitive APFS disk image using disk utility app and build from there
 
=== Windows Users ===
Line 208 ⟶ 216:
 
'''Windows Subsystem for Linux (Beta) Note:''' You cannot have your cross compiler in the /mnt/c/ (or /mnt/"x") areas, as trying to compile your cross-compiler there will generate errors, whereas building to $HOME/opt/cross works perfectly. This is fixed with Windows Update KB3176929
 
=== OpenBSD Users ===
OpenBSD users might need to install "gcc" package from ports because base system's GCC is very outdated. If you want to build GCC, try to use the ports' version instead of the latest version available and apply all patches from ports to your build. Also, if the build fails during compiling lto-plugin, a temporary solution is to disable LTO altogether during configure stage of building GCC by adding <tt>--disable-lto</tt>
 
[[Category:Compilers]]