Fwd: Compiling Core Haskell using GHC API
Marek Wawrzos
marek.28.93 at gmail.com
Sat Feb 20 08:39:55 UTC 2016
Hello,
I am bringing back that thread to life after a while.
I've spent some time on studding GHC source code related with that topic.
There are some conclusions I have made:
- In my first email, I thought that execution of function
*compileCoreToObj *in my program produced some *.o file. I was wrong.
That file was produced by earlier step, that is execution of
*compileToCoreModule
*function. *compileCoreToObj *has generated only *.hi file because
exception has been raised.
- I have found a way to produce valid interface file
- I have discovered, why *compileCoreToObj *raises exceptions. It was
because *stubDir* field in *DynFlags *structure has to be set for proper
execution.
- Artifacts produced by *compileCoreToObj *for a non-executable module are:
interface file and assembly output.
The last point is my main problem for now. I supposed that object file will
be generated, as it is generated by GHC executed on haskell module.
Code used for my tests is as follows:
A.hs:
import GHC
> import DynFlags
> import GHC.Paths
> import qualified Debug.Trace as T
> import Panic
> import HscMain
> import HscTypes
> import Name
> import UniqFM
> main = do
> core <- getCore
> getLine
> compile HscAsm "foo" core
> getCore = defaultErrorHandler defaultFatalMessager defaultFlushOut
> $ runGhc (Just libdir) $ do
> df <- getSessionDynFlags
> setSessionDynFlags df
> core <- compileToCoreModule "B.hs"
> return core
> compile target output_fn core = defaultErrorHandler defaultFatalMessager
> defaultFlushOut
> $ runGhc (Just libdir) $ do
> df <- getSessionDynFlags
> setSessionDynFlags df { hscTarget = target , stubDir = Just
> "./stub" }
compileCoreToObj False core output_fn "bar"
B.hs:
> module B (foo) where
> foo :: a -> a
> foo = id
> bar :: Eq a => a -> a -> Bool
> bar = (==)
*getCore *and *compile* are separated to make sure, no flags set by the
first function were used by the second one.
*getLine *is used here to stop an execution of test for cleaning output
directory form files generated by *getCore*.
Is there a way to get an object file as a result of *compileCoreToObj*?
Regards,
MWawrzos
2015-10-08 19:02 GMT+02:00 Edward Z. Yang <ezyang at mit.edu>:
> If we look at the source code for hscCompileCore, it would seem that it
> creates a ModGuts with mkModGuts which has an empty mg_exports, which
> means that in all cases there will be no exported items. So it's not
> very useful! You should file a bug.
>
> We should fix this, but in the mean time, you could simply copypaste the
> definition of hscCompileCore, and modify it so that you do set up
> the ModGuts correctly with a real mg_exports field.
>
> Edward
>
> Excerpts from Marek Wawrzos's message of 2015-10-08 07:22:01 -0700:
> > Hello,
> >
> > I'm trying to compile some module with GHC API. I'm going to feed GHC
> with
> > Core generated by me.
> >
> > So far is noticed, that function compileCoreToObj ends with an runtime
> > error on each call. In spide of this function produces some *.o and *.hi
> > files. However, produced interface file does not contain any item in
> > exports field, what makes compiled module unusable.
> >
> > Because of this problem, I tried to achieve my goal by using steps
> > described here: https://wiki.haskell.org/GHC/As_a_library (the second
> > example)
> > I was able to print out Core produced form file. If I'm not wrong,
> > modifying structures passing on between sequent calls does not effect on
> > produced *.hi and *.o files. Both files are generated by `load
> > LoadAllTargets' call, and further calls (parseModule, loadModule, ...)
> does
> > not effect on generated files.
> >
> > Could You give me any advices in that topic? Am I right about
> > compileCoreToObj and functions mentioned above?
> >
> > Best Regards,
> > Marek
>
--
Z poważaniem,
Marek Wawrzos
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20160220/b63a0fbd/attachment-0001.html>
More information about the ghc-devs
mailing list