Yocto 2.3

Move OpenBMC to Yocto 2.3(pyro).

Tested: Built and verified Witherspoon and Palmetto images
Change-Id: I50744030e771f4850afc2a93a10d3507e76d36bc
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Resolves: openbmc/openbmc#2461
diff --git a/import-layers/meta-openembedded/meta-oe/classes/breakpad.bbclass b/import-layers/meta-openembedded/meta-oe/classes/breakpad.bbclass
index b3abf27..36f11ff 100644
--- a/import-layers/meta-openembedded/meta-oe/classes/breakpad.bbclass
+++ b/import-layers/meta-openembedded/meta-oe/classes/breakpad.bbclass
@@ -10,11 +10,11 @@
 BREAKPAD_BIN ?= ""
 
 python () {
-    breakpad_bin = d.getVar("BREAKPAD_BIN", True)
+    breakpad_bin = d.getVar("BREAKPAD_BIN")
 
     if not breakpad_bin:
-       PN = d.getVar("PN", True)
-       FILE = os.path.basename(d.getVar("FILE", True))
+       PN = d.getVar("PN")
+       FILE = os.path.basename(d.getVar("FILE"))
        bb.error("To build %s, see breakpad.bbclass for instructions on \
                  setting up your Breakpad configuration" % PN)
        raise ValueError('BREAKPAD_BIN not defined in %s' % PN)
diff --git a/import-layers/meta-openembedded/meta-oe/classes/gitpkgv.bbclass b/import-layers/meta-openembedded/meta-oe/classes/gitpkgv.bbclass
index 8cd4bfd..2d9680a 100644
--- a/import-layers/meta-openembedded/meta-oe/classes/gitpkgv.bbclass
+++ b/import-layers/meta-openembedded/meta-oe/classes/gitpkgv.bbclass
@@ -52,14 +52,14 @@
     import bb
     from pipes import quote
 
-    src_uri = d.getVar('SRC_URI', 1).split()
+    src_uri = d.getVar('SRC_URI').split()
     fetcher = bb.fetch2.Fetch(src_uri, d)
     ud = fetcher.ud
 
     #
     # If SRCREV_FORMAT is set respect it for tags
     #
-    format = d.getVar('SRCREV_FORMAT', True)
+    format = d.getVar('SRCREV_FORMAT')
     if not format:
         names = []
         for url in ud.values():
@@ -110,9 +110,9 @@
                             d, quiet=True).strip()
                         ver = gitpkgv_drop_tag_prefix(output)
                     except Exception:
-                        ver = "0.0-%s-g%s" % (commits, rev[:7])
+                        ver = "0.0-%s-g%s" % (commits, vars['rev'][:7])
                 else:
-                    ver = "%s+%s" % (commits, rev[:7])
+                    ver = "%s+%s" % (commits, vars['rev'][:7])
 
                 format = format.replace(name, ver)
 
diff --git a/import-layers/meta-openembedded/meta-oe/classes/gitver.bbclass b/import-layers/meta-openembedded/meta-oe/classes/gitver.bbclass
index 9154143..380374a 100644
--- a/import-layers/meta-openembedded/meta-oe/classes/gitver.bbclass
+++ b/import-layers/meta-openembedded/meta-oe/classes/gitver.bbclass
@@ -23,7 +23,7 @@
 def get_git_pv(d, tagadjust=None):
     import os
 
-    srcdir = d.getVar("EXTERNALSRC", True) or d.getVar("S", True)
+    srcdir = d.getVar("EXTERNALSRC") or d.getVar("S")
     gitdir = os.path.abspath(os.path.join(srcdir, ".git"))
     try:
         ver = gitrev_run("git describe --tags", gitdir)
@@ -45,11 +45,11 @@
 def get_git_hash(d):
     import os
 
-    srcdir = d.getVar("EXTERNALSRC", True) or d.getVar("S", True)
+    srcdir = d.getVar("EXTERNALSRC") or d.getVar("S")
     gitdir = os.path.abspath(os.path.join(srcdir, ".git"))
     try:
-        return gitrev_run("git rev-parse HEAD", gitdir)
-
+        rev = gitrev_run("git rev-list HEAD -1")
+        return rev[:7]
     except Exception as exc:
         bb.fatal(str(exc))
 
@@ -79,6 +79,6 @@
         mark_dependency(d, tagdir)
 
 python () {
-    srcdir = d.getVar("EXTERNALSRC", True) or d.getVar("S", True)
+    srcdir = d.getVar("EXTERNALSRC") or d.getVar("S")
     mark_recipe_dependencies(srcdir, d)
 }
