[Git][ghc/ghc][wip/romes/hadrian-cross-stage2-rebase_SVEN_FIXED] Make stage2 cross windows build work - somehow
Sven Tennie pushed to branch wip/romes/hadrian-cross-stage2-rebase_SVEN_FIXED at Glasgow Haskell Compiler / GHC Commits: 4a44d00d by Sven Tennie at 2025-10-05T18:45:50+02:00 Make stage2 cross windows build work - somehow Still needs some improvements. - - - - - 3 changed files: - hadrian/src/Rules/Libffi.hs - hadrian/src/Rules/Test.hs - hadrian/src/Settings/Default.hs Changes: ===================================== hadrian/src/Rules/Libffi.hs ===================================== @@ -136,17 +136,21 @@ configureEnvironment stage@Stage1 = do [ cArgs , getStagedCCFlags ] ldFlags <- interpretInContext context ldArgs - sequence [ builderEnvironment "CC" $ Cc CompileC stage - , builderEnvironment "CXX" $ Cc CompileC stage - , builderEnvironment "AR" (Ar Unpack stage) - -- , builderEnvironment "LD" (Ld stage) - , builderEnvironment "NM" (Nm stage) - , builderEnvironment "RANLIB" (Ranlib stage) - , remBuilderEnvironment "OBJDUMP" - , remBuilderEnvironment "STRIP" - , remBuilderEnvironment "LD" - , return . AddEnv "CFLAGS" $ unwords cFlags ++ " -w" - , return . AddEnv "LDFLAGS" $ unwords ldFlags ++ " -w" ] + winTarget <- isWinTarget (succStage stage) + sequence $ [ builderEnvironment "CC" $ Cc CompileC stage + , builderEnvironment "CXX" $ Cc CompileC stage + , builderEnvironment "AR" (Ar Unpack stage) + , builderEnvironment "NM" (Nm stage) + , builderEnvironment "RANLIB" (Ranlib stage) + , remBuilderEnvironment "OBJDUMP" + , remBuilderEnvironment "STRIP" + , return . AddEnv "CFLAGS" $ unwords cFlags ++ " -w" + , return . AddEnv "LDFLAGS" $ unwords ldFlags ++ " -w" ] + ++ (if winTarget then + -- TODO: Use staged LD for winTarget. This is only a hack because the wrong staged LD was provided. + [remBuilderEnvironment "LD"] + else + [builderEnvironment "LD" (Ld stage)]) configureEnvironment stage = do context <- libffiContext stage @@ -154,15 +158,19 @@ configureEnvironment stage = do [ cArgs , getStagedCCFlags ] ldFlags <- interpretInContext context ldArgs - sequence [ builderEnvironment "CC" $ Cc CompileC stage - , builderEnvironment "CXX" $ Cc CompileC stage - , builderEnvironment "AR" (Ar Unpack stage) - , builderEnvironment "NM" (Nm stage) - , builderEnvironment "RANLIB" (Ranlib stage) - -- TODO: Staged LD for mingw is wrong. Uses clang instead of the provided $LD --- , builderEnvironment "LD" (Ld stage) - , return . AddEnv "CFLAGS" $ unwords cFlags ++ " -w" - , return . AddEnv "LDFLAGS" $ unwords ldFlags ++ " -w" ] + winTarget <- isWinTarget stage + sequence $ [ builderEnvironment "CC" $ Cc CompileC stage + , builderEnvironment "CXX" $ Cc CompileC stage + , builderEnvironment "AR" (Ar Unpack stage) + , builderEnvironment "NM" (Nm stage) + , builderEnvironment "RANLIB" (Ranlib stage) + , return . AddEnv "CFLAGS" $ unwords cFlags ++ " -w" + , return . AddEnv "LDFLAGS" $ unwords ldFlags ++ " -w" ] + ++ (if winTarget then + -- TODO: We should use the staged LD here. Unfortunately, that differs from what's expected via $LD. + [] + else + [builderEnvironment "LD" (Ld stage)]) -- Need the libffi archive and `trackAllow` all files in the build directory. -- See [Libffi indicating inputs]. ===================================== hadrian/src/Rules/Test.hs ===================================== @@ -317,8 +317,8 @@ timeoutProgBuilder = do needTestsuitePackages :: Stage -> Action () needTestsuitePackages stg = do allpkgs <- packages <$> flavour - -- We need the libraries of the successor stage - libpkgs <- map (Stage1,) . filter isLibrary <$> allpkgs (succStage stg) + -- TODO: This used to force the packages to Stage1. Check if the tuple dance is still useful now. + libpkgs <- map (stg,) . filter isLibrary <$> allpkgs stg -- And the executables of the current stage exepkgs <- map (stg,) . filter isProgram <$> allpkgs stg -- Don't require lib:ghc or lib:cabal when testing the stage1 compiler ===================================== hadrian/src/Settings/Default.hs ===================================== @@ -53,8 +53,8 @@ import Settings.Builders.Win32Tarballs defaultPackages :: Stage -> Action [Package] defaultPackages (Stage0 GlobalLibs) = stageBootPackages defaultPackages (Stage0 InTreeLibs) = stage0Packages -defaultPackages Stage1 = stage1Packages -defaultPackages Stage2 = stage2Packages +defaultPackages Stage1 = stagedPackages Stage1 +defaultPackages Stage2 = stagedPackages Stage2 defaultPackages Stage3 = return [] -- | Default bignum backend. @@ -120,8 +120,8 @@ stage0Packages = do ++ [ timeout | windowsHost ] -- | Packages built in 'Stage1' by default. You can change this in "UserSettings". -stage1Packages :: Action [Package] -stage1Packages = do +stagedPackages :: Stage -> Action [Package] +stagedPackages stage = do let good_stage0_package p -- we only keep libraries for some reason | not (isLibrary p) = False @@ -135,7 +135,7 @@ stage1Packages = do libraries0 <- filter good_stage0_package <$> stage0Packages cross <- flag CrossCompiling - winTarget <- isWinTarget Stage1 + winTarget <- isWinTarget stage let when c xs = if c then xs else mempty @@ -186,10 +186,6 @@ stage1Packages = do ] ] --- | Packages built in 'Stage2' by default. You can change this in "UserSettings". -stage2Packages :: Action [Package] -stage2Packages = stage1Packages - -- | Packages that are built only for the testsuite. testsuitePackages :: Action [Package] testsuitePackages = return ([ timeout | windowsHost ] ++ [ checkPpr, checkExact, countDeps, lintCodes, ghcConfig, dumpDecls ]) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/4a44d00d9b3853089fcb1bc5cc096061... -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/4a44d00d9b3853089fcb1bc5cc096061... You're receiving this email because of your account on gitlab.haskell.org.
participants (1)
-
Sven Tennie (@supersven)