[Barrelfish-users] Make Hake works in ghc 7.4 and 7.6
Wang Nan
wangnan0 at huawei.com
Tue Apr 2 03:33:50 CEST 2013
Hi,
I agree to avoid #ifs. However, at least the change of IIModule -> IIDecl in Main.hs should be considered. Without this patch,
ghc 7.4.2 (which you suggest in README) rejects to generate Makefile (it reports: "module Hakefiles not interpreted").
In fact, even with the IIModule -> IIDecl change, I'm unable to get Makefile (it reports: stack overflow), but ghc 7.4 works with all
parts of the following patches applied. I don't know the exact reason.
-- 2013/4/1 23:50, Kornilios Kourtis --
> Hi,
>
> On Mon, Apr 01, 2013 at 11:21:54AM +0800, Wang Nan wrote:
>> Sorry, the previous patch seems insufficient. cpp hates "\" endding lines.
>>
>> Following updated patch has been tested under ghc 7.4.2 and ghc 7.6.2.
>
> Thanks a lot for the patch. Admittedly, porting hake to the next ghc has
> not always been easy, so I'm sure we are going to make good use of it :-)
>
> However, I'm somewhat reluctant to add #ifs to the hake source code to
> avoid increasing code complexity. If this change would make your (or for
> that matter somebody else's) life easier, we'd be happy to consider it.
> Otherwise, if people that want to use ghc 7.6 can carry this patch on
> their own tree without too much effort, I think the best solution would
> be do just that. That being said, I don't really feel strongly about it.
>
> Thanks,
> Kornilios.
>
>>
>>
>>
>> diff -r 12e657e0ed48 hake/ArchDefaults.hs
>> --- a/hake/ArchDefaults.hs Fri Mar 22 13:15:31 2013 +0100
>> +++ b/hake/ArchDefaults.hs Mon Apr 01 11:33:50 2013 +0800
>> @@ -112,7 +112,8 @@
>> optDependencies =
>> [ PreDep InstallTree arch "/include/errors/errno.h",
>> PreDep InstallTree arch "/include/barrelfish_kpi/capbits.h",
>> - PreDep InstallTree arch "/include/asmoffsets.h" ],
>> + PreDep InstallTree arch "/include/trace_definitions/trace_defs.h",
>> + PreDep InstallTree arch "/include/asmoffsets.h" ],
>> optLdFlags = ldFlags arch,
>> optLdCxxFlags = ldCxxFlags arch,
>> optLibs = stdLibs arch,
>> diff -r 12e657e0ed48 hake/Main.hs
>> --- a/hake/Main.hs Fri Mar 22 13:15:31 2013 +0100
>> +++ b/hake/Main.hs Mon Apr 01 11:33:50 2013 +0800
>> @@ -19,9 +19,14 @@
>> import System.Exit
>> import GHC hiding (Target)
>> import GHC.Paths ( libdir )
>> -import DynFlags ( defaultLogAction,
>> +import DynFlags (
>> +#if __GLASGOW_HASKELL__ < 706
>> + defaultLogAction,
>> +#else
>> + defaultFatalMessager, defaultFlushOut,
>> +#endif
>> xopt_set,
>> - ExtensionFlag (Opt_DeriveDataTypeable) )
>> + ExtensionFlag (Opt_DeriveDataTypeable, Opt_Cpp) )
>> import Data.Dynamic
>> import Data.Maybe
>> import Data.List
>> @@ -357,15 +362,19 @@
>> -> IO [(String,HRule)]
>> evalHakeFiles o allfiles hakefiles =
>> let imports = [ "Hakefiles"]
>> - all_imports = imports
>> + all_imports = ("Prelude":"HakeTypes":imports)
>> moddirs = [ (opt_installdir o) ./. "hake",
>> ".",
>> (opt_bfsourcedir o) ./. "hake" ]
>> - in do
>> + in do
>> +#if __GLASGOW_HASKELL__ < 706
>> defaultErrorHandler defaultLogAction $ do
>> +#else
>> + defaultErrorHandler defaultFatalMessager defaultFlushOut $ do
>> +#endif
>> runGhc (Just libdir) $ do
>> dflags <- getSessionDynFlags
>> - let dflags1 = foldl xopt_set dflags [ Opt_DeriveDataTypeable ]
>> + let dflags1 = foldl xopt_set dflags [ Opt_DeriveDataTypeable, Opt_Cpp ]
>> _ <- setSessionDynFlags dflags1{
>> importPaths = moddirs,
>> hiDir = Just "./hake",
>> @@ -374,8 +383,7 @@
>> targets <- mapM (\m -> guessTarget m Nothing) imports
>> setTargets targets
>> load LoadAllTargets
>> - modlist <- mapM (\m -> findModule (mkModuleName m) Nothing) all_imports
>> - setContext [IIModule m | m <- modlist]
>> + setContext [(IIDecl . simpleImportDecl) (mkModuleName m) | m <- (all_imports)]
>> val <- dynCompileExpr "Hakefiles.hf :: [(String, HRule)]"
>> return (fromDyn val [("failed",Error "failed")])
>>
>> diff -r 12e657e0ed48 hake/RuleDefs.hs
>> --- a/hake/RuleDefs.hs Fri Mar 22 13:15:31 2013 +0100
>> +++ b/hake/RuleDefs.hs Mon Apr 01 11:33:50 2013 +0800
>> @@ -779,7 +779,8 @@
>> NoDep SrcTree "src" ".",
>> Str "-odir ", NoDep BuildTree "tools" ".",
>> Str "-hidir ", NoDep BuildTree "tools" ".",
>> - Str "-rtsopts=all",
>> + Str "-cpp",
>> + Str "-rtsopts=all",
>> Str "--make ",
>> In SrcTree "src" main,
>> Str "-o ",
>> @@ -884,11 +885,11 @@
>> appGetOptionsForArch arch args =
>> (options arch) { extraIncludes =
>> [ NoDep SrcTree "src" a | a <- Args.addIncludes args],
>> - optIncludes = (optIncludes $ options arch) \\
>> + optIncludes = (optIncludes $ options arch) \\\
>> [ NoDep SrcTree "src" i | i <- Args.omitIncludes args ],
>> - optFlags = (optFlags $ options arch) \\
>> + optFlags = (optFlags $ options arch) \\\
>> [ Str f | f <- Args.omitCFlags args ],
>> - optCxxFlags = (optCxxFlags $ options arch) \\
>> + optCxxFlags = (optCxxFlags $ options arch) \\\
>> [ Str f | f <- Args.omitCxxFlags args ],
>> optSuffix = "_for_app_" ++ Args.target args,
>> extraFlags = Args.addCFlags args ++ Args.addCxxFlags args,
>> @@ -933,11 +934,11 @@
>> libGetOptionsForArch arch args =
>> (options arch) { extraIncludes =
>> [ NoDep SrcTree "src" a | a <- Args.addIncludes args],
>> - optIncludes = (optIncludes $ options arch) \\
>> + optIncludes = (optIncludes $ options arch) \\\
>> [ NoDep SrcTree "src" i | i <- Args.omitIncludes args ],
>> - optFlags = (optFlags $ options arch) \\
>> + optFlags = (optFlags $ options arch) \\\
>> [ Str f | f <- Args.omitCFlags args ],
>> - optCxxFlags = (optCxxFlags $ options arch) \\
>> + optCxxFlags = (optCxxFlags $ options arch) \\\
>> [ Str f | f <- Args.omitCxxFlags args ],
>> optSuffix = "_for_lib_" ++ Args.target args,
>> extraFlags = Args.addCFlags args ++ Args.addCxxFlags args,
>> diff -r 12e657e0ed48 hake/hake.sh
>> --- a/hake/hake.sh Fri Mar 22 13:15:31 2013 +0100
>> +++ b/hake/hake.sh Mon Apr 01 11:33:50 2013 +0800
>> @@ -125,6 +125,7 @@
>>
>> echo "Building hake..."
>> ghc -O --make -XDeriveDataTypeable \
>> + -cpp \
>> -package ghc \
>> -package ghc-paths \
>> -o hake/hake \
>> diff -r 12e657e0ed48 lib/openssl-1.0.0d/Hakefile
>> --- a/lib/openssl-1.0.0d/Hakefile Fri Mar 22 13:15:31 2013 +0100
>> +++ b/lib/openssl-1.0.0d/Hakefile Mon Apr 01 11:33:50 2013 +0800
>> @@ -11,7 +11,7 @@
>> --------------------------------------------------------------------------
>> -- file list generated with this command:
>> -- asq at schlaptop2:~/tmp/openssl/compile_linux/openssl-1.0.0d/crypto$ \
>> --- for i in [ `objdump -f libcrypto.a |sed -e '/o:/!d' -e 's/o:.*/c/' `; \
>> +-- for i in [ `objdump -f libcrypto.a |sed -e '/o:/!d' -e 's/o:.*/c/' `; \
>> -- do find . -name $i; done |sed -e 's/^/"/'|sed -e 's/$/",/' >> \
>> -- /home/asq/hg/barrelfish.dyn_adpt/usr/skb/testapps/openssl-1.0.0d/crypto/Hakefile
>>
>> diff -r 12e657e0ed48 tools/flounder/Backend.lhs
>> --- a/tools/flounder/Backend.lhs Fri Mar 22 13:15:31 2013 +0100
>> +++ b/tools/flounder/Backend.lhs Mon Apr 01 11:33:50 2013 +0800
>> @@ -47,19 +47,19 @@
>>
>> %if false
>>
>> -> "/*\n * Interface Definition: " ++ name ++ "\n\
>> -> \ * Generated from: " ++ filename ++ "\n\
>> -> \ * \n\
>> -> \ * Copyright (c) 2009, ETH Zurich.\n\
>> -> \ * All rights reserved.\n\
>> -> \ * \n\
>> -> \ * This file is distributed under the terms in the attached LICENSE\n\
>> -> \ * file. If you do not find this file, copies can be found by\n\
>> -> \ * writing to:\n\
>> -> \ * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich.\n\
>> -> \ * Attn: Systems Group.\n\
>> -> \ * \n\
>> -> \ * THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT!\n\
>> +> "/*\n * Interface Definition: " ++ name ++ "\n\\
>> +> \ * Generated from: " ++ filename ++ "\n\\
>> +> \ * \n\\
>> +> \ * Copyright (c) 2009, ETH Zurich.\n\\
>> +> \ * All rights reserved.\n\\
>> +> \ * \n\\
>> +> \ * This file is distributed under the terms in the attached LICENSE\n\\
>> +> \ * file. If you do not find this file, copies can be found by\n\\
>> +> \ * writing to:\n\\
>> +> \ * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich.\n\\
>> +> \ * Attn: Systems Group.\n\\
>> +> \ * \n\\
>> +> \ * THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT!\n\\
>> > \ */\n\n"
>>
>> %endif
>> diff -r 12e657e0ed48 tools/mackerel/BitFieldDriver.hs
>> --- a/tools/mackerel/BitFieldDriver.hs Fri Mar 22 13:15:31 2013 +0100
>> +++ b/tools/mackerel/BitFieldDriver.hs Mon Apr 01 11:33:50 2013 +0800
>> @@ -91,18 +91,18 @@
>> -------------------------------------------------------------------------
>>
>> r_preamble dev =
>> - "/*\n * DEVICE DEFINITION: " ++ (Dev.desc dev) ++ "\n\
>> - \ * \n\
>> - \ * Copyright (c) 2007, ETH Zurich.\n\
>> - \ * All rights reserved.\n\
>> - \ * \n\
>> - \ * This file is distributed under the terms in the attached LICENSE\n\
>> - \ * file. If you do not find this file, copies can be found by\n\
>> - \ * writing to:\n\
>> - \ * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich.\n\
>> - \ * Attn: Systems Group.\n\
>> - \ * \n\
>> - \ * THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT!\n\
>> + "/*\n * DEVICE DEFINITION: " ++ (Dev.desc dev) ++ "\n\\
>> + \ * \n\\
>> + \ * Copyright (c) 2007, ETH Zurich.\n\\
>> + \ * All rights reserved.\n\\
>> + \ * \n\\
>> + \ * This file is distributed under the terms in the attached LICENSE\n\\
>> + \ * file. If you do not find this file, copies can be found by\n\\
>> + \ * writing to:\n\\
>> + \ * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich.\n\\
>> + \ * Attn: Systems Group.\n\\
>> + \ * \n\\
>> + \ * THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT!\n\\
>> \ */\n\n"
>>
>> -- Top-level create-a-header-file
>> diff -r 12e657e0ed48 tools/mackerel/Fields.hs
>> --- a/tools/mackerel/Fields.hs Fri Mar 22 13:15:31 2013 +0100
>> +++ b/tools/mackerel/Fields.hs Mon Apr 01 11:33:50 2013 +0800
>> @@ -121,11 +121,11 @@
>> -- are polymorphic so that they don't need to know how large the total
>> -- load unit is (32 bits? 8 bits?) etc.
>> --
>> -extract_mask :: (Bits a) => Rec -> Integer -> a
>> +extract_mask :: (Num a, Bits a) => Rec -> Integer -> a
>> extract_mask f sz =
>> foldl setBit 0 (enumFromTo (fromInteger $ offset f)
>> (fromInteger $ (offset f) + (size f) - 1))
>> -insert_mask :: (Bits a) => Rec -> Integer -> a
>> +insert_mask :: (Num a, Bits a) => Rec -> Integer -> a
>> insert_mask f sz =
>> foldl complementBit (extract_mask f sz) (enumFromTo 0 (fromInteger sz - 1))
>>
>> diff -r 12e657e0ed48 tools/mackerel/Main.hs
>> --- a/tools/mackerel/Main.hs Fri Mar 22 13:15:31 2013 +0100
>> +++ b/tools/mackerel/Main.hs Mon Apr 01 11:33:50 2013 +0800
>> @@ -26,6 +26,9 @@
>> import qualified ShiftDriver
>> import Checks
>> import Dev
>> +#if __GLASGOW_HASKELL__ >= 706
>> +import Control.Exception
>> +#endif
>>
>> --
>> -- Command line options and parsing code
>> diff -r 12e657e0ed48 tools/mackerel/ShiftDriver.hs
>> --- a/tools/mackerel/ShiftDriver.hs Fri Mar 22 13:15:31 2013 +0100
>> +++ b/tools/mackerel/ShiftDriver.hs Mon Apr 01 11:33:50 2013 +0800
>> @@ -306,12 +306,12 @@
>> --
>> -- Functions to generate masks to select or deselect a subfield of bits
>> --
>> -select_mask :: (Bits a) => Integer -> Integer -> Integer -> a
>> +select_mask :: (Num a, Bits a) => Integer -> Integer -> Integer -> a
>> select_mask word_size start width =
>> foldl setBit 0 (enumFromTo (fromInteger $ start)
>> (fromInteger $ start + width - 1))
>>
>> -deselect_mask :: (Bits a) => Integer -> Integer -> Integer -> a
>> +deselect_mask :: (Num a, Bits a) => Integer -> Integer -> Integer -> a
>> deselect_mask word_size start width =
>> foldl complementBit (select_mask word_size start width)
>> (enumFromTo 0 (fromInteger word_size - 1))
>>
>>
>>
>>
>> _______________________________________________
>> Barrelfish-users mailing list
>> Barrelfish-users at lists.inf.ethz.ch
>> https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users
>
More information about the Barrelfish-users
mailing list