native.bbclass 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. # We want native packages to be relocatable
  2. inherit relocatable
  3. # Native packages are built indirectly via dependency,
  4. # no need for them to be a direct target of 'world'
  5. EXCLUDE_FROM_WORLD = "1"
  6. PACKAGES = ""
  7. PACKAGES_virtclass-native = ""
  8. PACKAGES_DYNAMIC = ""
  9. PACKAGES_DYNAMIC_virtclass-native = ""
  10. PACKAGE_ARCH = "${BUILD_ARCH}"
  11. # used by cmake class
  12. OECMAKE_RPATH = "${libdir}"
  13. OECMAKE_RPATH_virtclass-native = "${libdir}"
  14. BASE_PACKAGE_ARCH = "${BUILD_ARCH}"
  15. BASEPKG_HOST_SYS = "${BUILD_ARCH}${BUILD_VENDOR}-${BUILD_OS}"
  16. BASEPKG_TARGET_SYS = "${BUILD_ARCH}${BUILD_VENDOR}-${BUILD_OS}"
  17. # When this class has packaging enabled, setting
  18. # RPROVIDES becomes unnecessary.
  19. RPROVIDES = "${PN}"
  20. TARGET_ARCH = "${BUILD_ARCH}"
  21. TARGET_OS = "${BUILD_OS}"
  22. TARGET_VENDOR = "${BUILD_VENDOR}"
  23. TARGET_PREFIX = "${BUILD_PREFIX}"
  24. TARGET_CC_ARCH = "${BUILD_CC_ARCH}"
  25. TARGET_FPU = ""
  26. HOST_ARCH = "${BUILD_ARCH}"
  27. HOST_OS = "${BUILD_OS}"
  28. HOST_VENDOR = "${BUILD_VENDOR}"
  29. HOST_PREFIX = "${BUILD_PREFIX}"
  30. HOST_CC_ARCH = "${BUILD_CC_ARCH}"
  31. CPPFLAGS = "${BUILD_CPPFLAGS}"
  32. CFLAGS = "${BUILD_CFLAGS}"
  33. CXXFLAGS = "${BUILD_CFLAGS}"
  34. LDFLAGS = "${BUILD_LDFLAGS}"
  35. LDFLAGS_build-darwin = "-L${STAGING_LIBDIR_NATIVE} "
  36. STAGING_BINDIR = "${STAGING_BINDIR_NATIVE}"
  37. STAGING_BINDIR_CROSS = "${STAGING_BINDIR_NATIVE}"
  38. DEPENDS_GETTEXT = "gettext-native"
  39. # Don't use site files for native builds
  40. export CONFIG_SITE = ""
  41. # set the compiler as well. It could have been set to something else
  42. export CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_ARCH}"
  43. export CXX = "${CCACHE}${HOST_PREFIX}g++ ${HOST_CC_ARCH}"
  44. export F77 = "${CCACHE}${HOST_PREFIX}g77 ${HOST_CC_ARCH}"
  45. export CPP = "${HOST_PREFIX}gcc -E"
  46. export LD = "${HOST_PREFIX}ld"
  47. export CCLD = "${CC}"
  48. export AR = "${HOST_PREFIX}ar"
  49. export AS = "${HOST_PREFIX}as"
  50. export RANLIB = "${HOST_PREFIX}ranlib"
  51. export STRIP = "${HOST_PREFIX}strip"
  52. # Path prefixes
  53. base_prefix = "${STAGING_DIR_NATIVE}"
  54. prefix = "${STAGING_DIR_NATIVE}${prefix_native}"
  55. exec_prefix = "${STAGING_DIR_NATIVE}${prefix_native}"
  56. NATIVE_PACKAGE_PATH_SUFFIX = ""
  57. bindir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
  58. libdir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
  59. libexecdir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
  60. do_populate_sysroot[sstate-inputdirs] = "${SYSROOT_DESTDIR}/${STAGING_DIR_NATIVE}"
  61. do_populate_sysroot[sstate-outputdirs] = "${STAGING_DIR_NATIVE}"
  62. # Since we actually install these into situ there is no staging prefix
  63. STAGING_DIR_HOST = ""
  64. STAGING_DIR_TARGET = ""
  65. SHLIBSDIR = "${STAGING_DIR_NATIVE}/shlibs"
  66. PKG_CONFIG_DIR = "${libdir}/pkgconfig"
  67. EXTRA_NATIVE_PKGCONFIG_PATH ?= ""
  68. PKG_CONFIG_PATH .= "${EXTRA_NATIVE_PKGCONFIG_PATH}"
  69. PKG_CONFIG_SYSROOT_DIR = ""
  70. PATH =. "${COREBASE}/scripts/native-intercept:"
  71. python native_virtclass_handler () {
  72. if not isinstance(e, bb.event.RecipePreFinalise):
  73. return
  74. classextend = bb.data.getVar('BBCLASSEXTEND', e.data, True) or ""
  75. if "native" not in classextend:
  76. return
  77. pn = bb.data.getVar("PN", e.data, True)
  78. if not pn.endswith("-native"):
  79. return
  80. def map_dependencies(varname, d, suffix = ""):
  81. if suffix:
  82. varname = varname + "_" + suffix
  83. deps = bb.data.getVar(varname, d, True)
  84. if not deps:
  85. return
  86. deps = bb.utils.explode_deps(deps)
  87. newdeps = []
  88. for dep in deps:
  89. if dep.endswith("-cross"):
  90. newdeps.append(dep.replace("-cross", "-native"))
  91. elif not dep.endswith("-native"):
  92. newdeps.append(dep + "-native")
  93. else:
  94. newdeps.append(dep)
  95. bb.data.setVar(varname, " ".join(newdeps), d)
  96. map_dependencies("DEPENDS", e.data)
  97. for pkg in (e.data.getVar("PACKAGES", True).split() + [""]):
  98. map_dependencies("RDEPENDS", e.data, pkg)
  99. map_dependencies("RRECOMMENDS", e.data, pkg)
  100. map_dependencies("RSUGGESTS", e.data, pkg)
  101. map_dependencies("RPROVIDES", e.data, pkg)
  102. map_dependencies("RREPLACES", e.data, pkg)
  103. provides = bb.data.getVar("PROVIDES", e.data, True)
  104. for prov in provides.split():
  105. if prov.find(pn) != -1:
  106. continue
  107. if not prov.endswith("-native"):
  108. provides = provides.replace(prov, prov + "-native")
  109. bb.data.setVar("PROVIDES", provides, e.data)
  110. bb.data.setVar("OVERRIDES", bb.data.getVar("OVERRIDES", e.data, False) + ":virtclass-native", e.data)
  111. }
  112. addhandler native_virtclass_handler
  113. do_package[noexec] = "1"
  114. do_package_write_ipk[noexec] = "1"
  115. do_package_write_deb[noexec] = "1"
  116. do_package_write_rpm[noexec] = "1"
  117. do_populate_sysroot[stamp-extra-info] = ""
  118. do_package[stamp-extra-info] = ""