diff --git a/import-layers/meta-openembedded/meta-oe/classes/machine_kernel_pr.bbclass b/import-layers/meta-openembedded/meta-oe/classes/machine_kernel_pr.bbclass
index 463b64d..e48bd01 100644
--- a/import-layers/meta-openembedded/meta-oe/classes/machine_kernel_pr.bbclass
+++ b/import-layers/meta-openembedded/meta-oe/classes/machine_kernel_pr.bbclass
@@ -1,6 +1,6 @@
 python __anonymous () {
 
-    machine_kernel_pr = d.getVar('MACHINE_KERNEL_PR', True)
+    machine_kernel_pr = d.getVar('MACHINE_KERNEL_PR')
 
     if machine_kernel_pr:
         d.setVar('PR', machine_kernel_pr)
diff --git a/import-layers/meta-openembedded/meta-oe/classes/meson.bbclass b/import-layers/meta-openembedded/meta-oe/classes/meson.bbclass
new file mode 100644
index 0000000..c33174a
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-oe/classes/meson.bbclass
@@ -0,0 +1,100 @@
+inherit python3native
+
+DEPENDS_append = " meson-native ninja-native"
+
+# As Meson enforces out-of-tree builds we can just use cleandirs
+B = "${WORKDIR}/build"
+do_configure[cleandirs] = "${B}"
+
+# Where the meson.build build configuration is
+MESON_SOURCEPATH = "${S}"
+
+# These variables in the environment override the *native* tools, not the cross.
+export CC = "${BUILD_CC}"
+export CXX = "${BUILD_CXX}"
+export LD = "${BUILD_LD}"
+export AR = "${BUILD_AR}"
+
+def noprefix(var, d):
+    return d.getVar(var, True).replace(d.getVar('prefix', True) + '/', '', 1)
+
+MESONOPTS = " --prefix ${prefix} \
+              --bindir ${@noprefix('bindir', d)} \
+              --sbindir ${@noprefix('sbindir', d)} \
+              --datadir ${@noprefix('datadir', d)} \
+              --libdir ${@noprefix('libdir', d)} \
+              --libexecdir ${@noprefix('libexecdir', d)} \
+              --includedir ${@noprefix('includedir', d)} \
+              --mandir ${@noprefix('mandir', d)} \
+              --infodir ${@noprefix('infodir', d)} \
+              --localedir ${@noprefix('localedir', d)} \
+              --sysconfdir ${sysconfdir} \
+              --localstatedir ${localstatedir} \
+              --sharedstatedir ${sharedstatedir}"
+
+MESON_C_ARGS = "${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
+
+MESON_HOST_ENDIAN = "${@bb.utils.contains('SITEINFO_ENDIANNESS', 'be', 'big', 'little', d)}"
+MESON_TARGET_ENDIAN = "${@bb.utils.contains('TUNE_FEATURES', 'bigendian', 'big', 'little', d)}"
+
+EXTRA_OEMESON += "${PACKAGECONFIG_CONFARGS}"
+
+MESON_CROSS_FILE = ""
+MESON_CROSS_FILE_class-target = "--cross-file ${WORKDIR}/meson.cross"
+
+def meson_array(var, d):
+    return "', '".join(d.getVar(var, True).split()).join(("'", "'"))
+
+addtask write_config before do_configure
+do_write_config[vardeps] += "MESON_C_ARGS TOOLCHAIN_OPTIONS"
+do_write_config() {
+    # This needs to be Py to split the args into single-element lists
+    cat >${WORKDIR}/meson.cross <<EOF
+[binaries]
+c = '${HOST_PREFIX}gcc'
+cpp = '${HOST_PREFIX}g++'
+ar = '${HOST_PREFIX}ar'
+ld = '${HOST_PREFIX}ld'
+strip = '${HOST_PREFIX}strip'
+readelf = '${HOST_PREFIX}readelf'
+pkgconfig = 'pkg-config'
+
+[properties]
+c_args = [${@meson_array('MESON_C_ARGS', d)}]
+cpp_args = [${@meson_array('TOOLCHAIN_OPTIONS', d)}]
+c_link_args = [${@meson_array('TOOLCHAIN_OPTIONS', d)}]
+cpp_link_args = [${@meson_array('TOOLCHAIN_OPTIONS', d)}]
+
+[host_machine]
+system = '${HOST_OS}'
+cpu_family = '${HOST_ARCH}'
+cpu = '${HOST_ARCH}'
+endian = '${MESON_HOST_ENDIAN}'
+
+[target_machine]
+system = '${TARGET_OS}'
+cpu_family = '${TARGET_ARCH}'
+cpu = '${TARGET_ARCH}'
+endian = '${MESON_TARGET_ENDIAN}'
+EOF
+}
+
+CONFIGURE_FILES = "meson.build"
+
+meson_do_configure() {
+    if ! meson ${MESONOPTS} "${MESON_SOURCEPATH}" "${B}" ${MESON_CROSS_FILE} ${EXTRA_OEMESON}; then
+        cat ${B}/meson-logs/meson-log.txt
+        bbfatal_log meson failed
+    fi
+}
+
+do_compile[progress] = "outof:^\[(\d+)/(\d+)\]\s+"
+meson_do_compile() {
+    ninja ${PARALLEL_MAKE}
+}
+
+meson_do_install() {
+    DESTDIR='${D}' ninja ${PARALLEL_MAKEINST} install
+}
+
+EXPORT_FUNCTIONS do_configure do_compile do_install
diff --git a/import-layers/meta-openembedded/meta-oe/classes/socorro-syms.bbclass b/import-layers/meta-openembedded/meta-oe/classes/socorro-syms.bbclass
index 3f6ae63..cc435ab 100644
--- a/import-layers/meta-openembedded/meta-oe/classes/socorro-syms.bbclass
+++ b/import-layers/meta-openembedded/meta-oe/classes/socorro-syms.bbclass
@@ -21,10 +21,10 @@
 
 python symbol_file_preprocess() {
 
-    package_dir = d.getVar("PKGD", True)
-    breakpad_bin = d.getVar("BREAKPAD_BIN", True)
+    package_dir = d.getVar("PKGD")
+    breakpad_bin = d.getVar("BREAKPAD_BIN")
     if not breakpad_bin:
-        package_name = d.getVar("PN", True)
+        package_name = d.getVar("PN")
         bb.error("Package %s depends on Breakpad via socorro-syms. See "
             "breakpad.bbclass for instructions on setting up the Breakpad "
             "configuration." % package_name)
@@ -106,7 +106,7 @@
         # child of the build directory TOPDIR.
         git_root_dir = run_command(
             "git rev-parse --show-toplevel", os.path.dirname(source_file_path))
-        if not git_root_dir.startswith(d.getVar("TOPDIR", True)):
+        if not git_root_dir.startswith(d.getVar("TOPDIR")):
             return None
 
         return git_repository_path(source_file_path)