<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Apr 9, 2018 at 11:02 PM, Chris Johns <span dir="ltr"><<a href="mailto:chrisj@rtems.org" target="_blank">chrisj@rtems.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 10/04/2018 15:58, Russell Haley wrote:<br>
> On Mon, Apr 9, 2018 at 5:53 PM, Chris Johns <<a href="mailto:chrisj@rtems.org">chrisj@rtems.org</a><br>
</span><span class="">> <mailto:<a href="mailto:chrisj@rtems.org">chrisj@rtems.org</a>>> wrote:<br>
>     On 10/04/2018 10:40, Gedare Bloom wrote:<br>
>     > On Mon, Apr 9, 2018 at 4:17 PM, Russell Haley <<a href="mailto:russ.haley@gmail.com">russ.haley@gmail.com</a> <mailto:<a href="mailto:russ.haley@gmail.com">russ.haley@gmail.com</a>><br>
</span><span class="">>     > <mailto:<a href="mailto:russ.haley@gmail.com">russ.haley@gmail.com</a> <mailto:<a href="mailto:russ.haley@gmail.com">russ.haley@gmail.com</a>>><wbr>> wrote:<br>
>     >             I'd like to start with getting other Lua scripts running. My goal is<br>
>     >             to load a library called penlight that's a few dozens of files. Is<br>
>     >             there a utility for creating and loading resources? I'll also look<br>
>     >             at compiling the files using the luac compiler, but that's outside<br>
>     >             of rtems.<br>
>     ><br>
>     > No worries. There is evolving support (pretty mature by now) for dynamically<br>
>     > loading object code, if that is what you mean: the Runtime Loader (RTL).  I<br>
>     > don't have any experience with it though. Chris Johns is the expert on that topic.<br>
>     >  <br>
> <br>
>     The support is based around the standard calls 'dlopen' etc. You can load ELF<br>
>     object files. You do need a symbol table in the kernel and a simple makefile<br>
>     recipe can be found in the testsuite which works on the sparc simulator:<br>
> <br>
>     <a href="https://git.rtems.org/rtems/tree/testsuites/libtests/Makefile.am#n319" rel="noreferrer" target="_blank">https://git.rtems.org/rtems/<wbr>tree/testsuites/libtests/<wbr>Makefile.am#n319</a><br>
>     <<a href="https://git.rtems.org/rtems/tree/testsuites/libtests/Makefile.am#n319" rel="noreferrer" target="_blank">https://git.rtems.org/rtems/<wbr>tree/testsuites/libtests/<wbr>Makefile.am#n319</a>><br>
> <br>
>      (search for TEST_dl01 in the Makefile.am if the line has moved)<br>
> <br>
>     Note, the erc32 sim does not have access to a host's file system so you will<br>
>     need to package the object files into a tar file just as the test does.<br>
> <br>
> Hi Chris, good to hear from you. Yes, the non-filesystem is what I'm trying to<br>
> deal with. Lua can run as C or as Lua scripts. The dlopen support is excellent<br>
> and I'll look into that when I start loading C. There are many fine Lua wrappers<br>
> for some of the best C tools. Since, I'm trying to load lua scripts, the tar<br>
> package sounds like what I need to look at first.<br>
<br>
</span>I did wonder what you are loading.<br>
<span class=""><br>
> Lua scripts can be loaded as a 'string' buffer (char array), or from a file.<br>
> Either of those methods can load a text file or a Lua VM binary. Using binary is<br>
> apparently faster to load, but must be compiled for the same architecture. The<br>
> run speed is the same.  <br>
<br>
</span>Python is similar.<br>
<span class=""><br>
> A simple Lua script to load a second module would look like this:<br>
> <br>
>     local my_lib = require('mylib.init')<br>
>     local new_val = my_lib.dosomething()<br>
> <br>
> The require() function loads the file from a filesystem based on the<br>
> package.path string. On my windows box, it looks like this:<br>
> <br>
> .\?.lua;C:\Program Files (x86)\LuaRocks\lua\?.lua;C:\<wbr>Program Files<br>
> (x86)\LuaRocks\lua\?\init.lua;<wbr>C:\Program Files<br>
> (x86)\LuaRocks\?.lua;C:\Users\<wbr>russh\scripts\?\init.lua;C:\<wbr>Users\russh\scripts\?.lua;C:\<wbr>Users\russh;C:\Program<br>
> Files (x86)\WinLua\Lua\5.3\bin\?53.<wbr>dll;<br>
> <br>
> So, the require('mylib.init') would get translated so the '.' becomes the path<br>
> separator on the filesystem, and any '?' in the package.path is replaced with<br>
> the package name, eventually landing on C:\Users\russh\scripts\mylib\<wbr>init.lua.<br>
> Let's see how that translates to RTEMS... <br>
> <br>
<br>
</span>Please keep us updated with your progress.<br></blockquote><div><br></div><div>Hi everyone! Just thought I'd keep you posted. What I've learned so far is that running Lua as an embedded language has it's own quirks. One of the most interesting is getting and </div><div>loading Lua scripts that will comprise the libraries needed to be effective when writing Lua. While it's possible to just cram the scripts into a C/C++ file, I'm finding encoding and debugging things can be pretty tricky. There are a few "minifiers" that I'm fumbling with right now, but I just found one that looks really good called luapak. </div><div><br></div><div>Hopefully I'll have something to show for those efforts soon. I'm going to try packaging a couple of lua only files that I like using and embed them in a test application.</div><div><br></div><div>Cheers,</div><div>Russ</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class="HOEnZb"><font color="#888888"><br>
Chris<br>
</font></span></blockquote></div><br></div></div>