path: root/buildtools
AgeCommit message (Collapse)Author
2018-10-11buildtools: prevent experimental symbol match on substringNeil Horman
The experimental symbol check script matched on the regexes "\.text.*$SYM" and "\.text\.experimental.*$SYM" which allows for substring matches. If a symbol is leading substring of another one (e.g. symbol foo is a substring of symbol foobar), it would match on symbols when it shouldn't. It is fixed by matching additionally on the end of line so that symbols are an exact match. Signed-off-by: Neil Horman <>
2018-10-01devtools: use a common prefix for temporary filesThomas Monjalon
Some temporary files were generated in /tmp, others in the current directory, and none was "dpdk prefixed". All these files have a common path prefix now: $TMPDIR/dpdk. TMPDIR is /tmp by default. Note: the previous use of mktemp, with a template but without -t, was generating a file in the current directory. Signed-off-by: Thomas Monjalon <> Acked-by: Bruce Richardson <>
2018-09-17build: create relative symlinks for PMDs in libdirLuca Boccassi
Add -r option to ln, otherwise the link will be absolute and contain the build path and break packaging among other things: lrwxrwxrwx 1 bluca bluca 99 Sep 11 22:17 -> /home/bluca/git/dpdk/testt4//usr/local/lib/x86_64-linux-gnu/dpdk/ drivers/ With -r: lrwxrwxrwx 1 bluca bluca 35 Sep 12 18:13 -> dpdk/drivers/ Fixes: ed4d43d73e2b ("build: symlink drivers to library directory") Cc: Signed-off-by: Luca Boccassi <> Tested-by: Timothy Redaelli <> Acked-by: Bruce Richardson <>
2018-07-26buildtools: change license to SPDXHemant Agrawal
Signed-off-by: Hemant Agrawal <> Acked-by: Neil Horman <>
2018-07-11mk: fix cross buildGavin Hu
The "-Wimplicit-fallthrough=2" option was introduced into gcc 7.0, it was enabled when the cross compiler gcc is greater than 7.0, but for the host side buildtools/pmdinfogen, if the native gcc is older than 7.0, or the host cc compiler is clang, it should not be enabled. The fix is to differentiate the host gcc Werror options from the cross gcc. gcc -Wp,-MD,./.pmdinfogen.o.d.tmp -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wold-style-definition -Wpointer-arith -Wcast-align -Wnested-externs -Wcast-qual -Wformat-nonliteral -Wformat-security -Wundef -Wwrite-strings -Wdeprecated -Werror -Wimplicit-fallthrough=2 -Dbbb -Wno-format-truncation -g -I/dpdk/build/include -o pmdinfogen.o -c ~/dpdk/buildtools/pmdinfogen/pmdinfogen.c gcc: error: unrecognized command line option ‘-Wimplicit-fallthrough=2’ Fixes: ced3e6f8 ("mk: adjust gcc flags for new gcc 7 warnings") Cc: Signed-off-by: Gavin Hu <> Reviewed-by: Honnappa Nagarahalli <> Reviewed-by: Steve Capper <> Tested-by: Ali Alnubani <> Acked-by: Thomas Monjalon <>
2018-05-25use SPDX tag for 6WIND copyrighted filesOlivier Matz
Signed-off-by: Olivier Matz <>
2018-02-08buildtools: output build failure reason to stderrAndrew Rybchenko
If build fails because of failed experimental check and stdout is redirected to /dev/null, it is absolutely unclear why build fails. Fixes: a4bcd61de82d ("buildtools: add script to check experimental API exports") Signed-off-by: Andrew Rybchenko <> Acked-by: Neil Horman <>
2018-02-06pmdinfogen: fix resource leak of file objectBruce Richardson
Coverity flags an issue where the resources used by the FILE object for the temporary input file are leaked. This is a very minor issue, but is easily fixed, while also avoiding later problems where we try to close an invalid file descriptor in the failure case. The fix is to use "dup()" to get a new file descriptor number rather than using the value directly from fileno. This allows us to close the file opened with tmpfile() within in scope block, while allowing the duplicate to pass to the outer block and be closed when the function terminates. As a side-effect I/O in the function is therefore changed from using stdio fread/fwrite to read/write system calls. Coverity issue: 260399 Fixes: 0d68533617e3 ("pmdinfogen: allow using stdin and stdout") Signed-off-by: Bruce Richardson <> Acked-by: Neil Horman <>
2018-01-30drivers: improve pmdinfo generation with mesonBruce Richardson
Since meson 0.44, changing any file inside a PMD directory (quite correctly) triggers a full re-run of meson on build, rather than an incremental build as with earlier versions. This rerun is needed because we use "grep" in meson to search for files on which to run pmdinfogen, and changing any of those files means that grep and, therefore meson, needs to be rerun. [Previous versions of meson did not track this dependency on the grep command, and so did incremental builds only.] If, however, we take advantage of pmdinfogen's ability to use stdin and stdout instead of files, we can instead use a shell script to process an entire static archive and generate a single .c file from it. This eliminates the need for grep, and means that changes to a PMD file only need an incremental build - a significant time saving. Signed-off-by: Bruce Richardson <>
2018-01-30build: remove architecture flag as default C flagBruce Richardson
Any flags added to the project args are automatically added to all builds, both native and cross-compiled. This is not what we want for the -march flag as a valid -march for the cross-compile is not valid for pmdinfogen which is a native-build tool. Instead we store the march flag as a variable, and add it to the default cflags for all libs, drivers, examples, etc. This will allow pmdinfogen to compile successfully in a cross-compilation environment. Signed-off-by: Bruce Richardson <> Acked-by: Luca Boccassi <>
2018-01-30build: replace license text with SPDX tagBruce Richardson
Signed-off-by: Bruce Richardson <> Reviewed-by: Luca Boccassi <>
2018-01-30build: symlink drivers to library directoryBruce Richardson
With the introduction of bus drivers, we now have a situation where driver libraries will start to depend upon each other. Because of this, the driver libs need to be discoverable by the dynamic loader. There are three options to fix this: 1. Force the user to put the $libdir/dpdk/drivers folder into their library path. 2. Move all libraries from drivers sub-directory to $libdir. 3. Symlink all libraries from the subfolder to the main library dir. Option 1 is not great for usability or distro packaging, and option 2 means that we can't have EAL load all drivers from a known path automatically (as it would error out on non-PMD libs), so option 3 was chosen as the best fix. The only downside is that on a "ninja uninstall" the symlinks are not removed, as they are unknown to meson/ninja. Signed-off-by: Bruce Richardson <> Acked-by: Luca Boccassi <>
2018-01-30buildtools: build with mesonBruce Richardson
Add the buildtools folder, and more specifically the pmdinfogen binary to the meson and ninja build. This will be needed for building the PMDs in the driver folder later, as the pmd info output from the tool needs to be included in those libs. Signed-off-by: Bruce Richardson <> Reviewed-by: Harry van Haaren <> Acked-by: Keith Wiles <> Acked-by: Luca Boccassi <>
2018-01-29buildtools: add script to check experimental API exportsNeil Horman
This tools reads the given version map for a directory, and checks to ensure that, for each symbol listed in the export list, the corresponding definition is tagged as __rte_experimental, erroring out if its not. In this way, we can ensure that the EXPERIMENTAL api is kept in sync with the tags Signed-off-by: Neil Horman <>
2018-01-29pmdinfogen: allow using stdin and stdoutBruce Richardson
Rather than having to work off files all the time, allow stdin and stdout to be used as the source and destination for pmdinfogen. This will allow other possible usages from scripts, e.g. taking files from ar archive and building a single .pmd.c file from all the .o files in it. for f in `ar t librte_pmd_xyz.a` ; do ar p librte_pmd_xyz.a $f | pmdinfogen - - >> xyz_info.c done Signed-off-by: Bruce Richardson <> Acked-by: Neil Horman <>
2018-01-12pmdinfogen: fix cross compilation for ARM big endianHemant Agrawal
Cross compiling DPDK for BE mode on ARM results into errors "PMDINFO portal/dpaa2_hw_dpio.o.pmd.c No drivers registered" The original code assumes the sh_size to be 32 bit, while it can be Elf32_Word or Elf64_Xword based on 32bit or 64 bit systems. This patches replaces the sh_size conversion routines to use ADDR_SIZE Fixes: 98b0fdb0ffc6 ("pmdinfogen: add buildtools and pmdinfogen utility") Cc: Signed-off-by: Jun Yang <> Signed-off-by: Hemant Agrawal <> Acked-by: Bruce Richardson <> Acked-by: Neil Horman <>
2018-01-04tools: use SPDX tag for Intel copyright filesBruce Richardson
Replace the BSD license header with the SPDX tag for scripting files with only an Intel copyright on them. Signed-off-by: Bruce Richardson <>
2017-11-07buildtools: check allocation error in pmdinfogenYong Wang
In func locate_pmd_entries(), pointer 'new' returned from call to func 'calloc' may be NULL. It is dereferenced without null point check. Signed-off-by: Yong Wang <>
2017-11-06buildtools: fix icc buildFerruh Yigit
There are random build errors in test reports [1]. Build error is not directly related to DPDK but observed during DPDK build. When I get similar unexpected build errors in my system, found out that /dev/null is invalid. It seems ICC overwrites the /dev/null with "icc -o /dev/null" instead of sending output to /dev/null. This is not always reproducible, so hard to say what exactly is triggering the error. I suspect test-report build errors can be because of the same reason, and it is good to add a protection for this case. Instead of sending output to /dev/null save it to the tmp folder and remove it back when done. [1] Failure #3 /usr/src/linux-headers-4.4.0-97-generic/include/linux/sysfs.h:517:37: error: pointer targets in passing argument 2 of ‘kernfs_find_and_get’ differ in signedness [-Werror=pointer-sign] return kernfs_find_and_get(parent, name); Signed-off-by: Ferruh Yigit <>
2017-09-14buildtools: zero elf info variable in pmdinfogenHarry van Haaren
This commit zeros out the elf_info struct at startup of the pmdinfogen code. If it is not zeroed, later in the code gcc produces "may be unused" prints. Clang does not report any issue. This issue is only observed when compiling pmdinfogen as an optimized build, hence this warning is not disabled in the existing Makefile. This commit enables a simplification in the meson build system, removing the requirement for "-Wno-maybe-uninitialized". Signed-off-by: Harry van Haaren <> Acked-by: Bruce Richardson <>
2017-03-27mk: optimize directory dependenciesOlivier Matz
Before this patch, the management of dependencies between directories had several issues: - the generation of .depdirs, done at configuration is slow: it can take more than one minute on some slow targets (usually ~10s on a standard PC without -j). - for instance, it is possible to express a dependency like: - app/foo depends on lib/librte_foo - and lib/librte_foo depends on app/bar But this won't work because the directories are traversed with a depth-first algorithm, so we have to choose between doing 'app' before or after 'lib'. - the script is too complex. - we cannot use "make -d" for debug, because the output of make is used for the generation of .depdirs. This patch moves the DEPDIRS-* variables in the upper Makefile, making the dependencies much easier to calculate. A DEPDIRS variable is still used to process library dependencies in LDLIBS. After this commit, "make config" is almost immediate. Signed-off-by: Olivier Matz <> Tested-by: Robin Jarry <> Tested-by: Jerin Jacob <>
2017-01-29buildtools: allow symlinks within a source directoryBruce Richardson
When creating the symlinks for header files to the include folder, the relpath script dereferenced all symlinks. This made it impossible to have file A.h renamed to B.h and then symlinked back to its original name. This is useful to be able to do when refactoring or reworking a library. Change this so that we just use the dirname of the path from readlink, we can use the basename as it was originally, even if it was a symlink. Signed-off-by: Bruce Richardson <>
2017-01-06pmdinfogen: fix null dereferenceNeil Horman
Coverity reports a forward null dereference from a for loop that works with a variable previously tested for null that had no error handling or condition to prevent it. Pretty obvious fix below. Coverity issue: 139593 Fixes: 98b0fdb0ffc6 ("pmdinfogen: add buildtools and pmdinfogen utility") Signed-off-by: Neil Horman <>
2017-01-04scripts: move to buildtoolsThomas Monjalon
There is already a directory buildtools for pmdinfogen used by the build system. The scripts used in makefiles are moved here. Signed-off-by: Thomas Monjalon <> Tested-by: Ferruh Yigit <>
2016-12-20drivers: advertise kmod dependencies in pmdinfoOlivier Matz
Add a new macro RTE_PMD_REGISTER_KMOD_DEP() that allows a driver to declare the list of kernel modules required to run properly. Today, most PCI drivers require uio/vfio. Signed-off-by: Olivier Matz <> Acked-by: Fiona Trahe <> Acked-by: Adrien Mazarguil <>
2016-12-01pmdinfogen: fix endianness with cross-compilationNeil Horman
pmdinfogen has a bug in which, during build, it pulls in rte_byteorder.h to obtain the rte macros for byteswapping between the cpu byte order and big or little endian. Unfortunately, pmdinfogen is a tool that is only meant to be run during the build of dpdk components, and so, it runs on the host. In cross compile environments however, the rte_byteorder.h is configured using a target cpu, who's endianness may differ from that of the host, leading to improper swapping. The fix is to use host system defined byte swapping routines rather than the dpdk provided routines. Note that we are using non posix compliant routines, as the posix compliant api only addresses 16 and 32 bit swaps, and we also need 64 bit swaps. Those macros exist (via endian.h), but BSD and Linux put that header in different locations so some ifdeffery is required. Tested successfully by myself on Linux and BSD systems. Fixes: 98b0fdb0ffc6 ("pmdinfogen: add buildtools and pmdinfogen utility") Signed-off-by: Neil Horman <> Tested-by: Bruce Richardson <>
2016-10-04pmdinfogen: fix clang buildFerruh Yigit
Compile error: CC mlx5.o.pmd.o mlx5.o.pmd.c:1:227: error: no newline at end of file [-Werror,-Wnewline-eof] ...__attribute__((used)) = "PMD_INFO_STRING= {...}"; ^ Produced with clang 3.8.0 and MLX5_PMD and MLX5_DEBUG config options enabled. Fixes: 98b0fdb0ffc6 ("pmdinfogen: add buildtools and pmdinfogen utility") Signed-off-by: Ferruh Yigit <>
2016-07-22unify tools namingThomas Monjalon
The following tools may be installed system-wide. It may be cleaner and more convenient to find them with the same dpdk- prefix (especially for autocompletion). Moreover, the script deserves a new name because it is not restricted to NICs and can be used for e.g. crypto. These files are renamed: pmdinfogen -> dpdk-pmdinfogen -> dpdk_pdump -> dpdk-pdump dpdk_proc_info -> dpdk-procinfo -> -> The tools pmdinfogen, and dpdk_pdump are new in 16.07. The scripts and may have been used with previous releases by end users. That's why a symbolic link still provide the old name in the installed tools directory. Signed-off-by: Thomas Monjalon <> Acked-by: Yuanhan Liu <>
2016-07-10pmdinfogen: fix build on FreeBSDBruce Richardson
error on compilation caused by missing include for libgen.h. buildtools/pmdinfogen/pmdinfogen.c:402:4: error: implicit declaration of function 'basename' is invalid in C99 basename(argv[0])); Fixes: 840e5dfea3f8 ("pmdinfogen: fix usage message") Signed-off-by: Bruce Richardson <>
2016-07-08pmdinfogen: fix usage messageThomas Monjalon
The name of the tool is pmdinfogen. Fixes: 98b0fdb0ffc6 ("pmdinfogen: add buildtools and pmdinfogen utility") Signed-off-by: Thomas Monjalon <> Acked-by: Neil Horman <>
2016-07-08pmdinfogen: fix build warningsThomas Monjalon
When compiled with a standard clang, pmdinfogen can raise a warning: buildtools/pmdinfogen/pmdinfogen.c:365:1: warning: control reaches end of non-void function Actually there can be more warnings with stricter compilers. In order to catch them early and fix most of them, the DPDK standard flags WERROR_FLAGS are used. The warnings fixed are: no previous prototype for ... no return statement in function returning non-void variable ‘secstrings’ set but not used ‘sec_name’ defined but not used ‘get_symbol_index’ defined but not used pointer of type ‘void *’ used in arithmetic Fixes: 98b0fdb0ffc6 ("pmdinfogen: add buildtools and pmdinfogen utility") Signed-off-by: Thomas Monjalon <> Acked-by: Neil Horman <>
2016-07-06pmdinfogen: add buildtools and pmdinfogen utilityNeil Horman
pmdinfogen is a tool used to parse object files and build json strings for use in later determining hardware support in a dso or application binary. pmdinfo looks for the non-exported symbol names this_pmd_name<n> and this_pmd_tbl<n> (where n is a integer counter). It records the name of each of these tuples, using the later to find the symbolic name of the pci_table for physical devices that the object supports. With this information, it outputs a C file with a single line of the form: static char *<pmd_name>_driver_info[] __attribute__((used)) = " \ PMD_DRIVER_INFO=<json string>"; Where <pmd_name> is the arbitrary name of the pmd, and <json_string> is the json encoded string that hold relevant pmd information, including the pmd name, type and optional array of pci device/vendor ids that the driver supports. This c file is suitable for compiling to object code, then relocatably linking into the parent file from which the C was generated. This creates an entry in the string table of the object that can inform a later tool about hardware support. Signed-off-by: Neil Horman <> Acked-by: Panu Matilainen <> Acked-by: Remy Horton <>