Change staging layout to match the target system layout. WARNING - staging ABI change.
authorRichard Purdie <rpurdie@rpsys.net>
Tue, 4 Mar 2008 12:12:40 +0000 (12:12 +0000)
committerRichard Purdie <rpurdie@rpsys.net>
Tue, 4 Mar 2008 12:12:40 +0000 (12:12 +0000)
This update completes the conversion of OE.dev to use sysroot and have a staging layout that matches the target system. This means we no longer need to mangle pkgconfig files and can use its sysroot option instead. Users of old toolchains (gcc prior to 3.4 and external ones) may need to add cross-linkage and staging-linkage to their toolchain dependencies. Since this update changes staging layout and the contents of the .pc files it updates the staging ABI and people will need to rebuild.

12 files changed:
classes/insane.bbclass
classes/native.bbclass
classes/pkgconfig.bbclass
classes/sdk.bbclass
conf/bitbake.conf
conf/sanity.conf
packages/gcc/gcc3-build-cross.inc
packages/gcc/gcc3-build-sdk.inc
packages/gcc/gcc4-build-sdk.inc
packages/linux-libc-headers/linux-libc-headers.inc
packages/openssl/openssl.inc
packages/sharprom-toolchain/sharprom-toolchain-native_1.0.bb

index 97cf036..5ff49cd 100644 (file)
@@ -333,12 +333,15 @@ def package_qa_check_staged(path,d):
     import os, bb
 
     sane = True
-    workdir = os.path.join(bb.data.getVar('TMPDIR', d, True), "work")
+    tmpdir = bb.data.getVar('TMPDIR', d, True)
+    workdir = os.path.join(tmpdir, "work")
 
-    if bb.data.inherits_class("native", d):
+    if bb.data.inherits_class("native", d) or bb.data.inherits_class("cross", d):
         installed = "installed=no"
+        pkgconfigcheck = workdir
     else:
         installed = "installed=yes"
+        pkgconfigcheck = tmpdir
 
     # find all .la and .pc files
     # read the content
@@ -356,8 +359,8 @@ def package_qa_check_staged(path,d):
                     sane = package_qa_handle_error(8, error_msg, "staging", path, d)
             elif file[-2:] == "pc":
                 file_content = open(path).read()
-                if workdir in file_content:
-                    error_msg = "%s failed sanity test (workdir) in path %s" % (file,root)
+                if pkgconfigcheck in file_content:
+                    error_msg = "%s failed sanity test (tmpdir) in path %s" % (file,root)
                     sane = package_qa_handle_error(6, error_msg, "staging", path, d)
 
     return sane
index 934303c..8f2b6f3 100644 (file)
@@ -47,39 +47,33 @@ export AS = "${HOST_PREFIX}as"
 export RANLIB = "${HOST_PREFIX}ranlib"
 export STRIP = "${HOST_PREFIX}strip"
 
-
 # Path prefixes
-base_prefix = "${STAGING_DIR}/${BUILD_ARCH}-${BUILD_OS}"
-prefix = "${base_prefix}"
-exec_prefix = "${base_prefix}"
+export base_prefix = "${STAGING_DIR_NATIVE}"
+export prefix = "${STAGING_DIR_NATIVE}${layout_prefix}"
+export exec_prefix = "${STAGING_DIR_NATIVE}${layout_exec_prefix}"
 
 # Base paths
-base_bindir = "${base_prefix}/bin"
-base_sbindir = "${base_prefix}/bin"
-base_libdir = "${base_prefix}/lib"
+export base_bindir = "${STAGING_DIR_NATIVE}${layout_base_bindir}"
+export base_sbindir = "${STAGING_DIR_NATIVE}${layout_base_sbindir}"
+export base_libdir = "${STAGING_DIR_NATIVE}${layout_base_libdir}"
 
 # Architecture independent paths
-sysconfdir = "${prefix}/etc"
-sharedstatedir = "${prefix}/com"
-localstatedir = "${prefix}/var"
-infodir = "${datadir}/info"
-mandir = "${datadir}/man"
-docdir = "${datadir}/doc"
-servicedir = "${prefix}/srv"
+export datadir = "${STAGING_DIR_NATIVE}${layout_datadir}"
+export sysconfdir = "${STAGING_DIR_NATIVE}${layout_sysconfdir}"
+export sharedstatedir = "${STAGING_DIR_NATIVE}${layout_sharedstatedir}"
+export localstatedir = "${STAGING_DIR_NATIVE}${layout_localstatedir}"
+export infodir = "${STAGING_DIR_NATIVE}${layout_infodir}"
+export mandir = "${STAGING_DIR_NATIVE}${layout_mandir}"
+export docdir = "${STAGING_DIR_NATIVE}${layout_docdir}"
+export servicedir = "${STAGING_DIR_NATIVE}${layout_servicedir}"
 
 # Architecture dependent paths
