diff options
| author | Timo Teräs <timo.teras@iki.fi> | 2017-02-10 11:54:21 +0000 |
|---|---|---|
| committer | Timo Teräs <timo.teras@iki.fi> | 2017-02-10 11:54:21 +0000 |
| commit | c300e67286337679a0a3e732204fcedd5b41b424 (patch) | |
| tree | 638d072fcd972566357c836cc376bcdc3e2a812f /testing/ghc-bootstrap/bootstrap/armhf | |
| parent | 972f99471c324a5d221030691344ed1f8f892972 (diff) | |
| download | aports-c300e67286337679a0a3e732204fcedd5b41b424.tar.bz2 aports-c300e67286337679a0a3e732204fcedd5b41b424.tar.xz | |
Revert "testing/ghc-bootstrap: simplify/unify aport"
This reverts commit 3fd25eea1eb2591fc1aaa3839e22cbf5ead0d0a5.
Diffstat (limited to 'testing/ghc-bootstrap/bootstrap/armhf')
| -rw-r--r-- | testing/ghc-bootstrap/bootstrap/armhf/Dockerfile | 154 | ||||
| -rw-r--r-- | testing/ghc-bootstrap/bootstrap/armhf/bootstrap.patch | 112 | ||||
| -rw-r--r-- | testing/ghc-bootstrap/bootstrap/armhf/settings | 32 |
3 files changed, 298 insertions, 0 deletions
diff --git a/testing/ghc-bootstrap/bootstrap/armhf/Dockerfile b/testing/ghc-bootstrap/bootstrap/armhf/Dockerfile new file mode 100644 index 0000000000..2ef2572f89 --- /dev/null +++ b/testing/ghc-bootstrap/bootstrap/armhf/Dockerfile @@ -0,0 +1,154 @@ +# Mostly self contained setup to build a stage2 ghc for musl +from debian:8.0 + +# Install stock bindist for cross compile +env ghc 7.10.3 +env arch x86_64 +env llvm 3.7.1 +env cabal 1.22.9.0 + +# all needed packages for compiling +run apt-get clean && \ + apt-get update && \ + apt-get install -y \ + binutils-gold \ + musl-tools \ + build-essential \ + wget \ + curl \ + libncurses-dev \ + autoconf \ + elfutils \ + libgmp-dev \ + zlib1g-dev \ + git \ + libtool \ + pkg-config \ + libffi-dev \ + cmake \ + g++ \ + python \ + pixz \ + openssl \ + bison \ + flex \ + git + +add http://llvm.org/releases/$llvm/llvm-$llvm.src.tar.xz /tmp/ +add http://llvm.org/releases/$llvm/polly-$llvm.src.tar.xz /tmp/ + +# Install a non ancient version of llvm on debian, I'm purposefully ignoring +# debian repos in favor of compiling to not have to deal with +# "what debian upstream has a current version of llvm" nonsense, takes more +# time to do that than just build the right llvm from source. +workdir /tmp +copy bootstrap/llvm-$llvm.sh /tmp/llvm.sh +run openssl sha1 llvm-$llvm.src.tar.xz | grep "SHA1(llvm-3.7.1.src.tar.xz)= 5dbdcafac105273dcbff94c68837a66c6dd78cef" && \ + openssl sha1 polly-$llvm.src.tar.xz | grep "SHA1(polly-3.7.1.src.tar.xz)= 0e3a461907cde7505fbdb44bf61ff318aa9254f7" && \ + tar xJpf /tmp/llvm-$llvm.src.tar.xz && \ + tar xJpf /tmp/polly-$llvm.src.tar.xz && \ + /tmp/llvm.sh && \ + rm -fr /tmp/llvm-$llvm.src + +add https://downloads.haskell.org/~ghc/$ghc/ghc-$ghc-$arch-deb8-linux.tar.xz /tmp/ + +# Install debian ghc binary from upstream. +workdir /tmp +run openssl sha1 ghc-$ghc-$arch-deb8-linux.tar.xz | grep "SHA1(ghc-7.10.3-x86_64-deb8-linux.tar.xz)= bab16f95ef4fe6b7cc2fb6b36a02dceeeb53faa4" && \ + tar xJpf /tmp/ghc-$ghc-$arch-deb8-linux.tar.xz +workdir /tmp/ghc-$ghc +run ./configure --prefix=/usr && \ + make -j1 install && \ + rm -fr /tmp/ghc-$ghc + +add https://www.haskell.org/cabal/release/cabal-install-$cabal/cabal-install-$cabal.tar.gz /tmp/ + +# Install cabal so we can install alex/happy to pull off of git +# bootstrap cabal and install alex/happy the same way apks are built +# only globally +workdir /tmp +run openssl sha1 cabal-install-$cabal.tar.gz | grep "SHA1(cabal-install-1.22.9.0.tar.gz)= f1375c928794f45f253b8ec92c2af4732fec597b" && \ + tar xzpf /tmp/cabal-install-$cabal.tar.gz +workdir /tmp/cabal-install-$cabal +run ./bootstrap.sh --global --no-doc && \ + cabal update && \ + cabal install --global alex happy && \ + rm -fr /tmp/cabal-install-$cabal + +# First up, install/compile the cross compiler with musl libc +# armv7 hard float cross compiler, we basically rebuild ghc again here with +# the cross compiler, and the llvm we built for x86_64 as well +workdir /tmp +run git clone --depth 1 https://github.com/GregorR/musl-cross.git musl-cross +workdir /tmp/musl-cross +run echo GCC_BUILTIN_PREREQS=yes >> config.sh && \ + echo ARCH=arm >> config.sh && \ + echo TRIPLE=arm-linux-musleabihf >> config.sh && \ + echo GCC_BOOTSTRAP_CONFFLAGS=\"--with-arch=armv6 --with-float=hard --with-fpu=vfp\" >> config.sh && \ + echo GCC_CONFFLAGS=\"--with-arch=armv6 --with-float=hard --with-fpu=vfp\" >> config.sh && \ + echo GCC_STAGE1_NOOPT=1 >> config.sh && \ + echo CC_BASE_PREFIX=/usr >> config.sh && \ + echo MAKEFLAGS=-j$(grep -c processor /proc/cpuinfo) >> config.sh && \ + echo "BINUTILS_CONFFLAGS='CXXFLAGS=-fpermissive --enable-gold --enable-plugins --disable-werror'" >> config.sh && \ + echo "CFLAGS='-g -O2 -fPIC -DPIC'" >> config.sh && \ + echo "CPPFLAGS='-fPIC -DPIC'" >> config.sh && \ + echo "LDFLAGS='-fPIC -DPIC'" >> config.sh +copy bootstrap/gmpurl.patch gmpurl.patch +run patch -p1 < gmpurl.patch && \ + ./build.sh && \ + rm -fr /tmp/musl-cross + +add http://downloads.haskell.org/~ghc/8.0.1/ghc-8.0.1-src.tar.xz /tmp/ + +env tardir /tmp/root +env destdir /tmp/root/armhf +env crosscc arm-linux-musleabihf-gcc +env target arm-linux-musleabihf +env triple arm-unknown-linux-musleabihf +env ghc 8.0.1 + +# add cross toolchain to PATH +env PATH /usr/$target/bin:$PATH + +workdir /tmp +run openssl sha1 ghc-$ghc-src.tar.xz | grep "SHA1(ghc-8.0.1-src.tar.xz)= 585a2d34a17ce2452273147f2e3cef1a2efe1aa5" && \ + tar xJpf /tmp/ghc-$ghc-src.tar.xz +workdir /tmp/ghc-$ghc +env PATH $PATH:/usr/$triple/bin +copy bootstrap/$arch/bootstrap.patch bootstrap.patch +run patch -p1 < bootstrap.patch +run cp mk/build.mk.sample mk/build.mk && \ + ./boot && \ + echo "BuildFlavour = quick-llvm" >> mk/build.mk && \ + echo "INTEGER_LIBRARY = integer-simple" >> mk/build.mk && \ + echo "HADDOCK_DOCS = NO" >> mk/build.mk && \ + echo "BUILD_SPHINX_HTML = NO" >> mk/build.mk && \ + echo "BUILD_SPHINX_PS = NO" >> mk/build.mk && \ + echo "BUILD_SPHINX_PDF = NO" >> mk/build.mk && \ + ./configure \ + --target=$target \ + --prefix=/usr +run make -j$(grep -c processor /proc/cpuinfo) || make -j1 +run make -j1 install STRIP_CMD=$target-strip DESTDIR=$destdir + +# unlit and hp2ps both build using the stage0, not having luck +# getting the build patched right so for now lets just +# remove and rebuild these c helper programs +run rm $(find $destdir -name "*-hp2ps") + +# remove target prefix from stage2 binaries +# HACK, just build unlit with the cross compiler and move it to /usr/bin in the install dir +workdir /tmp/ghc-$ghc/utils/unlit +run $crosscc unlit.c -o $(find $destdir -name unlit) + +# remove target prefix from stage2 binaries +workdir $destdir/usr/bin +run (for i in $triple-* ; do ln -s $i ${i#$triple-} || /bin/true ; done ) +copy bootstrap/armhf/settings /tmp/settings +run mv /tmp/settings $(find $destdir -name settings -type f) +run rm -fr $destdir/usr/share/doc + +workdir $tardir +# Compress to xz via pixz because xz is normally too +# old for -TN multithreads +run tar -I'pixz -9' -cf /tmp/ghc-$ghc-$triple.tar.xz . diff --git a/testing/ghc-bootstrap/bootstrap/armhf/bootstrap.patch b/testing/ghc-bootstrap/bootstrap/armhf/bootstrap.patch new file mode 100644 index 0000000000..7e5fc95432 --- /dev/null +++ b/testing/ghc-bootstrap/bootstrap/armhf/bootstrap.patch @@ -0,0 +1,112 @@ +diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs +index fa1141e..6ff2ac4 100644 +--- a/compiler/main/DynFlags.hs ++++ b/compiler/main/DynFlags.hs +@@ -2448,8 +2448,7 @@ dynamic_flags_deps = [ + , make_ord_flag defGhcFlag "dynload" (hasArg parseDynLibLoaderMode) + , make_ord_flag defGhcFlag "dylib-install-name" (hasArg setDylibInstallName) + -- -dll-split is an internal flag, used only during the GHC build +- , make_ord_flag defHiddenFlag "dll-split" +- (hasArg (\f d -> d { dllSplitFile = Just f, dllSplit = Nothing })) ++ , make_ord_flag defHiddenFlag "dll-split" (NoArg (addWarn "ignoring -dll-split")) + + ------- Libraries --------------------------------------------------- + , make_ord_flag defFlag "L" (Prefix addLibraryPath) +diff --git a/ghc.mk b/ghc.mk +index 5e4ecc6..a07ff73 100644 +--- a/ghc.mk ++++ b/ghc.mk +@@ -433,7 +433,7 @@ else # CLEANING + PACKAGES_STAGE0 = binary Cabal/Cabal hpc ghc-boot hoopl transformers template-haskell + ifeq "$(Windows_Host)" "NO" + ifneq "$(HostOS_CPP)" "ios" +-PACKAGES_STAGE0 += terminfo ++PACKAGES_STAGE0 += + endif + endif + +@@ -471,7 +471,7 @@ endif + + ifeq "$(Windows_Target)" "NO" + ifneq "$(TargetOS_CPP)" "ios" +-PACKAGES_STAGE1 += terminfo ++PACKAGES_STAGE1 += + endif + endif + PACKAGES_STAGE1 += haskeline +@@ -968,8 +968,8 @@ INSTALLED_PACKAGE_CONF=$(DESTDIR)$(topdir)/package.conf.d + # Install packages in the right order, so that ghc-pkg doesn't complain. + # Also, install ghc-pkg first. + ifeq "$(Windows_Host)" "NO" +-INSTALLED_GHC_REAL=$(DESTDIR)$(ghclibexecdir)/bin/ghc +-INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(ghclibexecdir)/bin/ghc-pkg ++INSTALLED_GHC_REAL=$(CURDIR)/inplace/bin/ghc-stage1 ++INSTALLED_GHC_PKG_REAL=$(CURDIR)/utils/ghc-pkg/dist/build/tmp/ghc-pkg + else + INSTALLED_GHC_REAL=$(DESTDIR)$(bindir)/ghc.exe + INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(bindir)/ghc-pkg.exe +diff --git a/rules/build-package-way.mk b/rules/build-package-way.mk +index 905b7f0..3e23b1f 100644 +--- a/rules/build-package-way.mk ++++ b/rules/build-package-way.mk +@@ -62,17 +62,6 @@ $1_$2_$3_ALL_OBJS = $$($1_$2_$3_HS_OBJS) $$($1_$2_$3_NON_HS_OBJS) + + ifeq "$3" "dyn" + +-ifneq "$$($1_$2_dll0_MODULES)" "" +-$$($1_$2_$3_LIB) : $1/$2/dll-split.stamp +-ifneq "$$($1_$2_$3_LIB0)" "" +-$$($1_$2_$3_LIB0) : $1/$2/dll-split.stamp +-endif +-endif +- +-$1/$2/dll-split.stamp: $$($1_$2_depfile_haskell) $$$$(dll-split_INPLACE) +- $$(dll-split_INPLACE) $$< "$$($1_$2_dll0_START_MODULE)" "$$($1_$2_dll0_MODULES)" +- touch $$@ +- + # Link a dynamic library + # On windows we have to supply the extra libs this one links to when building it. + ifeq "$$(HostOS_CPP)" "mingw32" +diff --git a/rules/distdir-way-opts.mk b/rules/distdir-way-opts.mk +index f099d4e..6dcf911 100644 +--- a/rules/distdir-way-opts.mk ++++ b/rules/distdir-way-opts.mk +@@ -160,13 +160,6 @@ $1_$2_$3_ALL_HC_OPTS = \ + $$(if $$(findstring YES,$$($1_$2_SplitSections)),$$(if $$(findstring dyn,$3),,-split-sections),) \ + $$(if $$(findstring YES,$$($1_$2_DYNAMIC_TOO)),$$(if $$(findstring v,$3),-dynamic-too)) + +-ifeq "$3" "dyn" +-ifeq "$$(HostOS_CPP)" "mingw32" +-ifneq "$$($1_$2_dll0_MODULES)" "" +-$1_$2_$3_ALL_HC_OPTS += -dll-split $1/$2/dll-split +-endif +-endif +-endif + + $1_$2_$3_ALL_CC_OPTS = \ + $$(WAY_$3_CC_OPTS) \ +diff --git a/utils/ghc-pkg/Main.hs b/utils/ghc-pkg/Main.hs +index af3032d..1c38e8e 100644 +--- a/utils/ghc-pkg/Main.hs ++++ b/utils/ghc-pkg/Main.hs +@@ -1,5 +1,6 @@ + {-# LANGUAGE CPP, TypeSynonymInstances, FlexibleInstances #-} + {-# OPTIONS_GHC -fno-warn-orphans #-} ++#define BOOTSTRAPPING + ----------------------------------------------------------------------------- + -- + -- (c) The University of Glasgow 2004-2009. +diff --git a/utils/ghc-pkg/ghc-pkg.cabal b/utils/ghc-pkg/ghc-pkg.cabal +index 5f76e1b..2f9b558 100644 +--- a/utils/ghc-pkg/ghc-pkg.cabal ++++ b/utils/ghc-pkg/ghc-pkg.cabal +@@ -31,7 +31,7 @@ Executable ghc-pkg + ghc-boot, + bytestring + if !os(windows) +- Build-Depends: unix, +- terminfo ++ Build-Depends: unix ++ + if os(windows) + c-sources: CRT_noglob.c diff --git a/testing/ghc-bootstrap/bootstrap/armhf/settings b/testing/ghc-bootstrap/bootstrap/armhf/settings new file mode 100644 index 0000000000..549d03dd64 --- /dev/null +++ b/testing/ghc-bootstrap/bootstrap/armhf/settings @@ -0,0 +1,32 @@ +[("GCC extra via C opts", " -fwrapv -fno-builtin"), + ("C compiler command", "gcc"), + ("C compiler flags", " -marm -fno-stack-protector"), + ("C compiler link flags", " --no-pie -fuse-ld=gold -Wl,-z,noexecstack"), + ("Haskell CPP command","gcc"), + ("Haskell CPP flags","-E -undef -traditional"), + ("ld command", "ld.gold"), + ("ld flags", " -z noexecstack"), + ("ld supports compact unwind", "YES"), + ("ld supports build-id", "YES"), + ("ld supports filelist", "NO"), + ("ld is GNU ld", "YES"), + ("ar command", "ar"), + ("ar flags", "q"), + ("ar supports at file", "YES"), + ("touch command", "touch"), + ("dllwrap command", "/bin/false"), + ("windres command", "/bin/false"), + ("libtool command", "libtool"), + ("perl command", "/usr/bin/perl"), + ("cross compiling", "YES"), + ("target os", "OSLinux"), + ("target arch", "ArchARM {armISA = ARMv6, armISAExt = [VFPv2], armABI = HARD}"), + ("target word size", "4"), + ("target has GNU nonexec stack", "False"), + ("target has .ident directive", "True"), + ("target has subsections via symbols", "False"), + ("Unregisterised", "NO"), + ("LLVM llc command", "llc-3.7"), + ("LLVM opt command", "opt-3.7") + ] + |
