Running waf build under Linux
- Jin Zhao
How to run waf build under Linux?
1. Setup the GCC ARM Embedded toolchain
First we download and extract the toolchain:
~/Test$ wget https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q3-update/+download/gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2 ~/Test$ tar -xf gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2
Attempting to run arm-none-eabi-gcc directly fails:
~/Test$ gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-gcc -v bash: arm-none-eabi-gcc: No such file or directory
Apparently we get this error because we are trying to run a 32-bit binary on a 64-bit architecture. The solution is to install the 32-bit libraries needed with:
~/Test$ sudo apt-get install gcc-multilib
See https://answers.launchpad.net/gcc-arm-embedded/+question/403082 for more information about this issue.
Now we can run arm-none-eabi-gcc without a problem:
~/Test$ gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-gcc -v ... gcc version 4.9.3 20150529 (release) [ARM/embedded-4_9-branch revision 227977] (GNU Tools for ARM Embedded Processors)
2. Install Python 2
The next step is to install python 2:
~/Test$ sudo apt-get install python-is-python2
It should be possible to run the build also with python 3, but attempting to build waf 1.6.11 with python3 failed, so we stick to python 2 instead.
3. Download and build waf 1.6.11
Next we download and build waf 1.6.11:
~/Test$ wget https://github.com/waf-project/waf/archive/refs/tags/waf-1.6.11.tar.gz ~/Test$ tar -xf waf-1.6.11.tar.gz ~/Test$ cd waf-waf-1.6.11/ ~/Test/waf-waf-1.6.11$ ./waf-light configure build ------> Executing code from the top-level wscript <----- Setting top to : /home/plamena/Test/waf-waf-1.6.11 Setting out to : /home/plamena/Test/waf-waf-1.6.11/build Checking for program python : /usr/bin/python Checking for python version : (2, 7, 18, 'final', 0) 'configure' finished successfully (0.049s) Waf: Entering directory `/home/plamena/Test/waf-waf-1.6.11/build' [1/1] create_waf: -> waf -> preparing 'tmp-waf-1.6.11' Waf: Leaving directory `/home/plamena/Test/waf-waf-1.6.11/build' 'build' finished successfully (0.260s)
The build produces the waf executable which should be placed at the root directory of the project we want to build.
4. Setup the example project to build
Download and extract one of the netX 90 example projects:
~/Test$ wget https://kb.hilscher.com/download/attachments/119491200/netXStudio_PNSV5_simpleConfig_V3.0.0.0.zip ~/Test$ unzip netXStudio_PNSV5_simpleConfig_V3.0.0.0.zip
Place the waf executable into the project root folder:
~/Test$ cp waf-waf-1.6.11/waf netXStudio_PNSV5_simpleConfig_V3.0.0.0/waf
If we try to configure the project now we will get an error:
~/Test$ cd netXStudio_PNSV5_simpleConfig_V3.0.0.0/ ~/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0$ ./waf configure Traceback (most recent call last): .... ImportError: No module named hilscher_libsused
To fix the error, we have to patch the WAF/hilscher_firmware.py script which is part of the project build. The file should look like this:
# waf buildsystem related hooks to initialize this module def options(opt): global hilscher_tooldir opt.load('hilscher_libsused', tooldir = os.path.relpath(hilscher_tooldir, opt.path.abspath())) # changed opt.root.abspath() to opt.path.abspath() def configure(conf): global hilscher_tooldir conf.load('hilscher_libsused', tooldir = os.path.relpath(hilscher_tooldir, conf.path.abspath())) # changed conf.root.abspath() to conf.path.abspath()
Try to configure the project again and this time the "No module named hilscher_libsused" error should be gone:
~/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0$ ./waf configure Loaded WAF options from project. Setting top to : /home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0 Setting out to : /home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0/build Hilscher Waf version : 1.10.1.0 Checking for waf version in 1.6.11-1.7.0 : ok Checking for program patch : /usr/bin/patch Checking for program svn : not found Checking for program python : /usr/bin/python Checking for hboot image compiler : /home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0/WAF/hboot_image_compiler Checking for app intflash image update tool : /home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0/WAF/hboot_image_compiler/netx90_app_iflash_image.py Checking for app image update tool : /home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0/WAF/hboot_image_compiler/netx90_app_image.py Toolchain 'gccarmemb' : not found (Some projects may not be available for building) Loaded WAF configuration from project. 'configure' finished successfully (0.006s)
5. Setup the GCC ARM toolchain path for waf
Now we need to tell the waf build where to look for the GCC ARM Embedded toolchain. This is done by setting the GCC_ARM_PATH environment variable:
~/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0$ export GCC_ARM_PATH=/home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3
Now we should be able to configure the project successfully:
~/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0$ ./waf configure Loaded WAF options from project. Setting top to : /home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0 Setting out to : /home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0/build Hilscher Waf version : 1.10.1.0 Checking for waf version in 1.6.11-1.7.0 : ok Checking for program patch : /usr/bin/patch Checking for program svn : not found Checking for program python : /usr/bin/python Checking for hboot image compiler : /home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0/WAF/hboot_image_compiler Checking for app intflash image update tool : /home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0/WAF/hboot_image_compiler/netx90_app_iflash_image.py Checking for app image update tool : /home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0/WAF/hboot_image_compiler/netx90_app_image.py Checking for program arm-none-eabi-ar : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-ar Checking for program arm-none-eabi-readelf : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-readelf Checking for program arm-none-eabi-objdump : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-objdump Checking for program arm-none-eabi-objcopy : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-objcopy Checking for program arm-none-eabi-strip : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-strip Checking for program arm-none-eabi-nm : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-nm Checking for program arm-none-eabi-gcc : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-gcc Checking for program arm-none-eabi-g++ : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-g++ Toolchain 'gccarmemb' : gcc 4.9.3 Loaded WAF configuration from project. 'configure' finished successfully (0.027s)
6. Build the project
Now we can build the project with "waf configure build":
~/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0$ ./waf configure build Loaded WAF options from project. Setting top to : /home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0 Setting out to : /home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0/build Hilscher Waf version : 1.10.1.0 Checking for waf version in 1.6.11-1.7.0 : ok Checking for program patch : /usr/bin/patch Checking for program svn : not found Checking for program python : /usr/bin/python Checking for hboot image compiler : /home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0/WAF/hboot_image_compiler Checking for app intflash image update tool : /home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0/WAF/hboot_image_compiler/netx90_app_iflash_image.py Checking for app image update tool : /home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0/WAF/hboot_image_compiler/netx90_app_image.py Checking for program arm-none-eabi-ar : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-ar Checking for program arm-none-eabi-readelf : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-readelf Checking for program arm-none-eabi-objdump : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-objdump Checking for program arm-none-eabi-objcopy : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-objcopy Checking for program arm-none-eabi-strip : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-strip Checking for program arm-none-eabi-nm : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-nm Checking for program arm-none-eabi-gcc : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-gcc Checking for program arm-none-eabi-g++ : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-g++ Toolchain 'gccarmemb' : gcc 4.9.3 Loaded WAF configuration from project. 'configure' finished successfully (0.023s) Waf: Entering directory `/home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0/build/release' Skipping target 'arm-none-eabi/x.x.x/cifXApplicationDemo/cifXApplicationDemo' because toolchain 'codesourcery' not found. Components/cifXApplicationDemoPNSDefinitions/wscript: Path 'Includes\\GenericAP_API' specified in arg 'export_includes' for target 'GenericAPDefinitions_sdk' does not exists
There is one more small error to fix - one of the component wscript files uses a path with the wrong slash, which results in the error seen above. This can be easily fixed by adjusting the component wscript:
bld.sdkcomponent( name = "GenericAPDefinitions_sdk", export_includes = "Includes/GenericAP_API", # changed "Includes\GenericAP_API" to "Includes/GenericAP_API" )
Finally we can build the project successfully:
~/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0$ ./waf configure build Loaded WAF options from project. Setting top to : /home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0 Setting out to : /home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0/build Hilscher Waf version : 1.10.1.0 Checking for waf version in 1.6.11-1.7.0 : ok Checking for program patch : /usr/bin/patch Checking for program svn : not found Checking for program python : /usr/bin/python Checking for hboot image compiler : /home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0/WAF/hboot_image_compiler Checking for app intflash image update tool : /home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0/WAF/hboot_image_compiler/netx90_app_iflash_image.py Checking for app image update tool : /home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0/WAF/hboot_image_compiler/netx90_app_image.py Checking for program arm-none-eabi-ar : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-ar Checking for program arm-none-eabi-readelf : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-readelf Checking for program arm-none-eabi-objdump : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-objdump Checking for program arm-none-eabi-objcopy : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-objcopy Checking for program arm-none-eabi-strip : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-strip Checking for program arm-none-eabi-nm : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-nm Checking for program arm-none-eabi-gcc : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-gcc Checking for program arm-none-eabi-g++ : /home/plamena/Test/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-g++ Toolchain 'gccarmemb' : gcc 4.9.3 Loaded WAF configuration from project. 'configure' finished successfully (0.017s) Waf: Entering directory `/home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0/build/release' ... ... ... [61/70] [CC] Targets/NXHX90-JTAG/Sources/handler.c [62/70] [CC] Targets/NXHX90-JTAG/Sources/main.c [63/70] [CC] Targets/NXHX90-JTAG/Sources/netx90_app_header_useCaseC.c [64/70] [ELF] build/release/Targets/netx90_sdram.elf build/release/Targets/netx... [65/70] [CC] Targets/NXHX90-JTAG/Sources/handler.c [66/70] [CC] Targets/NXHX90-JTAG/Sources/main.c [67/70] [CC] Targets/NXHX90-JTAG/Sources/netx90_app_header_useCaseC.c [68/70] [ELF] build/release/Targets/nx90_app.elf build/release/Targets/nx90_app... [69/70] [APPIMG] build/release/Targets/nx90_app.nai.unpatched [70/70] [GENERATE_NAI] build/release/Targets/nx90_app.nai.unpatched build/release/Tar... Waf: Leaving directory `/home/plamena/Test/netXStudio_PNSV5_simpleConfig_V3.0.0.0/build/release' 'build' finished successfully (8.525s)
Tested with Ubuntu 20.04.2.0 LTS.
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page: