All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] Fix some package issues, and add new features
@ 2020-02-07 20:20 Mark Hatle
  2020-02-07 20:20 ` [PATCH 1/3] package.bbclass: Fix debug source processing for static libraries Mark Hatle
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Mark Hatle @ 2020-02-07 20:20 UTC (permalink / raw)
  To: openembedded-core

While working on baremetal toolchains, I found that the SDKs were potentially
very very large.  I investigated and found it was due to included debug info,
but realize the associated source files were not actually present.

Patch 1/3 - Fixes identification of corresponding dwarf debug sources
Patch 2/3 - Allow us to skip kernel modules and static libraries
Patch 3/3 - Add a -dbg like behavior for static libraries (off by default)


Mark Hatle (3):
  package.bbclass: Fix debug source processing for static libraries
  package.bbclass: Allow INHIBIT_PACKAGE_STRIP_FILES to skip .ko and
    static libs
  package.bbclass: Support stripping and debug copy of static libraries

 meta/classes/insane.bbclass  |  2 +-
 meta/classes/package.bbclass | 80 ++++++++++++++++++++++++++++++++----
 meta/conf/bitbake.conf       |  2 +-
 3 files changed, 73 insertions(+), 11 deletions(-)

-- 
2.17.1



^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/3] package.bbclass: Fix debug source processing for static libraries
  2020-02-07 20:20 [PATCH 0/3] Fix some package issues, and add new features Mark Hatle
@ 2020-02-07 20:20 ` Mark Hatle
  2020-02-07 20:20 ` [PATCH 2/3] package.bbclass: Allow INHIBIT_PACKAGE_STRIP_FILES to skip .ko and static libs Mark Hatle
  2020-02-07 20:20 ` [PATCH 3/3] package.bbclass: Support stripping and debug copy of static libraries Mark Hatle
  2 siblings, 0 replies; 5+ messages in thread
From: Mark Hatle @ 2020-02-07 20:20 UTC (permalink / raw)
  To: openembedded-core

Format of the sources list is the [ (file, [source, ...]), ... ] before
this change, the static libraries were processed but the items were
included incorrectly causing no sources for static libraries to be
included.

