[Barrelfish-users] Make Hake works in ghc 7.4 and 7.6

Kornilios Kourtis kornilios.kourtis at inf.ethz.ch
Tue Apr 2 11:12:00 CEST 2013


Hi,

On Tue, Apr 02, 2013 at 09:33:50AM +0800, Wang Nan wrote:
> 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.

I think that makes sense. We are using 7.4.1 which is why we have not
seen the 7.4.2 problems reported here.  It would be great if we could
support both 7.4.1 and 7.4.2.

Would you mind splitting up your patch into two patches?
 #1 make hake work for ghc 7.4.2
 #2 (ontop of #1) make hake work for ghc 7.6

Note that #1 can, also, contain any changes needed for #2 which are
compatible with ghc 7.4.

I'd be happy to apply patch #1 (hopefully it will not break 7.4.1) in our
tree, and put patch #2 in our wiki so that we can point people using
7.6.x there.

Regarding the stack overflow problem, a possible work-around is to avoid
having build directories inside the source tree.

Thanks,
Kornilios.

> 
> 
> -- 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
> > 
> 
> 
> 
> _______________________________________________
> Barrelfish-users mailing list
> Barrelfish-users at lists.inf.ethz.ch
> https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users

-- 
Kornilios Kourtis



More information about the Barrelfish-users mailing list