Building GHC head with clang on Mavericks

Carter Schonwald carter.schonwald at gmail.com
Tue Nov 19 16:24:13 UTC 2013


So did you find a bug in the current design of the clang-wrapper hack? If
so it'd be better to get it fixed there rather than in the Alex/happy setup
HS files.

On Tuesday, November 19, 2013, Kazu Yamamoto wrote:

> Hi Carter,
> SimonM, please read this message.
>
> I will answer Carter's question and show a solution of my problem.
>
> > Kazu. This is exactly the problem I linked to.  Could you try the
> proposed
> > patches to test if they allow builds to succeed with a wrapped clang on
> > your machine?
>
> I installed nkpart's alex and happy with GHC/clang-wrapper. With this
> alex and happy, I can build GHC head with GHC/GCC42. But I cannot
> build GHC head with GHC/clang-wrapper.
>
> Moreover, I can install happy and alex with GHC/clang-wrapper without
> nkpart's patches.
>
> I think that your problem is how to build alex and happy with
> GHC/clang-wrapper. But my problem is how to compile HS files created
> by alex and happy with GHC/clang-wrapper.
>
> After deep investigation, I found the source of my problem. Consider
> the following file created by CPP of clang or GCC:
>
> ----
> # 1 "<built-inxxx>" 1
> # 1 "templates/GenericTemplatexxx.hs" 2
> {-# FOO
>   #-}
> ----
>
> % clang -E -undef -x assembler-with-cpp this_file
> generates:
>
> ----
> # 1 "test"
> # 1 "<built-in>" 1
> # 1 "test" 2
>  # 1 "<built-inxxx>" 1
>
>  # 1 "templates/GenericTemplatexxx.hs" 2
>
> {-# FOO
>   #-}
> ----
>
> So, the line started with " #" cannot be treated by GHC. This is the
> problem.
>
> % clang -E -undef -x c this_file
> generates:
>
> ----
> # 1 "test"
> # 1 "<built-in>" 1
> # 1 "<built-in>" 3
>
>
>
> # 1 "<command line>" 1
> # 1 "<built-in>" 2
> # 1 "test" 2
> # 1 "<built-inxxx>" 1
> # 1 "templates/GenericTemplatexxx.hs" 2
> {-# FOO
> ----
>
> And an error occurs because of "  #-}".
>
> So, replacing "-x c" with "-x assembler-with-cpp" in a wrapper is a
> MUST. And HS files generated by alex and happy should not include
> lines started with "# ".
>
> My solution so far is adding "-optP-P" to alex and happy to not
> generate line markers. An example patch to alex is attached.
>
> I can build GHC head with GHC/clang-wrapper and with alex and happy
> with this hack.
>
> --Kazu
>
> diff --git a/Setup.lhs b/Setup.lhs
> index 302a3f0..6ab62d5 100644
> --- a/Setup.lhs
> +++ b/Setup.lhs
> @@ -44,7 +44,7 @@ myPostBuild _ flags _ lbi = do
>        runProgram p = rawSystemProgramConf verbosity p (withPrograms lbi)
>        cpp_template src dst opts = do
>          let tmp = dst ++ ".tmp"
> -        runProgram ghcProgram (["-o", tmp, "-E", "-cpp", "templates" </>
> src] ++ opts)
> +        runProgram ghcProgram (["-o", tmp, "-E", "-cpp", "-optP-P",
> "templates" </> src] ++ opts)
>          writeFile dst . unlines . map mungeLinePragma . lines =<<
> readFile tmp
>          removeFile tmp
>
>
>
>
>
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org <javascript:;>
> http://www.haskell.org/mailman/listinfo/ghc-devs
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/ghc-devs/attachments/20131119/5a5d4553/attachment-0001.html>


More information about the ghc-devs mailing list