Hi Emanuel,
it looks like you have some very basic misunderstandings of the build system. Looking at what the script you used seems to have done I recommend starting from scratch, because I suspect you abused the build directory to a point where it is no longer worth saving.
You main misunderstanding seems to be the use of the O= / OBJDIR= setting. This points to the root of your builddirectory. This means the build directory for the whole l4re tree. Not a new one for each package. As previous commenters on this thread wrote: when you use a runtime environment for another system the build system has to know about all the packages you want to use and how to find them.
So please: start from scratch (you can still use your packages you wrote of course).
Here are the basic steps you get you started with the runtime (which you could also have found at http://os.inf.tu-dresden.de/L4Re). I assume you already have a working / built Fiasco.OC kernel.
A) Download L4Re as instructed here: http://os.inf.tu-dresden.de/L4Re/download.html (I used the snapshot) B) Follow the steps at http://os.inf.tu-dresden.de/L4Re/build.html 1) Extract the source files 2) Go to the extracted source (l4re-snapshot-2013123021/src/l4) 3) Execute 'make B=path/to/builddir' with a build dir that is NOT inside the source directory! 4) Execute 'make O=path/to/builddir config' to configure your l4re system. 5) Type 'make O=path/to/builddir' (! in the directory 'l4re-snapshot-2013123021/src/l4'! You never change directories in these steps!!!) Let this last step run to completion!! You do not have a working L4RE tree if it does not complete successfully. Now you have a complete and working l4re source tree. You NEVER have to touch anything in the build directory.
If you do not want to type the O= part of the make command everytime just put that line into 'src/l4/Makeconf.local'. Then it will be added automatically.
C) You can now proceed to test your L4Re setup. Provide the file src/l4/conf/Makeconf.boot with the correct paths to the fiasco build directory (MODULE_SEARCH_PATH and command (QEMU_PATH) respective options (QEMU_OPTIONS). Look at the example file in the same directory for verbose information on the config. Start a qemu with fiasco and an example application by typing 'make qemu' at the src/l4 directory (if you did not follow above advise about Makeconf.local include O=path/to/builddir but pointing it to the ROOT of the build dir! No fancy directory guessing please!) and selecting the application.
Once this works you can write your own application:
D) 1) Go into src/l4/pkg and make a new directory by doing 'mkdir myhello' then change into the new directory. 2) issue the command '../../mk/tmpl/inst' to instantiate a template application. Edit the Control files with the correct dependencies (or remove the templates if you do not think you need any) and then edit server/src/main.cc at your leisure. I just used: #include <stdio.h> int main(int argc, char **argv) { printf("My Hello!"); return 0; }
3) To build the new application just issue 'make' (if you did not follow above advise about Makeconf.local include O=path/to/builddir but pointing it to the ROOT of the build dir! No fancy directory guessing please!) .
4) To have a new configuration in the dialog window of the qemu boot to choose from edit src/l4/conf/mdoules.list and add a new entry. I used: entry myhello roottask moe --init=rom/myhello module l4re module myhello
5) Now, in src/l4, type 'make qemu' again (if you did not follow above advise about Makeconf.local include O=path/to/builddir but pointing it to the ROOT of the build dir! No fancy directory guessing please!) and you should see your new myhello entry and be able to boot it.
I hope this gets you started...
Kind regards,
- Marcus
On 2014-02-19 17:48, Emanuel Berg wrote:
Björn Döbel doebel@os.inf.tu-dresden.de writes:
Why not start with a simple L4 application with a rather simple Makefile (e.g., l4/pkg/hello) and copy stuff from there? Basically the answer is that you only have to set the SRC_C/SRC_CC and REQUIRES_LIBS make variables and the build system will do the rest for you.
If you read the first couple of messages in this very thread, you'll see that I have done just that.
I put some helpers in this file [1] - after setting up the src tree, and the obj dir, I had to 'oldconfig', then '-j4', and finally 'make'. That it was that complicated for just a toy program tells me there is no way around it, if I ever am to write a serious application, I need to understand the process.
Now, I have a C++ project, consisting of two files, that also has a ned Lua file.
It has the following includes:
#include <l4/re/env> #include <l4/cxx/ipc_stream> #include <l4/re/util/object_registry> #include <iostream>
I have been unable to compile it because I don't know what needs to be done. In the code provided, there are typically exports, and a module list (the flags in 'qhello' of my file, perhaps), use of ned, inclusion of the mk file I mentioned earlier, and more, so again, it is a bit to much to digest without knowing what it all does. A "hit list" (1, 2, 3, done) would be helpful.
On the complex lab there are 4 slide sets - the first two might include some useful information about what needs to go into an L4Re Makefile, if that is what you're specifically searching for.
Yes, but any reading is fine. Right now I don't know how to compile. But I'll read anything you suggest.