<div dir="ltr">Mac OS X as the host is unbelievably painful. It's easier to have the host and target be the same OS (linux + linux).<div><br></div><div>You don't need a full system (gentoo) to use GHC + musl in static linking mode. Just an appropriate cross-compiler toolchain. crosstools-ng can be configured so that the compiler always produces a static build (run ct-ng menuconfig, and look through the options. The UI should be familiar if you've ever used the Linux kernel menuconfig facility).</div><br><div class="gmail_quote"><div dir="ltr">On Sun, Apr 10, 2016 at 9:57 PM Patrick Pelletier <<a href="mailto:code@funwithsoftware.org">code@funwithsoftware.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
Thanks! I'll take a look at building a cross-compiler, since it
worked out for you. I'd been a little afraid to try. (I previously
had a bad experience building ghc as a cross-compiler, but that was
with Android as the target and Mac OS X as the host. The issues I
encountered were mostly when it tried to link ELF binaries with the
Mach-O linker, or vice versa. But with both host and target being
Linux, the linker issues can probably be swept under the rug.)<br>
<br>
The C cross compiler shouldn't be a problem, since OpenWRT's
"buildroot" builds a cross-compiler automatically. (Though if for
any reason that turns out to be a problem, thanks for the tip about
crosstool-ng.) Ideally, I'd love to integrate ghc into OpenWRT's
buildroot so that packages written in Haskell could be built as
easily and in the same way as packages written in C. But I still
have a lot to learn before I attempt that.<br>
<br>
My boot device is an SD card, so space for static binaries shouldn't
be a problem. I already have several gigabytes, which should be
more than enough, and if for some reason I needed more space, I
could swap in a larger SD card, or add more space via USB or mSATA.<br>
<br>
I was aware of Marios Titas's "GHC + musl = easier static linking",
but wasn't really thrilled at the idea of needing an install of
Gentoo-musl to host it. (But I can certainly try that if I have
to.) Or I could just use my OpenWRT box to host the GHC-musl, but
I'm running into issues with getting gcc to run on the target, which
I'm currently following up with the OpenWRT community.<br>
<br>
Thanks for the ideas! I'm sure that one way or another I'll be able
to get it working.</div><div bgcolor="#FFFFFF" text="#000000"><br>
<br>
--Patrick</div><div bgcolor="#FFFFFF" text="#000000"><br>
<br>
<br>
<div>On 4/10/16 8:40 AM, Tomas Carnecky
wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">I was able to compile Haskell for a mips-linux-musl
target (<a href="https://onion.io/omega" target="_blank">https://onion.io/omega</a>).
Most problems were due to the different architecture (MIPS) than
musl. Once you have a C cross-compiler (I used <a href="http://crosstool-ng.org/" target="_blank"></a><a href="http://crosstool-ng.org/" target="_blank">http://crosstool-ng.org/</a> to
built the cross-compiler toolchain), compiling GHC as a cross
compiler for that target and then a Haskell application
shouldn't be a problem.
<div><br>
</div>
<div>If you have enough disk space on the target, I would
suggest that you compile your Haskell application into a
static binary.</div>
<br>
<div class="gmail_quote">
<div dir="ltr">On Sat, Apr 9, 2016 at 10:47 AM Lana Black
<a href="mailto:lanablack@amok.cc" target="_blank"><lanablack@amok.cc></a> wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">You will
probably have better luck using ghc with musl.<br>
<br>
Check out this thread: <a href="https://mail.haskell.org/pipermail/haskell-cafe/2015-May/119843.html" rel="noreferrer" target="_blank">https://mail.haskell.org/pipermail/haskell-cafe/2015-May/119843.html</a><br>
<br>
Original Message <br>
From: Patrick Pelletier<br>
Sent: Saturday, April 9, 2016 7:54 AM<br>
To: haskell-cafe<br>
Subject: [Haskell-cafe] Haskell on OpenWRT<br>
<br>
Has anyone had any success running Haskell programs on
OpenWRT?<br>
<br>
Specifically, I'm running OpenWRT on x86_64, so processor
architecture<br>
shouldn't be an issue. However, by default OpenWRT uses musl
as its C<br>
library, so binaries from a "normal" Linux system wouldn't
be compatible<br>
with OpenWRT.<br>
<br>
I attempted to get around this problem by building an
OpenWRT image with<br>
glibc as the C library. In theory, that ought to solve the
problem. In<br>
practice, my program (a simple hello-world type program,
which runs fine<br>
on Ubuntu) hung, printing nothing, using nearly all of one
core, and was<br>
unkillable by any signal other than SIGKILL. If left alone
to run, it<br>
eventually used all available memory and then died.<br>
<br>
I took a look at ldd, to see if there were any clues there.
On my<br>
Ubuntu 12.04 machine, where I compiled the program (using
ghc 7.4.1), I get:<br>
<br>
ppelletier@patrick64:~/programming/haskell$ ldd contact<br>
linux-vdso.so.1 => (0x00007fff36f50000)<br>
libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10<br>
(0x00007f8d49cf8000)<br>
libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6<br>
(0x00007f8d49af0000)<br>
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6
(0x00007f8d497f3000)<br>
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1
(0x00007f8d495eb000)<br>
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2
(0x00007f8d493e7000)<br>
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
(0x00007f8d49028000)<br>
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0<br>
(0x00007f8d48e0b000)<br>
/lib64/ld-linux-x86-64.so.2 (0x00007f8d49f8d000)<br>
<br>
On my OpenWRT (trunk) box, I get:<br>
<br>
root@OpenWrt:~# ldd /tmp/contact<br>
linux-vdso.so.1 (0x00007ffd2afcc000)<br>
libgmp.so.10 => /usr/lib/libgmp.so.10
(0x00007f27a057a000)<br>
libffi.so.6 => /usr/lib/libffi.so.6 (0x00007f27a0373000)<br>
libm.so.6 => /lib/libm.so.6 (0x00007f27a0080000)<br>
librt.so.1 => /lib/librt.so.1 (0x00007f279fe79000)<br>
libdl.so.2 => /lib/libdl.so.2 (0x00007f279fc76000)<br>
libc.so.6 => /lib/libc.so.6 (0x00007f279f906000)<br>
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f279f6f4000)<br>
libpthread.so.0 => /lib/libpthread.so.0
(0x00007f279f4d9000)<br>
/lib64/ld-linux-x86-64.so.2 (0x00007f27a07dc000)<br>
<br>
This is almost the same, except it has "libgcc_s.so.1",
while on the<br>
Ubuntu box it does not.<br>
<br>
I'd welcome any ideas on how to solve (or at least diagnose)
this<br>
problem. I'd also be interested in any thoughts on the
broader question<br>
of running Haskell programs on OpenWRT.<br>
<br>
Thanks,<br>
<br>
--Patrick<br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
</blockquote>
</div>
</div>
</blockquote>
<br>
</div></blockquote></div></div>