> 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>

Reply via email to