Sven Tennie pushed to branch wip/supersven/cross-compiler-manual-test-jobs at Glasgow Haskell Compiler / GHC

Commits:

3 changed files:

Changes:

  • .gitlab/ci.sh
    ... ... @@ -59,6 +59,7 @@ Common Modes:
    59 59
     Hadrian build system
    
    60 60
       build_hadrian Build GHC via the Hadrian build system
    
    61 61
       test_hadrian  Test GHC via the Hadrian build system
    
    62
    +  test_hadrian_cross_full  Test cross-compiled GHC using a downloaded bindist artifact
    
    62 63
     
    
    63 64
     Environment variables affecting both build systems:
    
    64 65
     
    
    ... ... @@ -640,6 +641,34 @@ function install_bindist() {
    640 641
       end_section install-bindist
    
    641 642
     }
    
    642 643
     
    
    644
    +function test_hadrian_cross_full() {
    
    645
    +  if [[ -z "${BIN_DIST_NAME:-}" ]]; then
    
    646
    +    fail "BIN_DIST_NAME is not set; cannot locate bindist artifact"
    
    647
    +  fi
    
    648
    +
    
    649
    +  local instdir="$TOP/_build/install"
    
    650
    +  local test_compiler="$instdir/bin/${cross_prefix}ghc$exe"
    
    651
    +
    
    652
    +  tar xJf "${BIN_DIST_NAME}.tar.xz"
    
    653
    +  install_bindist ghc-*/ "$instdir"
    
    654
    +
    
    655
    +  # Cross-compiler bindist provides only the cross-prefixed ghc binary, not a
    
    656
    +  # native ghc. Hadrian needs a native ghc at this path to build test support
    
    657
    +  # tools (check-exact, ghc-config). Symlink to the bootstrap GHC from setup.
    
    658
    +  if [[ ! -e "$instdir/bin/ghc" ]]; then
    
    659
    +    ln -sf "$GHC" "$instdir/bin/ghc"
    
    660
    +  fi
    
    661
    +
    
    662
    +  EXTRA_HC_OPTS="-fexternal-interpreter" run_hadrian \
    
    663
    +    test \
    
    664
    +    --summary-junit=./junit.xml \
    
    665
    +    --test-have-intree-files \
    
    666
    +    --test-compiler="${test_compiler}" \
    
    667
    +    "runtest.opts+=${RUNTEST_ARGS:-}" \
    
    668
    +    "runtest.opts+=--unexpected-output-dir=$TOP/unexpected-test-output" \
    
    669
    +    || fail "hadrian cross full testsuite"
    
    670
    +}
    
    671
    +
    
    643 672
     function test_hadrian() {
    
    644 673
       check_msys2_deps _build/stage1/bin/ghc --version
    
    645 674
       check_release_build
    
    ... ... @@ -1091,6 +1120,12 @@ case ${1:-help} in
    1091 1120
         time_it "test" test_hadrian || res=$?
    
    1092 1121
         push_perf_notes
    
    1093 1122
         exit $res ;;
    
    1123
    +  test_hadrian_cross_full)
    
    1124
    +    fetch_perf_notes
    
    1125
    +    res=0
    
    1126
    +    time_it "test" test_hadrian_cross_full || res=$?
    
    1127
    +    push_perf_notes
    
    1128
    +    exit $res ;;
    
    1094 1129
       run_hadrian) shift; run_hadrian "$@" ;;
    
    1095 1130
       perf_test) run_perf_test ;;
    
    1096 1131
       abi_test) abi_test ;;
    

  • .gitlab/generate-ci/gen_ci.hs
    ... ... @@ -589,6 +589,10 @@ modifyValidateRules _ r = error $ "Applying validate rule to nightly/release job
    589 589
     manualRule :: OnOffRules -> OnOffRules
    
    590 590
     manualRule rules = rules { when = Manual }
    
    591 591
     
    
    592
    +renameRule :: String -> OnOffRules -> OnOffRules
    
    593
    +renameRule n (OnOffRules (ValidateOnly _ rs) w) = OnOffRules (ValidateOnly n rs) w
    
    594
    +renameRule _ r = error $ "renameRule: not a ValidateOnly rule: " ++ show (rule_set r)
    
    595
    +
    
    592 596
     -- Given 'OnOffRules', returns a list of ALL rules with their toggled status.
    
    593 597
     -- For example, even if you don't explicitly disable a rule it will end up in the
    
    594 598
     -- rule list with the OFF state.
    
    ... ... @@ -786,6 +790,7 @@ validateRuleString LoongArch64 = labelString "loongarch"
    786 790
     data Job
    
    787 791
       = Job { jobStage :: String
    
    788 792
             , jobNeeds :: [String]
    
    793
    +        , jobNeedsWithArtifacts :: [String]
    
    789 794
             , jobTags :: [String]
    
    790 795
             , jobAllowFailure :: Bool
    
    791 796
             , jobScript :: [String]
    
    ... ... @@ -807,7 +812,9 @@ instance ToJSON Job where
    807 812
         [ "stage" A..= jobStage
    
    808 813
           -- Convoluted to avoid download artifacts from ghci job
    
    809 814
           -- https://docs.gitlab.com/ee/ci/yaml/#needsartifacts
    
    810
    -    , "needs" A..= map (\j -> object [ "job" A..= j, "artifacts" A..= False ]) jobNeeds
    
    815
    +    , "needs" A..= (  map (\j -> object [ "job" A..= j, "artifacts" A..= False ]) jobNeeds
    
    816
    +                   ++ map (\j -> object [ "job" A..= j, "artifacts" A..= True  ]) jobNeedsWithArtifacts
    
    817
    +                   )
    
    811 818
         , "dependencies" A..= jobDependencies
    
    812 819
         , "image" A..= jobDockerImage
    
    813 820
         , "tags" A..= jobTags
    
    ... ... @@ -868,6 +875,7 @@ job arch opsys buildConfig = NamedJob { name = jobName, jobInfo = Job {..} }
    868 875
         jobFlavour = mkJobFlavour buildConfig
    
    869 876
     
    
    870 877
         jobDependencies = []
    
    878
    +    jobNeedsWithArtifacts = []
    
    871 879
         jobVariables = mconcat
    
    872 880
           [ opsysVariables arch opsys
    
    873 881
           , "TEST_ENV" =: testEnv arch opsys buildConfig
    
    ... ... @@ -1001,6 +1009,41 @@ release arch opsys bc =
    1001 1009
                             . ignorePerfFailures
    
    1002 1010
                             . highCompression $ j
    
    1003 1011
                   }
    
    1012
    +crossTestJob :: NamedJob Job -> NamedJob Job
    
    1013
    +crossTestJob (NamedJob buildName buildJob) =
    
    1014
    +  NamedJob testName $
    
    1015
    +    buildJob
    
    1016
    +      { jobNeeds              = ["hadrian-ghc-in-ghci"]
    
    1017
    +      , jobNeedsWithArtifacts = [buildName]
    
    1018
    +      , jobDependencies       = [buildName]
    
    1019
    +      , jobScript             = testScript (jobPlatform buildJob)
    
    1020
    +      , jobRules              = renameRule testName $ manualRule (jobRules buildJob)
    
    1021
    +      , jobAllowFailure       = True
    
    1022
    +      }
    
    1023
    +  where
    
    1024
    +    testName = buildName ++ "-manual-testsuite"
    
    1025
    +    testScript (_, opsys) =
    
    1026
    +      [ "sudo chown ghc:ghc -R ." | Linux {} <- [opsys] ] ++
    
    1027
    +      [ ".gitlab/ci.sh setup"
    
    1028
    +      , ".gitlab/ci.sh configure"
    
    1029
    +      , ".gitlab/ci.sh test_hadrian_cross_full"
    
    1030
    +      ]
    
    1031
    +
    
    1032
    +withCrossTestJob :: JobGroup Job -> [JobGroup Job]
    
    1033
    +withCrossTestJob jg@(StandardTriple (Just vj) _ _) =
    
    1034
    +  [jg, StandardTriple (Just (crossTestJob vj)) Nothing Nothing]
    
    1035
    +withCrossTestJob jg = [jg]
    
    1036
    +
    
    1037
    +-- | Apply withCrossTestJob only when the job already has a real emulator configured.
    
    1038
    +-- JS and wasm jobs run their own testsuite; jobs without CROSS_EMULATOR can't run tests.
    
    1039
    +withCrossTestJobAuto :: JobGroup Job -> [JobGroup Job]
    
    1040
    +withCrossTestJobAuto jg@(StandardTriple (Just (NamedJob _ vj)) _ _)
    
    1041
    +  | Just [e] <- mmlookup "CROSS_EMULATOR" (jobVariables vj)
    
    1042
    +  , e /= "NOT_SET"
    
    1043
    +  , e /= "js-emulator"
    
    1044
    +  = withCrossTestJob jg
    
    1045
    +withCrossTestJobAuto jg = [jg]
    
    1046
    +
    
    1004 1047
     ---------------------------------------------------------------------
    
    1005 1048
     -- Specific job modification functions
    
    1006 1049
     ---------------------------------------------------------------------
    
    ... ... @@ -1259,7 +1302,7 @@ alpine_aarch64 = [
    1259 1302
       ]
    
    1260 1303
     
    
    1261 1304
     cross_jobs :: [JobGroup Job]
    
    1262
    -cross_jobs = [
    
    1305
    +cross_jobs = concatMap withCrossTestJobAuto [
    
    1263 1306
         -- x86 -> aarch64
    
    1264 1307
         validateBuilds Amd64 (Linux Debian13) (crossConfig "aarch64-linux-gnu" (Emulator "qemu-aarch64 -L /usr/aarch64-linux-gnu") Nothing)
    
    1265 1308
     
    
    ... ... @@ -1439,6 +1482,8 @@ platform_mapping = Map.map go combined_result
    1439 1482
             , show (name b) ] -- Explicitly selected
    
    1440 1483
           | name a `elem` whitelist = a -- Explicitly selected
    
    1441 1484
           | name b `elem` whitelist = b
    
    1485
    +      | "-manual-testsuite" `isSuffixOf` name a = b -- prefer build job over manual test job
    
    1486
    +      | "-manual-testsuite" `isSuffixOf` name b = a
    
    1442 1487
           | otherwise = error (show (name a) ++ show (name b))
    
    1443 1488
     
    
    1444 1489
         go = fmap (BindistInfo . unwords . fromJust . mmlookup "BIN_DIST_NAME" . jobVariables)
    

  • .gitlab/jobs.yaml
    ... ... @@ -417,6 +417,182 @@
    417 417
           "WindresCmd": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-windres"
    
    418 418
         }
    
    419 419
       },
    
    420
    +  "aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate+llvm-manual-testsuite": {
    
    421
    +    "after_script": [
    
    422
    +      ".gitlab/ci.sh save_cache",
    
    423
    +      ".gitlab/ci.sh save_test_output",
    
    424
    +      ".gitlab/ci.sh clean",
    
    425
    +      "cat ci_timings.txt"
    
    426
    +    ],
    
    427
    +    "allow_failure": true,
    
    428
    +    "artifacts": {
    
    429
    +      "expire_in": "2 weeks",
    
    430
    +      "paths": [
    
    431
    +        "ghc-aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate+llvm.tar.xz",
    
    432
    +        "junit.xml",
    
    433
    +        "unexpected-test-output.tar.gz"
    
    434
    +      ],
    
    435
    +      "reports": {
    
    436
    +        "junit": "junit.xml"
    
    437
    +      },
    
    438
    +      "when": "always"
    
    439
    +    },
    
    440
    +    "cache": {
    
    441
    +      "key": "aarch64-linux-deb12-wine-$CACHE_REV",
    
    442
    +      "paths": [
    
    443
    +        "cabal-cache",
    
    444
    +        "toolchain"
    
    445
    +      ]
    
    446
    +    },
    
    447
    +    "dependencies": [
    
    448
    +      "aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate+llvm"
    
    449
    +    ],
    
    450
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/aarch64-linux-deb12-wine:$DOCKER_REV",
    
    451
    +    "needs": [
    
    452
    +      {
    
    453
    +        "artifacts": false,
    
    454
    +        "job": "hadrian-ghc-in-ghci"
    
    455
    +      },
    
    456
    +      {
    
    457
    +        "artifacts": true,
    
    458
    +        "job": "aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate+llvm"
    
    459
    +      }
    
    460
    +    ],
    
    461
    +    "rules": [
    
    462
    +      {
    
    463
    +        "allow_failure": true,
    
    464
    +        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\baarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate\\+llvm-manual-testsuite(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/)) || (($CI_MERGE_REQUEST_LABELS =~ /.*aarch64.*/) && ($CI_MERGE_REQUEST_LABELS =~ /.*Windows.*/) && ($CI_MERGE_REQUEST_LABELS =~ /.*LLVM backend.*/))))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    465
    +        "when": "manual"
    
    466
    +      }
    
    467
    +    ],
    
    468
    +    "script": [
    
    469
    +      "sudo chown ghc:ghc -R .",
    
    470
    +      ".gitlab/ci.sh setup",
    
    471
    +      ".gitlab/ci.sh configure",
    
    472
    +      ".gitlab/ci.sh test_hadrian_cross_full"
    
    473
    +    ],
    
    474
    +    "stage": "full-build",
    
    475
    +    "tags": [
    
    476
    +      "aarch64-linux"
    
    477
    +    ],
    
    478
    +    "variables": {
    
    479
    +      "AR": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-llvm-ar",
    
    480
    +      "BIGNUM_BACKEND": "native",
    
    481
    +      "BIN_DIST_NAME": "ghc-aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate+llvm",
    
    482
    +      "BUILD_FLAVOUR": "validate+llvm",
    
    483
    +      "CC": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-clang",
    
    484
    +      "CFLAGS": "-fuse-ld=/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld --rtlib=compiler-rt",
    
    485
    +      "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
    
    486
    +      "CONF_CC_OPTS_STAGE2": "-fuse-ld=/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld --rtlib=compiler-rt",
    
    487
    +      "CROSS_EMULATOR": "/opt/wine-arm64ec-msys2-deb12/bin/wine",
    
    488
    +      "CROSS_TARGET": "aarch64-unknown-mingw32",
    
    489
    +      "CXX": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-clang++",
    
    490
    +      "HADRIAN_ARGS": "--docs=none",
    
    491
    +      "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    492
    +      "LD": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld",
    
    493
    +      "LLVMAS": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-clang",
    
    494
    +      "MergeObjsCmd": "",
    
    495
    +      "NM": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-nm",
    
    496
    +      "OBJCOPY": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-objcopy",
    
    497
    +      "OBJDUMP": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-objdump",
    
    498
    +      "RANLIB": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-llvm-ranlib",
    
    499
    +      "RUNTEST_ARGS": "",
    
    500
    +      "SIZE": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-size",
    
    501
    +      "STRINGS": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-strings",
    
    502
    +      "STRIP": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-strip",
    
    503
    +      "TEST_ENV": "aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate+llvm",
    
    504
    +      "USER_CONF_CC_OPTS_STAGE2": "-fuse-ld=/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld --rtlib=compiler-rt",
    
    505
    +      "WindresCmd": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-windres"
    
    506
    +    }
    
    507
    +  },
    
    508
    +  "aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate-manual-testsuite": {
    
    509
    +    "after_script": [
    
    510
    +      ".gitlab/ci.sh save_cache",
    
    511
    +      ".gitlab/ci.sh save_test_output",
    
    512
    +      ".gitlab/ci.sh clean",
    
    513
    +      "cat ci_timings.txt"
    
    514
    +    ],
    
    515
    +    "allow_failure": true,
    
    516
    +    "artifacts": {
    
    517
    +      "expire_in": "2 weeks",
    
    518
    +      "paths": [
    
    519
    +        "ghc-aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate.tar.xz",
    
    520
    +        "junit.xml",
    
    521
    +        "unexpected-test-output.tar.gz"
    
    522
    +      ],
    
    523
    +      "reports": {
    
    524
    +        "junit": "junit.xml"
    
    525
    +      },
    
    526
    +      "when": "always"
    
    527
    +    },
    
    528
    +    "cache": {
    
    529
    +      "key": "aarch64-linux-deb12-wine-$CACHE_REV",
    
    530
    +      "paths": [
    
    531
    +        "cabal-cache",
    
    532
    +        "toolchain"
    
    533
    +      ]
    
    534
    +    },
    
    535
    +    "dependencies": [
    
    536
    +      "aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate"
    
    537
    +    ],
    
    538
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/aarch64-linux-deb12-wine:$DOCKER_REV",
    
    539
    +    "needs": [
    
    540
    +      {
    
    541
    +        "artifacts": false,
    
    542
    +        "job": "hadrian-ghc-in-ghci"
    
    543
    +      },
    
    544
    +      {
    
    545
    +        "artifacts": true,
    
    546
    +        "job": "aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate"
    
    547
    +      }
    
    548
    +    ],
    
    549
    +    "rules": [
    
    550
    +      {
    
    551
    +        "allow_failure": true,
    
    552
    +        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\baarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate-manual-testsuite(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/)) || (($CI_MERGE_REQUEST_LABELS =~ /.*aarch64.*/) && ($CI_MERGE_REQUEST_LABELS =~ /.*Windows.*/))))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    553
    +        "when": "manual"
    
    554
    +      }
    
    555
    +    ],
    
    556
    +    "script": [
    
    557
    +      "sudo chown ghc:ghc -R .",
    
    558
    +      ".gitlab/ci.sh setup",
    
    559
    +      ".gitlab/ci.sh configure",
    
    560
    +      ".gitlab/ci.sh test_hadrian_cross_full"
    
    561
    +    ],
    
    562
    +    "stage": "full-build",
    
    563
    +    "tags": [
    
    564
    +      "aarch64-linux"
    
    565
    +    ],
    
    566
    +    "variables": {
    
    567
    +      "AR": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-llvm-ar",
    
    568
    +      "BIGNUM_BACKEND": "native",
    
    569
    +      "BIN_DIST_NAME": "ghc-aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate",
    
    570
    +      "BUILD_FLAVOUR": "validate",
    
    571
    +      "CC": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-clang",
    
    572
    +      "CFLAGS": "-fuse-ld=/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld --rtlib=compiler-rt",
    
    573
    +      "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
    
    574
    +      "CONF_CC_OPTS_STAGE2": "-fuse-ld=/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld --rtlib=compiler-rt",
    
    575
    +      "CROSS_EMULATOR": "/opt/wine-arm64ec-msys2-deb12/bin/wine",
    
    576
    +      "CROSS_TARGET": "aarch64-unknown-mingw32",
    
    577
    +      "CXX": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-clang++",
    
    578
    +      "HADRIAN_ARGS": "--docs=none",
    
    579
    +      "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    580
    +      "LD": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld",
    
    581
    +      "LLVMAS": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-clang",
    
    582
    +      "MergeObjsCmd": "",
    
    583
    +      "NM": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-nm",
    
    584
    +      "OBJCOPY": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-objcopy",
    
    585
    +      "OBJDUMP": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-objdump",
    
    586
    +      "RANLIB": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-llvm-ranlib",
    
    587
    +      "RUNTEST_ARGS": "",
    
    588
    +      "SIZE": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-size",
    
    589
    +      "STRINGS": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-strings",
    
    590
    +      "STRIP": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-strip",
    
    591
    +      "TEST_ENV": "aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate",
    
    592
    +      "USER_CONF_CC_OPTS_STAGE2": "-fuse-ld=/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld --rtlib=compiler-rt",
    
    593
    +      "WindresCmd": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-windres"
    
    594
    +    }
    
    595
    +  },
    
    420 596
       "aarch64-linux-deb13-validate": {
    
    421 597
         "after_script": [
    
    422 598
           ".gitlab/ci.sh save_cache",
    
    ... ... @@ -6347,6 +6523,76 @@
    6347 6523
           "TEST_ENV": "x86_64-linux-deb13-cross_aarch64-linux-gnu-validate"
    
    6348 6524
         }
    
    6349 6525
       },
    
    6526
    +  "x86_64-linux-deb13-cross_aarch64-linux-gnu-validate-manual-testsuite": {
    
    6527
    +    "after_script": [
    
    6528
    +      ".gitlab/ci.sh save_cache",
    
    6529
    +      ".gitlab/ci.sh save_test_output",
    
    6530
    +      ".gitlab/ci.sh clean",
    
    6531
    +      "cat ci_timings.txt"
    
    6532
    +    ],
    
    6533
    +    "allow_failure": true,
    
    6534
    +    "artifacts": {
    
    6535
    +      "expire_in": "2 weeks",
    
    6536
    +      "paths": [
    
    6537
    +        "ghc-x86_64-linux-deb13-cross_aarch64-linux-gnu-validate.tar.xz",
    
    6538
    +        "junit.xml",
    
    6539
    +        "unexpected-test-output.tar.gz"
    
    6540
    +      ],
    
    6541
    +      "reports": {
    
    6542
    +        "junit": "junit.xml"
    
    6543
    +      },
    
    6544
    +      "when": "always"
    
    6545
    +    },
    
    6546
    +    "cache": {
    
    6547
    +      "key": "x86_64-linux-deb13-$CACHE_REV",
    
    6548
    +      "paths": [
    
    6549
    +        "cabal-cache",
    
    6550
    +        "toolchain"
    
    6551
    +      ]
    
    6552
    +    },
    
    6553
    +    "dependencies": [
    
    6554
    +      "x86_64-linux-deb13-cross_aarch64-linux-gnu-validate"
    
    6555
    +    ],
    
    6556
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13:$DOCKER_REV",
    
    6557
    +    "needs": [
    
    6558
    +      {
    
    6559
    +        "artifacts": false,
    
    6560
    +        "job": "hadrian-ghc-in-ghci"
    
    6561
    +      },
    
    6562
    +      {
    
    6563
    +        "artifacts": true,
    
    6564
    +        "job": "x86_64-linux-deb13-cross_aarch64-linux-gnu-validate"
    
    6565
    +      }
    
    6566
    +    ],
    
    6567
    +    "rules": [
    
    6568
    +      {
    
    6569
    +        "allow_failure": true,
    
    6570
    +        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-deb13-cross_aarch64-linux-gnu-validate-manual-testsuite(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/))))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    6571
    +        "when": "manual"
    
    6572
    +      }
    
    6573
    +    ],
    
    6574
    +    "script": [
    
    6575
    +      "sudo chown ghc:ghc -R .",
    
    6576
    +      ".gitlab/ci.sh setup",
    
    6577
    +      ".gitlab/ci.sh configure",
    
    6578
    +      ".gitlab/ci.sh test_hadrian_cross_full"
    
    6579
    +    ],
    
    6580
    +    "stage": "full-build",
    
    6581
    +    "tags": [
    
    6582
    +      "x86_64-linux"
    
    6583
    +    ],
    
    6584
    +    "variables": {
    
    6585
    +      "BIGNUM_BACKEND": "gmp",
    
    6586
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-deb13-cross_aarch64-linux-gnu-validate",
    
    6587
    +      "BUILD_FLAVOUR": "validate",
    
    6588
    +      "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
    
    6589
    +      "CROSS_EMULATOR": "qemu-aarch64 -L /usr/aarch64-linux-gnu",
    
    6590
    +      "CROSS_TARGET": "aarch64-linux-gnu",
    
    6591
    +      "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    6592
    +      "RUNTEST_ARGS": "",
    
    6593
    +      "TEST_ENV": "x86_64-linux-deb13-cross_aarch64-linux-gnu-validate"
    
    6594
    +    }
    
    6595
    +  },
    
    6350 6596
       "x86_64-linux-deb13-int_native-validate": {
    
    6351 6597
         "after_script": [
    
    6352 6598
           ".gitlab/ci.sh save_cache",
    
    ... ... @@ -6661,6 +6907,76 @@
    6661 6907
           "TEST_ENV": "x86_64-linux-deb13-riscv-cross_riscv64-linux-gnu-validate"
    
    6662 6908
         }
    
    6663 6909
       },
    
    6910
    +  "x86_64-linux-deb13-riscv-cross_riscv64-linux-gnu-validate-manual-testsuite": {
    
    6911
    +    "after_script": [
    
    6912
    +      ".gitlab/ci.sh save_cache",
    
    6913
    +      ".gitlab/ci.sh save_test_output",
    
    6914
    +      ".gitlab/ci.sh clean",
    
    6915
    +      "cat ci_timings.txt"
    
    6916
    +    ],
    
    6917
    +    "allow_failure": true,
    
    6918
    +    "artifacts": {
    
    6919
    +      "expire_in": "2 weeks",
    
    6920
    +      "paths": [
    
    6921
    +        "ghc-x86_64-linux-deb13-riscv-cross_riscv64-linux-gnu-validate.tar.xz",
    
    6922
    +        "junit.xml",
    
    6923
    +        "unexpected-test-output.tar.gz"
    
    6924
    +      ],
    
    6925
    +      "reports": {
    
    6926
    +        "junit": "junit.xml"
    
    6927
    +      },
    
    6928
    +      "when": "always"
    
    6929
    +    },
    
    6930
    +    "cache": {
    
    6931
    +      "key": "x86_64-linux-deb13-riscv-$CACHE_REV",
    
    6932
    +      "paths": [
    
    6933
    +        "cabal-cache",
    
    6934
    +        "toolchain"
    
    6935
    +      ]
    
    6936
    +    },
    
    6937
    +    "dependencies": [
    
    6938
    +      "x86_64-linux-deb13-riscv-cross_riscv64-linux-gnu-validate"
    
    6939
    +    ],
    
    6940
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb13-riscv:$DOCKER_REV",
    
    6941
    +    "needs": [
    
    6942
    +      {
    
    6943
    +        "artifacts": false,
    
    6944
    +        "job": "hadrian-ghc-in-ghci"
    
    6945
    +      },
    
    6946
    +      {
    
    6947
    +        "artifacts": true,
    
    6948
    +        "job": "x86_64-linux-deb13-riscv-cross_riscv64-linux-gnu-validate"
    
    6949
    +      }
    
    6950
    +    ],
    
    6951
    +    "rules": [
    
    6952
    +      {
    
    6953
    +        "allow_failure": true,
    
    6954
    +        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-deb13-riscv-cross_riscv64-linux-gnu-validate-manual-testsuite(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/)) || ($CI_MERGE_REQUEST_LABELS =~ /.*RISC-V.*/)))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    6955
    +        "when": "manual"
    
    6956
    +      }
    
    6957
    +    ],
    
    6958
    +    "script": [
    
    6959
    +      "sudo chown ghc:ghc -R .",
    
    6960
    +      ".gitlab/ci.sh setup",
    
    6961
    +      ".gitlab/ci.sh configure",
    
    6962
    +      ".gitlab/ci.sh test_hadrian_cross_full"
    
    6963
    +    ],
    
    6964
    +    "stage": "full-build",
    
    6965
    +    "tags": [
    
    6966
    +      "x86_64-linux"
    
    6967
    +    ],
    
    6968
    +    "variables": {
    
    6969
    +      "BIGNUM_BACKEND": "gmp",
    
    6970
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-deb13-riscv-cross_riscv64-linux-gnu-validate",
    
    6971
    +      "BUILD_FLAVOUR": "validate",
    
    6972
    +      "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
    
    6973
    +      "CROSS_EMULATOR": "qemu-riscv64 -L /usr/riscv64-linux-gnu",
    
    6974
    +      "CROSS_TARGET": "riscv64-linux-gnu",
    
    6975
    +      "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    6976
    +      "RUNTEST_ARGS": "",
    
    6977
    +      "TEST_ENV": "x86_64-linux-deb13-riscv-cross_riscv64-linux-gnu-validate"
    
    6978
    +    }
    
    6979
    +  },
    
    6664 6980
       "x86_64-linux-deb13-unreg-validate": {
    
    6665 6981
         "after_script": [
    
    6666 6982
           ".gitlab/ci.sh save_cache",
    
    ... ... @@ -7537,6 +7853,76 @@
    7537 7853
           "TEST_ENV": "x86_64-linux-ubuntu24_04-loongarch-cross_loongarch64-linux-gnu-validate"
    
    7538 7854
         }
    
    7539 7855
       },
    
    7856
    +  "x86_64-linux-ubuntu24_04-loongarch-cross_loongarch64-linux-gnu-validate-manual-testsuite": {
    
    7857
    +    "after_script": [
    
    7858
    +      ".gitlab/ci.sh save_cache",
    
    7859
    +      ".gitlab/ci.sh save_test_output",
    
    7860
    +      ".gitlab/ci.sh clean",
    
    7861
    +      "cat ci_timings.txt"
    
    7862
    +    ],
    
    7863
    +    "allow_failure": true,
    
    7864
    +    "artifacts": {
    
    7865
    +      "expire_in": "2 weeks",
    
    7866
    +      "paths": [
    
    7867
    +        "ghc-x86_64-linux-ubuntu24_04-loongarch-cross_loongarch64-linux-gnu-validate.tar.xz",
    
    7868
    +        "junit.xml",
    
    7869
    +        "unexpected-test-output.tar.gz"
    
    7870
    +      ],
    
    7871
    +      "reports": {
    
    7872
    +        "junit": "junit.xml"
    
    7873
    +      },
    
    7874
    +      "when": "always"
    
    7875
    +    },
    
    7876
    +    "cache": {
    
    7877
    +      "key": "x86_64-linux-ubuntu24_04-loongarch-$CACHE_REV",
    
    7878
    +      "paths": [
    
    7879
    +        "cabal-cache",
    
    7880
    +        "toolchain"
    
    7881
    +      ]
    
    7882
    +    },
    
    7883
    +    "dependencies": [
    
    7884
    +      "x86_64-linux-ubuntu24_04-loongarch-cross_loongarch64-linux-gnu-validate"
    
    7885
    +    ],
    
    7886
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-ubuntu24_04-loongarch:$DOCKER_REV",
    
    7887
    +    "needs": [
    
    7888
    +      {
    
    7889
    +        "artifacts": false,
    
    7890
    +        "job": "hadrian-ghc-in-ghci"
    
    7891
    +      },
    
    7892
    +      {
    
    7893
    +        "artifacts": true,
    
    7894
    +        "job": "x86_64-linux-ubuntu24_04-loongarch-cross_loongarch64-linux-gnu-validate"
    
    7895
    +      }
    
    7896
    +    ],
    
    7897
    +    "rules": [
    
    7898
    +      {
    
    7899
    +        "allow_failure": true,
    
    7900
    +        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-ubuntu24_04-loongarch-cross_loongarch64-linux-gnu-validate-manual-testsuite(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/)) || ($CI_MERGE_REQUEST_LABELS =~ /.*loongarch.*/)))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    7901
    +        "when": "manual"
    
    7902
    +      }
    
    7903
    +    ],
    
    7904
    +    "script": [
    
    7905
    +      "sudo chown ghc:ghc -R .",
    
    7906
    +      ".gitlab/ci.sh setup",
    
    7907
    +      ".gitlab/ci.sh configure",
    
    7908
    +      ".gitlab/ci.sh test_hadrian_cross_full"
    
    7909
    +    ],
    
    7910
    +    "stage": "full-build",
    
    7911
    +    "tags": [
    
    7912
    +      "x86_64-linux"
    
    7913
    +    ],
    
    7914
    +    "variables": {
    
    7915
    +      "BIGNUM_BACKEND": "gmp",
    
    7916
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-ubuntu24_04-loongarch-cross_loongarch64-linux-gnu-validate",
    
    7917
    +      "BUILD_FLAVOUR": "validate",
    
    7918
    +      "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
    
    7919
    +      "CROSS_EMULATOR": "qemu-loongarch64 -L /usr/loongarch64-linux-gnu",
    
    7920
    +      "CROSS_TARGET": "loongarch64-linux-gnu",
    
    7921
    +      "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    7922
    +      "RUNTEST_ARGS": "",
    
    7923
    +      "TEST_ENV": "x86_64-linux-ubuntu24_04-loongarch-cross_loongarch64-linux-gnu-validate"
    
    7924
    +    }
    
    7925
    +  },
    
    7540 7926
       "x86_64-linux-ubuntu24_04-validate": {
    
    7541 7927
         "after_script": [
    
    7542 7928
           ".gitlab/ci.sh save_cache",