X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=utilities%2Fovs-dev.py;h=f73899bba86b3433bf5badb04d72ae6562d74922;hb=cfc50ae514f805dcd9c14589f21158185424daf6;hp=c10ca7db5bf5671435fec4af7aa6b52f6ffd8a15;hpb=47e501e1721a8fd4a54a172eb210d4cd04f257a5;p=sliver-openvswitch.git diff --git a/utilities/ovs-dev.py b/utilities/ovs-dev.py index c10ca7db5..f73899bba 100755 --- a/utilities/ovs-dev.py +++ b/utilities/ovs-dev.py @@ -1,5 +1,5 @@ #!/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. @@ -24,9 +24,11 @@ ENV = os.environ HOME = ENV["HOME"] OVS_SRC = HOME + "/ovs" ROOT = HOME + "/root" -PATH = "%(ovs)s/utilities:%(ovs)s/ovsdb:%(ovs)s/vswitchd" % {"ovs": OVS_SRC} +BUILD_GCC = OVS_SRC + "/_build-gcc" +BUILD_CLANG = OVS_SRC + "/_build-clang" +PATH = "%(ovs)s/utilities:%(ovs)s/ovsdb:%(ovs)s/vswitchd" % {"ovs": BUILD_GCC} -ENV["CFLAGS"] = "-g -O0" +ENV["CFLAGS"] = "-g -fno-omit-frame-pointer" ENV["PATH"] = PATH + ":" + ENV["PATH"] options = None @@ -52,13 +54,15 @@ def uname(): def conf(): tag() - if options.clang: - ENV["CC"] = "clang" - configure = ["./configure", "--prefix=" + ROOT, "--localstatedir=" + ROOT, + try: + os.remove(OVS_SRC + "/Makefile") + except OSError: + pass + + 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"] if options.werror: configure.append("--enable-Werror") @@ -69,22 +73,64 @@ def conf(): if options.mandir: configure.append("--mandir=" + options.mandir) + if options.optimize is None: + options.optimize = 0 + ENV["CFLAGS"] = "%s -O%d" % (ENV["CFLAGS"], options.optimize) + _sh("./boot.sh") - _sh(*configure) + + try: + os.mkdir(BUILD_GCC) + except OSError: + pass # Directory exists. + + os.chdir(BUILD_GCC) + _sh(*(configure + ["--with-linux=/lib/modules/%s/build" % uname()])) + + try: + _sh("clang --version", check=True) + clang = True + except subprocess.CalledProcessError: + clang = False + + try: + _sh("sparse --version", check=True) + sparse = True + except subprocess.CalledProcessError: + sparse = False + + if clang: + try: + os.mkdir(BUILD_CLANG) + except OSError: + pass # Directory exists. + + ENV["CC"] = "clang" + os.chdir(BUILD_CLANG) + _sh(*configure) + + if sparse: + c1 = "C=1" + else: + c1 = "" + + os.chdir(OVS_SRC) + + make_str = "\t$(MAKE) -C %s $@\n" + + mf = open(OVS_SRC + "/Makefile", "w") + mf.write("all:\n%:\n") + if clang: + mf.write(make_str % BUILD_CLANG) + mf.write("\t$(MAKE) -C %s %s $@\n" % (BUILD_GCC, c1)) + mf.write("\ncheck:\n") + mf.write(make_str % BUILD_GCC) + mf.close() commands.append(conf) def make(args=""): make = "make -s -j 8 " + args - try: - _sh("cgcc", "--version", capture=True) - # XXX: For some reason the clang build doesn't place nicely with - # sparse. At some point this needs to be figured out and this check - # removed. - if not options.clang: - make += " C=1" - except OSError: - pass _sh(make) commands.append(make) @@ -169,11 +215,13 @@ def run(): _sh("ovs-vsctl --no-wait set Open_vSwitch %s ovs_version=%s" % (root_uuid, version)) - cmd = [OVS_SRC + "/vswitchd/ovs-vswitchd"] + cmd = [BUILD_GCC + "/vswitchd/ovs-vswitchd"] if options.gdb: cmd = ["gdb", "--args"] + cmd elif options.valgrind: - cmd = ["valgrind", "--track-origins=yes"] + cmd + cmd = ["valgrind", "--track-origins=yes", "--leak-check=full", + "--suppressions=%s/tests/glibc.supp" % OVS_SRC, + "--suppressions=%s/tests/openssl.supp" % OVS_SRC] + cmd else: cmd = ["sudo"] + cmd opts = opts + ["-vconsole:off", "--detach"] @@ -224,10 +272,10 @@ Basic Configuration: # First install the basic requirements needed to build Open vSwitch. sudo apt-get install git build-essential libtool autoconf pkg-config \\ - libssl-dev pkg-config gdb linux-headers-`uname -r` + 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` @@ -275,6 +323,10 @@ def main(): action="store_true", help="configure with cached timing") group.add_option("--mandir", dest="mandir", metavar="MANDIR", help="configure the man documentation install directory") + + 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, "run") @@ -282,8 +334,6 @@ def main(): help="run ovs-vswitchd under gdb") group.add_option("--valgrind", dest="valgrind", action="store_true", help="run ovs-vswitchd under valgrind") - group.add_option("--clang", dest="clang", action="store_true", - help="build ovs-vswitchd with clang") parser.add_option_group(group) options, args = parser.parse_args()