1d30ea906Sjfb8856606# SPDX-License-Identifier: BSD-3-Clause 24418919fSjohnjiang# Copyright(c) 2017-2019 Intel Corporation 3d30ea906Sjfb8856606 4d30ea906Sjfb8856606project('DPDK', 'C', 54418919fSjohnjiang # Get version number from file. 64418919fSjohnjiang # Fallback to "more" for Windows compatibility. 74418919fSjohnjiang version: run_command(find_program('cat', 'more'), 84418919fSjohnjiang files('VERSION')).stdout().strip(), 9d30ea906Sjfb8856606 license: 'BSD', 10d30ea906Sjfb8856606 default_options: ['buildtype=release', 'default_library=static'], 114418919fSjohnjiang meson_version: '>= 0.47.1' 12d30ea906Sjfb8856606) 13d30ea906Sjfb8856606 14d30ea906Sjfb8856606# set up some global vars for compiler, platform, configuration, etc. 15d30ea906Sjfb8856606cc = meson.get_compiler('c') 16d30ea906Sjfb8856606dpdk_conf = configuration_data() 17d30ea906Sjfb8856606dpdk_libraries = [] 18d30ea906Sjfb8856606dpdk_static_libraries = [] 194418919fSjohnjiangdpdk_driver_classes = [] 20d30ea906Sjfb8856606dpdk_drivers = [] 21d30ea906Sjfb8856606dpdk_extra_ldflags = [] 224418919fSjohnjiangdpdk_libs_disabled = [] 234418919fSjohnjiangdpdk_drvs_disabled = [] 244418919fSjohnjiangabi_version_file = files('ABI_VERSION') 25d30ea906Sjfb8856606 26*2d9fd380Sjfb8856606if host_machine.cpu_family().startswith('x86') 27*2d9fd380Sjfb8856606 arch_subdir = 'x86' 28*2d9fd380Sjfb8856606elif host_machine.cpu_family().startswith('arm') or host_machine.cpu_family().startswith('aarch') 29*2d9fd380Sjfb8856606 arch_subdir = 'arm' 30*2d9fd380Sjfb8856606elif host_machine.cpu_family().startswith('ppc') 31*2d9fd380Sjfb8856606 arch_subdir = 'ppc' 32*2d9fd380Sjfb8856606endif 33*2d9fd380Sjfb8856606 34d30ea906Sjfb8856606# configure the build, and make sure configs here and in config folder are 35d30ea906Sjfb8856606# able to be included in any file. We also store a global array of include dirs 36d30ea906Sjfb8856606# for passing to pmdinfogen scripts 374418919fSjohnjiangglobal_inc = include_directories('.', 'config', 38*2d9fd380Sjfb8856606 'lib/librte_eal/include', 39*2d9fd380Sjfb8856606 'lib/librte_eal/@0@/include'.format(host_machine.system()), 40*2d9fd380Sjfb8856606 'lib/librte_eal/@0@/include'.format(arch_subdir), 414418919fSjohnjiang) 42*2d9fd380Sjfb8856606 43*2d9fd380Sjfb8856606# do configuration and get tool paths 44*2d9fd380Sjfb8856606subdir('buildtools') 45d30ea906Sjfb8856606subdir('config') 46d30ea906Sjfb8856606 47d30ea906Sjfb8856606# build libs and drivers 48*2d9fd380Sjfb8856606subdir('buildtools/pmdinfogen') 494418919fSjohnjiangsubdir('lib') 50d30ea906Sjfb8856606subdir('drivers') 51d30ea906Sjfb8856606 52d30ea906Sjfb8856606# build binaries and installable tools 53d30ea906Sjfb8856606subdir('usertools') 54d30ea906Sjfb8856606subdir('app') 55d30ea906Sjfb8856606 56d30ea906Sjfb8856606# build docs 57d30ea906Sjfb8856606subdir('doc') 58d30ea906Sjfb8856606 594418919fSjohnjiang# build any examples explicitly requested - useful for developers - and 604418919fSjohnjiang# install any example code into the appropriate install path 61d30ea906Sjfb8856606subdir('examples') 620c6bd470Sfengbojianginstall_subdir('examples', 630c6bd470Sfengbojiang install_dir: get_option('datadir') + '/dpdk', 640c6bd470Sfengbojiang exclude_files: 'meson.build') 65d30ea906Sjfb8856606 66d30ea906Sjfb8856606# build kernel modules if enabled 67d30ea906Sjfb8856606if get_option('enable_kmods') 68d30ea906Sjfb8856606 subdir('kernel') 69d30ea906Sjfb8856606endif 70d30ea906Sjfb8856606 71d30ea906Sjfb8856606# write the build config 72d30ea906Sjfb8856606build_cfg = 'rte_build_config.h' 73d30ea906Sjfb8856606configure_file(output: build_cfg, 74d30ea906Sjfb8856606 configuration: dpdk_conf, 75d30ea906Sjfb8856606 install_dir: join_paths(get_option('includedir'), 76d30ea906Sjfb8856606 get_option('include_subdir_arch'))) 77d30ea906Sjfb8856606 780c6bd470Sfengbojiang# build pkg-config files for dpdk 790c6bd470Sfengbojiangsubdir('buildtools/pkg-config') 80d30ea906Sjfb8856606 81d30ea906Sjfb8856606# final output, list all the libs and drivers to be built 82d30ea906Sjfb8856606# this does not affect any part of the build, for information only. 83d30ea906Sjfb8856606output_message = '\n=================\nLibraries Enabled\n=================\n' 84d30ea906Sjfb8856606output_message += '\nlibs:\n\t' 85d30ea906Sjfb8856606output_count = 0 86d30ea906Sjfb8856606foreach lib:enabled_libs 87d30ea906Sjfb8856606 output_message += lib + ', ' 88d30ea906Sjfb8856606 output_count += 1 89d30ea906Sjfb8856606 if output_count == 8 90d30ea906Sjfb8856606 output_message += '\n\t' 91d30ea906Sjfb8856606 output_count = 0 92d30ea906Sjfb8856606 endif 93d30ea906Sjfb8856606endforeach 94d30ea906Sjfb8856606message(output_message + '\n') 95d30ea906Sjfb8856606 96d30ea906Sjfb8856606output_message = '\n===============\nDrivers Enabled\n===============\n' 974418919fSjohnjiangforeach class:dpdk_driver_classes 98d30ea906Sjfb8856606 class_drivers = get_variable(class + '_drivers') 99d30ea906Sjfb8856606 output_message += '\n' + class + ':\n\t' 100d30ea906Sjfb8856606 output_count = 0 101d30ea906Sjfb8856606 foreach drv:class_drivers 102d30ea906Sjfb8856606 output_message += drv + ', ' 103d30ea906Sjfb8856606 output_count += 1 104d30ea906Sjfb8856606 if output_count == 8 105d30ea906Sjfb8856606 output_message += '\n\t' 106d30ea906Sjfb8856606 output_count = 0 107d30ea906Sjfb8856606 endif 108d30ea906Sjfb8856606 endforeach 109d30ea906Sjfb8856606endforeach 110d30ea906Sjfb8856606message(output_message + '\n') 1114418919fSjohnjiang 1124418919fSjohnjiangoutput_message = '\n=================\nContent Skipped\n=================\n' 1134418919fSjohnjiangoutput_message += '\nlibs:\n\t' 1144418919fSjohnjiangforeach lib:dpdk_libs_disabled 1154418919fSjohnjiang reason = get_variable(lib.underscorify() + '_disable_reason') 1164418919fSjohnjiang output_message += lib + ':\t' + reason + '\n\t' 1174418919fSjohnjiangendforeach 1184418919fSjohnjiangoutput_message += '\ndrivers:\n\t' 1194418919fSjohnjiangforeach drv:dpdk_drvs_disabled 1204418919fSjohnjiang reason = get_variable(drv.underscorify() + '_disable_reason') 1214418919fSjohnjiang output_message += drv + ':\t' + reason + '\n\t' 1224418919fSjohnjiangendforeach 1234418919fSjohnjiangmessage(output_message + '\n') 124