diff options
Diffstat (limited to 'meta/classes/native.bbclass')
-rw-r--r-- | meta/classes/native.bbclass | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/meta/classes/native.bbclass b/meta/classes/native.bbclass new file mode 100644 index 0000000000..dcd364b92c --- /dev/null +++ b/meta/classes/native.bbclass | |||
@@ -0,0 +1,175 @@ | |||
1 | # We want native packages to be relocatable | ||
2 | inherit relocatable | ||
3 | |||
4 | # Native packages are built indirectly via dependency, | ||
5 | # no need for them to be a direct target of 'world' | ||
6 | EXCLUDE_FROM_WORLD = "1" | ||
7 | |||
8 | PACKAGES = "" | ||
9 | PACKAGES_class-native = "" | ||
10 | PACKAGES_DYNAMIC = "" | ||
11 | PACKAGES_DYNAMIC_class-native = "" | ||
12 | PACKAGE_ARCH = "${BUILD_ARCH}" | ||
13 | |||
14 | # used by cmake class | ||
15 | OECMAKE_RPATH = "${libdir}" | ||
16 | OECMAKE_RPATH_class-native = "${libdir}" | ||
17 | |||
18 | # When this class has packaging enabled, setting | ||
19 | # RPROVIDES becomes unnecessary. | ||
20 | RPROVIDES = "${PN}" | ||
21 | |||
22 | TARGET_ARCH = "${BUILD_ARCH}" | ||
23 | TARGET_OS = "${BUILD_OS}" | ||
24 | TARGET_VENDOR = "${BUILD_VENDOR}" | ||
25 | TARGET_PREFIX = "${BUILD_PREFIX}" | ||
26 | TARGET_CC_ARCH = "${BUILD_CC_ARCH}" | ||
27 | TARGET_LD_ARCH = "${BUILD_LD_ARCH}" | ||
28 | TARGET_AS_ARCH = "${BUILD_AS_ARCH}" | ||
29 | TARGET_CPPFLAGS = "${BUILD_CPPFLAGS}" | ||
30 | TARGET_CFLAGS = "${BUILD_CFLAGS}" | ||
31 | TARGET_CXXFLAGS = "${BUILD_CXXFLAGS}" | ||
32 | TARGET_LDFLAGS = "${BUILD_LDFLAGS}" | ||
33 | TARGET_FPU = "" | ||
34 | |||
35 | HOST_ARCH = "${BUILD_ARCH}" | ||
36 | HOST_OS = "${BUILD_OS}" | ||
37 | HOST_VENDOR = "${BUILD_VENDOR}" | ||
38 | HOST_PREFIX = "${BUILD_PREFIX}" | ||
39 | HOST_CC_ARCH = "${BUILD_CC_ARCH}" | ||
40 | HOST_LD_ARCH = "${BUILD_LD_ARCH}" | ||
41 | HOST_AS_ARCH = "${BUILD_AS_ARCH}" | ||
42 | |||
43 | CPPFLAGS = "${BUILD_CPPFLAGS}" | ||
44 | CFLAGS = "${BUILD_CFLAGS}" | ||
45 | CXXFLAGS = "${BUILD_CFLAGS}" | ||
46 | LDFLAGS = "${BUILD_LDFLAGS}" | ||
47 | LDFLAGS_build-darwin = "-L${STAGING_LIBDIR_NATIVE} " | ||
48 | |||
49 | STAGING_BINDIR = "${STAGING_BINDIR_NATIVE}" | ||
50 | STAGING_BINDIR_CROSS = "${STAGING_BINDIR_NATIVE}" | ||
51 | |||
52 | # native pkg doesn't need the TOOLCHAIN_OPTIONS. | ||
53 | TOOLCHAIN_OPTIONS = "" | ||
54 | |||
55 | DEPENDS_GETTEXT = "gettext-native" | ||
56 | |||
57 | # Don't build ptest natively | ||
58 | PTEST_ENABLED = "0" | ||
59 | |||
60 | # Don't use site files for native builds | ||
61 | export CONFIG_SITE = "${COREBASE}/meta/site/native" | ||
62 | |||
63 | # set the compiler as well. It could have been set to something else | ||
64 | export CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_ARCH}" | ||
65 | export CXX = "${CCACHE}${HOST_PREFIX}g++ ${HOST_CC_ARCH}" | ||
66 | export FC = "${CCACHE}${HOST_PREFIX}gfortran ${HOST_CC_ARCH}" | ||
67 | export CPP = "${HOST_PREFIX}gcc ${HOST_CC_ARCH} -E" | ||
68 | export LD = "${HOST_PREFIX}ld ${HOST_LD_ARCH} " | ||
69 | export CCLD = "${CC}" | ||
70 | export AR = "${HOST_PREFIX}ar" | ||
71 | export AS = "${HOST_PREFIX}as ${HOST_AS_ARCH}" | ||
72 | export RANLIB = "${HOST_PREFIX}ranlib" | ||
73 | export STRIP = "${HOST_PREFIX}strip" | ||
74 | |||
75 | # Path prefixes | ||
76 | base_prefix = "${STAGING_DIR_NATIVE}" | ||
77 | prefix = "${STAGING_DIR_NATIVE}${prefix_native}" | ||
78 | exec_prefix = "${STAGING_DIR_NATIVE}${prefix_native}" | ||
79 | |||
80 | bindir = "${STAGING_BINDIR_NATIVE}" | ||
81 | sbindir = "${STAGING_SBINDIR_NATIVE}" | ||
82 | libdir = "${STAGING_LIBDIR_NATIVE}" | ||
83 | includedir = "${STAGING_INCDIR_NATIVE}" | ||
84 | sysconfdir = "${STAGING_ETCDIR_NATIVE}" | ||
85 | datadir = "${STAGING_DATADIR_NATIVE}" | ||
86 | |||
87 | baselib = "lib" | ||
88 | |||
89 | # Libtool's default paths are correct for the native machine | ||
90 | lt_cv_sys_lib_dlsearch_path_spec[unexport] = "1" | ||
91 | |||
92 | NATIVE_PACKAGE_PATH_SUFFIX ?= "" | ||
93 | bindir .= "${NATIVE_PACKAGE_PATH_SUFFIX}" | ||
94 | libdir .= "${NATIVE_PACKAGE_PATH_SUFFIX}" | ||
95 | libexecdir .= "${NATIVE_PACKAGE_PATH_SUFFIX}" | ||
96 | |||
97 | do_populate_sysroot[sstate-inputdirs] = "${SYSROOT_DESTDIR}/${STAGING_DIR_NATIVE}/" | ||
98 | do_populate_sysroot[sstate-outputdirs] = "${STAGING_DIR_NATIVE}/" | ||
99 | |||
100 | # Since we actually install these into situ there is no staging prefix | ||
101 | STAGING_DIR_HOST = "" | ||
102 | STAGING_DIR_TARGET = "" | ||
103 | PKG_CONFIG_DIR = "${libdir}/pkgconfig" | ||
104 | |||
105 | EXTRA_NATIVE_PKGCONFIG_PATH ?= "" | ||
106 | PKG_CONFIG_PATH .= "${EXTRA_NATIVE_PKGCONFIG_PATH}" | ||
107 | PKG_CONFIG_SYSROOT_DIR = "" | ||
108 | |||
109 | # we dont want libc-uclibc or libc-glibc to kick in for native recipes | ||
110 | LIBCOVERRIDE = "" | ||
111 | CLASSOVERRIDE = "class-native" | ||
112 | MACHINEOVERRIDES = "" | ||
113 | |||
114 | PATH_prepend = "${COREBASE}/scripts/native-intercept:" | ||
115 | |||
116 | python native_virtclass_handler () { | ||
117 | classextend = e.data.getVar('BBCLASSEXTEND', True) or "" | ||
118 | if "native" not in classextend: | ||
119 | return | ||
120 | |||
121 | pn = e.data.getVar("PN", True) | ||
122 | if not pn.endswith("-native"): | ||
123 | return | ||
124 | |||
125 | def map_dependencies(varname, d, suffix = ""): | ||
126 | if suffix: | ||
127 | varname = varname + "_" + suffix | ||
128 | deps = d.getVar(varname, True) | ||
129 | if not deps: | ||
130 | return | ||
131 | deps = bb.utils.explode_deps(deps) | ||
132 | newdeps = [] | ||
133 | for dep in deps: | ||
134 | if "-cross-" in dep: | ||
135 | newdeps.append(dep.replace("-cross", "-native")) | ||
136 | elif not dep.endswith("-native"): | ||
137 | newdeps.append(dep + "-native") | ||
138 | else: | ||
139 | newdeps.append(dep) | ||
140 | d.setVar(varname, " ".join(newdeps)) | ||
141 | |||
142 | map_dependencies("DEPENDS", e.data) | ||
143 | for pkg in [e.data.getVar("PN", True), "", "${PN}"]: | ||
144 | map_dependencies("RDEPENDS", e.data, pkg) | ||
145 | map_dependencies("RRECOMMENDS", e.data, pkg) | ||
146 | map_dependencies("RSUGGESTS", e.data, pkg) | ||
147 | map_dependencies("RPROVIDES", e.data, pkg) | ||
148 | map_dependencies("RREPLACES", e.data, pkg) | ||
149 | |||
150 | provides = e.data.getVar("PROVIDES", True) | ||
151 | for prov in provides.split(): | ||
152 | if prov.find(pn) != -1: | ||
153 | continue | ||
154 | if not prov.endswith("-native"): | ||
155 | provides = provides.replace(prov, prov + "-native") | ||
156 | e.data.setVar("PROVIDES", provides) | ||
157 | |||
158 | e.data.setVar("OVERRIDES", e.data.getVar("OVERRIDES", False) + ":virtclass-native") | ||
159 | } | ||
160 | |||
161 | addhandler native_virtclass_handler | ||
162 | native_virtclass_handler[eventmask] = "bb.event.RecipePreFinalise" | ||
163 | |||
164 | deltask package | ||
165 | deltask packagedata | ||
166 | deltask package_qa | ||
167 | deltask package_write_ipk | ||
168 | deltask package_write_deb | ||
169 | deltask package_write_rpm | ||
170 | deltask package_write | ||
171 | |||
172 | do_packagedata[stamp-extra-info] = "" | ||
173 | do_populate_sysroot[stamp-extra-info] = "" | ||
174 | |||
175 | USE_NLS = "no" | ||