image-buildinfo.bbclass 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #
  2. # Writes build information to target filesystem on /etc/buildinfo
  3. #
  4. # Copyright (C) 2014 Intel Corporation
  5. # Author: Alejandro Enedino Hernandez Samaniego <alejandro.hernandez@intel.com>
  6. #
  7. # SPDX-License-Identifier: MIT
  8. #
  9. # Usage: add INHERIT += "image-buildinfo" to your conf file
  10. #
  11. # Desired variables to display
  12. IMAGE_BUILDINFO_VARS ?= "DISTRO DISTRO_VERSION"
  13. # Desired location of the output file in the image.
  14. IMAGE_BUILDINFO_FILE ??= "${sysconfdir}/buildinfo"
  15. SDK_BUILDINFO_FILE ??= "/buildinfo"
  16. # From buildhistory.bbclass
  17. def image_buildinfo_outputvars(vars, d):
  18. vars = vars.split()
  19. ret = ""
  20. for var in vars:
  21. value = d.getVar(var) or ""
  22. if (d.getVarFlag(var, 'type') == "list"):
  23. value = oe.utils.squashspaces(value)
  24. ret += "%s = %s\n" % (var, value)
  25. return ret.rstrip('\n')
  26. # Returns layer revisions along with their respective status
  27. def get_layer_revs(d):
  28. revisions = oe.buildcfg.get_layer_revisions(d)
  29. medadata_revs = ["%-17s = %s:%s%s" % (r[1], r[2], r[3], r[4]) for r in revisions]
  30. return '\n'.join(medadata_revs)
  31. def buildinfo_target(d):
  32. # Get context
  33. if d.getVar('BB_WORKERCONTEXT') != '1':
  34. return ""
  35. # Single and list variables to be read
  36. vars = (d.getVar("IMAGE_BUILDINFO_VARS") or "")
  37. return image_buildinfo_outputvars(vars, d)
  38. python buildinfo() {
  39. if not d.getVar('IMAGE_BUILDINFO_FILE'):
  40. return
  41. destfile = d.expand('${BUILDINFODEST}${IMAGE_BUILDINFO_FILE}')
  42. bb.utils.mkdirhier(os.path.dirname(destfile))
  43. with open(destfile, 'w') as build:
  44. build.writelines((
  45. '''-----------------------
  46. Build Configuration: |
  47. -----------------------
  48. ''',
  49. buildinfo_target(d),
  50. '''
  51. -----------------------
  52. Layer Revisions: |
  53. -----------------------
  54. ''',
  55. get_layer_revs(d),
  56. '''
  57. '''
  58. ))
  59. }
  60. # Write build information to target filesystem
  61. python buildinfo_image () {
  62. d.setVar("BUILDINFODEST", "${IMAGE_ROOTFS}")
  63. bb.build.exec_func("buildinfo", d)
  64. }
  65. python buildinfo_sdk () {
  66. d.setVar("BUILDINFODEST", "${SDK_OUTPUT}/${SDKPATH}")
  67. d.setVar("IMAGE_BUILDINFO_FILE", d.getVar("SDK_BUILDINFO_FILE"))
  68. bb.build.exec_func("buildinfo", d)
  69. }
  70. IMAGE_PREPROCESS_COMMAND += "buildinfo_image"
  71. POPULATE_SDK_PRE_TARGET_COMMAND += "buildinfo_sdk"