diff --git a/buildtools/gen-pmdinfo-cfile.sh b/buildtools/gen-pmdinfo-cfile.sh index 565e089131..0b6dc2ce4f 100755 --- a/buildtools/gen-pmdinfo-cfile.sh +++ b/buildtools/gen-pmdinfo-cfile.sh @@ -6,7 +6,8 @@ arfile=$1 output=$2 pmdinfogen=$3 -tmp_o=${output%.c.pmd.c}.tmp.o - -ar p $arfile > $tmp_o && \ - $pmdinfogen $tmp_o $output +echo > $output +for ofile in `ar t $arfile` ; do + ar p $arfile $ofile | $pmdinfogen - - >> $output 2> /dev/null +done +exit 0 diff --git a/drivers/meson.build b/drivers/meson.build index 099135b91b..b41a0f18e8 100644 --- a/drivers/meson.build +++ b/drivers/meson.build @@ -45,6 +45,7 @@ foreach class:driver_classes if build dpdk_conf.set(config_flag_fmt.format(name.to_upper()),1) + lib_name = driver_name_fmt.format(name) if allow_experimental_apis cflags += '-DALLOW_EXPERIMENTAL_API' @@ -61,21 +62,22 @@ foreach class:driver_classes static_objs += ext_deps dpdk_extra_ldflags += pkgconfig_extra_libs - # generate pmdinfo sources - pmdinfogen_srcs = run_command('grep', '--files-with-matches', - 'RTE_PMD_REGISTER_.*(.*)', sources).stdout().strip().split() - foreach src: pmdinfogen_srcs - out_filename = '@0@.pmd.c'.format(src.split('/')[-1]) - tmp_lib = static_library('tmp_@0@'.format(src.underscorify()), - src, include_directories: includes, + # generate pmdinfo sources by building a temporary + # lib and then running pmdinfogen on the contents of + # that lib. The final lib reuses the object files and + # adds in the new source file. + out_filename = lib_name + '.pmd.c' + tmp_lib = static_library('tmp_' + lib_name, + sources, + include_directories: includes, dependencies: static_objs, c_args: cflags) - sources += custom_target(out_filename, - command: [pmdinfo, tmp_lib.full_path(), - '@OUTPUT@', pmdinfogen], - output: out_filename, - depends: [pmdinfogen, tmp_lib]) - endforeach + objs += tmp_lib.extract_all_objects() + sources = custom_target(out_filename, + command: [pmdinfo, tmp_lib.full_path(), + '@OUTPUT@', pmdinfogen], + output: out_filename, + depends: [pmdinfogen, tmp_lib]) if get_option('per_library_versions') lib_version = '@0@.1'.format(version) @@ -88,7 +90,6 @@ foreach class:driver_classes endif # now build the static driver - lib_name = driver_name_fmt.format(name) static_lib = static_library(lib_name, sources, objects: objs, @@ -98,8 +99,6 @@ foreach class:driver_classes install: true) # now build the shared driver - sources = [] - objs += static_lib.extract_all_objects() version_map = '@0@/@1@/@2@_version.map'.format( meson.current_source_dir(), drv_path, lib_name)