-bindir = "${exec_prefix}/bin"
-sbindir = "${exec_prefix}/bin"
-libexecdir = "${exec_prefix}/libexec"
-libdir = "${exec_prefix}/lib"
-includedir = "${exec_prefix}/include"
-oldincludedir = "${exec_prefix}/include"
-
-# Datadir is made arch dependent here, primarily
-# for autoconf macros, and other things that
-# may be manipulated to handle crosscompilation
-# issues.
-datadir = "${exec_prefix}/share"
+export bindir = "${STAGING_DIR_NATIVE}${layout_bindir}"
+export sbindir = "${STAGING_DIR_NATIVE}${layout_sbindir}"
+export libexecdir = "${STAGING_DIR_NATIVE}${layout_libexecdir}"
+export libdir = "${STAGING_DIR_NATIVE}${layout_libdir}"
+export includedir = "${STAGING_DIR_NATIVE}${layout_includedir}"
+export oldincludedir = "${STAGING_DIR_NATIVE}${layout_includedir}"
 
 do_stage () {
        if [ "${INHIBIT_NATIVE_STAGE_INSTALL}" != "1" ]
@@ -93,3 +87,4 @@ do_install () {
 }
 
 PKG_CONFIG_PATH .= "${EXTRA_NATIVE_PKGCONFIG_PATH}"
+PKG_CONFIG_SYSROOT_DIR = ""
index d2176d8..d65f8a6 100644 (file)
@@ -2,36 +2,10 @@ inherit base
 
 DEPENDS_prepend = "pkgconfig-native "
 
-# The namespaces can clash here hence the two step replace
-def get_pkgconfig_mangle(d):
-       import bb.data
-       s = "-e ''"
-       if not bb.data.inherits_class('native', d):
-               s += " -e 's:=${libdir}:=OELIBDIR:;'"
-               s += " -e 's:=${includedir}:=OEINCDIR:;'"
-               s += " -e 's:=${datadir}:=OEDATADIR:'"
-               s += " -e 's:=${prefix}:=OEPREFIX:'"
-               s += " -e 's:=${exec_prefix}:=OEEXECPREFIX:'"
-               s += " -e 's:OELIBDIR:${STAGING_LIBDIR}:;'"
-               s += " -e 's:OEINCDIR:${STAGING_INCDIR}:;'"
-               s += " -e 's:OEDATADIR:${STAGING_DATADIR}:'"
-               s += " -e 's:OEPREFIX:${STAGING_DIR_HOST}${layout_prefix}:'"
-               s += " -e 's:OEEXECPREFIX:${STAGING_DIR_HOST}${layout_exec_prefix}:'"
-               s += " -e 's:-L${WORKDIR}\S*: :g'"
-               s += " -e 's:-I${WORKDIR}\S*: :g'"
-
-       return s
-
-do_install_append () {
-        for pc in `find ${D} -name '*.pc' -type f | grep -v -- '-uninstalled.pc$'`; do
-                sed -i ${@get_pkgconfig_mangle(d)} -e 's:${D}::g' -e 's:${STAGING_LIBDIR}:${libdir}:g' -e 's:${STAGING_INCDIR}:${includedir}:g' -e 's:${STAGING_DIR_TARGET}:${prefix}:g' ${pc}
-        done
-}
-
 do_stage_append () {
+       install -d ${PKG_CONFIG_DIR}
        for pc in `find ${S} -name '*.pc' -type f | grep -v -- '-uninstalled.pc$'`; do
                pcname=`basename $pc`
-               install -d ${PKG_CONFIG_DIR}
-               cat $pc | sed ${@get_pkgconfig_mangle(d)} -e 's:${D}${libdir}\S*:${STAGING_LIBDIR}:g' -e 's:${D}${prefix}/include\S*:${STAGING_INCDIR}:g' > ${PKG_CONFIG_DIR}/$pcname
+               cat $pc > ${PKG_CONFIG_DIR}/$pcname
        done
 }
index 63f1211..71c65a1 100644 (file)
@@ -6,15 +6,16 @@ OLD_PACKAGE_ARCH := ${PACKAGE_ARCH}
 PACKAGE_ARCH = "${BUILD_ARCH}-${OLD_PACKAGE_ARCH}-sdk"
 
 HOST_ARCH = "${BUILD_ARCH}"
-HOST_VENDOR = "${BUILD_VENDOR}"
+# This isn't BUILD_VENDOR since we don't want to clash with native staging
+HOST_VENDOR = "${TARGET_VENDOR}"
 HOST_OS = "${BUILD_OS}"
 HOST_PREFIX = "${BUILD_PREFIX}"
 HOST_CC_ARCH = "${BUILD_CC_ARCH}"
 
-CPPFLAGS = "${BUILD_CPPFLAGS}"
-CFLAGS = "${BUILD_CFLAGS}"
-CXXFLAGS = "${BUILD_CFLAGS}"
-LDFLAGS = "${BUILD_LDFLAGS}"
+CPPFLAGS = "${BUILDSDK_CPPFLAGS}"
+CFLAGS = "${BUILDSDK_CFLAGS}"
+CXXFLAGS = "${BUILDSDK_CFLAGS}"
+LDFLAGS = "${BUILDSDK_LDFLAGS}"
 
 # Path prefixes
 prefix = "${SDK_PREFIX}"
@@ -49,3 +50,4 @@ FILES_${PN}-dbg += "${prefix}/.debug \
                     ${prefix}/bin/.debug \
                    "
 
+export PKG_CONFIG_SYSROOT_DIR = "${STAGING_DIR}/${HOST_SYS}"
index de526f0..4fe5c21 100644 (file)
@@ -2,23 +2,20 @@
 # Standard target filesystem layout.
 ##################################################################
 
-# Note these currently match the existing staging layout but this 
-# is planned to change, see the oe-dev mailing list
-
 # Path prefixes
-layout_prefix = ""
-layout_exec_prefix = ""
+layout_prefix = "/usr"
+layout_exec_prefix = "/usr"
 layout_base_prefix = ""
 
 # Base paths
 layout_base_bindir = "${layout_base_prefix}/bin"
-layout_base_sbindir = "${layout_base_prefix}/bin"
+layout_base_sbindir = "${layout_base_prefix}/sbin"
 layout_base_libdir = "${layout_base_prefix}/lib"
 
 # Architecture independent paths
-layout_sysconfdir = "/etc"
-layout_localstatedir = "/var"
-layout_servicedir = "/srv"
+layout_sysconfdir = "${layout_base_prefix}/etc"
+layout_localstatedir = "${layout_base_prefix}/var"
+layout_servicedir = "${layout_base_prefix}/srv"
 layout_sharedstatedir = "${layout_prefix}/com"
 layout_datadir = "${layout_prefix}/share"
 layout_infodir = "${layout_datadir}/info"
@@ -27,7 +24,7 @@ layout_docdir = "${layout_datadir}/doc"
 
 # Architecture dependent paths
 layout_bindir = "${layout_exec_prefix}/bin"
-layout_sbindir = "${layout_exec_prefix}/bin"
+layout_sbindir = "${layout_exec_prefix}/sbin"
 layout_libdir = "${layout_exec_prefix}/lib"
 layout_includedir = "${layout_exec_prefix}/include"
 layout_libexecdir = "${layout_exec_prefix}/libexec"
@@ -38,31 +35,31 @@ layout_libexecdir = "${layout_exec_prefix}/libexec"
 
 # Path prefixes
 export base_prefix = ""
-export prefix = "/usr"
-export exec_prefix = "${prefix}"
+export prefix = "${layout_prefix}"
+export exec_prefix = "${layout_exec_prefix}"
 
 # Base paths
-export base_bindir = "${base_prefix}/bin"
-export base_sbindir = "${base_prefix}/sbin"
-export base_libdir = "${base_prefix}/lib"
+export base_bindir = "${layout_base_bindir}"
+export base_sbindir = "${layout_base_sbindir}"
+export base_libdir = "${layout_base_libdir}"
 
 # Architecture independent paths
-export datadir = "${prefix}/share"
-export sysconfdir = "/etc"
-export sharedstatedir = "${prefix}/com"
-export localstatedir = "/var"
-export infodir = "${datadir}/info"
-export mandir = "${datadir}/man"
-export docdir = "${datadir}/doc"
-export servicedir = "/srv"
+export datadir = "${layout_datadir}"
+export sysconfdir = "${layout_sysconfdir}"
+export sharedstatedir = "${layout_sharedstatedir}"
+export localstatedir = "${layout_localstatedir}"
+export infodir = "${layout_infodir}"
+export mandir = "${layout_mandir}"
+export docdir = "${layout_docdir}"
+export servicedir = "${layout_servicedir}"
 
 # Architecture dependent paths
-export bindir = "${exec_prefix}/bin"
-export sbindir = "${exec_prefix}/sbin"
-export libexecdir = "${exec_prefix}/libexec"
-export libdir = "${exec_prefix}/lib"
-export includedir = "${exec_prefix}/include"
-export oldincludedir = "${exec_prefix}/include"
+export bindir = "${layout_bindir}"
+export sbindir = "${layout_sbindir}"
+export libexecdir = "${layout_libexecdir}"
+export libdir = "${layout_libdir}"
+export includedir = "${layout_includedir}"
+export oldincludedir = "${layout_includedir}"
 
 ##################################################################
 # Architecture-dependent build variables.
@@ -511,6 +508,7 @@ SLOT = "0"
 
 export PKG_CONFIG_DIR = "${STAGING_LIBDIR}/pkgconfig"
 export PKG_CONFIG_PATH = "${PKG_CONFIG_DIR}"
+export PKG_CONFIG_SYSROOT_DIR = "${STAGING_DIR}/${TARGET_SYS}"
 export PKG_CONFIG_DISABLE_UNINSTALLED = "yes"
 
 export QMAKE_MKSPEC_PATH = "${STAGING_DATADIR_NATIVE}/qmake"
index 4af4454..35d9d32 100644 (file)
@@ -11,7 +11,7 @@ BB_MIN_VERSION = "1.8.10"
 # that breaks the format and have been previously discussed on the mailing list 
 # with general agreement from the core team.
 #
-SANITY_ABI = "0"
+SANITY_ABI = "1"
 SANITY_ABIFILE = "${TMPDIR}/abi_version"
 
 INHERIT += "sanity"
index 1d744c1..33429e1 100644 (file)
@@ -23,11 +23,6 @@ do_stage_append () {
                rm -rf ${CROSS_DIR}/$d
        done
 
-    # Hack to be removed when staging layout matches the target layout
-    if [ ! -e ${STAGING_DIR_TARGET}/usr ]; then
-        ln -s ${STAGING_DIR_TARGET} ${STAGING_DIR_TARGET}/usr
-    fi
-
        # Fix a few include links so cross builds are happier
        if [ ! -e ${STAGING_INCDIR}/c++ ]; then
                mkdir -p ${STAGING_INCDIR}
index aa54021..5bc187b 100644 (file)
@@ -5,6 +5,8 @@ SRC_URI += 'file://sdk-libstdc++-includes.patch;patch=1'
 STAGING_TARGET_INCDIR = "${STAGING_DIR_TARGET}${layout_includedir}"
 STAGING_TARGET_LIBDIR = "${STAGING_DIR_TARGET}${layout_libdir}"
 
+EXTRA_OECONF += "--with-sysroot=${prefix}/${TARGET_SYS} --with-build-sysroot=${STAGING_DIR_TARGET}"
+
 do_configure () {
        (cd ${S} && gnu-configize) || die "failure running gnu-configize"
        (cd ${S}/libstdc++-v3 && autoreconf)
index 1052645..d6af5fe 100644 (file)
@@ -4,10 +4,6 @@ USE_NLS = '${@base_conditional( "TARGET_OS", "linux-uclibcgnueabi", "no", "", d
 EXTRA_OECONF += "--with-sysroot=${prefix}/${TARGET_SYS} --with-build-sysroot=${STAGING_DIR_TARGET}"
 
 do_configure () {
-       # Hack to be removed when staging layout matches the target layout
-       if [ ! -e ${STAGING_DIR_TARGET}/usr ]; then
-           ln -s ${STAGING_DIR_TARGET} ${STAGING_DIR_TARGET}/usr
-       fi
        (cd ${S} && gnu-configize) || die "failure running gnu-configize"
        (cd ${S}/libstdc++-v3 && autoreconf)
        oe_runconf
index 43f0958..d9f4d68 100644 (file)
@@ -1,5 +1,3 @@
 DESCRIPTION = "Sanitized set of 2.6 kernel headers for the C library's use."
 SECTION = "devel"
 LICENSE = "GPL"
-
-DEPENDS = "cross-linkage"
\ No newline at end of file
index 8e3f33a..9fb8b34 100644 (file)
@@ -14,7 +14,7 @@ export CFLAG_mtx-1 := "${@'${CFLAG}'.replace('-O2', '')}"
 export CFLAG_mtx-2 := "${@'${CFLAG}'.replace('-O2', '')}"
 
 export DIRS = "crypto ssl apps"
-export EX_LIBS = "-lgcc -ldl ${TARGET_LDFLAGS}"
+export EX_LIBS = "-lgcc -ldl"
 export AS = "${CC} -c"
 
 PACKAGES =+ "libcrypto libssl"
index 051279e..e52ab34 100644 (file)
@@ -2,14 +2,13 @@ DESCRIPTION = "Precompiled SharpROM toolchain glue package"
 LICENSE = "GPL"
 SECTION = "base"
 # see bug 2199 for the reason the following line is in here
-DEPENDS = "virtual/linux-libc-headers"
+DEPENDS = "linux-libc-headers cross-linkage staging-linkage"
 PROVIDES_sharprom-compatible = "\
   virtual/arm-linux-gcc-2.95 \
   virtual/arm-linux-libc-for-gcc \
   virtual/arm-linux-binutils \
   virtual/libc \
   virtual/arm-linux-gcc \
-  virtual/linux-libc-headers \
   virtual/arm-linux-gcc-initial "
 PR = "r1"