1# SPDX-License-Identifier: BSD-3-Clause 2# Copyright(c) 2017-2019 Intel Corporation 3 4project('DPDK', 'C', 5 # Get version number from file. 6 # Fallback to "more" for Windows compatibility. 7 version: run_command(find_program('cat', 'more'), 8 files('VERSION'), check: true).stdout().strip(), 9 license: 'BSD', 10 default_options: [ 11 'buildtype=release', 12 'default_library=static', 13 'warning_level=2', 14 ], 15 meson_version: '>= 0.49.2' 16) 17 18# check for developer mode 19developer_mode = false 20if get_option('developer_mode').auto() 21 if meson.version().version_compare('>=0.53') # fs module available 22 fs = import('fs') 23 developer_mode = fs.is_dir('.git') 24 endif 25else 26 developer_mode = get_option('developer_mode').enabled() 27endif 28if developer_mode 29 message('## Building in Developer Mode ##') 30endif 31 32# set up some global vars for compiler, platform, configuration, etc. 33cc = meson.get_compiler('c') 34dpdk_source_root = meson.current_source_dir() 35dpdk_build_root = meson.current_build_dir() 36dpdk_conf = configuration_data() 37dpdk_libraries = [] 38dpdk_static_libraries = [] 39dpdk_chkinc_headers = [] 40dpdk_driver_classes = [] 41dpdk_drivers = [] 42dpdk_extra_ldflags = [] 43dpdk_libs_disabled = [] 44dpdk_drvs_disabled = [] 45abi_version_file = files('ABI_VERSION') 46 47if host_machine.cpu_family().startswith('x86') 48 arch_subdir = 'x86' 49elif host_machine.cpu_family().startswith('arm') or host_machine.cpu_family().startswith('aarch') 50 arch_subdir = 'arm' 51elif host_machine.cpu_family().startswith('ppc') 52 arch_subdir = 'ppc' 53endif 54 55# configure the build, and make sure configs here and in config folder are 56# able to be included in any file. We also store a global array of include dirs 57# for passing to pmdinfogen scripts 58global_inc = include_directories('.', 'config', 59 'lib/eal/include', 60 'lib/eal/@0@/include'.format(host_machine.system()), 61 'lib/eal/@0@/include'.format(arch_subdir), 62) 63 64# do configuration and get tool paths 65subdir('buildtools') 66subdir('config') 67 68# build libs and drivers 69subdir('lib') 70subdir('drivers') 71 72# build binaries and installable tools 73subdir('usertools') 74subdir('app') 75 76# build docs 77subdir('doc') 78 79# build any examples explicitly requested - useful for developers - and 80# install any example code into the appropriate install path 81subdir('examples') 82install_subdir('examples', 83 install_dir: get_option('datadir') + '/dpdk', 84 exclude_files: ex_file_excludes) 85 86# build kernel modules if enabled 87if get_option('enable_kmods') 88 subdir('kernel') 89endif 90 91# check header includes if requested 92if get_option('check_includes') 93 subdir('buildtools/chkincs') 94endif 95 96# write the build config 97build_cfg = 'rte_build_config.h' 98configure_file(output: build_cfg, 99 configuration: dpdk_conf, 100 install_dir: join_paths(get_option('includedir'), 101 get_option('include_subdir_arch'))) 102 103# build pkg-config files for dpdk 104subdir('buildtools/pkg-config') 105 106# final output, list all the libs and drivers to be built 107# this does not affect any part of the build, for information only. 108output_message = '\n=================\nLibraries Enabled\n=================\n' 109output_message += '\nlibs:\n\t' 110output_count = 0 111foreach lib:enabled_libs 112 output_message += lib + ', ' 113 output_count += 1 114 if output_count == 8 115 output_message += '\n\t' 116 output_count = 0 117 endif 118endforeach 119message(output_message + '\n') 120 121output_message = '\n===============\nDrivers Enabled\n===============\n' 122foreach class:dpdk_driver_classes 123 class_drivers = get_variable(class + '_drivers') 124 output_message += '\n' + class + ':\n\t' 125 output_count = 0 126 foreach drv:class_drivers 127 output_message += drv + ', ' 128 output_count += 1 129 if output_count == 8 130 output_message += '\n\t' 131 output_count = 0 132 endif 133 endforeach 134endforeach 135message(output_message + '\n') 136 137output_message = '\n=================\nContent Skipped\n=================\n' 138output_message += '\nlibs:\n\t' 139foreach lib:dpdk_libs_disabled 140 reason = get_variable(lib.underscorify() + '_disable_reason') 141 output_message += lib + ':\t' + reason + '\n\t' 142endforeach 143output_message += '\ndrivers:\n\t' 144foreach drv:dpdk_drvs_disabled 145 reason = get_variable(drv.underscorify() + '_disable_reason') 146 output_message += drv + ':\t' + reason + '\n\t' 147endforeach 148message(output_message + '\n') 149