jhc's development state and an embedded dream
Hi, all!
I bumped into JHC totally by chance and got quite interested. It's
been a while since I started dreaming of developing embedded real-time
systems in Haskell subject to somewhat hard memory constraints (from
32KB to 128KB RAM).
Am I wrong in guessing that JHC might be the best shot we have so far
in that direction? Would it be applicable at all in that scenario?
JHC's site mentions that the description of development state in JHC's
Original Page is out of date. Could anyone possibly provide/point to a
summary of recent developments?
Thanks in advance. Cheers,
Jorge.
2012/2/10 Daniel Gorín
Hi John,
In case it helps, I was able to build jhc from the tarball by changing the line in the Makefile that says
options.mkd: src/Options.hs | jhc
to just
options.mkd: jhc
Incidentally, the newest version of the pretty package (e.g., the one that comes with ghc 7.4) defines a Monoid instance for Doc, which conflicts with the one defined in jhc. I just patched the Makefile to use an older version of the package, I don't know what the usual method to deal with this is.
Thanks, Daniel
On Wed, 2012-02-08 at 15:05 -0800, John Meacham wrote:
Hi, looks like the tarball doesn't include the original files that go through drift. it shouldn't need them to compile, strange that it needed them for you.
You can grab the source from darcs to work around the issue. I'll put up a fixed tarball when I debug the issue.
John
On Wed, Feb 8, 2012 at 4:04 AM, Daniel Gorín
wrote: Hi
I wanted to try jhc 0.8. I followed the instructions here [1], but after unpacking jhc-0.8.0.tar.gz, configure runs ok but make fails with:
$ make perl ./utils/op_raw.prl src/RawFiles src/data/ViaGhc.hs src/data/prelude.m4 src/data/targets.ini rts/rts_constants.h rts/stableptr.c rts/queue.h src/data/HsFFI.h rts/wsize.h rts/bitarray.h ChangeLog src/data/shortchange.txt > src/RawFiles.hs make: *** No rule to make target `src/Options.hs', needed by `drift_processed/Options.hs'. Stop.
Any ideas?
Thanks, Daniel
[1] http://repetae.net/computer/jhc/building.shtml
_______________________________________________ jhc mailing list jhc@haskell.org http://www.haskell.org/mailman/listinfo/jhc
_______________________________________________ jhc mailing list jhc@haskell.org http://www.haskell.org/mailman/listinfo/jhc
I do think that jhc is your best shot for getting something like that
to work :) I'd love to hear of your experiences trying and it is also
something I'm interested in.
With the latest 0.8.0 release, I think it will be easier as I have split up the
libraries even more. lib jhc-prim is what you will need to link in,
but beyond that you can
replace the entire library with one designed to be minimal.
Changes that would make it more embeded friendly would be to get rid of Integer
and define data Char = Char Word8. Perhaps get rid of floating point too
depending on your platform. jhc will only link in what is needed so you don't
need to worry about the fact that things are defined you don't need, you just
need to make sure they are not pulled in as dependencies. Like the standard num
class references 'Integer' so you may end up pulling it in when you just want to
do plain math. Or realToFrac talks about Rational which is way too
complicated of
a beast to pull in to an emedded system.
So, a quick tutorial on the steps to target a really odd platform :)
copy lib/jhc to lib/jhc-myplatform
go into jhc-minimal and redefine the standard types like Char,Int to be what
you want. they are defined in Jhc.Type.Word. Then start chopping, you don't
need to get rid of everything you don't want, but you may want to replace the
string functions with ones that work on bytestrings of chars by default. and
change the standard numeric classes to not depend on what you don't want. You
also may want to replace the foreign calls with ones to your platforms library
if it doesn't have the full standard C library.
once you have a suitable library, start compiling for it, you may need to tweak
the rts files, you can do so by adding #ifdefs in the files in rts/
but a better way
would be to have a c-sources: field in your jhc-myplatform.yaml file that points
to the rts files that should be used instead.
Hope this helps! of course, there is always a chance your system might
'just work' :)
compile hello world with --tdir /tmp/jhctest then go into /tmp/jhctest
and try to compile
the file it spit out there with your platforms c compiler. :)
John
On Fri, Feb 10, 2012 at 10:46 AM, Jorge Marques Pelizzoni
Hi, all!
I bumped into JHC totally by chance and got quite interested. It's been a while since I started dreaming of developing embedded real-time systems in Haskell subject to somewhat hard memory constraints (from 32KB to 128KB RAM).
Am I wrong in guessing that JHC might be the best shot we have so far in that direction? Would it be applicable at all in that scenario?
JHC's site mentions that the description of development state in JHC's Original Page is out of date. Could anyone possibly provide/point to a summary of recent developments?
Thanks in advance. Cheers,
Jorge.
2012/2/10 Daniel Gorín
: Hi John,
In case it helps, I was able to build jhc from the tarball by changing the line in the Makefile that says
options.mkd: src/Options.hs | jhc
to just
options.mkd: jhc
Incidentally, the newest version of the pretty package (e.g., the one that comes with ghc 7.4) defines a Monoid instance for Doc, which conflicts with the one defined in jhc. I just patched the Makefile to use an older version of the package, I don't know what the usual method to deal with this is.
Thanks, Daniel
On Wed, 2012-02-08 at 15:05 -0800, John Meacham wrote:
Hi, looks like the tarball doesn't include the original files that go through drift. it shouldn't need them to compile, strange that it needed them for you.
You can grab the source from darcs to work around the issue. I'll put up a fixed tarball when I debug the issue.
John
On Wed, Feb 8, 2012 at 4:04 AM, Daniel Gorín
wrote: Hi
I wanted to try jhc 0.8. I followed the instructions here [1], but after unpacking jhc-0.8.0.tar.gz, configure runs ok but make fails with:
$ make perl ./utils/op_raw.prl src/RawFiles src/data/ViaGhc.hs src/data/prelude.m4 src/data/targets.ini rts/rts_constants.h rts/stableptr.c rts/queue.h src/data/HsFFI.h rts/wsize.h rts/bitarray.h ChangeLog src/data/shortchange.txt > src/RawFiles.hs make: *** No rule to make target `src/Options.hs', needed by `drift_processed/Options.hs'. Stop.
Any ideas?
Thanks, Daniel
[1] http://repetae.net/computer/jhc/building.shtml
_______________________________________________ jhc mailing list jhc@haskell.org http://www.haskell.org/mailman/listinfo/jhc
_______________________________________________ jhc mailing list jhc@haskell.org http://www.haskell.org/mailman/listinfo/jhc
_______________________________________________ jhc mailing list jhc@haskell.org http://www.haskell.org/mailman/listinfo/jhc
participants (2)
-
John Meacham -
Jorge Marques Pelizzoni