Signed-off-by: Mark Hatle <mark.hatle@kernel.crashing.org>
---
 meta/classes/package.bbclass | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index ef3de35961..46ec9b6b3a 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -1051,7 +1051,7 @@ python split_and_strip_files () {
 
         if debugsrcdir and not targetos.startswith("mingw"):
             for file in staticlibs:
-                results.extend(source_info(file, d, fatal=False))
+                results.append( (file, source_info(file, d, fatal=False)) )
 
         sources = set()
         for r in results:
-- 
2.17.1



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/3] package.bbclass: Allow INHIBIT_PACKAGE_STRIP_FILES to skip .ko and static libs
  2020-02-07 20:20 [PATCH 0/3] Fix some package issues, and add new features Mark Hatle
  2020-02-07 20:20 ` [PATCH 1/3] package.bbclass: Fix debug source processing for static libraries Mark Hatle
@ 2020-02-07 20:20 ` Mark Hatle
  2020-02-07 20:20 ` [PATCH 3/3] package.bbclass: Support stripping and debug copy of static libraries Mark Hatle
  2 siblings, 0 replies; 5+ messages in thread
From: Mark Hatle @ 2020-02-07 20:20 UTC (permalink / raw)
  To: openembedded-core

Change the order of the skip processing to happen before any .ko and static
library processing.  This will allow these types of files to be individually
skipped if necessary.

Signed-off-by: Mark Hatle <mark.hatle@kernel.crashing.org>
---
 meta/classes/package.bbclass | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index 46ec9b6b3a..7080d63287 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -955,12 +955,6 @@ python split_and_strip_files () {
         for root, dirs, files in cpath.walk(dvar):
             for f in files:
                 file = os.path.join(root, f)
-                if file.endswith(".ko") and file.find("/lib/modules/") != -1:
-                    kernmods.append(file)
-                    continue
-                if oe.package.is_static_lib(file):
-                    staticlibs.append(file)
-                    continue
 
                 # Skip debug files
                 if debugappend and file.endswith(debugappend):
@@ -971,6 +965,13 @@ python split_and_strip_files () {
                 if file in skipfiles:
                     continue
 
+                if file.endswith(".ko") and file.find("/lib/modules/") != -1:
+                    kernmods.append(file)
+                    continue
+                if oe.package.is_static_lib(file):
+                    staticlibs.append(file)
+                    continue
+
                 try:
                     ltarget = cpath.realpath(file, dvar, False)
                     s = cpath.lstat(ltarget)
-- 
2.17.1



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 3/3] package.bbclass: Support stripping and debug copy of static libraries
  2020-02-07 20:20 [PATCH 0/3] Fix some package issues, and add new features Mark Hatle
  2020-02-07 20:20 ` [PATCH 1/3] package.bbclass: Fix debug source processing for static libraries Mark Hatle
  2020-02-07 20:20 ` [PATCH 2/3] package.bbclass: Allow INHIBIT_PACKAGE_STRIP_FILES to skip .ko and static libs Mark Hatle
@ 2020-02-07 20:20 ` Mark Hatle
  2020-04-16 16:43   ` [OE-core] " Peter Kjellerstedt
  2 siblings, 1 reply; 5+ messages in thread
From: Mark Hatle @ 2020-02-07 20:20 UTC (permalink / raw)
  To: openembedded-core

By default, we won't copy and strip static libraries.  However, this
functionality can be useful in some cases where people are doing
development on the target, and don't generally want the larger debug
capable static libraries.  To enable the new functionality set:

    PACKAGE_DEBUG_STATIC_SPLIT = '1'

Add a new function splitstaticdebuginfo.  Thus function will copy the
unmodified static library into the specific debug directory location.
By keeping an unmodified version, it is possible for a user trying
to debug something to use -L /usr/lib/.debug-static and their existing
build commands to switch from stripped to full debug versions.

The PACKAGE_DEBUG_SPLIT_STYLE will select between two different
approaches, /usr/lib/debug-static or <path>/.debug-static.

Additionally you can now choose to strip static libraries to conserve
space.  If either 'PACKAGE_DEBUG_STATIC_SPLIT' or 'PACKAGE_STRIP_STATIC'
is set to 1, the static library will be stripped.  (This is not on by
default, as it could make diagnosing static library usage difficult in
some cases.)

Add to insane.bbclass a skip to the staticdev warning for the specific
-dbg package versions.

Signed-off-by: Mark Hatle <mark.hatle@kernel.crashing.org>
---
 meta/classes/insane.bbclass  |  2 +-
 meta/classes/package.bbclass | 67 ++++++++++++++++++++++++++++++++++--
 meta/conf/bitbake.conf       |  2 +-
 3 files changed, 66 insertions(+), 5 deletions(-)

diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass
index 795c7b9212..7425b8cbd5 100644
--- a/meta/classes/insane.bbclass
+++ b/meta/classes/insane.bbclass
@@ -182,7 +182,7 @@ def package_qa_check_staticdev(path, name, d, elf, messages):
     libgcc.a, libgcov.a will be skipped in their packages
     """
 
-    if not name.endswith("-pic") and not name.endswith("-staticdev") and not name.endswith("-ptest") and path.endswith(".a") and not path.endswith("_nonshared.a"):
+    if not name.endswith("-pic") and not name.endswith("-staticdev") and not name.endswith("-ptest") and path.endswith(".a") and not path.endswith("_nonshared.a") and not '/usr/lib/debug-static/' in path and not '/.debug-static/' in path:
         package_qa_add_message(messages, "staticdev", "non -staticdev package contains static .a library: %s path '%s'" % \
                  (name, package_qa_clean_path(path,d)))
 
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index 7080d63287..1efc396ac6 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -416,6 +416,49 @@ def splitdebuginfo(file, dvar, debugdir, debuglibdir, debugappend, debugsrcdir,
 
     return (file, sources)
 
+def splitstaticdebuginfo(file, dvar, debugstaticdir, debugstaticlibdir, debugstaticappend, debugsrcdir, d):
+    # Unlike the function above, there is no way to split a static library
+    # two components.  So to get similar results we will copy the unmodified
+    # static library (containing the debug symbols) into a new directory.
+    # We will then strip (preserving symbols) the static library in the
+    # typical location.
+    #
+    # return a mapping of files:debugsources
+
+    import stat
+    import shutil
+
+    src = file[len(dvar):]
+    dest = debugstaticlibdir + os.path.dirname(src) + debugstaticdir + "/" + os.path.basename(src) + debugstaticappend
+    debugfile = dvar + dest
+    sources = []
+
+    # Copy the file...
+    bb.utils.mkdirhier(os.path.dirname(debugfile))
+    #bb.note("Copy %s -> %s" % (file, debugfile))
+
+    dvar = d.getVar('PKGD')
+
+    newmode = None
+    if not os.access(file, os.W_OK) or os.access(file, os.R_OK):
+        origmode = os.stat(file)[stat.ST_MODE]
+        newmode = origmode | stat.S_IWRITE | stat.S_IREAD
+        os.chmod(file, newmode)
+
+    # We need to extract the debug src information here...
+    if debugsrcdir:
+        sources = source_info(file, d)
+
+    bb.utils.mkdirhier(os.path.dirname(debugfile))
+
+    # Copy the unmodified item to the debug directory
+    shutil.copy2(file, debugfile)
+
+    if newmode:
+        os.chmod(file, origmode)
+
+    return (file, sources)
+
 def copydebugsources(debugsrcdir, sources, d):
     # The debug src information written out to sourcefile is further processed
     # and copied to the destination here.
@@ -916,25 +959,37 @@ python split_and_strip_files () {
     if d.getVar('PACKAGE_DEBUG_SPLIT_STYLE') == 'debug-file-directory':
         # Single debug-file-directory style debug info
         debugappend = ".debug"
+        debugstaticappend = ""
         debugdir = ""
+        debugstaticdir = ""
         debuglibdir = "/usr/lib/debug"
+        debugstaticlibdir = "/usr/lib/debug-static"
         debugsrcdir = "/usr/src/debug"
     elif d.getVar('PACKAGE_DEBUG_SPLIT_STYLE') == 'debug-without-src':
         # Original OE-core, a.k.a. ".debug", style debug info, but without sources in /usr/src/debug
         debugappend = ""
+        debugstaticappend = ""
         debugdir = "/.debug"
+        debugstaticdir = "/.debug-static"
         debuglibdir = ""
+        debugstaticlibdir = ""
         debugsrcdir = ""
     elif d.getVar('PACKAGE_DEBUG_SPLIT_STYLE') == 'debug-with-srcpkg':
         debugappend = ""
+        debugstaticappend = ""
         debugdir = "/.debug"
+        debugstaticdir = "/.debug-static"
         debuglibdir = ""
+        debugstaticlibdir = ""
         debugsrcdir = "/usr/src/debug"
     else:
         # Original OE-core, a.k.a. ".debug", style debug info
         debugappend = ""
+        debugstaticappend = ""
         debugdir = "/.debug"
+        debugstaticdir = "/.debug-static"
         debuglibdir = ""
+        debugstaticlibdir = ""
         debugsrcdir = "/usr/src/debug"
 
     #
@@ -1051,8 +1106,11 @@ python split_and_strip_files () {
         results = oe.utils.multiprocess_launch(splitdebuginfo, list(elffiles), d, extraargs=(dvar, debugdir, debuglibdir, debugappend, debugsrcdir, d))
 
         if debugsrcdir and not targetos.startswith("mingw"):
-            for file in staticlibs:
-                results.append( (file, source_info(file, d, fatal=False)) )
+            if (d.getVar('PACKAGE_DEBUG_STATIC_SPLIT') == '1'):
+                results = oe.utils.multiprocess_launch(splitstaticdebuginfo, staticlibs, d, extraargs=(dvar, debugstaticdir, debugstaticlibdir, debugstaticappend, debugsrcdir, d))
+            else:
+                for file in staticlibs:
+                    results.append( (file,source_info(file, d)) )
 
         sources = set()
         for r in results:
@@ -1121,6 +1179,9 @@ python split_and_strip_files () {
             sfiles.append((file, elf_file, strip))
         for f in kernmods:
             sfiles.append((f, 16, strip))
+        if (d.getVar('PACKAGE_STRIP_STATIC') == '1' or d.getVar('PACKAGE_DEBUG_STATIC_SPLIT') == '1'):
+            for f in staticlibs:
+                sfiles.append((f, 16, strip))
 
         oe.utils.multiprocess_launch(oe.package.runstrip, sfiles, d)
 
@@ -1188,7 +1249,7 @@ python populate_packages () {
             dir = os.sep
         for f in (files + dirs):
             path = "." + os.path.join(dir, f)
-            if "/.debug/" in path or path.endswith("/.debug"):
+            if "/.debug/" in path or "/.debug-static/" in path or path.endswith("/.debug"):
                 debug.append(path)
 
     for pkg in packages:
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index 8b4621f9b9..954c06b313 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -325,7 +325,7 @@ FILES_${PN}-staticdev = "${libdir}/*.a ${base_libdir}/*.a ${libdir}/${BPN}/*.a"
 SECTION_${PN}-staticdev = "devel"
 RDEPENDS_${PN}-staticdev = "${PN}-dev (= ${EXTENDPKGV})"
 
-FILES_${PN}-dbg = "/usr/lib/debug /usr/src/debug"
+FILES_${PN}-dbg = "/usr/lib/debug /usr/lib/debug-static /usr/src/debug"
 SECTION_${PN}-dbg = "devel"
 ALLOW_EMPTY_${PN}-dbg = "1"
 
-- 
2.17.1



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [OE-core] [PATCH 3/3] package.bbclass: Support stripping and debug copy of static libraries
  2020-02-07 20:20 ` [PATCH 3/3] package.bbclass: Support stripping and debug copy of static libraries Mark Hatle
