[m-users.] ARM Linux toolchain
Julien Fischer
jfischer at opturion.com
Sat Feb 13 00:31:06 AEDT 2016
Hi Vladimir,
On Fri, 12 Feb 2016, Vladimir Komendantskiy wrote:
> Passing
>
> --with-llds-base-grade=none
>
> to configure should do this for you.
>
>
> This works, thanks! There is a new error then:
>
> ../scripts/mgnuc --grade hlc.gc --c-debug --no-ansi -- -c mercury_signal.c -o mercury_signal.o
> mercury_signal.c: In function ‘MR_init_signal_action’:
> mercury_signal.c:133:8: error: ‘MR_signal_action {aka struct sigaction}’ has no member named ‘no’
> act->MR_SIGACTION_FIELD = handler;
That's why I said tools/configure_mingw_cross would probably require
other changes, it sets the configure variable
'mercury_cv_sigaction_field' to "no", which is what you seem to be
encountering above. (Actually, the actual configure script requires
changes here as well.)
> which seems to require setting the value of MR_SIGACTION_FIELD to
> sa_handler in runtime/mercury_conf.h. In any case, that worked for me.
> So far, we are done with compile-time errors.
>
> What fails then is util/mkinit. It is supposed to be a native binary
> in the make script. It is definitely an ARM executable though. The
> message is as follows:
IIRC, tools/configure_mingw_cross was intended for use *on Windows*
systems; if you wanted a Linux-Windows cross compiler you build the
system on Windows and then replaced the executables with Linux ones (as
per README.MinGw-cross). mkinit being a Windows (or in your case ARM)
executable is what is expected.
The situation here is that you are trying to build a compiler that
targets ARM Linux on some other platform (presumably Linux x86 or
x86_64). I'm not sure if anyone has ever tried doing that.
In principle, this should be possible but there's not really any
support for doing it, so it's like to be a fairly fiddly process.
Something along the following lines _might_ work:
* configure as above
* ensure that the executables in the util directory get replaced
with the corresponding executables from a Mercury installed on
the host system.
* do the 'make' step through to completion
* replace compiler/mercury_compile with one built for the host system.
* do the 'make install' step
> arm-linux-gnueabihf-ranlib libmer_browser.a
> echo > mer_browser.init
> mkinit -k mdb.c mdb.browse.c mdb.browser_info.c mdb.browser_term.c mdb.collect_lib.c mdb.cterm.c mdb.debugger_interface.c mdb.declarative_analyser.c
> mdb.declarative_debugger.c mdb.declarative_edt.c mdb.declarative_execution.c mdb.declarative_oracle.c mdb.declarative_tree.c mdb.declarative_user.c
> mdb.diff.c mdb.dl.c mdb.frame.c mdb.help.c mdb.interactive_query.c mdb.io_action.c mdb.listing.c mdb.name_mangle.c mdb.parse.c mdb.sized_pretty.c
> mdb.term_rep.c mdb.util.c mer_browser.c >> mer_browser.init
> ../util/mkinit: 1: ../util/mkinit: Syntax error: word unexpected (expecting ")")
> /tmp/mmake.70HtEo:7334: recipe for target 'mer_browser.init' failed
>
> Should I somehow use a native util/mkinit instead?
See above.
Julien.
More information about the users
mailing list