X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=kernel%2Flinux%2Fmeson.build;h=0637452e955ceb6556508712d54b59a911731ecb;hb=44c730b0e379;hp=1796cc68610b2ccb6b9b1151eeb4a9798763d41a;hpb=317832f97c165cd4f327567935dfbd6af92b4159;p=dpdk.git diff --git a/kernel/linux/meson.build b/kernel/linux/meson.build index 1796cc6861..0637452e95 100644 --- a/kernel/linux/meson.build +++ b/kernel/linux/meson.build @@ -1,30 +1,96 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2018 Intel Corporation -subdirs = ['igb_uio', 'kni'] +subdirs = ['kni'] -# if we are cross-compiling we need kernel_dir specified -if get_option('kernel_dir') == '' and meson.is_cross_build() - warning('Need "kernel_dir" option for kmod compilation when cross-compiling') - subdir_done() +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').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').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').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() endif -kernel_dir = get_option('kernel_dir') -if kernel_dir == '' - # use default path for native builds - kernel_version = run_command('uname', '-r').stdout().strip() - kernel_dir = '/lib/modules/' + kernel_version +# cross build +# if we are cross-compiling we need kernel_build_dir specified +if kernel_build_dir == '' + error('Need "kernel_dir" option for kmod compilation when cross-compiling') +endif +cross_compiler = find_program('c').path() +if cross_compiler.endswith('gcc') + cross_prefix = run_command([py3, '-c', 'print("' + cross_compiler + '"[:-3])']).stdout().strip() +elif cross_compiler.endswith('clang') + cross_prefix = '' + found_target = false + # search for '-target' and use the arg that follows + # (i.e. the value of '-target') as cross_prefix + foreach cross_c_arg : meson.get_cross_property('c_args') + if found_target and cross_prefix == '' + cross_prefix = cross_c_arg + endif + if cross_c_arg == '-target' + found_target = true + endif + endforeach + if cross_prefix == '' + error('Did not find -target and its value in c_args in input cross-file.') + endif + linker = 'lld' + foreach cross_c_link_arg : meson.get_cross_property('c_link_args') + if cross_c_link_arg.startswith('-fuse-ld') + linker = cross_c_link_arg.split('=')[1] + endif + endforeach + cross_args += ['CC=@0@'.format(cross_compiler), 'LD=ld.@0@'.format(linker)] +else + error('Unsupported cross compiler: @0@'.format(cross_compiler)) endif -# test running make in kernel directory, using "make kernelversion" -make_returncode = run_command('make', '-sC', kernel_dir + '/build', - 'kernelversion').returncode() -if make_returncode != 0 - warning('Cannot compile kernel modules as requested - are kernel headers installed?') - subdir_done() +cross_arch = host_machine.cpu_family() +if host_machine.cpu_family() == 'aarch64' + cross_arch = 'arm64' endif +cross_args += ['ARCH=@0@'.format(cross_arch), + 'CROSS_COMPILE=@0@'.format(cross_prefix)] + # DO ACTUAL MODULE BUILDING foreach d:subdirs - subdir(d) + subdir(d) endforeach