@ 2020-04-16 16:43   ` Peter Kjellerstedt
  0 siblings, 0 replies; 5+ messages in thread
From: Peter Kjellerstedt @ 2020-04-16 16:43 UTC (permalink / raw)
  To: Mark Hatle; +Cc: openembedded-core

> -----Original Message-----
> From: openembedded-core-bounces@lists.openembedded.org <openembedded-
> core-bounces@lists.openembedded.org> On Behalf Of Mark Hatle
> Sent: den 7 februari 2020 21:20
> To: openembedded-core@lists.openembedded.org
> Subject: [OE-core] [PATCH 3/3] package.bbclass: Support stripping and
> debug copy of static libraries
> 
> By default, we won't copy and strip static libraries.  However, this
> functionality can be useful in some cases where people are doing
> development on the target, and don't generally want the larger debug
> capable static libraries.  To enable the new functionality set:
> 
>     PACKAGE_DEBUG_STATIC_SPLIT = '1'
> 
> Add a new function splitstaticdebuginfo.  Thus function will copy the
> unmodified static library into the specific debug directory location.
> By keeping an unmodified version, it is possible for a user trying
> to debug something to use -L /usr/lib/.debug-static and their existing
> build commands to switch from stripped to full debug versions.
> 
> The PACKAGE_DEBUG_SPLIT_STYLE will select between two different
> approaches, /usr/lib/debug-static or <path>/.debug-static.
> 
> Additionally you can now choose to strip static libraries to conserve
> space.  If either 'PACKAGE_DEBUG_STATIC_SPLIT' or 'PACKAGE_STRIP_STATIC'
> is set to 1, the static library will be stripped.  (This is not on by
> default, as it could make diagnosing static library usage difficult in
> some cases.)
> 
> Add to insane.bbclass a skip to the staticdev warning for the specific
> -dbg package versions.
> 
> Signed-off-by: Mark Hatle <mark.hatle@kernel.crashing.org>
> ---
>  meta/classes/insane.bbclass  |  2 +-
>  meta/classes/package.bbclass | 67 ++++++++++++++++++++++++++++++++++--
>  meta/conf/bitbake.conf       |  2 +-
>  3 files changed, 66 insertions(+), 5 deletions(-)

[cut]

> diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
> index 7080d63287..1efc396ac6 100644
> --- a/meta/classes/package.bbclass
> +++ b/meta/classes/package.bbclass

[cut]

> @@ -1051,8 +1106,11 @@ python split_and_strip_files () {
>          results = oe.utils.multiprocess_launch(splitdebuginfo, list(elffiles), d, extraargs=(dvar, debugdir, debuglibdir, debugappend, debugsrcdir, d))
> 
>          if debugsrcdir and not targetos.startswith("mingw"):
> -            for file in staticlibs:
> -                results.append( (file, source_info(file, d, fatal=False)) )
> +            if (d.getVar('PACKAGE_DEBUG_STATIC_SPLIT') == '1'):
> +                results = oe.utils.multiprocess_launch(splitstaticdebuginfo, staticlibs, d, extraargs=(dvar, debugstaticdir, debugstaticlibdir, debugstaticappend, debugsrcdir, d))
> +            else:
> +                for file in staticlibs:
> +                    results.append( (file,source_info(file, d)) )

Why was fatal=False dropped from the call to source_info()?

//Peter


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-04-16 16:43 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-07 20:20 [PATCH 0/3] Fix some package issues, and add new features Mark Hatle
2020-02-07 20:20 ` [PATCH 1/3] package.bbclass: Fix debug source processing for static libraries Mark Hatle
2020-02-07 20:20 ` [PATCH 2/3] package.bbclass: Allow INHIBIT_PACKAGE_STRIP_FILES to skip .ko and static libs Mark Hatle
2020-02-07 20:20 ` [PATCH 3/3] package.bbclass: Support stripping and debug copy of static libraries Mark Hatle
2020-04-16 16:43   ` [OE-core] " Peter Kjellerstedt

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.