User Tools

Site Tools


embedding_oot_modules_or_custom_libraries_binaries_in_minus_scenario

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
embedding_oot_modules_or_custom_libraries_binaries_in_minus_scenario [2016/04/12 14:49] – [Packaging executable binaries or libraries in a minus task scenario] mimbertembedding_oot_modules_or_custom_libraries_binaries_in_minus_scenario [2016/04/21 17:02] mimbert
Line 35: Line 35:
 * everything from the toolchain is kept isolated in the toolchain install directory, instead of being scattered everywhere. * everything from the toolchain is kept isolated in the toolchain install directory, instead of being scattered everywhere.
 * it is possible to have more than one toolchain installed in parallel. You only need to re-run the root script to switch to a different toolchain, and reboot (or possibly only restart udev? that needs to be checked), and re-source the environment configuration script. * it is possible to have more than one toolchain installed in parallel. You only need to re-run the root script to switch to a different toolchain, and reboot (or possibly only restart udev? that needs to be checked), and re-source the environment configuration script.
 +
 +When building a toolchain on a user's workstation, the user is not forced to build everything. For example, a user willing to experiment only with usrp can avoid installing all picosdr stuff (xilinx ise, digilent hs2 jtag, adp).
  
 ===== Packaging executable binaries or libraries in a minus task scenario ===== ===== Packaging executable binaries or libraries in a minus task scenario =====
Line 47: Line 49:
 The location on the cortexlab nodes where the task will be unpacked and executed is **''/home/cxlbuser/tasks/task''** The location on the cortexlab nodes where the task will be unpacked and executed is **''/home/cxlbuser/tasks/task''**
  
-Thus, the compilation / stage installation of a custom binary in a minus task scenario has the following scheme:+Thus, the compilation / stage installation of a custom binary in a minus task scenario has the following scheme, assuming that the task is assembled in directory ''/cortexlab/homes/<userlogin>/tasks/mytask'' and that the temporary staging directory for compiled binaries is ''/cortexlab/homes/<userlogin>/tasks/mytask/tmp'' 
 + 
 +(in the following, we assume that we compile directly on ''airlock'')
  
 == For autotools project == == For autotools project ==
 +
 +  $ ./configure --prefix=/home/cxlbuser/tasks/task
 +  $ make
 +  $ make DESTDIR=/cortexlab/homes/<userlogin>/tasks/mytask/tmp install
  
 == For cmake project == == For cmake project ==
 +
 +  $ cmake -DCMAKE_INSTALL_PREFIX=/home/cxlbuser/tasks/task
 +  $ make
 +  $ make DESTDIR=/cortexlab/homes/<userlogin>/tasks/mytask/tmp install
 +
 +Then, in both cases, we will find in ''/cortexlab/homes/<userlogin>/tasks/mytask/tmp'' the complete directory hierarchy ''/cortexlab/homes/<userlogin>/tasks/mytask/tmp/home/cxlbuser/tasks/task'' and directories such as ''usr'', ''share'', ''include'', etc. below. Now we simply have to move this up to the toplevel of the task:
 +
 +  $ mv /cortexlab/homes/<userlogin>/tasks/mytask/tmp/home/cxlbuser/tasks/task/* /cortexlab/homes/<userlogin>/tasks/mytask/
 +  $ rm -rf /cortexlab/homes/<userlogin>/tasks/mytask/tmp
 +
 +Then we can assemble our task:
 +
 +  $ minus task create /cortexlab/homes/<userlogin>/tasks/mytask
 +
 +If we compile on a workstation instead of ''airlock'', the steps are identical except that the task directory has be be transfered to ''airlock'' before running ''minus task create'' on ''airlock''
 ==== gnuradio Out Of Tree (OOT) modules ==== ==== gnuradio Out Of Tree (OOT) modules ====
 +
 +A gnuradio OOT module is just a special case of custom binary, as described in the previous section.
  
 The gnuradio build system is designed to allow [[https://gnuradio.org/redmine/projects/gnuradio/wiki/OutOfTreeModules|building OOT gnuradio modules]] easily. For this, users need to use ''gr_modtool'' to create their module. The gnuradio build system is designed to allow [[https://gnuradio.org/redmine/projects/gnuradio/wiki/OutOfTreeModules|building OOT gnuradio modules]] easily. For this, users need to use ''gr_modtool'' to create their module.
Line 58: Line 83:
 ''gr_modtool'' will generate a cmake project which will automatically detect gnuradio, if running cmake from airlock (using the cortexlab toolchain instance on airlock), or from a user's workstation, with a gnuradio built with [[https://github.com/CorteXlab/cxlb-build-toolchain|cxlb-build-toolchain]] and a properly configured environment. ''gr_modtool'' will generate a cmake project which will automatically detect gnuradio, if running cmake from airlock (using the cortexlab toolchain instance on airlock), or from a user's workstation, with a gnuradio built with [[https://github.com/CorteXlab/cxlb-build-toolchain|cxlb-build-toolchain]] and a properly configured environment.
  
-==== Custom binaries / libraries ====+Then, as described in the previous section, run cmake and install this way: 
 + 
 +  $ cmake -DCMAKE_INSTALL_PREFIX=/home/cxlbuser/tasks/task 
 +  $ make 
 +  $ make DESTDIR=/cortexlab/homes/<userlogin>/tasks/mytask/tmp install 
 +  $ mv /cortexlab/homes/<userlogin>/tasks/mytask/tmp/home/cxlbuser/tasks/task/* /cortexlab/homes/<userlogin>/tasks/mytask/ 
 +  $ rm -rf /cortexlab/homes/<userlogin>/tasks/mytask/tmp 
 + 
 +==== multiple chained dependencies ==== 
 + 
 +The most complex situation is when you need to embed into a minus task a binary (be it a gnuradio OOT module, an executable or a library) which depends itself from other binaries (libraries, most of the time) which need to be also embedded in the minus task. These dependency chains may be longer (eg. OOT module //A// depends on library //B//, which depends on library //C// and //D//, and library //C// depends on //D// also, as well as on library //E//). 
 + 
 +In this situation, you need to compile everything in reverse order starting from the end of the chain (the libraries which have no custom dependencies. In the previous example, the order would be //E//, //D//, //C//, //B//, //A//). The challenge is to be able to tell following libraries (in the order of compilation) where to find previous ones includes (for compilation) and libs (for linking) 
 + 
 +FIXME explain how to, when compiling //D//, telling it where to find //E// 
embedding_oot_modules_or_custom_libraries_binaries_in_minus_scenario.txt · Last modified: 2016/04/21 17:06 by mimbert

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki