<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>  Porting to new systems is pretty easy.  <br>  I had ARMEL_LINUX pretty far along.  <br>  I forgot how far.  <BR>  I did have to add sort of support for 128bit integers in the gcc backend. Sort of.  <BR> <BR><br> > ../gcc-4.7/configure: not found <BR><br> <BR>  Make sure you cvs upd -dAP so you get new directories. <BR><br> <BR>  We should switch to the C backend though. It is just a one line change  <br>   in the config file. Look at the Darwin config files.  <br>  It is not experimental.  <br>  It has been essentially working for over a year (since September 2012) <br>   and it is in very good shape now. <br>  I have used it for a number of architectures and operating systems already, <br>  like I think every Solaris architecture, Linux, Darwin, NT. <br>  I'd like to see more people use it, and I'd like to drop the gcc backend entirely. <br>  This is an important step in leaving Modula-3 very portable and easier to support. <BR> <BR><br> - Jay<br><br> <BR><div>> To: m3devel@elegosoft.com<br>> Date: Sun, 13 Oct 2013 13:35:01 -0700<br>> From: mika@async.caltech.edu<br>> Subject: [M3devel] building CM3 on a Raspberry Pi?<br>> <br>> <br>> Hi everyone (mostly Jay),<br>> <br>> Last time I tried to port CM3 to a new architecture I really got nowhere.<br>> <br>> I thought it might be time to try again.  I have a Raspberry Pi, forty-dollar computer.<br>> <br>> It has "Raspbian" installed on it.<br>> <br>> The following output is probably relevant:<br>> <br>> pi@raspberrypi ~ $ uname -a<br>> Linux raspberrypi 3.6.11+ #538 PREEMPT Fri Aug 30 20:42:08 BST 2013 armv6l GNU/Linux<br>> <br>> pi@raspberrypi ~ $ gcc -v<br>> Using built-in specs.<br>> COLLECT_GCC=gcc<br>> COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/4.6/lto-wrapper<br>> Target: arm-linux-gnueabihf<br>> Configured with: ../src/configure -v --with-pkgversion='Debian 4.6.3-14+rpi1' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-sjlj-exceptions --with-arch=armv6 --with-fpu=vfp --with-float=hard --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf<br>> Thread model: posix<br>> gcc version 4.6.3 (Debian 4.6.3-14+rpi1) <br>> <br>> <br>> Further, in the CM3 tree there is something called "ARMEL_LINUX".<br>> I thought, from reading some old messages on this mailing list, that doing<br>> the following on my "big" system would result in something interesting:<br>> <br>> 1. CVS updating to the latest version of the tree<br>> <br>> 2. cd to scripts/python<br>> <br>> 3. ./boot1.py ARMEL_LINUX<br>> <br>> but all it did was mess up the cm3.cfg on my host system (FreeBSD4) and error out very quickly...<br>> <br>> ...<br>> rm -f /usr/local/cm3/bin/IA64_LINUX<br>> rm -f /usr/local/cm3/bin/NT.common<br>> rm -f /usr/local/cm3/bin/SPARC32_SOLARIS.common<br>> cp -Pv /big/home2/mika/2/cm3-cvs/cm3/m3-sys/cminstall/src/config-no-install/cm3.cfg /usr/local/cm3/bin/cm3.cfg<br>> == package /big/home2/mika/2/cm3-cvs/cm3/m3-win/import-libs ==<br>> <br>>  +++ /usr/local/cm3/bin/cm3    -build -override -DROOT=/big/home2/mika/2/cm3-cvs/cm3 -boot -keep -DM3CC_TARGET=ARMEL_LINUX +++<br>> --- building in ARMEL_LINUX ---<br>> <br>>  ==> /big/home2/mika/2/cm3-cvs/cm3/m3-win/import-libs done<br>> <br>> == package /big/home2/mika/2/cm3-cvs/cm3/m3-sys/m3cc ==<br>> <br>>  +++ /usr/local/cm3/bin/cm3    -build -override -DROOT=/big/home2/mika/2/cm3-cvs/cm3 -boot -keep -DM3CC_TARGET=ARMEL_LINUX +++<br>> --- building in ARMEL_LINUX ---<br>> <br>> type make<br>> make is /home/mika/cm3-build-bin//make<br>> make --version | grep "GNU Make"<br>> GNU Make 3.82<br>> GNU_MAKE is make<br>> cd ../FreeBSD4-ARMEL_LINUX &&   MAKE="make -j4  "  AUTOCONF=: AUTOMAKE=: LEX='touch lex.yy.c' MAKEINFO=: ../gcc-4.7/configure     -with-sysroot -target=arm-linux-gnueabi -srcdir=../gcc-4.7 -disable-bootstrap -disable-intl -disable-libgomp -disable-libmudflap -disable-libssp -disable-nls -enable-languages=m3cg -disable-fixincludes -disable-libgcc -disable-decimal-float -disable-fixed-point -disable-tls<br>> cd ../FreeBSD4-ARMEL_LINUX &&   MAKE="make -j4  "  AUTOCONF=: AUTOMAKE=: LEX='touch lex.yy.c' MAKEINFO=: ../gcc-4.7/configure     -with-sysroot -target=arm-linux-gnueabi -srcdir=../gcc-4.7 -disable-bootstrap -disable-intl -disable-libgomp -disable-libmudflap -disable-libssp -disable-nls -enable-languages=m3cg -disable-fixincludes -disable-libgcc -disable-decimal-float -disable-fixed-point -disable-tls<br>> ../gcc-4.7/configure: not found<br>> "/big/home2/mika/2/cm3-cvs/cm3/m3-sys/m3cc/src/m3makefile", line 339: quake runtime error: exit 127: cd ../FreeBSD4-ARMEL_LINUX &&   MAKE="make -j4  "  AUTOCONF=: AUTOMAKE=: LEX='touch lex.yy.c' MAKEINFO=: ../gcc-4.7/configure     -with-sysroot -target=arm-linux-gnueabi -srcdir=../gcc-4.7 -disable-bootstrap -disable-intl -disable-libgomp -disable-libmudflap -disable-libssp -disable-nls -enable-languages=m3cg -disable-fixincludes -disable-libgcc -disable-decimal-float -disable-fixed-point -disable-tls<br>> <br>> --procedure--  -line-  -file---<br>> exec               --  <builtin><br>> m3cc_Run          339  /big/home2/mika/2/cm3-cvs/cm3/m3-sys/m3cc/src/m3makefile<br>> include_dir       537  /big/home2/mika/2/cm3-cvs/cm3/m3-sys/m3cc/src/m3makefile<br>>                     9  /big/home2/mika/2/cm3-cvs/cm3/m3-sys/m3cc/ARMEL_LINUX/m3make.args<br>> <br>> Fatal Error: package build failed<br>>  *** execution of [<function _BuildLocalFunction at 0x82d55a4>] failed ***<br>> (238)rover:~/cm3-cvs-anon/cm3/scripts/python><br>> <br>> <br>> So I'm not really sure what state porting of CM3 is in.  I think it<br>> would be really interesting to have it running on the Raspberry Pi,<br>> partly because Modula-3 and Python are in many ways similar but Modula-3<br>> code tends to be many times more efficient (at least in runtime) and<br>> the computer is slow by modern standards.<br>> <br>> A few questions...<br>> <br>> Is ARMEL_LINUX a real port?  Does it work?  Has it worked for anyone?  <br>> <br>> Am I going about it the right way per latest recommendations---that is,<br>> trying to cross-compile from an existing CM3 installation on 32-bit<br>> i386 system?<br>> <br>> Clearly just running ./boot1.py ARMEL_LINUX on the FreeBSD system is<br>> not the right approach... maybe someone knows what is?<br>> <br>> Do I maybe need to upgrade the host CM3 to the head first?  (Sounds<br>> like a whole other can of worms but ok...)<br>> <br>> The Pi I think is more than powerful enough to compile everything<br>> natively.  When I started with Modula-3, I had a 120-MHz Pentium on<br>> my desk with 128 MB of RAM, and that was considered a powerful<br>> system at the time.  This is a 700 MHz ARM with 512 MB of RAM.<br>> So I'm not against compiling stuff natively (in fact I think it makes<br>> things easier), but cross-compiling is fine too if that gets me to<br>> the goal easier.<br>> <br>> I am happy to try C generating compilers but I would prefer to keep<br>> things as un-experimental as possible for now, because I have some<br>> control applications I'd like to try to build without having to debug<br>> lots and lots of software first.<br>> <br>> Finally I think it would be *really* cool if we had a distribution of<br>> Modula-3 that was polished enough to be distributable to Raspberry Pi<br>> users.  Just based on the gross characteristics of the two systems,<br>> I think the Pi and Modula-3 ought to be a very good match for each<br>> other.  Basically, the Pi is a full-featured but slow hardware system<br>> with good networking facilities.  It could use a safe, modern, efficient<br>> systems programming language running on it.  Most things on it nowadays<br>> are written in Python from what i understand.<br>> <br>>      Mika<br></div>                                         </div></body>
</html>