Re: Fwd: Compiling Core Haskell using GHC API

2016-02-20 Thread Edward Z. Yang
What version of GHC are you working with? I don't see any
compileCoreToObj function in HEAD.

Edward

Excerpts from Marek Wawrzos's message of 2016-02-20 00:39:55 -0800:
> 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 :
> 
> > 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
> >
> 
___
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs


Fwd: Compiling Core Haskell using GHC API

2015-10-08 Thread Marek Wawrzos
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
___
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs


Re: Fwd: Compiling Core Haskell using GHC API

2015-10-08 Thread Edward Z. Yang
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
___
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs