From d4f64280e38cb25eca813ea7685e71fe4e81b2dd Mon Sep 17 00:00:00 2001 From: Ed Reel Date: Sat, 8 Jun 2019 17:09:25 -0500 Subject: [PATCH] Update gcc packages (#3306) Update 7.4.0 to 7.4.0-1 Update 8.2.0 to 8.3.0 Add gcc_tools package Add gcc_tools dependency to buildessential Add gcc_tools to core_packages.txt Update gcc8 version in install.sh Add pre-built binaries --- install.sh | 16 ++--- packages/buildessential.rb | 3 +- packages/gcc7.rb | 83 +++++++++++++--------- packages/gcc8.rb | 94 +++++++++++++++---------- packages/gcc_tools.rb | 136 +++++++++++++++++++++++++++++++++++++ tools/core_packages.txt | 1 + 6 files changed, 256 insertions(+), 77 deletions(-) create mode 100644 packages/gcc_tools.rb diff --git a/install.sh b/install.sh index 5961d73ef..93d289217 100755 --- a/install.sh +++ b/install.sh @@ -48,8 +48,8 @@ urls=() sha256s=() case "${ARCH}" in "aarch64") - urls+=('https://dl.bintray.com/chromebrew/chromebrew/gcc8-8.2.0-chromeos-armv7l.tar.xz') - sha256s+=('536323fc5dd35e53665a19e65c636f288153efe4cdf31617c32103c64593b285') + urls+=('https://dl.bintray.com/chromebrew/chromebrew/gcc8-8.3.0-chromeos-armv7l.tar.xz') + sha256s+=('fbd8a589befb3d10400af6e4975d02a6940bab4907628f8fc0d6913ea89f70ae') urls+=('https://dl.bintray.com/chromebrew/chromebrew/ruby-2.5.3-chromeos-armv7l.tar.xz') sha256s+=('5e485a0320b298e1f5c4ff50d98c6fe6d06ad9a38d9119d580a8b469418e1e6a') urls+=('https://dl.bintray.com/chromebrew/chromebrew/libiconv-1.15-1-chromeos-armv7l.tar.xz') @@ -64,8 +64,8 @@ case "${ARCH}" in urls+=('https://github.com/snailium/chrome-cross/releases/download/v1.8.1/xz-5.2.3-chromeos-armv7l.tar.gz') sha256s+=('4dc9f086ee7613ab0145ec0ed5ac804c80c620c92f515cb62bae8d3c508cbfe7') fi - urls+=('https://dl.bintray.com/chromebrew/chromebrew/gcc8-8.2.0-chromeos-armv7l.tar.xz') - sha256s+=('536323fc5dd35e53665a19e65c636f288153efe4cdf31617c32103c64593b285') + urls+=('https://dl.bintray.com/chromebrew/chromebrew/gcc8-8.3.0-chromeos-armv7l.tar.xz') + sha256s+=('fbd8a589befb3d10400af6e4975d02a6940bab4907628f8fc0d6913ea89f70ae') urls+=('https://dl.bintray.com/chromebrew/chromebrew/ruby-2.5.3-chromeos-armv7l.tar.xz') sha256s+=('5e485a0320b298e1f5c4ff50d98c6fe6d06ad9a38d9119d580a8b469418e1e6a') urls+=('https://dl.bintray.com/chromebrew/chromebrew/libiconv-1.15-1-chromeos-armv7l.tar.xz') @@ -76,8 +76,8 @@ case "${ARCH}" in sha256s+=('d8fae766d77818ef95ae8a993bda0c03730d773cfb8392ceaaf6c8697206409c') ;; "i686") - urls+=('https://dl.bintray.com/chromebrew/chromebrew/gcc8-8.2.0-chromeos-i686.tar.xz') - sha256s+=('e37ca8d49198beaa9ba582fc25fa598ab3cd5ed7e46f96a03176fb9002cc6f7b') + urls+=('https://dl.bintray.com/chromebrew/chromebrew/gcc8-8.3.0-chromeos-i686.tar.xz') + sha256s+=('4d625e92969fde16c1a92601740e22c07331f8056452edf7cf0bf2c1c88aa152') urls+=('https://dl.bintray.com/chromebrew/chromebrew/ruby-2.5.3-chromeos-i686.tar.xz') sha256s+=('6f4a5b96c31ef5ee4f09ac15da4c7a4a9d838ed5233038136ead1e155d17f342') urls+=('https://dl.bintray.com/chromebrew/chromebrew/libiconv-1.15-1-chromeos-i686.tar.xz') @@ -88,8 +88,8 @@ case "${ARCH}" in sha256s+=('ccdea94d6dcc0bdd27b364cd99f53e9aba6f90f0b8272a5f3856bf2a9a32beb6') ;; "x86_64") - urls+=('https://dl.bintray.com/chromebrew/chromebrew/gcc8-8.2.0-chromeos-x86_64.tar.xz') - sha256s+=('6d982f3c35acd3a738e176a3f3b8c4ea093c7be86882153a7711841cf0c80737') + urls+=('https://dl.bintray.com/chromebrew/chromebrew/gcc8-8.3.0-chromeos-x86_64.tar.xz') + sha256s+=('ae8c8c33e4090f7fdbd39b2364754dcfc5f6bdd9a74062fde3eeb6272562f48b') urls+=('https://dl.bintray.com/chromebrew/chromebrew/ruby-2.5.3-chromeos-x86_64.tar.xz') sha256s+=('352b78fc883cf8936136991fda9ca5d49e90b2951626158d6af8ef4b58d67f97') urls+=('https://dl.bintray.com/chromebrew/chromebrew/libiconv-1.15-1-chromeos-x86_64.tar.xz') diff --git a/packages/buildessential.rb b/packages/buildessential.rb index c8c999058..0aef6210e 100644 --- a/packages/buildessential.rb +++ b/packages/buildessential.rb @@ -3,11 +3,12 @@ require 'package' class Buildessential < Package description 'A collection of tools essential to compile and build software.' homepage '' - version '1.4' + version '1.5' is_fake depends_on 'gcc8' + depends_on 'gcc_tools' depends_on 'linuxheaders' depends_on 'make' depends_on 'pkgconfig' diff --git a/packages/gcc7.rb b/packages/gcc7.rb index d39339b26..98c6a8396 100644 --- a/packages/gcc7.rb +++ b/packages/gcc7.rb @@ -3,10 +3,15 @@ require 'package' class Gcc7 < Package description 'The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, and Go.' homepage 'https://www.gnu.org/software/gcc/' - version '7.4.0' + version '7.4.0-1' source_url 'https://ftpmirror.gnu.org/gcc/gcc-7.4.0/gcc-7.4.0.tar.xz' source_sha256 'eddde28d04f334aec1604456e536416549e9b1aa137fc69204e65eb0c009fe51' + if ARGV[0] == 'install' + gccver = `gcc -v 2>&1 | tail -1 | cut -d' ' -f3`.chomp + abort "GCC version #{gccver} already installed.".lightgreen unless "#{gccver}" == "No" || "#{gccver}" == "gcc:" + end + binary_url ({ aarch64: 'https://dl.bintray.com/chromebrew/chromebrew/gcc7-7.4.0-chromeos-armv7l.tar.xz', armv7l: 'https://dl.bintray.com/chromebrew/chromebrew/gcc7-7.4.0-chromeos-armv7l.tar.xz', @@ -14,16 +19,16 @@ class Gcc7 < Package x86_64: 'https://dl.bintray.com/chromebrew/chromebrew/gcc7-7.4.0-chromeos-x86_64.tar.xz', }) binary_sha256 ({ - aarch64: '07126320a193d947aeac51f1827ff954c322a8f43014f3cff146715b72f9d7f8', - armv7l: '07126320a193d947aeac51f1827ff954c322a8f43014f3cff146715b72f9d7f8', - i686: '72cd956d055ad418b052dab407ec3a2b16663b09c396073a23bd12828fcf03c3', - x86_64: '6cce57e98836ccc3c6773df1627bca2102b4f89c7abf64dc47f7b97120b0e01b', + aarch64: '864e1edf328aca17f4caa9dc1698cf8b1927c9231790b76e2d68bff16065466c', + armv7l: '864e1edf328aca17f4caa9dc1698cf8b1927c9231790b76e2d68bff16065466c', + i686: '94dfbccb7ccefb5b7515549de2fe1a770cd0bf85293d37fc162986fcbbfcf6b5', + x86_64: '0374021c26ffc10b65547b7e86f729ec4e966ce66a429e23189ea6e20fb8fcd4', }) depends_on 'unzip' => :build depends_on 'gawk' => :build depends_on 'dejagnu' => :build # for test - depends_on 'icu4c' => :build # icu version 62.1 + depends_on 'icu4c' => :build depends_on 'python27' => :build depends_on 'python3' => :build @@ -57,7 +62,7 @@ class Gcc7 < Package "--disable-libmpx", "--enable-static", "--enable-shared", - "--program-suffix=-7.3", + "--program-suffix=-#{version}", "--with-arch=armv7-a", "--with-tune=cortex-a15", "--with-fpu=neon", @@ -78,7 +83,7 @@ class Gcc7 < Package "--disable-libmpx", "--enable-static", "--enable-shared", - "--program-suffix=-7.3", + "--program-suffix=-#{version}", "--with-arch-64=x86-64", "--with-default-libstdcxx-abi=gcc4-compatible" when 'i686' @@ -96,7 +101,7 @@ class Gcc7 < Package "--disable-libmpx", "--enable-static", "--enable-shared", - "--program-suffix=-7.3", + "--program-suffix=-#{version}", "--with-arch-32=i686", "--with-default-libstdcxx-abi=gcc4-compatible" end @@ -111,8 +116,7 @@ class Gcc7 < Package # preserve for check, skip check for current version def self.check Dir.chdir("objdir") do - #system "ulimit -s 32768" - #system "make -k check -j8" + #system "make -k check -j#{CREW_NPROC}" #system "../contrib/test_summary" end end @@ -121,6 +125,10 @@ class Gcc7 < Package Dir.chdir("objdir") do system "make", "DESTDIR=#{CREW_DEST_DIR}", "install-strip" + gcc_arch = `gcc -dumpmachine`.chomp + gcc_dir = "gcc/#{gcc_arch}/#{version}" + gcc_libdir = "#{CREW_LIB_PREFIX}/#{gcc_dir}" + # http://www.linuxfromscratch.org/lfs/view/development/chapter06/gcc.html#contents-gcc # move a misplaced file # The installation stage puts some files used by gdb under the #{CREW_LIB_PREFIX} directory. This generates spurious error messages when performing ldconfig. This command moves the files to another location. @@ -131,29 +139,42 @@ class Gcc7 < Package system "install -v -dm755 #{CREW_DEST_LIB_PREFIX}/bfd-plugins" # Add a compatibility symlink to enable building programs with Link Time Optimization (LTO) - system "ln -sfv #{CREW_PREFIX}/libexec/gcc/$(gcc -dumpmachine)/7.3.0/liblto_plugin.so #{CREW_DEST_LIB_PREFIX}/bfd-plugins/" + system "ln -sfv #{CREW_PREFIX}/libexec/#{gcc_dir}/liblto_plugin.so #{CREW_DEST_LIB_PREFIX}/bfd-plugins/" + + # Fix for clang + Dir.chdir "#{CREW_DEST_LIB_PREFIX}/#{gcc_dir}" do + system "find . -type f -maxdepth 1 -exec ln -sfv #{gcc_libdir}/{} #{CREW_DEST_LIB_PREFIX}/{} \\;" + end # Make symbolic links - system "ln -sv #{CREW_PREFIX}/bin/gcc-7.3 #{CREW_DEST_PREFIX}/bin/cc" - system "ln -sv #{CREW_PREFIX}/bin/gcc-7.3 #{CREW_DEST_PREFIX}/bin/gcc" - system "ln -sv #{CREW_PREFIX}/bin/c++-7.3 #{CREW_DEST_PREFIX}/bin/c++" - system "ln -sv #{CREW_PREFIX}/bin/g++-7.3 #{CREW_DEST_PREFIX}/bin/g++" - system "ln -sv #{CREW_PREFIX}/bin/cpp-7.3 #{CREW_DEST_PREFIX}/bin/cpp" - system "ln -sv #{CREW_PREFIX}/bin/gcc-ar-7.3 #{CREW_DEST_PREFIX}/bin/gcc-ar" - system "ln -sv #{CREW_PREFIX}/bin/gcc-nm-7.3 #{CREW_DEST_PREFIX}/bin/gcc-nm" - system "ln -sv #{CREW_PREFIX}/bin/gcc-ranlib-7.3 #{CREW_DEST_PREFIX}/bin/gcc-ranlib" - system "ln -sv #{CREW_PREFIX}/bin/gcov-7.3 #{CREW_DEST_PREFIX}/bin/gcov" - system "ln -sv #{CREW_PREFIX}/bin/gcov-dump-7.3 #{CREW_DEST_PREFIX}/bin/gcov-dump" - system "ln -sv #{CREW_PREFIX}/bin/gcov-tool-7.3 #{CREW_DEST_PREFIX}/bin/gcov-tool" - system "ln -sv #{CREW_PREFIX}/bin/gfortran-7.3 #{CREW_DEST_PREFIX}/bin/gfortran" + system "ln -sv #{CREW_PREFIX}/bin/gcc-#{version} #{CREW_DEST_PREFIX}/bin/cc" + system "ln -sv #{CREW_PREFIX}/bin/gcc-#{version} #{CREW_DEST_PREFIX}/bin/gcc" + system "ln -sv #{CREW_PREFIX}/bin/c++-#{version} #{CREW_DEST_PREFIX}/bin/c++" + system "ln -sv #{CREW_PREFIX}/bin/g++-#{version} #{CREW_DEST_PREFIX}/bin/g++" + system "ln -sv #{CREW_PREFIX}/bin/cpp-#{version} #{CREW_DEST_PREFIX}/bin/cpp" + system "ln -sv #{CREW_PREFIX}/bin/gcc-ar-#{version} #{CREW_DEST_PREFIX}/bin/gcc-ar" + system "ln -sv #{CREW_PREFIX}/bin/gcc-nm-#{version} #{CREW_DEST_PREFIX}/bin/gcc-nm" + system "ln -sv #{CREW_PREFIX}/bin/gcc-ranlib-#{version} #{CREW_DEST_PREFIX}/bin/gcc-ranlib" + system "ln -sv #{CREW_PREFIX}/bin/gcov-#{version} #{CREW_DEST_PREFIX}/bin/gcov" + system "ln -sv #{CREW_PREFIX}/bin/gcov-dump-#{version} #{CREW_DEST_PREFIX}/bin/gcov-dump" + system "ln -sv #{CREW_PREFIX}/bin/gcov-tool-#{version} #{CREW_DEST_PREFIX}/bin/gcov-tool" + system "ln -sv #{CREW_PREFIX}/bin/gfortran-#{version} #{CREW_DEST_PREFIX}/bin/gfortran" - system "ln -sv #{CREW_PREFIX}/bin/$(gcc -dumpmachine)-c++-7.3 #{CREW_DEST_PREFIX}/bin/$(gcc -dumpmachine)-c++" - system "ln -sv #{CREW_PREFIX}/bin/$(gcc -dumpmachine)-g++-7.3 #{CREW_DEST_PREFIX}/bin/$(gcc -dumpmachine)-g++" - system "ln -sv #{CREW_PREFIX}/bin/$(gcc -dumpmachine)-gcc-7.3 #{CREW_DEST_PREFIX}/bin/$(gcc -dumpmachine)-gcc" - system "ln -sv #{CREW_PREFIX}/bin/$(gcc -dumpmachine)-gcc-ar-7.3 #{CREW_DEST_PREFIX}/bin/$(gcc -dumpmachine)-gcc-ar" - system "ln -sv #{CREW_PREFIX}/bin/$(gcc -dumpmachine)-gcc-nm-7.3 #{CREW_DEST_PREFIX}/bin/$(gcc -dumpmachine)-gcc-nm" - system "ln -sv #{CREW_PREFIX}/bin/$(gcc -dumpmachine)-gcc-ranlib-7.3 #{CREW_DEST_PREFIX}/bin/$(gcc -dumpmachine)-gcc-ranlib" - system "ln -sv #{CREW_PREFIX}/bin/$(gcc -dumpmachine)-gfortran-7.3 #{CREW_DEST_PREFIX}/bin/$(gcc -dumpmachine)-gfortran" + system "ln -sv #{CREW_PREFIX}/bin/#{gcc_arch}-c++-#{version} #{CREW_DEST_PREFIX}/bin/#{gcc_arch}-c++" + system "ln -sv #{CREW_PREFIX}/bin/#{gcc_arch}-g++-#{version} #{CREW_DEST_PREFIX}/bin/#{gcc_arch}-g++" + system "ln -sv #{CREW_PREFIX}/bin/#{gcc_arch}-gcc-#{version} #{CREW_DEST_PREFIX}/bin/#{gcc_arch}-gcc" + system "ln -sv #{CREW_PREFIX}/bin/#{gcc_arch}-gcc-ar-#{version} #{CREW_DEST_PREFIX}/bin/#{gcc_arch}-gcc-ar" + system "ln -sv #{CREW_PREFIX}/bin/#{gcc_arch}-gcc-nm-#{version} #{CREW_DEST_PREFIX}/bin/#{gcc_arch}-gcc-nm" + system "ln -sv #{CREW_PREFIX}/bin/#{gcc_arch}-gcc-ranlib-#{version} #{CREW_DEST_PREFIX}/bin/#{gcc_arch}-gcc-ranlib" + system "ln -sv #{CREW_PREFIX}/bin/#{gcc_arch}-gfortran-#{version} #{CREW_DEST_PREFIX}/bin/#{gcc_arch}-gfortran" + + system "ln -sv #{CREW_PREFIX}/share/man/man1/cpp-#{version}.1.gz #{CREW_DEST_PREFIX}/share/man/man1/cpp.1.gz" + system "ln -sv #{CREW_PREFIX}/share/man/man1/g++-#{version}.1.gz #{CREW_DEST_PREFIX}/share/man/man1/g++.1.gz" + system "ln -sv #{CREW_PREFIX}/share/man/man1/gcc-#{version}.1.gz #{CREW_DEST_PREFIX}/share/man/man1/gcc.1.gz" + system "ln -sv #{CREW_PREFIX}/share/man/man1/gcov-#{version}.1.gz #{CREW_DEST_PREFIX}/share/man/man1/gcov.1.gz" + system "ln -sv #{CREW_PREFIX}/share/man/man1/gcov-dump-#{version}.1.gz #{CREW_DEST_PREFIX}/share/man/man1/gcov-dump.1.gz" + system "ln -sv #{CREW_PREFIX}/share/man/man1/gcov-tool-#{version}.1.gz #{CREW_DEST_PREFIX}/share/man/man1/gcov-tool.1.gz" + system "ln -sv #{CREW_PREFIX}/share/man/man1/gfortran-#{version}.1.gz #{CREW_DEST_PREFIX}/share/man/man1/gfortran.1.gz" end end end diff --git a/packages/gcc8.rb b/packages/gcc8.rb index 2aecd4470..1bf97e345 100644 --- a/packages/gcc8.rb +++ b/packages/gcc8.rb @@ -3,27 +3,32 @@ require 'package' class Gcc8 < Package description 'The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, and Go.' homepage 'https://www.gnu.org/software/gcc/' - version '8.2.0' - source_url 'https://ftpmirror.gnu.org/gcc/gcc-8.2.0/gcc-8.2.0.tar.xz' - source_sha256 '196c3c04ba2613f893283977e6011b2345d1cd1af9abeac58e916b1aab3e0080' + version '8.3.0' + source_url 'https://ftpmirror.gnu.org/gcc/gcc-8.3.0/gcc-8.3.0.tar.xz' + source_sha256 '64baadfe6cc0f4947a84cb12d7f0dfaf45bb58b7e92461639596c21e02d97d2c' + + if ARGV[0] == 'install' + gccver = `gcc -v 2>&1 | tail -1 | cut -d' ' -f3`.chomp + abort "GCC version #{gccver} already installed.".lightgreen unless "#{gccver}" == "No" || "#{gccver}" == "gcc:" + end binary_url ({ - aarch64: 'https://dl.bintray.com/chromebrew/chromebrew/gcc8-8.2.0-chromeos-armv7l.tar.xz', - armv7l: 'https://dl.bintray.com/chromebrew/chromebrew/gcc8-8.2.0-chromeos-armv7l.tar.xz', - i686: 'https://dl.bintray.com/chromebrew/chromebrew/gcc8-8.2.0-chromeos-i686.tar.xz', - x86_64: 'https://dl.bintray.com/chromebrew/chromebrew/gcc8-8.2.0-chromeos-x86_64.tar.xz', + aarch64: 'https://dl.bintray.com/chromebrew/chromebrew/gcc8-8.3.0-chromeos-armv7l.tar.xz', + armv7l: 'https://dl.bintray.com/chromebrew/chromebrew/gcc8-8.3.0-chromeos-armv7l.tar.xz', + i686: 'https://dl.bintray.com/chromebrew/chromebrew/gcc8-8.3.0-chromeos-i686.tar.xz', + x86_64: 'https://dl.bintray.com/chromebrew/chromebrew/gcc8-8.3.0-chromeos-x86_64.tar.xz', }) binary_sha256 ({ - aarch64: '536323fc5dd35e53665a19e65c636f288153efe4cdf31617c32103c64593b285', - armv7l: '536323fc5dd35e53665a19e65c636f288153efe4cdf31617c32103c64593b285', - i686: 'e37ca8d49198beaa9ba582fc25fa598ab3cd5ed7e46f96a03176fb9002cc6f7b', - x86_64: '6d982f3c35acd3a738e176a3f3b8c4ea093c7be86882153a7711841cf0c80737', + aarch64: 'fbd8a589befb3d10400af6e4975d02a6940bab4907628f8fc0d6913ea89f70ae', + armv7l: 'fbd8a589befb3d10400af6e4975d02a6940bab4907628f8fc0d6913ea89f70ae', + i686: '4d625e92969fde16c1a92601740e22c07331f8056452edf7cf0bf2c1c88aa152', + x86_64: 'ae8c8c33e4090f7fdbd39b2364754dcfc5f6bdd9a74062fde3eeb6272562f48b', }) depends_on 'unzip' => :build depends_on 'gawk' => :build depends_on 'dejagnu' => :build # for test - depends_on 'icu4c' => :build # icu version 62.1 + depends_on 'icu4c' => :build depends_on 'python27' => :build depends_on 'python3' => :build @@ -64,7 +69,7 @@ class Gcc8 < Package "--disable-libmpx", "--enable-static", "--enable-shared", - "--program-suffix=-8.2", + "--program-suffix=-#{version}", "--with-arch=armv7-a", "--with-tune=cortex-a15", "--with-fpu=neon", @@ -84,7 +89,7 @@ class Gcc8 < Package "--disable-libmpx", "--enable-static", "--enable-shared", - "--program-suffix=-8.2", + "--program-suffix=-#{version}", "--with-arch-64=x86-64" when 'i686' system "../configure", @@ -101,7 +106,7 @@ class Gcc8 < Package "--disable-libmpx", "--enable-static", "--enable-shared", - "--program-suffix=-8.2", + "--program-suffix=-#{version}", "--with-arch-32=i686" end system 'make' @@ -111,8 +116,7 @@ class Gcc8 < Package # preserve for check, skip check for current version def self.check Dir.chdir("objdir") do - #system "ulimit -s 32768" - #system "make -k check -j8" + #system "make -k check -j#{CREW_NPROC}" #system "../contrib/test_summary" end end @@ -121,6 +125,10 @@ class Gcc8 < Package Dir.chdir("objdir") do system "make", "DESTDIR=#{CREW_DEST_DIR}", "install-strip" + gcc_arch = `gcc -dumpmachine`.chomp + gcc_dir = "gcc/#{gcc_arch}/#{version}" + gcc_libdir = "#{CREW_LIB_PREFIX}/#{gcc_dir}" + # http://www.linuxfromscratch.org/lfs/view/development/chapter06/gcc.html#contents-gcc # move a misplaced file # The installation stage puts some files used by gdb under the /usr/local/lib(64) directory. This generates spurious error messages when performing ldconfig. This command moves the files to another location. @@ -131,29 +139,41 @@ class Gcc8 < Package system "install -v -dm755 #{CREW_DEST_LIB_PREFIX}/bfd-plugins" # Add a compatibility symlink to enable building programs with Link Time Optimization (LTO) - system "ln -sfv #{CREW_PREFIX}/libexec/gcc/$(gcc -dumpmachine)/8.2.0/liblto_plugin.so #{CREW_DEST_LIB_PREFIX}/bfd-plugins/" + system "ln -sfv #{CREW_PREFIX}/libexec/#{gcc_dir}/liblto_plugin.so #{CREW_DEST_LIB_PREFIX}/bfd-plugins/" # Make symbolic links - system "ln -sv #{CREW_PREFIX}/bin/gcc-8.2 #{CREW_DEST_PREFIX}/bin/cc" - system "ln -sv #{CREW_PREFIX}/bin/gcc-8.2 #{CREW_DEST_PREFIX}/bin/gcc" - system "ln -sv #{CREW_PREFIX}/bin/c++-8.2 #{CREW_DEST_PREFIX}/bin/c++" - system "ln -sv #{CREW_PREFIX}/bin/g++-8.2 #{CREW_DEST_PREFIX}/bin/g++" - system "ln -sv #{CREW_PREFIX}/bin/cpp-8.2 #{CREW_DEST_PREFIX}/bin/cpp" - system "ln -sv #{CREW_PREFIX}/bin/gcc-ar-8.2 #{CREW_DEST_PREFIX}/bin/gcc-ar" - system "ln -sv #{CREW_PREFIX}/bin/gcc-nm-8.2 #{CREW_DEST_PREFIX}/bin/gcc-nm" - system "ln -sv #{CREW_PREFIX}/bin/gcc-ranlib-8.2 #{CREW_DEST_PREFIX}/bin/gcc-ranlib" - system "ln -sv #{CREW_PREFIX}/bin/gcov-8.2 #{CREW_DEST_PREFIX}/bin/gcov" - system "ln -sv #{CREW_PREFIX}/bin/gcov-dump-8.2 #{CREW_DEST_PREFIX}/bin/gcov-dump" - system "ln -sv #{CREW_PREFIX}/bin/gcov-tool-8.2 #{CREW_DEST_PREFIX}/bin/gcov-tool" - system "ln -sv #{CREW_PREFIX}/bin/gfortran-8.2 #{CREW_DEST_PREFIX}/bin/gfortran" + Dir.chdir "#{CREW_DEST_LIB_PREFIX}/#{gcc_dir}" do + system "find . -type f -maxdepth 1 -exec ln -sv #{gcc_libdir}/{} #{CREW_DEST_LIB_PREFIX}/{} \\;" + end - system "ln -sv #{CREW_PREFIX}/bin/$(gcc -dumpmachine)-c++-8.2 #{CREW_DEST_PREFIX}/bin/$(gcc -dumpmachine)-c++" - system "ln -sv #{CREW_PREFIX}/bin/$(gcc -dumpmachine)-g++-8.2 #{CREW_DEST_PREFIX}/bin/$(gcc -dumpmachine)-g++" - system "ln -sv #{CREW_PREFIX}/bin/$(gcc -dumpmachine)-gcc-8.2 #{CREW_DEST_PREFIX}/bin/$(gcc -dumpmachine)-gcc" - system "ln -sv #{CREW_PREFIX}/bin/$(gcc -dumpmachine)-gcc-ar-8.2 #{CREW_DEST_PREFIX}/bin/$(gcc -dumpmachine)-gcc-ar" - system "ln -sv #{CREW_PREFIX}/bin/$(gcc -dumpmachine)-gcc-nm-8.2 #{CREW_DEST_PREFIX}/bin/$(gcc -dumpmachine)-gcc-nm" - system "ln -sv #{CREW_PREFIX}/bin/$(gcc -dumpmachine)-gcc-ranlib-8.2 #{CREW_DEST_PREFIX}/bin/$(gcc -dumpmachine)-gcc-ranlib" - system "ln -sv #{CREW_PREFIX}/bin/$(gcc -dumpmachine)-gfortran-8.2 #{CREW_DEST_PREFIX}/bin/$(gcc -dumpmachine)-gfortran" + system "ln -sv #{CREW_PREFIX}/bin/gcc-#{version} #{CREW_DEST_PREFIX}/bin/cc" + system "ln -sv #{CREW_PREFIX}/bin/gcc-#{version} #{CREW_DEST_PREFIX}/bin/gcc" + system "ln -sv #{CREW_PREFIX}/bin/c++-#{version} #{CREW_DEST_PREFIX}/bin/c++" + system "ln -sv #{CREW_PREFIX}/bin/g++-#{version} #{CREW_DEST_PREFIX}/bin/g++" + system "ln -sv #{CREW_PREFIX}/bin/cpp-#{version} #{CREW_DEST_PREFIX}/bin/cpp" + system "ln -sv #{CREW_PREFIX}/bin/gcc-ar-#{version} #{CREW_DEST_PREFIX}/bin/gcc-ar" + system "ln -sv #{CREW_PREFIX}/bin/gcc-nm-#{version} #{CREW_DEST_PREFIX}/bin/gcc-nm" + system "ln -sv #{CREW_PREFIX}/bin/gcc-ranlib-#{version} #{CREW_DEST_PREFIX}/bin/gcc-ranlib" + system "ln -sv #{CREW_PREFIX}/bin/gcov-#{version} #{CREW_DEST_PREFIX}/bin/gcov" + system "ln -sv #{CREW_PREFIX}/bin/gcov-dump-#{version} #{CREW_DEST_PREFIX}/bin/gcov-dump" + system "ln -sv #{CREW_PREFIX}/bin/gcov-tool-#{version} #{CREW_DEST_PREFIX}/bin/gcov-tool" + system "ln -sv #{CREW_PREFIX}/bin/gfortran-#{version} #{CREW_DEST_PREFIX}/bin/gfortran" + + system "ln -sv #{CREW_PREFIX}/bin/#{gcc_arch}-c++-#{version} #{CREW_DEST_PREFIX}/bin/#{gcc_arch}-c++" + system "ln -sv #{CREW_PREFIX}/bin/#{gcc_arch}-g++-#{version} #{CREW_DEST_PREFIX}/bin/#{gcc_arch}-g++" + system "ln -sv #{CREW_PREFIX}/bin/#{gcc_arch}-gcc-#{version} #{CREW_DEST_PREFIX}/bin/#{gcc_arch}-gcc" + system "ln -sv #{CREW_PREFIX}/bin/#{gcc_arch}-gcc-ar-#{version} #{CREW_DEST_PREFIX}/bin/#{gcc_arch}-gcc-ar" + system "ln -sv #{CREW_PREFIX}/bin/#{gcc_arch}-gcc-nm-#{version} #{CREW_DEST_PREFIX}/bin/#{gcc_arch}-gcc-nm" + system "ln -sv #{CREW_PREFIX}/bin/#{gcc_arch}-gcc-ranlib-#{version} #{CREW_DEST_PREFIX}/bin/#{gcc_arch}-gcc-ranlib" + system "ln -sv #{CREW_PREFIX}/bin/#{gcc_arch}-gfortran-#{version} #{CREW_DEST_PREFIX}/bin/#{gcc_arch}-gfortran" + + system "ln -sv #{CREW_PREFIX}/share/man/man1/cpp-#{version}.1.gz #{CREW_DEST_PREFIX}/share/man/man1/cpp.1.gz" + system "ln -sv #{CREW_PREFIX}/share/man/man1/g++-#{version}.1.gz #{CREW_DEST_PREFIX}/share/man/man1/g++.1.gz" + system "ln -sv #{CREW_PREFIX}/share/man/man1/gcc-#{version}.1.gz #{CREW_DEST_PREFIX}/share/man/man1/gcc.1.gz" + system "ln -sv #{CREW_PREFIX}/share/man/man1/gcov-#{version}.1.gz #{CREW_DEST_PREFIX}/share/man/man1/gcov.1.gz" + system "ln -sv #{CREW_PREFIX}/share/man/man1/gcov-dump-#{version}.1.gz #{CREW_DEST_PREFIX}/share/man/man1/gcov-dump.1.gz" + system "ln -sv #{CREW_PREFIX}/share/man/man1/gcov-tool-#{version}.1.gz #{CREW_DEST_PREFIX}/share/man/man1/gcov-tool.1.gz" + system "ln -sv #{CREW_PREFIX}/share/man/man1/gfortran-#{version}.1.gz #{CREW_DEST_PREFIX}/share/man/man1/gfortran.1.gz" end end end diff --git a/packages/gcc_tools.rb b/packages/gcc_tools.rb new file mode 100644 index 000000000..4ad4074aa --- /dev/null +++ b/packages/gcc_tools.rb @@ -0,0 +1,136 @@ +require 'package' + +class Gcc_tools < Package + description 'Tools for working with gcc packages' + homepage 'https://github.com/skycocker/chromebrew' + version '1.0' + source_url 'file:///dev/null' + source_sha256 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' + + def self.build + system 'cat << "EOF" > crewfix +#!/bin/bash + +# exit on fail +set -e + +# define constants +CREW_PREFIX="${CREW_PREFIX:-/usr/local}" +ARCH="$(uname -m)" +LIB_SUFFIX="" +[ "${ARCH}" == "x86_64" ] && LIB_SUFFIX="64" + +function download_check () { + cd /tmp + + #download + echo "Downloading ${1}..." + curl --progress-bar -C - -L --ssl "${2}" -o "${3}" + + #verify + echo "Verifying ${1}..." + echo "${4}" "${3}" | sha256sum -c - + case "${?}" in + 0) ;; + *) + echo "Verification failed, something may be wrong with the download." + exit 1;; + esac +} + +if [ ! -f "${CREW_PREFIX}/lib${LIB_SUFFIX}/libssp.so.0" ]; then + # prepare gcc8 url and sha256 + case "${ARCH}" in + "aarch64"|"armv7l") + url="https://dl.bintray.com/chromebrew/chromebrew/gcc8-8.3.0-chromeos-armv7l.tar.xz" + sha256="fbd8a589befb3d10400af6e4975d02a6940bab4907628f8fc0d6913ea89f70ae" + ;; + "i686") + url="https://dl.bintray.com/chromebrew/chromebrew/gcc8-8.3.0-chromeos-i686.tar.xz" + sha256="4d625e92969fde16c1a92601740e22c07331f8056452edf7cf0bf2c1c88aa152" + ;; + "x86_64") + url="https://dl.bintray.com/chromebrew/chromebrew/gcc8-8.3.0-chromeos-x86_64.tar.xz" + sha256="ae8c8c33e4090f7fdbd39b2364754dcfc5f6bdd9a74062fde3eeb6272562f48b" + ;; + esac + tarfile="$(basename ${url})" + name="${tarfile%%-*}" + download_check "${name}" "${url}" "${tarfile}" "${sha256}" + cd / && tar --wildcards -xvf /tmp/${tarfile} "${CREW_PREFIX#/}/lib${LIB_SUFFIX}/libssp.so*" + rm -f /tmp/${tarfile} +fi + +if [ ! -f "${CREW_PREFIX}/bin/ruby" ]; then + # prepare ruby url and sha256 + case "${ARCH}" in + "aarch64"|"armv7l") + url="https://dl.bintray.com/chromebrew/chromebrew/ruby-2.5.3-chromeos-armv7l.tar.xz" + sha256="5e485a0320b298e1f5c4ff50d98c6fe6d06ad9a38d9119d580a8b469418e1e6a" + ;; + "i686") + url="https://dl.bintray.com/chromebrew/chromebrew/ruby-2.5.3-chromeos-i686.tar.xz" + sha256="6f4a5b96c31ef5ee4f09ac15da4c7a4a9d838ed5233038136ead1e155d17f342" + ;; + "x86_64") + url="https://dl.bintray.com/chromebrew/chromebrew/ruby-2.5.3-chromeos-x86_64.tar.xz" + sha256="352b78fc883cf8936136991fda9ca5d49e90b2951626158d6af8ef4b58d67f97" + ;; + esac + tarfile="$(basename ${url})" + name="${tarfile%%-*}" + download_check "${name}" "${url}" "${tarfile}" "${sha256}" + cd / && tar -xvf /tmp/${tarfile} + rm -f /tmp/${tarfile} +fi +EOF' + + system 'cat << "EOF" > gcc_switcher +#!/bin/bash +gccver=$(gcc -v 2>&1 | tail -1 | cut -d" " -f3) +if [[ "$gccver" == "No" || "$gccver" == "gcc:" ]]; then + echo "Enter the GCC version to install:" + echo "7 = GCC 7.4.0" + echo "8 = GCC 8.3.0" +else + echo "GCC version $gccver currently installed." + echo "Enter the GCC version to install:" + if [ "$gccver" == "8.3.0" ]; then + echo "7 = GCC 7.4.0" + fi + if [ "$gccver" == "7.4.0" ]; then + echo "8 = GCC 8.3.0" + fi +fi +echo "0 = Cancel" +read version +case $version in + 7) + crew remove gcc8 && crewfix && crew install gcc7 + ;; + 8) + crew remove gcc7 && crewfix && crew install gcc8 + ;; + *) + ;; +esac +EOF' + end + + def self.install + system "install -Dm755 crewfix #{CREW_DEST_PREFIX}/bin/crewfix" + system "install -Dm755 gcc_switcher #{CREW_DEST_PREFIX}/bin/gcc_switcher" + end + + def self.postinstall + puts "This package contains two scripts:".lightblue + puts + puts "crewfix - Repairs the crew command if gcc is removed".lightblue + puts "gcc_switcher - Allows switching between gcc versions".lightblue + puts + puts "In most cases, you will only need to use the gcc_switcher command.".lightblue + puts "If the current gcc version is removed manually, however, and the".lightblue + puts "crew command no longer works, you can repair with crewfix.".lightblue + puts + end +end diff --git a/tools/core_packages.txt b/tools/core_packages.txt index 32baefbf4..654bd7475 100644 --- a/tools/core_packages.txt +++ b/tools/core_packages.txt @@ -12,6 +12,7 @@ expat filecmd flex gawk +gcc_tools gcc8 gdbm gettext