> From: dev [mailto:dev-boun...@dpdk.org] On Behalf Of Bruce Richardson > Sent: Friday, September 1, 2017 11:04 AM > To: dev@dpdk.org > Cc: Richardson, Bruce <bruce.richard...@intel.com> > Subject: [dpdk-dev] [PATCH 04/17] build: add DPDK libraries to build > > Add non-EAL libraries to DPDK build. The compat lib is a special case, > along with the previously-added EAL, but all other libs can be build using > the same set of commands, where the individual meson.build files only need > to specify their dependencies, source files, header files and ABI versions. > > Signed-off-by: Bruce Richardson <bruce.richard...@intel.com>
<snip> In librte_acl/meson.build: > +version = 2 > +sources = files('acl_bld.c', 'acl_gen.c', 'acl_run_scalar.c', > + 'rte_acl.c', 'tb_mem.c') > +headers = files('rte_acl.h', 'rte_acl_osdep.h') > + > +if arch_subdir == 'x86' > + sources += files('acl_run_sse.c') > + > + # compile AVX2 version if either: > + # a. we have AVX supported in minimum instruction set baseline > + # b. it's not minimum instruction set, but supported by compiler > + # > + # in former case, just add avx2 C file to files list > + # in latter case, compile c file to static lib, using correct compiler > + # flags, and then have the .o file from static lib linked into main lib. > + if dpdk_conf.has('RTE_MACHINE_CPUFLAG_AVX2') > + sources += files('acl_run_avx2.c') > + cflags += '-DCC_AVX2_SUPPORT' > + elif cc.has_argument('-mavx2') > + avx2_tmplib = static_library('avx2_tmp', > + 'acl_run_avx2.c', > + dependencies: rte_eal, > + c_args: '-mavx2') > + objs += avx2_tmplib.extract_objects('acl_run_avx2.c') > + cflags += '-DCC_AVX2_SUPPORT' > + endif > + > +endif In future this could be split out to some sort of AVX helper, to avoid it becoming copy/paste prone to detect AVX features from libraries. <huge snip of almost all libraries meson.build files> > --- a/lib/meson.build > +++ b/lib/meson.build > @@ -29,4 +29,71 @@ > # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > +# special case for eal, not a simple lib, and compat, just a header > subdir('librte_eal') > +subdir('librte_compat') > + > +# process all libraries equally, as far as possible > +# "core" libs first, then others alphebetically as far as possible > +# NOTE: for speed of meson runs, the dependencies in the subdirectories > +# sometimes skip deps that would be implied by others, e.g. if mempool is > +# given as a dep, no need to mention ring. This is especially true for the > +# core libs which are widely reused, so their deps are kept to a minimum. > +libraries = ['ring', 'mempool', 'mbuf', 'net', 'ether', # core > + 'metrics', # bitrate/latency stats depends on this > + 'hash', # efd depends on this > + 'kvargs', # cryptodev depends on this > + 'acl', 'bitratestats', 'cfgfile', 'cmdline', 'cryptodev', > + 'distributor', 'efd', 'eventdev', 'gro', 'ip_frag', 'jobstats', > + 'kni', 'latencystats', 'lpm', 'meter', 'power', 'pdump', > + 'reorder', 'sched', 'timer', 'vhost', > + # add pkt framework libs which use other libs from above > + 'port', 'table', 'pipeline'] > + > +foreach l:libraries > + build = true > + name = l > + version = 1 > + sources = [] > + headers = [] > + cflags = [] > + objs = [] # other object files to link against, used e.g. for > instruction- > + # optimized versions of code Nitpick: comment above could be moved to be before the objs[] line, consistent like below. I'll send a patch once this stuff is in next-build :D > + # use "deps" for internal DPDK dependencies, and "ext_deps" for > + # external package/library requirements > + deps = ['eal'] > + ext_deps = [] > + > + dir_name = 'librte_' + l > + subdir(dir_name) > + > + if build > + dpdk_conf.set('RTE_LIBRTE_' + name.to_upper(), 1) > + install_headers(headers) > + > + dep_objs = ext_deps > + foreach d:deps > + dep_objs += [get_variable('dep_rte_' + d)] > + endforeach > + > + version_map = '@0@/@1@/rte_@2@_version.map'.format( > + meson.current_source_dir(), dir_name, name) > + libname = 'rte_' + name > + lib = library(libname, > + sources, > + objects: objs, > + c_args: cflags, > + dependencies: dep_objs, > + include_directories: > include_directories(dir_name), > + link_args: '-Wl,--version-script=' + > version_map, > + link_depends: version_map, > + version: '@0@.1'.format(version), > + install: true) > + dep = declare_dependency(link_with: lib, > + include_directories: > include_directories(dir_name), > + dependencies: dep_objs) > + set_variable('dep_' + libname, dep) > + > + dpdk_libraries = [lib] + dpdk_libraries > + endif > +endforeach > -- > 2.13.5 Reviewed-by: Harry van Haaren <harry.van.haa...@intel.com>