Workflow question (changing codegen)

Richard Eisenberg rae at richarde.dev
Sat Jun 29 19:53:06 UTC 2019


Just to pass on something that looks cool (I haven't tried it myself yet): git worktree. It seems git can hang several different checkouts of a repo in different directories. This seems far superior to my current habit of having many clones of ghc, sometimes going through machinations to get commits from one place to another. The documentation for git worktree seems quite approachable, so you might find it useful. I plan on using it in the future.

Richard

> On Jun 29, 2019, at 8:24 AM, Ben Gamari <ben at smart-cactus.org> wrote:
> 
> On June 28, 2019 5:09:45 AM EDT, "Ömer Sinan Ağacan" <omeragacan at gmail.com> wrote:
>> Hi all,
>> 
>> I'm currently going through this torturous process and I'm hoping that
>> someone
>> here will be able to help.
>> 
>> I'm making changes in the codegen. My changes are currently buggy, and
>> I need a
>> working stage 1 compiler to be able to debug. Basically I need to build
>> libraries using the branch my changes are based on, then build stage 1
>> with my
>> branch, so that I'll be able to build and run programs using stage 1
>> that uses
>> my codegen changes. The changes are compatible with the old codegen
>> (i.e. no
>> changes in calling conventions or anything like that) so this should
>> work.
>> 
>> Normally I do this
>> 
>>   $ git checkout master
>>   $ git distclean && ./boot && ./configure && make
>>   $ git checkout my_branch
>>   $ cd compiler; make 1
>> 
>> This gives me stage 1 compiler that uses my buggy codegen changes, plus
>> libraries built with the old and correct codegen.
>> 
>> However the problem is I'm also adding a new file in my_branch, and the
>> build
>> system just doesn't register that fact, even after adding the line I
>> added to
>> compiler/ghc.cabal.in to compiler/ghc.cabal. So far the only way to fix
>> this
>> that I could find was to run ./configure again, then run make for a few
>> seconds
>> at the top level, then do `make 1` in compiler/. Unfortunately even
>> that doesn't
>> work when the master branch and my_branch have different dates, because
>> `make`
>> in master branch produces a different version than the `make` in
>> my_branch, so
>> the interface files become incompatible.
>> 
>> Anyone have any ideas on how to proceed here?
>> 
>> Thanks,
>> 
>> Ömer
>> _______________________________________________
>> ghc-devs mailing list
>> ghc-devs at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
> 
> In general I think it is wise to avoid switching branches in a tree you are actively developing in. The cost of switching both in the compilation time that it implies and the uncertain state that it leaves the tree in is in my opinion too high. It you want to compare your change against master I would recommend using two working directories. 
> 
> 
> Cheers, 
> 
> - Ben 
> 
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs



More information about the ghc-devs mailing list