native.bbclass 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  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_class-native = ""
  8. PACKAGES_DYNAMIC = ""
  9. PACKAGES_DYNAMIC_class-native = ""
  10. PACKAGE_ARCH = "${BUILD_ARCH}"
  11. # used by cmake class
  12. OECMAKE_RPATH = "${libdir}"
  13. OECMAKE_RPATH_class-native = "${libdir}"
  14. # When this class has packaging enabled, setting
  15. # RPROVIDES becomes unnecessary.
  16. RPROVIDES = "${PN}"
  17. TARGET_ARCH = "${BUILD_ARCH}"
  18. TARGET_OS = "${BUILD_OS}"
  19. TARGET_VENDOR = "${BUILD_VENDOR}"
  20. TARGET_PREFIX = "${BUILD_PREFIX}"
  21. TARGET_CC_ARCH = "${BUILD_CC_ARCH}"
  22. TARGET_LD_ARCH = "${BUILD_LD_ARCH}"
  23. TARGET_AS_ARCH = "${BUILD_AS_ARCH}"
  24. TARGET_CPPFLAGS = "${BUILD_CPPFLAGS}"
  25. TARGET_CFLAGS = "${BUILD_CFLAGS}"
  26. TARGET_CXXFLAGS = "${BUILD_CXXFLAGS}"
  27. TARGET_LDFLAGS = "${BUILD_LDFLAGS}"
  28. TARGET_FPU = ""
  29. HOST_ARCH = "${BUILD_ARCH}"
  30. HOST_OS = "${BUILD_OS}"
  31. HOST_VENDOR = "${BUILD_VENDOR}"
  32. HOST_PREFIX = "${BUILD_PREFIX}"
  33. HOST_CC_ARCH = "${BUILD_CC_ARCH}"
  34. HOST_LD_ARCH = "${BUILD_LD_ARCH}"
  35. HOST_AS_ARCH = "${BUILD_AS_ARCH}"
  36. CPPFLAGS = "${BUILD_CPPFLAGS}"
  37. CFLAGS = "${BUILD_CFLAGS}"
  38. CXXFLAGS = "${BUILD_CXXFLAGS}"
  39. LDFLAGS = "${BUILD_LDFLAGS}"
  40. STAGING_BINDIR = "${STAGING_BINDIR_NATIVE}"
  41. STAGING_BINDIR_CROSS = "${STAGING_BINDIR_NATIVE}"
  42. # native pkg doesn't need the TOOLCHAIN_OPTIONS.
  43. TOOLCHAIN_OPTIONS = ""
  44. # Don't build ptest natively
  45. PTEST_ENABLED = "0"
  46. # Don't use site files for native builds
  47. export CONFIG_SITE = "${COREBASE}/meta/site/native"
  48. # set the compiler as well. It could have been set to something else
  49. export CC = "${BUILD_CC}"
  50. export CXX = "${BUILD_CXX}"
  51. export FC = "${BUILD_FC}"
  52. export CPP = "${BUILD_CPP}"
  53. export LD = "${BUILD_LD}"
  54. export CCLD = "${BUILD_CCLD}"
  55. export AR = "${BUILD_AR}"
  56. export AS = "${BUILD_AS}"
  57. export RANLIB = "${BUILD_RANLIB}"
  58. export STRIP = "${BUILD_STRIP}"
  59. export NM = "${BUILD_NM}"
  60. # Path prefixes
  61. base_prefix = "${STAGING_DIR_NATIVE}"
  62. prefix = "${STAGING_DIR_NATIVE}${prefix_native}"
  63. exec_prefix = "${STAGING_DIR_NATIVE}${prefix_native}"
  64. bindir = "${STAGING_BINDIR_NATIVE}"
  65. sbindir = "${STAGING_SBINDIR_NATIVE}"
  66. base_libdir = "${STAGING_LIBDIR_NATIVE}"
  67. libdir = "${STAGING_LIBDIR_NATIVE}"
  68. includedir = "${STAGING_INCDIR_NATIVE}"
  69. sysconfdir = "${STAGING_ETCDIR_NATIVE}"
  70. datadir = "${STAGING_DATADIR_NATIVE}"
  71. baselib = "lib"
  72. export lt_cv_sys_lib_dlsearch_path_spec = "${libdir} ${base_libdir} /lib /lib64 /usr/lib /usr/lib64"
  73. NATIVE_PACKAGE_PATH_SUFFIX ?= ""
  74. bindir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
  75. sbindir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
  76. base_libdir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
  77. libdir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
  78. libexecdir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
  79. do_populate_sysroot[sstate-inputdirs] = "${SYSROOT_DESTDIR}/${STAGING_DIR_NATIVE}/"
  80. do_populate_sysroot[sstate-outputdirs] = "${COMPONENTS_DIR}/${PACKAGE_ARCH}/${PN}"
  81. # Since we actually install these into situ there is no staging prefix
  82. STAGING_DIR_HOST = ""
  83. STAGING_DIR_TARGET = ""
  84. PKG_CONFIG_DIR = "${libdir}/pkgconfig"
  85. EXTRA_NATIVE_PKGCONFIG_PATH ?= ""
  86. PKG_CONFIG_PATH .= "${EXTRA_NATIVE_PKGCONFIG_PATH}"
  87. PKG_CONFIG_SYSROOT_DIR = ""
  88. PKG_CONFIG_SYSTEM_LIBRARY_PATH[unexport] = "1"
  89. PKG_CONFIG_SYSTEM_INCLUDE_PATH[unexport] = "1"
  90. # we dont want libc-*libc to kick in for native recipes
  91. LIBCOVERRIDE = ""
  92. CLASSOVERRIDE = "class-native"
  93. MACHINEOVERRIDES = ""
  94. MACHINE_FEATURES = ""
  95. PATH_prepend = "${COREBASE}/scripts/native-intercept:"
  96. # This class encodes staging paths into its scripts data so can only be
  97. # reused if we manipulate the paths.
  98. SSTATE_SCAN_CMD ?= "${SSTATE_SCAN_CMD_NATIVE}"
  99. # No strip sysroot when DEBUG_BUILD is enabled
  100. INHIBIT_SYSROOT_STRIP ?= "${@oe.utils.vartrue('DEBUG_BUILD', '1', '', d)}"
  101. python native_virtclass_handler () {
  102. pn = e.data.getVar("PN")
  103. if not pn.endswith("-native"):
  104. return
  105. # Set features here to prevent appends and distro features backfill
  106. # from modifying native distro features
  107. features = set(d.getVar("DISTRO_FEATURES_NATIVE").split())
  108. filtered = set(bb.utils.filter("DISTRO_FEATURES", d.getVar("DISTRO_FEATURES_FILTER_NATIVE"), d).split())
  109. d.setVar("DISTRO_FEATURES", " ".join(sorted(features | filtered)))
  110. classextend = e.data.getVar('BBCLASSEXTEND') or ""
  111. if "native" not in classextend:
  112. return
  113. def map_dependencies(varname, d, suffix = ""):
  114. if suffix:
  115. varname = varname + "_" + suffix
  116. deps = d.getVar(varname)
  117. if not deps:
  118. return
  119. deps = bb.utils.explode_deps(deps)
  120. newdeps = []
  121. for dep in deps:
  122. if dep == pn:
  123. continue
  124. elif "-cross-" in dep:
  125. newdeps.append(dep.replace("-cross", "-native"))
  126. elif not dep.endswith("-native"):
  127. newdeps.append(dep + "-native")
  128. else:
  129. newdeps.append(dep)
  130. d.setVar(varname, " ".join(newdeps))
  131. map_dependencies("DEPENDS", e.data)
  132. for pkg in [e.data.getVar("PN"), "", "${PN}"]:
  133. map_dependencies("RDEPENDS", e.data, pkg)
  134. map_dependencies("RRECOMMENDS", e.data, pkg)
  135. map_dependencies("RSUGGESTS", e.data, pkg)
  136. map_dependencies("RPROVIDES", e.data, pkg)
  137. map_dependencies("RREPLACES", e.data, pkg)
  138. provides = e.data.getVar("PROVIDES")
  139. nprovides = []
  140. for prov in provides.split():
  141. if prov.find(pn) != -1:
  142. nprovides.append(prov)
  143. elif not prov.endswith("-native"):
  144. nprovides.append(prov.replace(prov, prov + "-native"))
  145. else:
  146. nprovides.append(prov)
  147. e.data.setVar("PROVIDES", ' '.join(nprovides))
  148. }
  149. addhandler native_virtclass_handler
  150. native_virtclass_handler[eventmask] = "bb.event.RecipePreFinalise"
  151. python do_addto_recipe_sysroot () {
  152. bb.build.exec_func("extend_recipe_sysroot", d)
  153. }
  154. addtask addto_recipe_sysroot after do_populate_sysroot
  155. do_addto_recipe_sysroot[deptask] = "do_populate_sysroot"
  156. inherit nopackages
  157. do_packagedata[stamp-extra-info] = ""
  158. USE_NLS = "no"
  159. RECIPERDEPTASK = "do_populate_sysroot"
  160. do_populate_sysroot[rdeptask] = "${RECIPERDEPTASK}"