native.bbclass 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  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_FPU = ""
  25. HOST_ARCH = "${BUILD_ARCH}"
  26. HOST_OS = "${BUILD_OS}"
  27. HOST_VENDOR = "${BUILD_VENDOR}"
  28. HOST_PREFIX = "${BUILD_PREFIX}"
  29. HOST_CC_ARCH = "${BUILD_CC_ARCH}"
  30. HOST_LD_ARCH = "${BUILD_LD_ARCH}"
  31. HOST_AS_ARCH = "${BUILD_AS_ARCH}"
  32. CPPFLAGS = "${BUILD_CPPFLAGS}"
  33. CFLAGS = "${BUILD_CFLAGS}"
  34. CXXFLAGS = "${BUILD_CFLAGS}"
  35. LDFLAGS = "${BUILD_LDFLAGS}"
  36. LDFLAGS_build-darwin = "-L${STAGING_LIBDIR_NATIVE} "
  37. STAGING_BINDIR = "${STAGING_BINDIR_NATIVE}"
  38. STAGING_BINDIR_CROSS = "${STAGING_BINDIR_NATIVE}"
  39. # native pkg doesn't need the TOOLCHAIN_OPTIONS.
  40. TOOLCHAIN_OPTIONS = ""
  41. DEPENDS_GETTEXT = "gettext-native"
  42. # Don't build ptest natively
  43. PTEST_ENABLED = "0"
  44. # Don't use site files for native builds
  45. export CONFIG_SITE = ""
  46. # set the compiler as well. It could have been set to something else
  47. export CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_ARCH}"
  48. export CXX = "${CCACHE}${HOST_PREFIX}g++ ${HOST_CC_ARCH}"
  49. export F77 = "${CCACHE}${HOST_PREFIX}g77 ${HOST_CC_ARCH}"
  50. export CPP = "${HOST_PREFIX}gcc ${HOST_CC_ARCH} -E"
  51. export LD = "${HOST_PREFIX}ld ${HOST_LD_ARCH} "
  52. export CCLD = "${CC}"
  53. export AR = "${HOST_PREFIX}ar"
  54. export AS = "${HOST_PREFIX}as ${HOST_AS_ARCH}"
  55. export RANLIB = "${HOST_PREFIX}ranlib"
  56. export STRIP = "${HOST_PREFIX}strip"
  57. # Path prefixes
  58. base_prefix = "${STAGING_DIR_NATIVE}"
  59. prefix = "${STAGING_DIR_NATIVE}${prefix_native}"
  60. exec_prefix = "${STAGING_DIR_NATIVE}${prefix_native}"
  61. libdir = "${STAGING_DIR_NATIVE}${libdir_native}"
  62. baselib = "lib"
  63. # Libtool's default paths are correct for the native machine
  64. lt_cv_sys_lib_dlsearch_path_spec[unexport] = "1"
  65. NATIVE_PACKAGE_PATH_SUFFIX ?= ""
  66. bindir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
  67. libdir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
  68. libexecdir .= "${NATIVE_PACKAGE_PATH_SUFFIX}"
  69. do_populate_sysroot[sstate-inputdirs] = "${SYSROOT_DESTDIR}/${STAGING_DIR_NATIVE}/"
  70. do_populate_sysroot[sstate-outputdirs] = "${STAGING_DIR_NATIVE}/"
  71. # Since we actually install these into situ there is no staging prefix
  72. STAGING_DIR_HOST = ""
  73. STAGING_DIR_TARGET = ""
  74. PKG_CONFIG_DIR = "${libdir}/pkgconfig"
  75. EXTRA_NATIVE_PKGCONFIG_PATH ?= ""
  76. PKG_CONFIG_PATH .= "${EXTRA_NATIVE_PKGCONFIG_PATH}"
  77. PKG_CONFIG_SYSROOT_DIR = ""
  78. # we dont want libc-uclibc or libc-glibc to kick in for native recipes
  79. LIBCOVERRIDE = ""
  80. CLASSOVERRIDE = "class-native"
  81. PATH_prepend = "${COREBASE}/scripts/native-intercept:"
  82. python native_virtclass_handler () {
  83. classextend = e.data.getVar('BBCLASSEXTEND', True) or ""
  84. if "native" not in classextend:
  85. return
  86. pn = e.data.getVar("PN", True)
  87. if not pn.endswith("-native"):
  88. return
  89. def map_dependencies(varname, d, suffix = ""):
  90. if suffix:
  91. varname = varname + "_" + suffix
  92. deps = d.getVar(varname, True)
  93. if not deps:
  94. return
  95. deps = bb.utils.explode_deps(deps)
  96. newdeps = []
  97. for dep in deps:
  98. if dep.endswith("-cross"):
  99. newdeps.append(dep.replace("-cross", "-native"))
  100. elif not dep.endswith("-native"):
  101. newdeps.append(dep + "-native")
  102. else:
  103. newdeps.append(dep)
  104. d.setVar(varname, " ".join(newdeps))
  105. map_dependencies("DEPENDS", e.data)
  106. for pkg in [e.data.getVar("PN", True), "", "${PN}"]:
  107. map_dependencies("RDEPENDS", e.data, pkg)
  108. map_dependencies("RRECOMMENDS", e.data, pkg)
  109. map_dependencies("RSUGGESTS", e.data, pkg)
  110. map_dependencies("RPROVIDES", e.data, pkg)
  111. map_dependencies("RREPLACES", e.data, pkg)
  112. provides = e.data.getVar("PROVIDES", True)
  113. for prov in provides.split():
  114. if prov.find(pn) != -1:
  115. continue
  116. if not prov.endswith("-native"):
  117. provides = provides.replace(prov, prov + "-native")
  118. e.data.setVar("PROVIDES", provides)
  119. e.data.setVar("OVERRIDES", e.data.getVar("OVERRIDES", False) + ":virtclass-native")
  120. }
  121. addhandler native_virtclass_handler
  122. native_virtclass_handler[eventmask] = "bb.event.RecipePreFinalise"
  123. do_package[noexec] = "1"
  124. do_packagedata[noexec] = "1"
  125. do_package_write_ipk[noexec] = "1"
  126. do_package_write_deb[noexec] = "1"
  127. do_package_write_rpm[noexec] = "1"
  128. do_populate_sysroot[stamp-extra-info] = ""