Skip to content
This repository has been archived by the owner on Sep 20, 2023. It is now read-only.

i386 build fails: import GHC.IntWord64 #565

Closed
arrowd opened this issue Jul 9, 2022 · 4 comments
Closed

i386 build fails: import GHC.IntWord64 #565

arrowd opened this issue Jul 9, 2022 · 4 comments

Comments

@arrowd
Copy link

arrowd commented Jul 9, 2022

[19 of 84] Compiling Basement.Numerical.Conversion ( Basement/Numerical/Conversion.hs, /wrkdirs/usr/ports/devel/hs-hoogle/work/hoogle-5.0.18.3/dist-newstyle/build/i386-freebsd/ghc-9.2.3/basement-0.0.14/build/Basement/Numerical/Conversion.o, /wrkdirs/usr/ports/devel/hs-hoogle/work/hoogle-5.0.18.3/dist-newstyle/build/i386-freebsd/ghc-9.2.3/basement-0.0.14/build/Basement/Numerical/Conversion.dyn_o )

Basement/Numerical/Conversion.hs:28:1: error:
    Could not find module `GHC.IntWord64'
    Use -v (or `:set -v` in ghci) to see a list of the files searched for.
   |
28 | import GHC.IntWord64
   | ^^^^^^^^^^^^^^^^^^^^
@hsyl20
Copy link

hsyl20 commented Jul 29, 2022

As of https://gitlab.haskell.org/ghc/ghc/-/commit/41d6cfc4d36ba93d82f16f9a83ea69f4e02c3810, GHC.IntWord64 module doesn't exist anymore as Int64/Word64 operations have become regular primops (accessible from GHC.Exts).

@juhp
Copy link

juhp commented Feb 16, 2023

Well with this it compiles for me with ghc-9.2.6.i686 Linux:

diff -up basement-0.0.15/Basement/Bits.hs~ basement-0.0.15/Basement/Bits.hs
--- basement-0.0.15/Basement/Bits.hs~	2022-02-28 12:00:48.000000000 +0800
+++ basement-0.0.15/Basement/Bits.hs	2023-02-16 18:50:32.947378064 +0800
@@ -54,7 +54,7 @@ import GHC.Int
 import Basement.Compat.Primitive
 
 #if WORD_SIZE_IN_BITS < 64
-import GHC.IntWord64
+import GHC.Exts
 #endif
 
 -- | operation over finite bits
diff -up basement-0.0.15/Basement/Numerical/Additive.hs~ basement-0.0.15/Basement/Numerical/Additive.hs
--- basement-0.0.15/Basement/Numerical/Additive.hs~	2022-02-28 12:00:48.000000000 +0800
+++ basement-0.0.15/Basement/Numerical/Additive.hs	2023-02-16 18:52:14.547975419 +0800
@@ -29,7 +29,7 @@ import qualified Basement.Types.Word128
 import qualified Basement.Types.Word256 as Word256
 
 #if WORD_SIZE_IN_BITS < 64
-import           GHC.IntWord64
+import           GHC.Exts
 #endif
 
 -- | Represent class of things that can be added together,
diff -up basement-0.0.15/Basement/Numerical/Conversion.hs~ basement-0.0.15/Basement/Numerical/Conversion.hs
--- basement-0.0.15/Basement/Numerical/Conversion.hs~	2022-02-28 12:00:48.000000000 +0800
+++ basement-0.0.15/Basement/Numerical/Conversion.hs	2023-02-16 18:28:38.844400110 +0800
@@ -25,7 +25,7 @@ import GHC.Word
 import Basement.Compat.Primitive
 
 #if WORD_SIZE_IN_BITS < 64
-import GHC.IntWord64
+import GHC.Exts
 #endif
 
 intToInt64 :: Int -> Int64
@@ -114,7 +114,7 @@
 #endif
 #else
 word64ToWord32s :: Word64 -> Word32x2
-word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord# w64))
+word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (word64ToWord# (uncheckedShiftRL64# w64 32#)))) (W32# (wordToWord32# (word64ToWord# w64)))
 #endif
 
 wordToChar :: Word -> Char
diff -up basement-0.0.15/Basement/PrimType.hs~ basement-0.0.15/Basement/PrimType.hs
--- basement-0.0.15/Basement/PrimType.hs~	2022-03-03 10:51:42.000000000 +0800
+++ basement-0.0.15/Basement/PrimType.hs	2023-02-16 18:52:13.884971521 +0800
@@ -54,7 +54,7 @@ import           Basement.Nat
 import qualified Prelude (quot)
 
 #if WORD_SIZE_IN_BITS < 64
-import           GHC.IntWord64
+import           GHC.Exts
 #endif
 
 #ifdef FOUNDATION_BOUNDS_CHECK
diff -up basement-0.0.15/Basement/Types/OffsetSize.hs~ basement-0.0.15/Basement/Types/OffsetSize.hs
--- basement-0.0.15/Basement/Types/OffsetSize.hs~	2019-09-02 11:58:08.000000000 +0800
+++ basement-0.0.15/Basement/Types/OffsetSize.hs	2023-02-16 18:49:45.703100306 +0800
@@ -69,7 +69,7 @@ import Data.List (foldl')
 import qualified Prelude
 
 #if WORD_SIZE_IN_BITS < 64
-import GHC.IntWord64
+import GHC.Exts
 #endif
 
 -- | File size in bytes
@@ -225,7 +225,7 @@
 
 csizeOfSize :: CountOf Word8 -> CSize
 #if WORD_SIZE_IN_BITS < 64
-csizeOfSize (CountOf (I# sz)) = CSize (W32# (int2Word# sz))
+csizeOfSize (CountOf (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz)))
 #else
 #if __GLASGOW_HASKELL__ >= 904
 csizeOfSize (CountOf (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz)))
@@ -238,7 +238,7 @@
 
 csizeOfOffset :: Offset8 -> CSize
 #if WORD_SIZE_IN_BITS < 64
-csizeOfOffset (Offset (I# sz)) = CSize (W32# (int2Word# sz))
+csizeOfOffset (Offset (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz)))
 #else
 #if __GLASGOW_HASKELL__ >= 904
 csizeOfOffset (Offset (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz)))
@@ -250,7 +250,7 @@
 sizeOfCSSize :: CSsize -> CountOf Word8
 sizeOfCSSize (CSsize (-1))      = error "invalid size: CSSize is -1"
 #if WORD_SIZE_IN_BITS < 64
-sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# sz)
+sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# (int32ToInt# sz))
 #else
 #if __GLASGOW_HASKELL__ >= 904
 sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# (int64ToInt# sz))
@@ -261,7 +261,7 @@
 
 sizeOfCSize :: CSize -> CountOf Word8
 #if WORD_SIZE_IN_BITS < 64
-sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# sz))
+sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# (word32ToWord# sz)))
 #else
 #if __GLASGOW_HASKELL__ >= 904
 sizeOfCSize (CSize (W64# sz)) = CountOf (I# (word2Int# (word64ToWord# sz)))

Maybe someone can check if it looks correct or can be improved?

I am going to try to apply this for Fedora 38.

@GNUtoo
Copy link

GNUtoo commented Apr 10, 2023

Guix also has the same build failure.

@arrowd
Copy link
Author

arrowd commented Aug 7, 2023

Can something be done about this?

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants