Parsing toolchain feeds

Let’s assume you have a cross-toolchain updated to http://example.com/packages/foo-ctc.tar.gz , a binary package in http://example.com/packages/bar.tar.gz , and an XML feed looking like:


           
            <toolchain>
  <package
    name="foo-ctc"
    url="http://example.com/packages/foo-ctc.tar.gz"
    toolchain_file="cross-config.cmake"
  />
  <package
    name="bar"
    url="http://example.com/packages/bar.tar.gz"
  />

           
          

accessible in http://example.com/feeds/cross.xml

And you run


           
            $ qitoolchain create cross-foo http://example.com/feeds/cross.xml

           
          

See qitoolchain.feed for how XML parsing is done.

After every package has been parsed and added to the toolchain, it is just a matter of toolchain.update_toolchain so that the toolchain file is regenerated.

The toolchain file will then look like:


           
            # Autogenerted file
include("/path/to/a/ctc/cross-config.cmake")
list(INSERT CMAKE_FIND_ROOT_PATH 0 "/path/to/a/ctc")
list(INSERT CMAKE_FIND_ROOT_PATH 0 "/path/to/a/package")

           
          

and cross-foo will be added to the name of the known toolchains.

Then, when using


           
            $ qibuild configure -c cross-foo my_project

           
          

A qibuild.toc.Toc object will be created, containing a qitoolchain.toolchain.Toolchain because cross-foo is a known name.

Then, a build directory name build-cross-foo will be created, and cmake will be called, as if you had type:


           
            $ cd ~/src/my_project/
$ mkdir build-cross-foo
$ cmake -DCMAKE_TOOLCHAIN_FILE=~/.cache/qi/toolchains/cross-foo.cmake ..

           
          

And everything will just work:

You will go through the cross-config.cmake , so the compiler to use will be properly set, and you will have a entry in CMAKE_FIND_ROOT_PATH to where the bar package has been extracted, so finding bar libraries from the bar package will also work.