#!/usr/bin/python
-# Copyright (c) 2013 Nicira, Inc.
+# Copyright (c) 2013, 2014 Nicira, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
BUILD_CLANG = OVS_SRC + "/_build-clang"
PATH = "%(ovs)s/utilities:%(ovs)s/ovsdb:%(ovs)s/vswitchd" % {"ovs": BUILD_GCC}
-ENV["CFLAGS"] = "-g -O0"
ENV["PATH"] = PATH + ":" + ENV["PATH"]
options = None
configure = ["../configure", "--prefix=" + ROOT, "--localstatedir=" + ROOT,
"--with-logdir=%s/log" % ROOT, "--with-rundir=%s/run" % ROOT,
- "--with-linux=/lib/modules/%s/build" % uname(),
- "--with-dbdir=" + ROOT]
+ "--enable-silent-rules", "--with-dbdir=" + ROOT, "--silent"]
+
+ cflags = "-g -fno-omit-frame-pointer"
if options.werror:
configure.append("--enable-Werror")
if options.mandir:
configure.append("--mandir=" + options.mandir)
+ if options.with_dpdk:
+ configure.append("--with-dpdk=" + options.with_dpdk)
+ cflags += " -Wno-cast-align -Wno-bad-function-cast" # DPDK warnings.
+
+ if options.optimize is None:
+ options.optimize = 0
+
+ cflags += " -O%d" % options.optimize
+
+ ENV["CFLAGS"] = cflags
+
_sh("./boot.sh")
try:
pass # Directory exists.
os.chdir(BUILD_GCC)
- _sh(*configure)
+ _sh(*(configure + ["--with-linux=/lib/modules/%s/build" % uname()]))
try:
_sh("clang --version", check=True)
if clang:
mf.write(make_str % BUILD_CLANG)
mf.write("\t$(MAKE) -C %s %s $@\n" % (BUILD_GCC, c1))
+ mf.write("\ncheck-valgrind:\n")
mf.write("\ncheck:\n")
mf.write(make_str % BUILD_GCC)
mf.close()
def check():
+ flags = ""
+ if options.jobs:
+ flags += "-j%d " % options.jobs
+ else:
+ flags += "-j8 "
+ if options.tests:
+ for arg in str.split(options.tests):
+ if arg[0].isdigit():
+ flags += "%s " % arg
+ else:
+ flags += "-k %s " % arg
+ ENV["TESTSUITEFLAGS"] = flags
make("check")
commands.append(check)
% (root_uuid, version))
cmd = [BUILD_GCC + "/vswitchd/ovs-vswitchd"]
+
+ if options.dpdk:
+ cmd.append("--dpdk")
+ cmd.extend(options.dpdk)
+ cmd.append("--")
+
if options.gdb:
cmd = ["gdb", "--args"] + cmd
elif options.valgrind:
libssl-dev gdb linux-headers-`uname -r`
# Next clone the Open vSwitch source.
- git clone git://git.openvswitch.org/openvswitch %(ovs)s
+ git clone https://github.com/openvswitch/ovs.git %(ovs)s
# Setup environment variables.
`%(v)s env`
sys.exit(0)
commands.append(doc)
+def parse_subargs(option, opt_str, value, parser):
+ subopts = []
+
+ while parser.rargs:
+ dpdkarg = parser.rargs.pop(0)
+ if dpdkarg == "--":
+ break
+ subopts.append(dpdkarg)
+
+ setattr(parser.values, option.dest, subopts)
def main():
global options
action="store_true", help="configure with cached timing")
group.add_option("--mandir", dest="mandir", metavar="MANDIR",
help="configure the man documentation install directory")
+ group.add_option("--with-dpdk", dest="with_dpdk", metavar="DPDK_BUILD",
+ help="built with dpdk libraries located at DPDK_BUILD");
+
+ for i in range(4):
+ group.add_option("--O%d" % i, dest="optimize", action="store_const",
+ const=i, help="compile with -O%d" % i)
+ parser.add_option_group(group)
+
+ group = optparse.OptionGroup(parser, "check")
+ group.add_option("-j", "--jobs", dest="jobs", metavar="N", type="int",
+ help="Run N tests in parallel")
+ group.add_option("--tests", dest="tests", metavar="FILTER",
+ help="""run specific tests and/or a test category
+ eg, --tests=\"1-10 megaflow\"""")
parser.add_option_group(group)
group = optparse.OptionGroup(parser, "run")
help="run ovs-vswitchd under gdb")
group.add_option("--valgrind", dest="valgrind", action="store_true",
help="run ovs-vswitchd under valgrind")
+ group.add_option("--dpdk", dest="dpdk", action="callback",
+ callback=parse_subargs,
+ help="run ovs-vswitchd with dpdk subopts (ended by --)")
parser.add_option_group(group)
options, args = parser.parse_args()