+kernel_build_dir = get_option('kernel_dir')
+kernel_source_dir = get_option('kernel_dir')
+kernel_install_dir = ''
+install = not meson.is_cross_build()
+cross_args = []
+
+if not meson.is_cross_build()
+ # native build
+ kernel_version = run_command('uname', '-r', check: true).stdout().strip()
+ kernel_install_dir = '/lib/modules/' + kernel_version + '/extra/dpdk'
+ if kernel_build_dir == ''
+ # use default path for native builds
+ kernel_build_dir = '/lib/modules/' + kernel_version + '/build'
+ endif
+ if kernel_source_dir == ''
+ # use default path for native builds
+ kernel_source_dir = '/lib/modules/' + kernel_version + '/source'
+ endif
+
+ # test running make in kernel directory, using "make kernelversion"
+ make_returncode = run_command('make', '-sC', kernel_build_dir,
+ 'kernelversion', check: true).returncode()
+ if make_returncode != 0
+ # backward compatibility:
+ # the headers could still be in the 'build' subdir
+ if not kernel_build_dir.endswith('build') and not kernel_build_dir.endswith('build/')
+ kernel_build_dir = join_paths(kernel_build_dir, 'build')
+ make_returncode = run_command('make', '-sC', kernel_build_dir,
+ 'kernelversion', check: true).returncode()
+ endif
+ endif
+
+ if make_returncode != 0
+ error('Cannot compile kernel modules as requested - are kernel headers installed?')
+ endif
+
+ # DO ACTUAL MODULE BUILDING
+ foreach d:subdirs
+ subdir(d)
+ endforeach
+
+ subdir_done()