Skip to content

Commit

Permalink
Avoid building vrouter and dpdk against 4.2.0 kernel
Browse files Browse the repository at this point in the history
Porting work required for vrouter and libdpdk (third_party/dpdk) to
compile against kernel v4. In the meantime, when detecting kernel
installed version is 4.*, we will make sure that vrouter and libdpdk
build against a supported v3 kernel. Otherwise, Makefile's for
both will default to build against installed kernel version.

Change-Id: I825721b2f3b36cb320a215b31f606dad35e9b77a
Partial-Bug: #1599674
  • Loading branch information
Karl Klashinsky committed Jul 12, 2016
1 parent b942d2a commit ad180ee
Showing 1 changed file with 40 additions and 9 deletions.
49 changes: 40 additions & 9 deletions SConscript
Expand Up @@ -6,6 +6,7 @@ import subprocess
import sys
import os
import copy
import re

AddOption('--kernel-dir', dest = 'kernel-dir', action='store',
help='Linux kernel source directory for vrouter.ko')
Expand Down Expand Up @@ -62,6 +63,38 @@ if sys.platform.startswith('freebsd'):
make_dir = make_dir + '/freebsd'
env['ENV']['MAKEOBJDIR'] = make_dir

# XXX Temporary/transitional support for Ubuntu14.04.4 w/ kernel v4.*
#
# The logic here has to handle two different invocation models:
# default 'scons' build model; and build via packager.py build. The
# first is typical for unit-test builds.
#
# The second comes via:
# - common/debian/Makefile in contrail-packaging, which invokes:
# - debian/contrail/debian/rules.modules in contrail-packages
# This approach always uses --kernel-dir, which works for vrouter, but
# libdpdk still defaults to installed version and thus will fail.
#
default_kernel_ver = shellCommand("uname -r").strip()
kernel_build_dir = None
if re.search('^4\.', default_kernel_ver):
print "Warn: kernel version %s not supported for vrouter and dpdk" % default_kernel_ver
kernel_build_dir = '/lib/modules/3.13.0-85-generic/build'
if os.path.isdir(kernel_build_dir):
default_kernel_ver = "3.13.0-85-generic"
print "info: libdpdk will be built against kernel version %s" % default_kernel_ver
else:
print "*** Error: Cannot find kernel v3.13.0-85, build of vrouter will likely fail"
kernel_build_dir = '/lib/modules/%s/build' % default_kernel_ver

kernel_dir = GetOption('kernel-dir')
if kernel_dir:
kern_version = shellCommand('cat %s/include/config/kernel.release' % kernel_dir)
else:
kern_version = default_kernel_ver
if kernel_build_dir: kernel_dir = kernel_build_dir
kern_version = kern_version.strip()

if sys.platform != 'darwin':

install_root = GetOption('install_root')
Expand Down Expand Up @@ -155,6 +188,12 @@ if sys.platform != 'darwin':
+ ' EXTRA_CFLAGS="' + DPDK_FLAGS + '"' \
+ ' O=' + dpdk_dst_dir \
+ ' '

# If this var is set, then we need to pass it to make cmd for libdpdk
if kernel_build_dir:
print "info: Adjusting libdpdk build to use RTE_KERNELDIR=%s" % kernel_build_dir
make_cmd += "RTE_KERNELDIR=%s " % kernel_build_dir

dpdk_lib = env.Command('dpdk_lib', None,
make_cmd + 'config T=' + DPDK_TARGET
+ ' && ' + make_cmd)
Expand All @@ -173,8 +212,7 @@ if sys.platform != 'darwin':
duplicate = 0)

make_cmd = 'cd ' + make_dir + ' && make'
if GetOption('kernel-dir'):
make_cmd += ' KERNELDIR=' + GetOption('kernel-dir')
if kernel_dir: make_cmd += ' KERNELDIR=' + kernel_dir
make_cmd += ' SANDESH_HEADER_PATH=' + Dir(env['TOP'] + '/vrouter/').abspath
make_cmd += ' SANDESH_SRC_ROOT=' + '../build/kbuild/'
make_cmd += ' SANDESH_EXTRA_HEADER_PATH=' + Dir('#tools/').abspath
Expand Down Expand Up @@ -210,13 +248,6 @@ if sys.platform != 'darwin':
if GetOption('clean') and (not COMMAND_LINE_TARGETS or 'vrouter' in COMMAND_LINE_TARGETS):
os.system(make_cmd + ' clean')

if GetOption('kernel-dir'):
kern_version = shellCommand(
'cat %s/include/config/kernel.release' % GetOption('kernel-dir'))
else:
kern_version = shellCommand('uname -r')

kern_version = kern_version.strip()
libmod_dir = install_root
libmod_dir += '/lib/modules/%s/extra/net/vrouter' % kern_version
env.Alias('build-kmodule', env.Install(libmod_dir, kern))
Expand Down

0 comments on commit ad180ee

Please sign in to comment.