From 0cbdba2768d84a0f6832ae5cf9ea1e98efd739da Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Sat, 13 Feb 2021 11:41:47 +0800 Subject: [ci/arm/darwin/testsuite] Forwards ports from GHC-8.10 This is a set of forward ports (cherry-picks) from 8.10 - a7d22795ed [ci] Add support for building on aarch64-darwin - 5109e87e13 [testlib/driver] denoise - 307d34945b [ci] default value for CONFIGURE_ARGS - 10a18cb4e0 [testsuite] mark ghci056 as fragile - 16c13d5acf [ci] Default value for MAKE_ARGS - ab571457b9 [ci/build] Copy config.sub around - 251892b98f [ci/darwin] bump nixpkgs rev - 5a6c36ecb4 [testsuite/darwin] fix conc059 - aae95ef0c9 [ci] add timing info - 3592d1104c [Aarch64] No div-by-zero; disable test. - 57671071ad [Darwin] mark stdc++ tests as broken - 33c4d49754 [testsuite] filter out superfluous dylib warnings - 4bea83afec [ci/nix-shell] Add Foundation and Security - 6345530062 [testsuite/json2] Fix failure with LLVM backends - c3944bc89d [ci/nix-shell] [Darwin] Stop the ld warnings about libiconv. - b821fcc714 [testsuite] static001 is not broken anymore. - f7062e1b0c [testsuite/arm64] fix section_alignment - 820b076698 [darwin] stop the DYLD_LIBRARY_PATH madness - 07b1af0362 [ci/nix-shell] uniquify NIX_LDFLAGS{_FOR_TARGET} As well as a few additional fixups needed to make this block compile: - Fixup all.T - Set CROSS_TARGET, BROKEN_TESTS, XZ, RUNTEST_ARGS, default value. - [ci] shell.nix bump happy --- .gitlab/ci.sh | 52 ++++++++++++++++++++++++-------------------- .gitlab/shell.nix | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 24 deletions(-) create mode 100644 .gitlab/shell.nix (limited to '.gitlab') diff --git a/.gitlab/ci.sh b/.gitlab/ci.sh index df43491c5b..1b7518c037 100755 --- a/.gitlab/ci.sh +++ b/.gitlab/ci.sh @@ -3,9 +3,7 @@ # This is the primary driver of the GitLab CI infrastructure. # Run `ci.sh usage` for usage information. - - -set -e -o pipefail +set -Eeuo pipefail # Configuration: HACKAGE_INDEX_STATE="2020-12-21T14:48:20Z" # TODO dedup with yaml's def @@ -173,12 +171,18 @@ function show_tool() { function set_toolchain_paths() { needs_toolchain="1" - case "$(uname)" in - Linux) needs_toolchain="0" ;; + case "$(uname -m)-$(uname)" in + *-Linux) needs_toolchain="" ;; *) ;; esac - if [[ "$needs_toolchain" = "1" ]]; then + if [[ -n "${IN_NIX_SHELL:-}" ]]; then + needs_toolchain="" + GHC="$(which ghc)" + CABAL="$(which cabal)" + HAPPY="$(which happy)" + ALEX="$(which alex)" + elif [[ -n "$needs_toolchain" ]]; then # These are populated by setup_toolchain GHC="$toolchain/bin/ghc$exe" CABAL="$toolchain/bin/cabal$exe" @@ -354,7 +358,7 @@ BUILD_SPHINX_HTML=$BUILD_SPHINX_HTML BUILD_SPHINX_PDF=$BUILD_SPHINX_PDF BeConservative=YES BIGNUM_BACKEND=$BIGNUM_BACKEND -XZ_CMD=$XZ +XZ_CMD=${XZ:-} BuildFlavour=$BUILD_FLAVOUR ifneq "\$(BuildFlavour)" "" @@ -363,7 +367,7 @@ endif GhcLibHcOpts+=-haddock EOF - if [ -n "$HADDOCK_HYPERLINKED_SOURCES" ]; then + if [ -n "${HADDOCK_HYPERLINKED_SOURCES:-}" ]; then echo "EXTRA_HADDOCK_OPTS += --hyperlinked-source --quickjump" >> mk/build.mk fi @@ -382,7 +386,7 @@ function configure() { end_section "booting" local target_args="" - if [[ -n "$target_triple" ]]; then + if [[ -n "${target_triple:-}" ]]; then target_args="--target=$target_triple" fi @@ -390,7 +394,7 @@ function configure() { run ./configure \ --enable-tarballs-autodownload \ $target_args \ - $CONFIGURE_ARGS \ + ${CONFIGURE_ARGS:-} \ GHC="$GHC" \ HAPPY="$HAPPY" \ ALEX="$ALEX" \ @@ -403,10 +407,10 @@ function build_make() { if [[ -z "$BIN_DIST_PREP_TAR_COMP" ]]; then fail "BIN_DIST_PREP_TAR_COMP is not set" fi - if [[ -n "$VERBOSE" ]]; then - MAKE_ARGS="$MAKE_ARGS V=1" + if [[ -n "${VERBOSE:-}" ]]; then + MAKE_ARGS="${MAKE_ARGS:-} V=1" else - MAKE_ARGS="$MAKE_ARGS V=0" + MAKE_ARGS="${MAKE_ARGS:-} V=0" fi echo "include mk/flavours/${BUILD_FLAVOUR}.mk" > mk/build.mk @@ -422,7 +426,7 @@ function fetch_perf_notes() { } function push_perf_notes() { - if [ -n "$CROSS_TARGET" ]; then + if [ -n "${CROSS_TARGET:-}" ]; then info "Can't test cross-compiled build." return fi @@ -439,16 +443,16 @@ function determine_metric_baseline() { } function test_make() { - if [ -n "$CROSS_TARGET" ]; then + if [ -n "${CROSS_TARGET:-}" ]; then info "Can't test cross-compiled build." return fi run "$MAKE" test_bindist TEST_PREP=YES - run "$MAKE" V=0 test \ + run "$MAKE" V=0 VERBOSE=1 test \ THREADS="$cores" \ JUNIT_FILE=../../junit.xml \ - EXTRA_RUNTEST_OPTS="$RUNTEST_ARGS" + EXTRA_RUNTEST_OPTS="${RUNTEST_ARGS:-}" } function build_hadrian() { @@ -462,7 +466,7 @@ function build_hadrian() { } function test_hadrian() { - if [ -n "$CROSS_TARGET" ]; then + if [ -n "${CROSS_TARGET:-}" ]; then info "Can't test cross-compiled build." return fi @@ -476,7 +480,7 @@ function test_hadrian() { test \ --summary-junit=./junit.xml \ --test-compiler="$TOP"/_build/install/bin/ghc \ - "runtest.opts+=$RUNTEST_ARGS" + "runtest.opts+=${RUNTEST_ARGS:-}" } function cabal_test() { @@ -517,14 +521,14 @@ function run_hadrian() { if [ -z "$BUILD_FLAVOUR" ]; then fail "BUILD_FLAVOUR not set" fi - if [ -z "$BIGNUM_BACKEND" ]; then BIGNUM_BACKEND="gmp"; fi - if [ -n "$VERBOSE" ]; then HADRIAN_ARGS="$HADRIAN_ARGS -V"; fi + if [ -z "${BIGNUM_BACKEND:-}" ]; then BIGNUM_BACKEND="gmp"; fi + if [ -n "${VERBOSE:-}" ]; then HADRIAN_ARGS="${HADRIAN_ARGS:-} -V"; fi run hadrian/build-cabal \ --flavour="$BUILD_FLAVOUR" \ -j"$cores" \ - --broken-test="$BROKEN_TESTS" \ + --broken-test="${BROKEN_TESTS:-}" \ --bignum=$BIGNUM_BACKEND \ - $HADRIAN_ARGS \ + ${HADRIAN_ARGS:-} \ $@ } @@ -560,7 +564,7 @@ case "$(uname)" in *) fail "uname $(uname) is not supported" ;; esac -if [ -n "$CROSS_TARGET" ]; then +if [ -n "${CROSS_TARGET:-}" ]; then info "Cross-compiling for $CROSS_TARGET..." target_triple="$CROSS_TARGET" fi diff --git a/.gitlab/shell.nix b/.gitlab/shell.nix new file mode 100644 index 0000000000..5e32847735 --- /dev/null +++ b/.gitlab/shell.nix @@ -0,0 +1,65 @@ +{ system ? "aarch64-darwin" +#, nixpkgs ? fetchTarball https://github.com/angerman/nixpkgs/archive/257cb120334.tar.gz #apple-silicon.tar.gz +, pkgs ? import { inherit system; } +, compiler ? if system == "aarch64-darwin" then "ghc8103Binary" else "ghc8103" +}: pkgs.mkShell { + # this prevents nix from trying to write the env-vars file. + # we can't really, as NIX_BUILD_TOP/env-vars is not set. + noDumpEnvVars=1; + + # stop polluting LDFLAGS with -liconv + dontAddExtraLibs = true; + + # we need to inject ncurses into --with-curses-libraries. + # the real fix is to teach terminfo to use libcurses on macOS. + CONFIGURE_ARGS = "--with-intree-gmp --with-curses-libraries=${pkgs.ncurses.out}/lib"; + + # magic speedup pony :facepalm: + # + # nix has the ugly habbit of duplicating ld flags more than necessary. This + # somewhat consolidates this. + shellHook = '' + export NIX_LDFLAGS=$(for a in $NIX_LDFLAGS; do echo $a; done |sort|uniq|xargs) + export NIX_LDFLAGS_FOR_TARGET=$(for a in $NIX_LDFLAGS_FOR_TARGET; do echo $a; done |sort|uniq|xargs) + export NIX_LDFLAGS_FOR_TARGET=$(comm -3 <(for l in $NIX_LDFLAGS_FOR_TARGET; do echo $l; done) <(for l in $NIX_LDFLAGS; do echo $l; done)) + ''; + + nativeBuildInputs = (with pkgs; [ + haskell.compiler.${compiler} + haskell.packages.${compiler}.cabal-install + haskell.packages.${compiler}.alex + haskell.packages.${compiler}.happy # _1_19_12 is needed for older GHCs. + + clang_11 + llvm_11 + + automake + autoconf + m4 + + gmp + ncurses + libiconv + zlib.out + zlib.dev + glibcLocales + # locale doesn't build yet :-/ + # locale + + git + + python3 + # python3Full + # python3Packages.sphinx + perl + + which + wget + file + + xz + xlibs.lndir + + cacert ]) + ++ (with pkgs.darwin.apple_sdk.frameworks; [ Foundation Security ]); +} -- cgit v1.2.1