diff options
Diffstat (limited to 'meta-aarch64')
15 files changed, 1200 insertions, 0 deletions
diff --git a/meta-aarch64/conf/layer.conf b/meta-aarch64/conf/layer.conf new file mode 100644 index 0000000..010a700 --- /dev/null +++ b/meta-aarch64/conf/layer.conf | |||
@@ -0,0 +1,14 @@ | |||
1 | BBPATH .= ":${LAYERDIR}" | ||
2 | BBFILES += "\ | ||
3 | ${LAYERDIR}/recipes*/*/*.bb \ | ||
4 | ${LAYERDIR}/recipes*/*/*.bbappend \ | ||
5 | " | ||
6 | |||
7 | BBFILE_COLLECTIONS += "aarch64" | ||
8 | BBFILE_PATTERN_aarch64 := "^${LAYERDIR}/" | ||
9 | BBFILE_PRIORITY_aarch64 = "20" | ||
10 | |||
11 | # do not error out on bbappends for missing recipes (mysql5) | ||
12 | BB_DANGLINGAPPENDS_WARNONLY = "true" | ||
13 | |||
14 | LAYERDEPENDS_aarch64 = "linaro linaro-toolchain" | ||
diff --git a/meta-aarch64/conf/machine/genericarmv8.conf b/meta-aarch64/conf/machine/genericarmv8.conf new file mode 100644 index 0000000..466900a --- /dev/null +++ b/meta-aarch64/conf/machine/genericarmv8.conf | |||
@@ -0,0 +1,37 @@ | |||
1 | #@TYPE: Machine | ||
2 | #@NAME: generic armv8 machine | ||
3 | #@DESCRIPTION: generic machine to be used by linaro-media-create | ||
4 | |||
5 | require conf/machine/include/arm64/arch-armv8.inc | ||
6 | |||
7 | PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg" | ||
8 | |||
9 | XSERVER ?= "xserver-xorg \ | ||
10 | mesa-driver-swrast \ | ||
11 | xf86-input-evdev \ | ||
12 | xf86-input-mouse \ | ||
13 | xf86-video-fbdev \ | ||
14 | xf86-input-keyboard" | ||
15 | |||
16 | MACHINE_FEATURES = "" | ||
17 | |||
18 | # Don't include kernels in standard images | ||
19 | RDEPENDS_kernel-base = "" | ||
20 | |||
21 | PREFERRED_PROVIDER_virtual/kernel ?= "linux-linaro-aarch64" | ||
22 | |||
23 | KERNEL_IMAGETYPE = "Image" | ||
24 | |||
25 | # We have to disable SERIAL_CONSOLE due to auto-serial-console | ||
26 | #SERIAL_CONSOLE = "115200 ttyAMA0" | ||
27 | |||
28 | # Force auto-serial-console to be used by all image types | ||
29 | # Ideally this would be part of core oe or as a bbclassappend, | ||
30 | # but as we don't have an easy way to append a class, defining | ||
31 | # it here | ||
32 | EXTRA_IMAGE_FEATURES += "autoserial" | ||
33 | FEATURE_PACKAGES_autoserial = "auto-serial-console" | ||
34 | |||
35 | # we do not want to have getty running on tty1 as we run | ||
36 | # auto-serial-console there | ||
37 | USE_VT = "0" | ||
diff --git a/meta-aarch64/conf/machine/genericarmv8b.conf b/meta-aarch64/conf/machine/genericarmv8b.conf new file mode 100644 index 0000000..e70de08 --- /dev/null +++ b/meta-aarch64/conf/machine/genericarmv8b.conf | |||
@@ -0,0 +1,8 @@ | |||
1 | #@TYPE: Machine | ||
2 | #@NAME: generic armv8 big endian machine | ||
3 | #@DESCRIPTION: generic machine to be used by linaro-media-create | ||
4 | DEFAULTTUNE = "aarch64_be" | ||
5 | |||
6 | PREFERRED_PROVIDER_virtual/kernel ?= "linux-dummy" | ||
7 | |||
8 | require conf/machine/genericarmv8.conf | ||
diff --git a/meta-aarch64/conf/machine/include/arm64/arch-armv8.inc b/meta-aarch64/conf/machine/include/arm64/arch-armv8.inc new file mode 100644 index 0000000..c86142a --- /dev/null +++ b/meta-aarch64/conf/machine/include/arm64/arch-armv8.inc | |||
@@ -0,0 +1,20 @@ | |||
1 | DEFAULTTUNE ?= "aarch64" | ||
2 | |||
3 | ARMPKGARCH ?= "aarch64" | ||
4 | |||
5 | TUNEVALID[aarch64] = "Enable instructions for aarch64" | ||
6 | TUNEVALID[bigendian] = "Enable big-endian mode." | ||
7 | TUNECONFLICTS[aarch64] = "" | ||
8 | MACHINEOVERRIDES .= "${@bb.utils.contains("TUNE_FEATURES", "aarch64", ":aarch64", "" ,d)}" | ||
9 | |||
10 | # Little Endian base configs | ||
11 | AVAILTUNES += "aarch64 aarch64_be" | ||
12 | TUNE_FEATURES_tune-aarch64 ?= "aarch64" | ||
13 | TUNE_FEATURES_tune-aarch64_be ?= "${TUNE_FEATURES_tune-aarch64} bigendian" | ||
14 | |||
15 | ARMPKGSFX_ENDIAN = "${@bb.utils.contains("TUNE_FEATURES", "bigendian", "_be", "", d)}" | ||
16 | |||
17 | TUNE_ARCH = "aarch64${ARMPKGSFX_ENDIAN}" | ||
18 | TUNE_PKGARCH = "aarch64${ARMPKGSFX_ENDIAN}" | ||
19 | |||
20 | PACKAGE_EXTRA_ARCHS = "aarch64${ARMPKGSFX_ENDIAN}" | ||
diff --git a/meta-aarch64/recipes-core/openjdk/openjdk-8-common.inc b/meta-aarch64/recipes-core/openjdk/openjdk-8-common.inc new file mode 100644 index 0000000..f251e14 --- /dev/null +++ b/meta-aarch64/recipes-core/openjdk/openjdk-8-common.inc | |||
@@ -0,0 +1,267 @@ | |||
1 | DESCRIPTION = "Java runtime based upon the OpenJDK8" | ||
2 | HOMEPAGE = "http://openjdk.java.net/projects/jdk8" | ||
3 | LICENSE = "GPL-2.0-with-classpath-exception" | ||
4 | PRIORITY = "optional" | ||
5 | SECTION = "libs" | ||
6 | INHIBIT_PACKAGE_STRIP = "1" | ||
7 | #INHIBIT_PACKAGE_DEBUG_SPLIT = "1" | ||
8 | |||
9 | INC_PR = "r16" | ||
10 | |||
11 | SRC_URI = " \ | ||
12 | ${OPENJDK_URI} \ | ||
13 | " | ||
14 | |||
15 | libdir_jvm ?= "${libdir}/jvm" | ||
16 | |||
17 | JDKPN = "openjdk-8" | ||
18 | JDK_DIR = "java-8-openjdk" | ||
19 | JDK_HOME = "${libdir_jvm}/${JDK_DIR}" | ||
20 | |||
21 | PN = "${JDKPN}-jre" | ||
22 | PROVIDES += "${JDKPN}" | ||
23 | |||
24 | DEPENDS = " \ | ||
25 | zip-native \ | ||
26 | zlib \ | ||
27 | jpeg libpng giflib \ | ||
28 | gtk+ glib-2.0 \ | ||
29 | cups fontconfig \ | ||
30 | libxt libxinerama libxrender libxtst libxi \ | ||
31 | freetype alsa-lib libffi libxt \ | ||
32 | " | ||
33 | |||
34 | # No package should directly depend on this (it should require | ||
35 | # java2-runtime instead). | ||
36 | PRIVATE_LIBS = "\ | ||
37 | libunpack.so libverify.so libjava.so libzip.so libnpt.so \ | ||
38 | libjava_crw_demo.so libhprof.so libnet.so libnio.so \ | ||
39 | libmanagement.so libinstrument.so libjsound.so libjsoundalsa.so \ | ||
40 | libj2pcsc.so libj2pkcs11.so libj2gss.so libmlib_image.so \ | ||
41 | libawt.so libsplashscreen.so libfreetype.so.6 libfontmanager.so \ | ||
42 | libjpeg.so liblcms.so librmi.so libjawt.so libjaas_unix.so \ | ||
43 | libattach.so libjdwp.so libdt_socket.so libhpi.so libjli.so \ | ||
44 | libmawt.so libjvm.so \ | ||
45 | libversionCheck.so libcompiledMethodLoad.so libgctest.so \ | ||
46 | libheapViewer.so libheapTracker.so libminst.so libmtrace.so \ | ||
47 | libwaiters.so libhprof.so \ | ||
48 | " | ||
49 | |||
50 | COMPATIBLE_HOST = "(aarch64).*-linux" | ||
51 | JAVA_HOME[unexport] = "1" | ||
52 | S="${WORKDIR}/openjdk8-aarch64-port-snapshot" | ||
53 | |||
54 | # The compiler tests in do_configure seem to drop TARGET_CC_ARCH from $CC, so add it into CFLAGS. | ||
55 | CFLAGS =+ "${TARGET_CC_ARCH} ${TOOLCHAIN_OPTIONS}" | ||
56 | CXXFLAGS =+ "${TARGET_CC_ARCH} ${TOOLCHAIN_OPTIONS}" | ||
57 | export EXTRA_CFLAGS = "${TOOLCHAIN_OPTIONS}" | ||
58 | ASNEEDED = "" | ||
59 | |||
60 | do_configure() { | ||
61 | unset MAKE | ||
62 | bash ./configure --with-debug-level=release --with-jvm-variants=client,server --with-sys-root=${STAGING_DIR_TARGET} --openjdk-target=${TARGET_SYS} --with-zlib=system --with-stdc++lib=dynamic --disable-ccache --disable-zip-debug-info | ||
63 | } | ||
64 | |||
65 | do_compile() { | ||
66 | make \ | ||
67 | LOG=debug \ | ||
68 | ALT_SDT_H=/openjdk/path/to/a/nonexistent/directory \ | ||
69 | EXTRA_CFLAGS='${EXTRA_CFLAGS}' \ | ||
70 | CC='${CC}' \ | ||
71 | CXX='${CXX}' \ | ||
72 | LD='${CC} ${LDFLAGS}' \ | ||
73 | LDCXX='${CXX} ${LDFLAGS}' \ | ||
74 | LDEXE='${CC} ${LDFLAGS}' \ | ||
75 | LDEXECXX='${CXX} ${LDFLAGS}' \ | ||
76 | images | ||
77 | |||
78 | } | ||
79 | |||
80 | do_install() { | ||
81 | install -d ${D}${libdir_jvm} | ||
82 | install -d ${D}${JDK_HOME}/jtreg | ||
83 | install -d ${D}${JDK_HOME}/jtreg/hotspot | ||
84 | install -d ${D}${JDK_HOME}/jtreg/jdk | ||
85 | cp -R ${S}/build/${BUILD_DIR}/j2sdk-image/* ${D}${JDK_HOME} | ||
86 | cp -R ${S}/hotspot/test ${D}${JDK_HOME}/jtreg/hotspot | ||
87 | cp -R ${S}/jdk/test ${D}${JDK_HOME}/jtreg/jdk | ||
88 | # The OpenJDK build does its own thing with debuginfo files; as we | ||
89 | # default to a 'release' build we remove these files. | ||
90 | find ${D}${JDK_HOME} -name \*.debuginfo -print | xargs rm | ||
91 | # The upstream Mercurial repo has various incompatible binaries checked in. | ||
92 | # Remove these otherwise bitbake complains about mismatched architecture, et al. | ||
93 | find ${D}${JDK_HOME}/jtreg -name \*.so -print | xargs rm | ||
94 | rm ${D}${JDK_HOME}/jtreg/jdk/test/sun/management/jmxremote/bootstrap/linux-i586/launcher | ||
95 | rm ${D}${JDK_HOME}/jtreg/jdk/test/sun/management/jmxremote/bootstrap/linux-amd64/launcher | ||
96 | rm ${D}${JDK_HOME}/jtreg/jdk/test/sun/management/jmxremote/bootstrap/solaris-sparcv9/launcher | ||
97 | rm ${D}${JDK_HOME}/jtreg/jdk/test/sun/management/jmxremote/bootstrap/solaris-amd64/launcher | ||
98 | chmod -R u+rw,go+r ${D}${JDK_HOME} | ||
99 | } | ||
100 | |||
101 | PACKAGES = " \ | ||
102 | ${JDKPN}-jdk \ | ||
103 | ${JDKPN}-doc \ | ||
104 | ${JDKPN}-source \ | ||
105 | ${JDKPN}-demo \ | ||
106 | ${JDKPN}-jtreg \ | ||
107 | ${JDKPN}-jre \ | ||
108 | " | ||
109 | |||
110 | FILES_${JDKPN}-jdk = " \ | ||
111 | ${JDK_HOME}/bin \ | ||
112 | ${JDK_HOME}/lib \ | ||
113 | ${JDK_HOME}/include \ | ||
114 | ${JDK_HOME}/ASSEMBLY_EXCEPTION \ | ||
115 | ${JDK_HOME}/release \ | ||
116 | ${JDK_HOME}/THIRD_PARTY_README \ | ||
117 | ${JDK_HOME}/LICENSE \ | ||
118 | " | ||
119 | |||
120 | FILES_${JDKPN}-doc = " \ | ||
121 | ${JDK_HOME}/man \ | ||
122 | " | ||
123 | |||
124 | FILES_${JDKPN}-source = " \ | ||
125 | ${JDK_HOME}/src.zip \ | ||
126 | " | ||
127 | |||
128 | FILES_${JDKPN}-demo = " \ | ||
129 | ${JDK_HOME}/demo \ | ||
130 | ${JDK_HOME}/sample \ | ||
131 | " | ||
132 | |||
133 | FILES_${JDKPN}-jtreg = " \ | ||
134 | ${JDK_HOME}/jtreg \ | ||
135 | " | ||
136 | |||
137 | FILES_${PN} = " \ | ||
138 | ${JDK_HOME}/jre \ | ||
139 | " | ||
140 | |||
141 | INSANE_SKIP_${JDKPN}-jdk = "dev-so" | ||
142 | INSANE_SKIP_${JDKPN}-jre = "dev-so" | ||
143 | |||
144 | RPROVIDES_${JDKPN}-jre = "java2-runtime java2-vm" | ||
145 | RPROVIDES_${JDKPN}-jdk = "java2-runtime java2-vm" | ||
146 | RDEPENDS_${JDKPN}-demo = "java2-runtime" | ||
147 | |||
148 | RRECOMMENDS_${JDKPN}-jre = "liberation-fonts" | ||
149 | RRECOMMENDS_${JDKPN}-jdk = "liberation-fonts" | ||
150 | |||
151 | inherit update-alternatives | ||
152 | |||
153 | pkg_postinst_${JDKPN}-jre () { | ||
154 | update-alternatives --install ${bindir}/java java ${JDK_HOME}/jre/bin/java 75 | ||
155 | update-alternatives --install ${bindir}/jjs jjs ${JDK_HOME}/jre/bin/jjs 75 | ||
156 | update-alternatives --install ${bindir}/keytool keytool ${JDK_HOME}/jre/bin/keytool 75 | ||
157 | update-alternatives --install ${bindir}/orbd orbd ${JDK_HOME}/jre/bin/orbd 75 | ||
158 | update-alternatives --install ${bindir}/pack200 pack200 ${JDK_HOME}/jre/bin/pack200 75 | ||
159 | update-alternatives --install ${bindir}/policytool policytool ${JDK_HOME}/jre/bin/policytool 75 | ||
160 | update-alternatives --install ${bindir}/rmid rmid ${JDK_HOME}/jre/bin/rmid 75 | ||
161 | update-alternatives --install ${bindir}/rmiregistry rmiregistry ${JDK_HOME}/jre/bin/rmiregistry 75 | ||
162 | update-alternatives --install ${bindir}/servertool servertool ${JDK_HOME}/jre/bin/servertool 75 | ||
163 | update-alternatives --install ${bindir}/tnameserv tnameserv ${JDK_HOME}/jre/bin/tnameserv 75 | ||
164 | update-alternatives --install ${bindir}/unpack200 unpack200 ${JDK_HOME}/jre/bin/unpack200 75 | ||
165 | } | ||
166 | |||
167 | pkg_prerm_${JDKPN}-jre () { | ||
168 | update-alternatives --remove java ${JDK_HOME}/jre/bin/java | ||
169 | update-alternatives --remove jjs ${JDK_HOME}/jre/bin/jjs | ||
170 | update-alternatives --remove keytool ${JDK_HOME}/jre/bin/keytool | ||
171 | update-alternatives --remove orbd ${JDK_HOME}/jre/bin/orbd | ||
172 | update-alternatives --remove pack200 ${JDK_HOME}/jre/bin/pack200 | ||
173 | update-alternatives --remove policytool ${JDK_HOME}/jre/bin/policytool | ||
174 | update-alternatives --remove rmid ${JDK_HOME}/jre/bin/rmid | ||
175 | update-alternatives --remove rmiregistry ${JDK_HOME}/jre/bin/rmiregistry | ||
176 | update-alternatives --remove servertool ${JDK_HOME}/jre/bin/servertool | ||
177 | update-alternatives --remove tnameserv ${JDK_HOME}/jre/bin/tnameserv | ||
178 | update-alternatives --remove unpack200 ${JDK_HOME}/jre/bin/unpack200 | ||
179 | } | ||
180 | |||
181 | pkg_postinst_${JDKPN}-jdk () { | ||
182 | update-alternatives --install ${bindir}/appletviewer appletviewer ${JDK_HOME}/bin/appletviewer 100 | ||
183 | update-alternatives --install ${bindir}/extcheck extcheck ${JDK_HOME}/bin/extcheck 100 | ||
184 | update-alternatives --install ${bindir}/idlj idlj ${JDK_HOME}/bin/idlj 100 | ||
185 | update-alternatives --install ${bindir}/jar jar ${JDK_HOME}/bin/jar 100 | ||
186 | update-alternatives --install ${bindir}/jarsigner jarsigner ${JDK_HOME}/bin/jarsigner 100 | ||
187 | update-alternatives --install ${bindir}/java java ${JDK_HOME}/bin/java 100 | ||
188 | update-alternatives --install ${bindir}/javac javac ${JDK_HOME}/bin/javac 100 | ||
189 | update-alternatives --install ${bindir}/javadoc javadoc ${JDK_HOME}/bin/javadoc 100 | ||
190 | update-alternatives --install ${bindir}/javah javah ${JDK_HOME}/bin/javah 100 | ||
191 | update-alternatives --install ${bindir}/javap javap ${JDK_HOME}/bin/javap 100 | ||
192 | update-alternatives --install ${bindir}/java-rmi.cgi java-rmi.cgi ${JDK_HOME}/bin/java-rmi.cgi 100 | ||
193 | update-alternatives --install ${bindir}/jcmd jcmd ${JDK_HOME}/bin/jcmd 100 | ||
194 | update-alternatives --install ${bindir}/jconsole jconsole ${JDK_HOME}/bin/jconsole 100 | ||
195 | update-alternatives --install ${bindir}/jdb jdb ${JDK_HOME}/bin/jdb 100 | ||
196 | update-alternatives --install ${bindir}/jdeps jdeps ${JDK_HOME}/bin/jdeps 100 | ||
197 | update-alternatives --install ${bindir}/jhat jhat ${JDK_HOME}/bin/jhat 100 | ||
198 | update-alternatives --install ${bindir}/jinfo jinfo ${JDK_HOME}/bin/jinfo 100 | ||
199 | update-alternatives --install ${bindir}/jjs jjs ${JDK_HOME}/bin/jjs 100 | ||
200 | update-alternatives --install ${bindir}/jmap jmap ${JDK_HOME}/bin/jmap 100 | ||
201 | update-alternatives --install ${bindir}/jps jps ${JDK_HOME}/bin/jps 100 | ||
202 | update-alternatives --install ${bindir}/jrunscript jrunscript ${JDK_HOME}/bin/jrunscript 100 | ||
203 | update-alternatives --install ${bindir}/jsadebugd jsadebugd ${JDK_HOME}/bin/jsadebugd 100 | ||
204 | update-alternatives --install ${bindir}/jstack jstack ${JDK_HOME}/bin/jstack 100 | ||
205 | update-alternatives --install ${bindir}/jstat jstat ${JDK_HOME}/bin/jstat 100 | ||
206 | update-alternatives --install ${bindir}/jstatd jstatd ${JDK_HOME}/bin/jstatd 100 | ||
207 | update-alternatives --install ${bindir}/keytool keytool ${JDK_HOME}/bin/keytool 100 | ||
208 | update-alternatives --install ${bindir}/native2ascii native2ascii ${JDK_HOME}/bin/native2ascii 100 | ||
209 | update-alternatives --install ${bindir}/orbd orbd ${JDK_HOME}/bin/orbd 100 | ||
210 | update-alternatives --install ${bindir}/pack200 pack200 ${JDK_HOME}/bin/pack200 100 | ||
211 | update-alternatives --install ${bindir}/policytool policytool ${JDK_HOME}/bin/policytool 100 | ||
212 | update-alternatives --install ${bindir}/rmic rmic ${JDK_HOME}/bin/rmic 100 | ||
213 | update-alternatives --install ${bindir}/rmid rmid ${JDK_HOME}/bin/rmid 100 | ||
214 | update-alternatives --install ${bindir}/rmiregistry rmiregistry ${JDK_HOME}/bin/rmiregistry 100 | ||
215 | update-alternatives --install ${bindir}/schemagen schemagen ${JDK_HOME}/bin/schemagen 100 | ||
216 | update-alternatives --install ${bindir}/serialver serialver ${JDK_HOME}/bin/serialver 100 | ||
217 | update-alternatives --install ${bindir}/servertool servertool ${JDK_HOME}/bin/servertool 100 | ||
218 | update-alternatives --install ${bindir}/tnameserv tnameserv ${JDK_HOME}/bin/tnameserv 100 | ||
219 | update-alternatives --install ${bindir}/unpack200 unpack200 ${JDK_HOME}/bin/unpack200 100 | ||
220 | update-alternatives --install ${bindir}/wsgen wsgen ${JDK_HOME}/bin/wsgen 100 | ||
221 | update-alternatives --install ${bindir}/wsimport wsimport ${JDK_HOME}/bin/wsimport 100 | ||
222 | update-alternatives --install ${bindir}/xjc xjc ${JDK_HOME}/bin/xjc 100 | ||
223 | } | ||
224 | |||
225 | pkg_prerm_${JDKPN}-jdk () { | ||
226 | update-alternatives --remove appletviewer ${JDK_HOME}/bin/appletviewer | ||
227 | update-alternatives --remove extcheck ${JDK_HOME}/bin/extcheck | ||
228 | update-alternatives --remove idlj ${JDK_HOME}/bin/idlj | ||
229 | update-alternatives --remove jar ${JDK_HOME}/bin/jar | ||
230 | update-alternatives --remove jarsigner ${JDK_HOME}/bin/jarsigner | ||
231 | update-alternatives --remove java ${JDK_HOME}/bin/java | ||
232 | update-alternatives --remove javac ${JDK_HOME}/bin/javac | ||
233 | update-alternatives --remove javadoc ${JDK_HOME}/bin/javadoc | ||
234 | update-alternatives --remove javah ${JDK_HOME}/bin/javah | ||
235 | update-alternatives --remove javap ${JDK_HOME}/bin/javap | ||
236 | update-alternatives --remove java-rmi.cgi ${JDK_HOME}/bin/java-rmi.cgi | ||
237 | update-alternatives --remove jcmd ${JDK_HOME}/bin/jcmd | ||
238 | update-alternatives --remove jconsole ${JDK_HOME}/bin/jconsole | ||
239 | update-alternatives --remove jdb ${JDK_HOME}/bin/jdb | ||
240 | update-alternatives --remove jdeps ${JDK_HOME}/bin/jdeps | ||
241 | update-alternatives --remove jhat ${JDK_HOME}/bin/jhat | ||
242 | update-alternatives --remove jinfo ${JDK_HOME}/bin/jinfo | ||
243 | update-alternatives --remove jjs ${JDK_HOME}/bin/jjs | ||
244 | update-alternatives --remove jmap ${JDK_HOME}/bin/jmap | ||
245 | update-alternatives --remove jps ${JDK_HOME}/bin/jps | ||
246 | update-alternatives --remove jrunscript ${JDK_HOME}/bin/jrunscript | ||
247 | update-alternatives --remove jsadebugd ${JDK_HOME}/bin/jsadebugd | ||
248 | update-alternatives --remove jstack ${JDK_HOME}/bin/jstack | ||
249 | update-alternatives --remove jstat ${JDK_HOME}/bin/jstat | ||
250 | update-alternatives --remove jstatd ${JDK_HOME}/bin/jstatd | ||
251 | update-alternatives --remove keytool ${JDK_HOME}/bin/keytool | ||
252 | update-alternatives --remove native2ascii ${JDK_HOME}/bin/native2ascii | ||
253 | update-alternatives --remove orbd ${JDK_HOME}/bin/orbd | ||
254 | update-alternatives --remove pack200 ${JDK_HOME}/bin/pack200 | ||
255 | update-alternatives --remove policytool ${JDK_HOME}/bin/policytool | ||
256 | update-alternatives --remove rmic ${JDK_HOME}/bin/rmic | ||
257 | update-alternatives --remove rmid ${JDK_HOME}/bin/rmid | ||
258 | update-alternatives --remove rmiregistry ${JDK_HOME}/bin/rmiregistry | ||
259 | update-alternatives --remove schemagen ${JDK_HOME}/bin/schemagen | ||
260 | update-alternatives --remove serialver ${JDK_HOME}/bin/serialver | ||
261 | update-alternatives --remove servertool ${JDK_HOME}/bin/servertool | ||
262 | update-alternatives --remove tnameserv ${JDK_HOME}/bin/tnameserv | ||
263 | update-alternatives --remove unpack200 ${JDK_HOME}/bin/unpack200 | ||
264 | update-alternatives --remove wsgen ${JDK_HOME}/bin/wsgen | ||
265 | update-alternatives --remove wsimport ${JDK_HOME}/bin/wsimport | ||
266 | update-alternatives --remove xjc ${JDK_HOME}/bin/xjc | ||
267 | } | ||
diff --git a/meta-aarch64/recipes-core/openjdk/openjdk-8_0.1.bb b/meta-aarch64/recipes-core/openjdk/openjdk-8_0.1.bb new file mode 100644 index 0000000..44eef03 --- /dev/null +++ b/meta-aarch64/recipes-core/openjdk/openjdk-8_0.1.bb | |||
@@ -0,0 +1,29 @@ | |||
1 | require openjdk-8-common.inc | ||
2 | |||
3 | PR = "${INC_PR}.0" | ||
4 | |||
5 | OPENJDK_URI = "\ | ||
6 | hg://hg.openjdk.java.net/aarch64-port;protocol=http;destsuffix=hg/jdk8;name=jdk8;module=jdk8 \ | ||
7 | hg://hg.openjdk.java.net/aarch64-port;protocol=http;destsuffix=hg/corba;name=corba;module=jdk8/corba \ | ||
8 | hg://hg.openjdk.java.net/aarch64-port;protocol=http;destsuffix=hg/hotspot;name=hotspot;module=jdk8/hotspot \ | ||
9 | hg://hg.openjdk.java.net/aarch64-port;protocol=http;destsuffix=hg/jaxp;name=jaxp;module=jdk8/jaxp \ | ||
10 | hg://hg.openjdk.java.net/aarch64-port;protocol=http;destsuffix=hg/jaxws;name=jaxws;module=jdk8/jaxws \ | ||
11 | hg://hg.openjdk.java.net/aarch64-port;protocol=http;destsuffix=hg/jdk;name=jdk;module=jdk8/jdk \ | ||
12 | hg://hg.openjdk.java.net/aarch64-port;protocol=http;destsuffix=hg/langtools;name=langtools;module=jdk8/langtools \ | ||
13 | hg://hg.openjdk.java.net/aarch64-port;protocol=http;destsuffix=hg/nashorn;name=nashorn;module=jdk8/nashorn \ | ||
14 | " | ||
15 | |||
16 | SRCREV_jdk8 = "${AUTOREV}" | ||
17 | SRCREV_corba = "${AUTOREV}" | ||
18 | SRCREV_hotspot = "${AUTOREV}" | ||
19 | SRCREV_jaxp = "${AUTOREV}" | ||
20 | SRCREV_jaxws = "${AUTOREV}" | ||
21 | SRCREV_jdk = "${AUTOREV}" | ||
22 | SRCREV_langtools = "${AUTOREV}" | ||
23 | SRCREV_nashorn = "${AUTOREV}" | ||
24 | |||
25 | S = "${WORKDIR}/jdk8" | ||
26 | |||
27 | LIC_FILES_CHKSUM="file://LICENSE;md5=7b4baeedfe2d40cb03536573bc2c89b1" | ||
28 | |||
29 | BUILD_DIR="linux-aarch64-normal-clientANDserver-release/images" | ||
diff --git a/meta-aarch64/recipes-core/packagegroups/packagegroup-core-sdk.bbappend b/meta-aarch64/recipes-core/packagegroups/packagegroup-core-sdk.bbappend new file mode 100644 index 0000000..5d50b62 --- /dev/null +++ b/meta-aarch64/recipes-core/packagegroups/packagegroup-core-sdk.bbappend | |||
@@ -0,0 +1,16 @@ | |||
1 | INCPR = "1" | ||
2 | |||
3 | RDEPENDS_packagegroup-core-sdk = "\ | ||
4 | packagegroup-core-buildessential \ | ||
5 | coreutils \ | ||
6 | ccache \ | ||
7 | diffutils \ | ||
8 | intltool \ | ||
9 | perl-module-re \ | ||
10 | perl-module-text-wrap \ | ||
11 | findutils \ | ||
12 | quilt \ | ||
13 | less \ | ||
14 | ldd \ | ||
15 | file \ | ||
16 | tcl" | ||
diff --git a/meta-aarch64/recipes-kernel/kexec-tools/files/add-arm64-support.patch b/meta-aarch64/recipes-kernel/kexec-tools/files/add-arm64-support.patch new file mode 100644 index 0000000..30b0229 --- /dev/null +++ b/meta-aarch64/recipes-kernel/kexec-tools/files/add-arm64-support.patch | |||
@@ -0,0 +1,521 @@ | |||
1 | From 98215763db92c85668fd217cfc719322ce54e704 Mon Sep 17 00:00:00 2001 | ||
2 | From: Geoff Levand <geoff.levand@linaro.org> | ||
3 | Date: Tue, 13 May 2014 10:59:52 -0700 | ||
4 | Subject: [PATCH 1/1] Add arm64 support | ||
5 | |||
6 | Signed-off-by: Geoff Levand <geoff.levand@linaro.org> | ||
7 | Signed-off-by: Fathi Boudra <fathi.boudra@linaro.org> | ||
8 | --- | ||
9 | configure.ac | 3 | ||
10 | kexec/Makefile | 1 | ||
11 | kexec/arch/arm64/Makefile | 31 +++++ | ||
12 | kexec/arch/arm64/include/arch/options.h | 30 ++++ | ||
13 | kexec/arch/arm64/kexec-arm64.c | 194 ++++++++++++++++++++++++++++++++ | ||
14 | kexec/arch/arm64/kexec-arm64.h | 28 ++++ | ||
15 | kexec/arch/arm64/kexec-elf-arm64.c | 147 ++++++++++++++++++++++++ | ||
16 | kexec/kexec-syscall.h | 9 + | ||
17 | 8 files changed, 441 insertions(+), 2 deletions(-) | ||
18 | create mode 100644 kexec/arch/arm64/Makefile | ||
19 | create mode 100644 kexec/arch/arm64/include/arch/options.h | ||
20 | create mode 100644 kexec/arch/arm64/kexec-arm64.c | ||
21 | create mode 100644 kexec/arch/arm64/kexec-arm64.h | ||
22 | create mode 100644 kexec/arch/arm64/kexec-elf-arm64.c | ||
23 | |||
24 | --- a/configure.ac | ||
25 | +++ b/configure.ac | ||
26 | @@ -35,6 +35,9 @@ case $target_cpu in | ||
27 | ARCH="ppc64" | ||
28 | SUBARCH="LE" | ||
29 | ;; | ||
30 | + aarch64* ) | ||
31 | + ARCH="arm64" | ||
32 | + ;; | ||
33 | arm* ) | ||
34 | ARCH="arm" | ||
35 | ;; | ||
36 | --- a/kexec/Makefile | ||
37 | +++ b/kexec/Makefile | ||
38 | @@ -71,6 +71,7 @@ KEXEC_SRCS += $($(ARCH)_FS2DT) | ||
39 | |||
40 | include $(srcdir)/kexec/arch/alpha/Makefile | ||
41 | include $(srcdir)/kexec/arch/arm/Makefile | ||
42 | +include $(srcdir)/kexec/arch/arm64/Makefile | ||
43 | include $(srcdir)/kexec/arch/i386/Makefile | ||
44 | include $(srcdir)/kexec/arch/ia64/Makefile | ||
45 | include $(srcdir)/kexec/arch/m68k/Makefile | ||
46 | --- /dev/null | ||
47 | +++ b/kexec/arch/arm64/Makefile | ||
48 | @@ -0,0 +1,31 @@ | ||
49 | + | ||
50 | +arm64_FS2DT += kexec/fs2dt.c | ||
51 | +arm64_FS2DT_INCLUDE += -include $(srcdir)/kexec/arch/arm64/kexec-arm64.h | ||
52 | + | ||
53 | +arm64_KEXEC_SRCS += \ | ||
54 | + kexec/arch/arm64/kexec-arm64.c \ | ||
55 | + kexec/arch/arm64/kexec-elf-arm64.c | ||
56 | + | ||
57 | +arm64_ARCH_REUSE_INITRD = | ||
58 | +arm64_ADD_SEGMENT = | ||
59 | +arm64_VIRT_TO_PHYS = | ||
60 | + | ||
61 | +dist += $(arm64_KEXEC_SRCS) \ | ||
62 | + kexec/arch/arm64/Makefile \ | ||
63 | + kexec/arch/arm64/kexec-arm64.h | ||
64 | + | ||
65 | +ifdef HAVE_LIBFDT | ||
66 | + | ||
67 | +LIBS += -lfdt | ||
68 | + | ||
69 | +else | ||
70 | + | ||
71 | +include $(srcdir)/kexec/libfdt/Makefile.libfdt | ||
72 | + | ||
73 | +libfdt_SRCS += $(LIBFDT_SRCS:%=kexec/libfdt/%) | ||
74 | + | ||
75 | +arm64_CPPFLAGS = -I$(srcdir)/kexec/libfdt | ||
76 | + | ||
77 | +arm64_KEXEC_SRCS += $(libfdt_SRCS) | ||
78 | + | ||
79 | +endif | ||
80 | --- /dev/null | ||
81 | +++ b/kexec/arch/arm64/include/arch/options.h | ||
82 | @@ -0,0 +1,30 @@ | ||
83 | +#ifndef KEXEC_ARCH_ARM64_OPTIONS_H | ||
84 | +#define KEXEC_ARCH_ARM64_OPTIONS_H | ||
85 | + | ||
86 | +#define OPT_APPEND ((OPT_MAX)+0) | ||
87 | +#define OPT_RAMDISK ((OPT_MAX)+1) | ||
88 | +#define OPT_DTB ((OPT_MAX)+2) | ||
89 | +#define OPT_ARCH_MAX ((OPT_MAX)+3) | ||
90 | + | ||
91 | +#define KEXEC_ARCH_OPTIONS \ | ||
92 | + KEXEC_OPTIONS \ | ||
93 | + { "append", 1, NULL, OPT_APPEND }, \ | ||
94 | + { "command-line", 1, NULL, OPT_APPEND }, \ | ||
95 | + { "dtb", 1, NULL, OPT_DTB }, \ | ||
96 | + { "initrd", 1, NULL, OPT_RAMDISK }, \ | ||
97 | + { "ramdisk", 1, NULL, OPT_RAMDISK }, \ | ||
98 | + | ||
99 | +#define KEXEC_ARCH_OPT_STR KEXEC_OPT_STR /* Only accept long arch options. */ | ||
100 | + | ||
101 | +#define KEXEC_ALL_OPTIONS KEXEC_ARCH_OPTIONS | ||
102 | +#define KEXEC_ALL_OPT_STR KEXEC_ARCH_OPT_STR | ||
103 | + | ||
104 | +struct arm64_opts { | ||
105 | + const char *command_line; | ||
106 | + const char *ramdisk; | ||
107 | + const char *dtb; | ||
108 | +}; | ||
109 | + | ||
110 | +struct arm64_opts arm64_opts; | ||
111 | + | ||
112 | +#endif /* KEXEC_ARCH_ARM64_OPTIONS_H */ | ||
113 | --- /dev/null | ||
114 | +++ b/kexec/arch/arm64/kexec-arm64.c | ||
115 | @@ -0,0 +1,194 @@ | ||
116 | +/* | ||
117 | + * ARM64 kexec support. | ||
118 | + */ | ||
119 | + | ||
120 | +#define _GNU_SOURCE | ||
121 | + | ||
122 | +#include <dirent.h> | ||
123 | +#include <errno.h> | ||
124 | +#include <getopt.h> | ||
125 | +#include <stdio.h> | ||
126 | +#include <stddef.h> | ||
127 | + | ||
128 | +//#include <linux/kexec.h> | ||
129 | + | ||
130 | +#include "../../kexec.h" | ||
131 | +#include "../../kexec-syscall.h" | ||
132 | +#include "kexec-arm64.h" | ||
133 | +#include "arch/options.h" | ||
134 | + | ||
135 | +/* Global varables the core kexec routines expect. */ | ||
136 | + | ||
137 | +unsigned char reuse_initrd; | ||
138 | +off_t initrd_base = 0; | ||
139 | +off_t initrd_size = 0; | ||
140 | + | ||
141 | +struct memory_ranges usablemem_rgns = { | ||
142 | +}; | ||
143 | + | ||
144 | +const struct arch_map_entry arches[] = { | ||
145 | + { "aarch64", KEXEC_ARCH_ARM64 }, | ||
146 | + { NULL, 0 }, | ||
147 | +}; | ||
148 | + | ||
149 | +/* arm64 global varables. */ | ||
150 | + | ||
151 | +struct arm64_opts arm64_opts; | ||
152 | + | ||
153 | +void arch_usage(void) | ||
154 | +{ | ||
155 | + fprintf(stderr, "%s:%d: ->\n", __func__, __LINE__); | ||
156 | + | ||
157 | + printf( | ||
158 | +" --append=STRING Set the kernel command line to STRING.\n" | ||
159 | +" --command-line=STRING Set the kernel command line to STRING.\n" | ||
160 | +" --dtb=FILE Use FILE as the device tree blob.\n" | ||
161 | +" --initrd=FILE Use FILE as the kernel initial ramdisk.\n" | ||
162 | +" --ramdisk=FILE Use FILE as the kernel initial ramdisk.\n"); | ||
163 | + | ||
164 | + fprintf(stderr, "%s:%d: <-\n", __func__, __LINE__); | ||
165 | +} | ||
166 | + | ||
167 | +int arch_process_options(int argc, char **argv) | ||
168 | +{ | ||
169 | + static const char short_options[] = KEXEC_OPT_STR ""; | ||
170 | + static const struct option options[] = { | ||
171 | + KEXEC_ARCH_OPTIONS | ||
172 | + { 0 } | ||
173 | + }; | ||
174 | + int opt; | ||
175 | + | ||
176 | + for (opt = 0; opt != -1; ) { | ||
177 | + opt = getopt_long(argc, argv, short_options, options, 0); | ||
178 | + | ||
179 | + switch (opt) { | ||
180 | + case OPT_APPEND: | ||
181 | + arm64_opts.command_line = optarg; | ||
182 | + break; | ||
183 | + case OPT_RAMDISK: | ||
184 | + arm64_opts.ramdisk = optarg; | ||
185 | + break; | ||
186 | + case OPT_DTB: | ||
187 | + arm64_opts.dtb = optarg; | ||
188 | + break; | ||
189 | + default: | ||
190 | + break; /* Ignore core and unknown options */ | ||
191 | + } | ||
192 | + } | ||
193 | + | ||
194 | + dbgprintf("%s:%d: command_line: %s\n", __func__, __LINE__, | ||
195 | + arm64_opts.command_line); | ||
196 | + dbgprintf("%s:%d: ramdisk: %s\n", __func__, __LINE__, | ||
197 | + arm64_opts.ramdisk); | ||
198 | + dbgprintf("%s:%d: dtb: %s\n", __func__, __LINE__, arm64_opts.dtb); | ||
199 | + | ||
200 | + return 0; | ||
201 | +} | ||
202 | + | ||
203 | +void arch_reuse_initrd(void) | ||
204 | +{ | ||
205 | + fprintf(stderr, "%s:%d: ->\n", __func__, __LINE__); | ||
206 | + reuse_initrd = 1; | ||
207 | +} | ||
208 | + | ||
209 | +unsigned long virt_to_phys(unsigned long v) | ||
210 | +{ | ||
211 | + const unsigned long memstart_addr = 0x080000000UL; // FIXME: get from memory_range/DT | ||
212 | + const unsigned long page_offset = 0xffffffc000000000UL; // FIXME: from where??? | ||
213 | + unsigned long p = (v & ~page_offset) + memstart_addr; | ||
214 | + | ||
215 | + fprintf(stderr, "%s:%d: %016lx -> %016lx\n", __func__, __LINE__, v, p); | ||
216 | + return p; | ||
217 | +} | ||
218 | + | ||
219 | +void add_segment(struct kexec_info *info, const void *buf, size_t bufsz, | ||
220 | + unsigned long base, size_t memsz) | ||
221 | +{ | ||
222 | + fprintf(stderr, "%s:%d: ->\n", __func__, __LINE__); | ||
223 | + add_segment_phys_virt(info, buf, bufsz, base, memsz, 1); | ||
224 | + fprintf(stderr, "%s:%d: <-\n", __func__, __LINE__); | ||
225 | +} | ||
226 | + | ||
227 | +int get_memory_ranges(struct memory_range **range, int *ranges, | ||
228 | + unsigned long kexec_flags) | ||
229 | +{ | ||
230 | + /* FIXME: Should get this info from device tree. */ | ||
231 | + static struct memory_range memory_range[KEXEC_SEGMENT_MAX]; | ||
232 | + const char *iomem; | ||
233 | + int range_count = 0; | ||
234 | + char line[MAX_LINE]; | ||
235 | + FILE *fp; | ||
236 | + | ||
237 | + iomem = proc_iomem(); | ||
238 | + fp = fopen(iomem, "r"); | ||
239 | + | ||
240 | + if (!fp) { | ||
241 | + fprintf(stderr, "Cannot open %s: %s\n", iomem, strerror(errno)); | ||
242 | + return -1; | ||
243 | + } | ||
244 | + | ||
245 | + dbgprintf("memory ranges:\n"); | ||
246 | + | ||
247 | + while(fgets(line, sizeof(line), fp) != 0) { | ||
248 | + struct memory_range r; | ||
249 | + char *str; | ||
250 | + int consumed; | ||
251 | + | ||
252 | + if (range_count >= KEXEC_SEGMENT_MAX) | ||
253 | + break; | ||
254 | + | ||
255 | + if (sscanf(line, "%Lx-%Lx : %n", &r.start, &r.end, &consumed) | ||
256 | + != 2) | ||
257 | + continue; | ||
258 | + | ||
259 | + str = line + consumed; | ||
260 | + r.end++; | ||
261 | + | ||
262 | + if (memcmp(str, "System RAM\n", 11)) { | ||
263 | + dbgprintf(" Skip: %016Lx - %016Lx : %s", r.start, r.end, | ||
264 | + str); | ||
265 | + continue; | ||
266 | + } | ||
267 | + | ||
268 | + r.type = RANGE_RAM; | ||
269 | + memory_range[range_count] = r; | ||
270 | + range_count++; | ||
271 | + | ||
272 | + dbgprintf(" Add: %016Lx - %016Lx : %s", r.start, r.end, str); | ||
273 | + } | ||
274 | + | ||
275 | + fclose(fp); | ||
276 | + *range = memory_range; | ||
277 | + *ranges = range_count; | ||
278 | + | ||
279 | + return 0; | ||
280 | +} | ||
281 | + | ||
282 | +struct file_type file_type[] = { | ||
283 | + { "elf-arm64", elf_arm64_probe, elf_arm64_load, elf_arm64_usage }, | ||
284 | +}; | ||
285 | + | ||
286 | +int file_types = sizeof(file_type) / sizeof(file_type[0]); | ||
287 | + | ||
288 | +int arch_compat_trampoline(struct kexec_info *info) | ||
289 | +{ | ||
290 | + return 0; | ||
291 | +} | ||
292 | +int machine_verify_elf_rel(struct mem_ehdr *ehdr) | ||
293 | +{ | ||
294 | + return 0; | ||
295 | +} | ||
296 | + | ||
297 | +void machine_apply_elf_rel(struct mem_ehdr *ehdr, unsigned long r_type, | ||
298 | + void *location, unsigned long address, unsigned long value) | ||
299 | +{ | ||
300 | +} | ||
301 | + | ||
302 | +void arch_update_purgatory(struct kexec_info *UNUSED(info)) | ||
303 | +{ | ||
304 | +} | ||
305 | + | ||
306 | +int is_crashkernel_mem_reserved(void) | ||
307 | +{ | ||
308 | + return 0; | ||
309 | +} | ||
310 | --- /dev/null | ||
311 | +++ b/kexec/arch/arm64/kexec-arm64.h | ||
312 | @@ -0,0 +1,28 @@ | ||
313 | +/* | ||
314 | + * ARM64 kexec support. | ||
315 | + */ | ||
316 | + | ||
317 | +#if !defined(KEXEC_ARM64_H) | ||
318 | +#define KEXEC_ARM64_H | ||
319 | + | ||
320 | +/* #include <linux/kexec.h> FIXME: this is broken */ | ||
321 | +#include <sys/types.h> | ||
322 | + | ||
323 | +#include "../../kexec.h" | ||
324 | + | ||
325 | +#define KEXEC_SEGMENT_MAX 16 /* FIXME: this should come from <linux/kexec.h> */ | ||
326 | + | ||
327 | +#define BOOT_BLOCK_VERSION 17 | ||
328 | +#define BOOT_BLOCK_LAST_COMP_VERSION 16 | ||
329 | +#define COMMAND_LINE_SIZE 512 | ||
330 | + | ||
331 | +int elf_arm64_probe(const char *buf, off_t len); | ||
332 | +int elf_arm64_load(int argc, char **argv, const char *buf, off_t len, | ||
333 | + struct kexec_info *info); | ||
334 | +void elf_arm64_usage(void); | ||
335 | + | ||
336 | +struct memory_ranges usablemem_rgns; | ||
337 | +off_t initrd_base; | ||
338 | +off_t initrd_size; | ||
339 | + | ||
340 | +#endif | ||
341 | --- /dev/null | ||
342 | +++ b/kexec/arch/arm64/kexec-elf-arm64.c | ||
343 | @@ -0,0 +1,147 @@ | ||
344 | +/* | ||
345 | + * ARM64 kexec support. | ||
346 | + */ | ||
347 | + | ||
348 | +#define _GNU_SOURCE | ||
349 | + | ||
350 | +#include <elf.h> | ||
351 | +#include <getopt.h> | ||
352 | +#include <libfdt.h> | ||
353 | + | ||
354 | +#include "kexec-arm64.h" | ||
355 | + | ||
356 | +#include "../../kexec-syscall.h" | ||
357 | +#include "../../fs2dt.h" | ||
358 | + | ||
359 | +#include "arch/options.h" | ||
360 | + | ||
361 | +#if !defined(EM_AARCH64) | ||
362 | +# define EM_AARCH64 183 | ||
363 | +#endif | ||
364 | + | ||
365 | +int elf_arm64_probe(const char *buf, off_t len) | ||
366 | +{ | ||
367 | + int result; | ||
368 | + struct mem_ehdr ehdr; | ||
369 | + | ||
370 | + fprintf(stderr, "%s:%d: ->\n", __func__, __LINE__); | ||
371 | + | ||
372 | + result = build_elf_exec_info(buf, len, &ehdr, 0); | ||
373 | + | ||
374 | + if (result < 0) { | ||
375 | + dbgprintf("Not an ELF executable\n"); | ||
376 | + goto out; | ||
377 | + } | ||
378 | + | ||
379 | + if (ehdr.e_machine != EM_AARCH64) { | ||
380 | + dbgprintf("Not an AARCH64 executable\n"); | ||
381 | + result = -1; | ||
382 | + goto out; | ||
383 | + } | ||
384 | + | ||
385 | + result = 0; | ||
386 | + | ||
387 | +out: | ||
388 | + free_elf_info(&ehdr); | ||
389 | + fprintf(stderr, "%s:%d: <-\n", __func__, __LINE__); | ||
390 | + return result; | ||
391 | +} | ||
392 | + | ||
393 | +static off_t round_up(off_t v) | ||
394 | +{ | ||
395 | + return _ALIGN_DOWN(v + getpagesize(), getpagesize()); | ||
396 | +} | ||
397 | + | ||
398 | +int elf_arm64_load(int argc, char **argv, const char *buf, off_t len, | ||
399 | + struct kexec_info *info) | ||
400 | +{ | ||
401 | + char *dtb_buf; | ||
402 | + off_t dtb_base; | ||
403 | + off_t dtb_size; | ||
404 | + struct mem_ehdr ehdr; | ||
405 | + int result; | ||
406 | + //unsigned int command_line_len = strlen(arm64_opts.command_line) + 1; | ||
407 | + | ||
408 | + fprintf(stderr, "%s:%d: ->\n", __func__, __LINE__); | ||
409 | + | ||
410 | + if (info->kexec_flags & KEXEC_ON_CRASH) { | ||
411 | + fprintf(stderr, "kexec: kdump not yet supported on arm64\n"); | ||
412 | + return -1; | ||
413 | + } | ||
414 | + | ||
415 | + result = build_elf_exec_info(buf, len, &ehdr, 0); | ||
416 | + | ||
417 | + if (result < 0) { | ||
418 | + free_elf_info(&ehdr); | ||
419 | + fprintf(stderr, "%s:%d: build_elf_exec_info failed\n", __func__, | ||
420 | + __LINE__); | ||
421 | + return result; | ||
422 | + } | ||
423 | + | ||
424 | + elf_exec_build_load(info, &ehdr, buf, len, 0); | ||
425 | + | ||
426 | + info->entry = (void*)0x80080000UL; // FIXME | ||
427 | + | ||
428 | + initrd_base = 0; | ||
429 | + initrd_size = 0; | ||
430 | + | ||
431 | + if (arm64_opts.ramdisk) { | ||
432 | + char *buf; | ||
433 | + | ||
434 | + buf = slurp_file(arm64_opts.ramdisk, &initrd_size); | ||
435 | + | ||
436 | + if (!buf) | ||
437 | + fprintf(stderr, "kexec: empty ramdisk file\n"); | ||
438 | + else { | ||
439 | + initrd_base = locate_hole(info, initrd_size, 0, 0, -1, -1); | ||
440 | + | ||
441 | + add_segment_phys_virt(info, buf, initrd_size, initrd_base, | ||
442 | + initrd_size, 0); | ||
443 | + } | ||
444 | + } | ||
445 | + | ||
446 | + fprintf(stderr, "%s:%d: initrd_base: %lx, initrd_size: %lx\n", __func__, | ||
447 | + __LINE__, (unsigned long)initrd_base, (unsigned long)initrd_size); | ||
448 | + | ||
449 | + if (arm64_opts.dtb) | ||
450 | + dtb_buf = slurp_file(arm64_opts.dtb, &dtb_size); | ||
451 | + else | ||
452 | + create_flatten_tree(&dtb_buf, &dtb_size, | ||
453 | + arm64_opts.command_line); | ||
454 | + | ||
455 | + fprintf(stderr, "%s:%d: dt magic: %x : %x\n", __func__, __LINE__, | ||
456 | + fdt32_to_cpu(*(uint32_t*)dtb_buf), *(uint32_t*)dtb_buf); | ||
457 | + | ||
458 | + result = fdt_check_header(dtb_buf); | ||
459 | + | ||
460 | + if (result) { | ||
461 | + fprintf(stderr, "Invalid FDT.\n"); | ||
462 | + return -1; | ||
463 | + } | ||
464 | + | ||
465 | + if (arm64_opts.command_line) { | ||
466 | + // FIXME: need to handle command line... | ||
467 | + fprintf(stderr, "%s:%d: command line support TODO\n", __func__, __LINE__); | ||
468 | + } | ||
469 | + | ||
470 | +if (1) { | ||
471 | + dtb_base = (unsigned long)info->entry + round_up(0xA43FA0); // computed kernel mem size. | ||
472 | + | ||
473 | + fprintf(stderr, "%s:%d: dtb_base: %lx, dtb_size: %lx\n", __func__, | ||
474 | + __LINE__, (unsigned long)dtb_base, (unsigned long)dtb_size); | ||
475 | +} else { | ||
476 | + dtb_base = locate_hole(info, dtb_size, 0, 0, -1, -1); | ||
477 | + | ||
478 | + fprintf(stderr, "%s:%d: dtb_base: %lx, dtb_size: %lx\n", __func__, | ||
479 | + __LINE__, (unsigned long)dtb_base, (unsigned long)dtb_size); | ||
480 | +} | ||
481 | + add_segment_phys_virt(info, dtb_buf, dtb_size, dtb_base, dtb_size, 0); | ||
482 | + | ||
483 | + fprintf(stderr, "%s:%d: <-\n", __func__, __LINE__); | ||
484 | + return 0; | ||
485 | +} | ||
486 | + | ||
487 | +void elf_arm64_usage(void) | ||
488 | +{ | ||
489 | + fprintf(stderr, "%s:%d\n", __func__, __LINE__); | ||
490 | +} | ||
491 | --- a/kexec/kexec-syscall.h | ||
492 | +++ b/kexec/kexec-syscall.h | ||
493 | @@ -39,8 +39,8 @@ | ||
494 | #ifdef __s390__ | ||
495 | #define __NR_kexec_load 277 | ||
496 | #endif | ||
497 | -#ifdef __arm__ | ||
498 | -#define __NR_kexec_load __NR_SYSCALL_BASE + 347 | ||
499 | +#if defined(__arm__) || defined(__arm64__) | ||
500 | +#define __NR_kexec_load __NR_SYSCALL_BASE + 347 | ||
501 | #endif | ||
502 | #if defined(__mips__) | ||
503 | #define __NR_kexec_load 4311 | ||
504 | @@ -76,6 +76,8 @@ static inline long kexec_load(void *entr | ||
505 | #define KEXEC_ARCH_PPC64 (21 << 16) | ||
506 | #define KEXEC_ARCH_IA_64 (50 << 16) | ||
507 | #define KEXEC_ARCH_ARM (40 << 16) | ||
508 | +#define KEXEC_ARCH_ARM64 (183 << 16) | ||
509 | +/* #define KEXEC_ARCH_AARCH64 (183 << 16) */ | ||
510 | #define KEXEC_ARCH_S390 (22 << 16) | ||
511 | #define KEXEC_ARCH_SH (42 << 16) | ||
512 | #define KEXEC_ARCH_MIPS_LE (10 << 16) | ||
513 | @@ -121,5 +123,8 @@ static inline long kexec_load(void *entr | ||
514 | #ifdef __m68k__ | ||
515 | #define KEXEC_ARCH_NATIVE KEXEC_ARCH_68K | ||
516 | #endif | ||
517 | +#if defined(__arm64__) | ||
518 | +#define KEXEC_ARCH_NATIVE KEXEC_ARCH_ARM64 | ||
519 | +#endif | ||
520 | |||
521 | #endif /* KEXEC_SYSCALL_H */ | ||
diff --git a/meta-aarch64/recipes-kernel/kexec-tools/kexec-tools_2.0.7.bbappend b/meta-aarch64/recipes-kernel/kexec-tools/kexec-tools_2.0.7.bbappend new file mode 100644 index 0000000..6417ffa --- /dev/null +++ b/meta-aarch64/recipes-kernel/kexec-tools/kexec-tools_2.0.7.bbappend | |||
@@ -0,0 +1,5 @@ | |||
1 | FILESEXTRAPATHS_prepend := "${THISDIR}/files:" | ||
2 | |||
3 | SRC_URI_append = " file://add-arm64-support.patch" | ||
4 | |||
5 | COMPATIBLE_HOST = "(x86_64|i.86|arm|aarch64|powerpc|mips).*-(linux|freebsd.*)" | ||
diff --git a/meta-aarch64/recipes-kernel/sysprof/sysprof_git.bbappend b/meta-aarch64/recipes-kernel/sysprof/sysprof_git.bbappend new file mode 100644 index 0000000..8db9345 --- /dev/null +++ b/meta-aarch64/recipes-kernel/sysprof/sysprof_git.bbappend | |||
@@ -0,0 +1 @@ | |||
COMPATIBLE_HOST_aarch64 = "0" | |||
diff --git a/meta-aarch64/recipes-multimedia/pulseaudio/files/0001-libatomic_ops-Aarch64-basic-port.patch b/meta-aarch64/recipes-multimedia/pulseaudio/files/0001-libatomic_ops-Aarch64-basic-port.patch new file mode 100644 index 0000000..0769377 --- /dev/null +++ b/meta-aarch64/recipes-multimedia/pulseaudio/files/0001-libatomic_ops-Aarch64-basic-port.patch | |||
@@ -0,0 +1,232 @@ | |||
1 | From aac120d778ae5fc619b2fb8ef18ea18d3d5d20cc Mon Sep 17 00:00:00 2001 | ||
2 | From: Yvan Roux <yvan.roux@linaro.org> | ||
3 | Date: Wed, 23 Jan 2013 17:14:16 +0100 | ||
4 | Subject: [PATCH] Aarch64 basic port | ||
5 | |||
6 | Adapted-for-OpenEmbedded-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org> | ||
7 | |||
8 | --- | ||
9 | src/atomic_ops.h | 4 | ||
10 | src/atomic_ops/sysdeps/Makefile.am | 1 | ||
11 | src/atomic_ops/sysdeps/gcc/aarch64.h | 184 +++++++++++++++++++++++++++++++++++ | ||
12 | 3 files changed, 189 insertions(+) | ||
13 | create mode 100644 src/atomic_ops/sysdeps/gcc/aarch64.h | ||
14 | |||
15 | --- libatomic_ops-7.2.orig/src/atomic_ops.h | ||
16 | +++ libatomic_ops-7.2/src/atomic_ops.h | ||
17 | @@ -242,10 +242,14 @@ | ||
18 | # endif /* __m68k__ */ | ||
19 | # if defined(__powerpc__) || defined(__ppc__) || defined(__PPC__) \ | ||
20 | || defined(__powerpc64__) || defined(__ppc64__) | ||
21 | # include "atomic_ops/sysdeps/gcc/powerpc.h" | ||
22 | # endif /* __powerpc__ */ | ||
23 | +# if defined(__aarch64__) | ||
24 | +# include "atomic_ops/sysdeps/gcc/aarch64.h" | ||
25 | +# define AO_CAN_EMUL_CAS | ||
26 | +# endif /* __aarch64__ */ | ||
27 | # if defined(__arm__) && !defined(AO_USE_PTHREAD_DEFS) | ||
28 | # include "atomic_ops/sysdeps/gcc/arm.h" | ||
29 | # define AO_CAN_EMUL_CAS | ||
30 | # endif /* __arm__ */ | ||
31 | # if defined(__cris__) || defined(CRIS) | ||
32 | --- libatomic_ops-7.2.orig/src/atomic_ops/sysdeps/Makefile.am | ||
33 | +++ libatomic_ops-7.2/src/atomic_ops/sysdeps/Makefile.am | ||
34 | @@ -24,10 +24,11 @@ nobase_sysdep_HEADERS= generic_pthread.h | ||
35 | standard_ao_double_t.h \ | ||
36 | README \ | ||
37 | \ | ||
38 | armcc/arm_v6.h \ | ||
39 | \ | ||
40 | + gcc/aarch64.h \ | ||
41 | gcc/alpha.h gcc/arm.h gcc/avr32.h gcc/cris.h \ | ||
42 | gcc/hexagon.h gcc/hppa.h gcc/ia64.h gcc/m68k.h \ | ||
43 | gcc/mips.h gcc/powerpc.h gcc/s390.h \ | ||
44 | gcc/sh.h gcc/sparc.h gcc/x86.h gcc/x86_64.h \ | ||
45 | \ | ||
46 | --- /dev/null | ||
47 | +++ libatomic_ops-7.2/src/atomic_ops/sysdeps/gcc/aarch64.h | ||
48 | @@ -0,0 +1,184 @@ | ||
49 | +/* | ||
50 | + * Copyright (c) 1991-1994 by Xerox Corporation. All rights reserved. | ||
51 | + * Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved. | ||
52 | + * Copyright (c) 1999-2003 by Hewlett-Packard Company. All rights reserved. | ||
53 | + * | ||
54 | + * | ||
55 | + * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED | ||
56 | + * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. | ||
57 | + * | ||
58 | + * Permission is hereby granted to use or copy this program | ||
59 | + * for any purpose, provided the above notices are retained on all copies. | ||
60 | + * Permission to modify the code and to distribute modified code is granted, | ||
61 | + * provided the above notices are retained, and a notice that the code was | ||
62 | + * modified is included with the above copyright notice. | ||
63 | + * | ||
64 | + */ | ||
65 | + | ||
66 | +#include "../read_ordered.h" | ||
67 | + | ||
68 | +#include "../test_and_set_t_is_ao_t.h" | ||
69 | + | ||
70 | +AO_INLINE void | ||
71 | +AO_nop_full(void) | ||
72 | +{ | ||
73 | +# ifndef AO_UNIPROCESSOR | ||
74 | +__sync_synchronize (); | ||
75 | +# endif | ||
76 | +} | ||
77 | +#define AO_HAVE_nop_full | ||
78 | + | ||
79 | +AO_INLINE AO_t | ||
80 | +AO_load(const volatile AO_t *addr) | ||
81 | +{ | ||
82 | + return __atomic_load_n (addr, __ATOMIC_RELAXED); | ||
83 | +} | ||
84 | +#define AO_HAVE_load | ||
85 | + | ||
86 | +AO_INLINE AO_t | ||
87 | +AO_load_acquire(const volatile AO_t *addr) | ||
88 | +{ | ||
89 | + return __atomic_load_n (addr, __ATOMIC_ACQUIRE); | ||
90 | +} | ||
91 | +#define AO_HAVE_load_acquire | ||
92 | + | ||
93 | +AO_INLINE void | ||
94 | + AO_store(volatile AO_t *addr, AO_t value) | ||
95 | +{ | ||
96 | + __atomic_store_n(addr, value, __ATOMIC_RELAXED); | ||
97 | +} | ||
98 | +#define AO_HAVE_store | ||
99 | + | ||
100 | +AO_INLINE void | ||
101 | + AO_store_release(volatile AO_t *addr, AO_t value) | ||
102 | +{ | ||
103 | + __atomic_store_n(addr, value, __ATOMIC_RELEASE); | ||
104 | +} | ||
105 | +#define AO_HAVE_store_release | ||
106 | + | ||
107 | +AO_INLINE AO_TS_VAL_t | ||
108 | +AO_test_and_set(volatile AO_TS_t *addr) | ||
109 | +{ | ||
110 | + return __atomic_test_and_set(addr, __ATOMIC_RELAXED); | ||
111 | +} | ||
112 | +# define AO_HAVE_test_and_set | ||
113 | + | ||
114 | +AO_INLINE AO_TS_VAL_t | ||
115 | +AO_test_and_set_acquire(volatile AO_TS_t *addr) | ||
116 | +{ | ||
117 | + return __atomic_test_and_set(addr, __ATOMIC_ACQUIRE); | ||
118 | +} | ||
119 | +# define AO_HAVE_test_and_set_acquire | ||
120 | + | ||
121 | +AO_INLINE AO_TS_VAL_t | ||
122 | +AO_test_and_set_release(volatile AO_TS_t *addr) | ||
123 | +{ | ||
124 | + return __atomic_test_and_set(addr, __ATOMIC_RELEASE); | ||
125 | +} | ||
126 | +# define AO_HAVE_test_and_set_release | ||
127 | + | ||
128 | +AO_INLINE AO_TS_VAL_t | ||
129 | +AO_test_and_set_full(volatile AO_TS_t *addr) | ||
130 | +{ | ||
131 | + return __atomic_test_and_set(addr, __ATOMIC_SEQ_CST); | ||
132 | +} | ||
133 | +# define AO_HAVE_test_and_set_full | ||
134 | + | ||
135 | +AO_INLINE AO_t | ||
136 | +AO_fetch_and_add(volatile AO_t *p, AO_t incr) | ||
137 | +{ | ||
138 | + return __atomic_fetch_add(p, incr, __ATOMIC_RELAXED); | ||
139 | +} | ||
140 | +#define AO_HAVE_fetch_and_add | ||
141 | + | ||
142 | +AO_INLINE AO_t | ||
143 | +AO_fetch_and_add_acquire(volatile AO_t *p, AO_t incr) | ||
144 | +{ | ||
145 | + return __atomic_fetch_add(p, incr, __ATOMIC_ACQUIRE); | ||
146 | +} | ||
147 | +#define AO_HAVE_fetch_and_add_acquire | ||
148 | + | ||
149 | +AO_INLINE AO_t | ||
150 | +AO_fetch_and_add_release(volatile AO_t *p, AO_t incr) | ||
151 | +{ | ||
152 | + return __atomic_fetch_add(p, incr, __ATOMIC_RELEASE); | ||
153 | +} | ||
154 | +#define AO_HAVE_fetch_and_add_release | ||
155 | + | ||
156 | +AO_INLINE AO_t | ||
157 | +AO_fetch_and_add_full(volatile AO_t *p, AO_t incr) | ||
158 | +{ | ||
159 | + return __atomic_fetch_add(p, incr, __ATOMIC_SEQ_CST); | ||
160 | +} | ||
161 | +#define AO_HAVE_fetch_and_add_full | ||
162 | + | ||
163 | +AO_INLINE AO_t | ||
164 | +AO_fetch_and_add1(volatile AO_t *p) | ||
165 | +{ | ||
166 | + return __atomic_fetch_add(p, 1, __ATOMIC_RELAXED); | ||
167 | +} | ||
168 | +#define AO_HAVE_fetch_and_add1 | ||
169 | + | ||
170 | +AO_INLINE AO_t | ||
171 | +AO_fetch_and_add1_acquire(volatile AO_t *p) | ||
172 | +{ | ||
173 | + return __atomic_fetch_add(p, 1, __ATOMIC_ACQUIRE); | ||
174 | +} | ||
175 | +#define AO_HAVE_fetch_and_add1_acquire | ||
176 | + | ||
177 | +AO_INLINE AO_t | ||
178 | +AO_fetch_and_add1_release(volatile AO_t *p) | ||
179 | +{ | ||
180 | + return __atomic_fetch_add(p, 1, __ATOMIC_RELEASE); | ||
181 | +} | ||
182 | +#define AO_HAVE_fetch_and_add1_release | ||
183 | + | ||
184 | +AO_INLINE AO_t | ||
185 | +AO_fetch_and_add1_full(volatile AO_t *p) | ||
186 | +{ | ||
187 | + return __atomic_fetch_add(p, 1, __ATOMIC_SEQ_CST); | ||
188 | +} | ||
189 | +#define AO_HAVE_fetch_and_add1_full | ||
190 | + | ||
191 | +AO_INLINE AO_t | ||
192 | +AO_fetch_and_sub1(volatile AO_t *p) | ||
193 | +{ | ||
194 | + return __atomic_fetch_sub(p, 1, __ATOMIC_RELAXED); | ||
195 | +} | ||
196 | +#define AO_HAVE_fetch_and_sub1 | ||
197 | + | ||
198 | +AO_INLINE AO_t | ||
199 | +AO_fetch_and_sub1_acquire(volatile AO_t *p) | ||
200 | +{ | ||
201 | + return __atomic_fetch_sub(p, 1, __ATOMIC_ACQUIRE); | ||
202 | +} | ||
203 | +#define AO_HAVE_fetch_and_sub1_acquire | ||
204 | + | ||
205 | +AO_INLINE AO_t | ||
206 | +AO_fetch_and_sub1_release(volatile AO_t *p) | ||
207 | +{ | ||
208 | + return __atomic_fetch_sub(p, 1, __ATOMIC_RELEASE); | ||
209 | +} | ||
210 | +#define AO_HAVE_fetch_and_sub1_release | ||
211 | + | ||
212 | +AO_INLINE AO_t | ||
213 | +AO_fetch_and_sub1_full(volatile AO_t *p) | ||
214 | +{ | ||
215 | + return __atomic_fetch_sub(p, 1, __ATOMIC_SEQ_CST); | ||
216 | +} | ||
217 | +#define AO_HAVE_fetch_and_sub1_full | ||
218 | + | ||
219 | +/* Returns nonzero if the comparison succeeded. */ | ||
220 | +AO_INLINE int | ||
221 | +AO_compare_and_swap(volatile AO_t *addr, AO_t old_val, AO_t new_val) | ||
222 | +{ | ||
223 | + return __sync_bool_compare_and_swap(addr, old_val, new_val); | ||
224 | +} | ||
225 | +# define AO_HAVE_compare_and_swap | ||
226 | + | ||
227 | +AO_INLINE AO_t | ||
228 | +AO_fetch_compare_and_swap(volatile AO_t *addr, AO_t old_val, AO_t new_val) | ||
229 | +{ | ||
230 | + return __sync_val_compare_and_swap(addr, old_val, new_val); | ||
231 | +} | ||
232 | +# define AO_HAVE_fetch_compare_and_swap | ||
diff --git a/meta-aarch64/recipes-multimedia/pulseaudio/libatomics-ops_7.2.bbappend b/meta-aarch64/recipes-multimedia/pulseaudio/libatomics-ops_7.2.bbappend new file mode 100644 index 0000000..6a7932d --- /dev/null +++ b/meta-aarch64/recipes-multimedia/pulseaudio/libatomics-ops_7.2.bbappend | |||
@@ -0,0 +1,5 @@ | |||
1 | FILESEXTRAPATHS_prepend := "${THISDIR}/files:" | ||
2 | |||
3 | SRC_URI_append = " \ | ||
4 | file://0001-libatomic_ops-Aarch64-basic-port.patch \ | ||
5 | " | ||
diff --git a/meta-aarch64/recipes-qt/qt4/files/aarch64.patch b/meta-aarch64/recipes-qt/qt4/files/aarch64.patch new file mode 100644 index 0000000..2c970fe --- /dev/null +++ b/meta-aarch64/recipes-qt/qt4/files/aarch64.patch | |||
@@ -0,0 +1,39 @@ | |||
1 | From d780ac54b5dd1cf45eb59103f014f811c407d38c Mon Sep 17 00:00:00 2001 | ||
2 | From: Koen Kooi <koen@dominion.thruhere.net> | ||
3 | Date: Sun, 10 Aug 2014 10:35:33 +0200 | ||
4 | Subject: [PATCH] JavaScriptCore: add Aarch64 support | ||
5 | |||
6 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
7 | --- | ||
8 | src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h | 8 +++++++- | ||
9 | 1 file changed, 7 insertions(+), 1 deletion(-) | ||
10 | |||
11 | diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h | ||
12 | index e8b03be..01a839f 100644 | ||
13 | --- a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h | ||
14 | +++ b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h | ||
15 | @@ -373,6 +373,11 @@ | ||
16 | #define WTF_CPU_NEEDS_ALIGNED_ACCESS 1 | ||
17 | #endif | ||
18 | |||
19 | +/* CPU(AARCH64) - Aarch64 */ | ||
20 | +#if defined(__aarch64__) | ||
21 | +#define WTF_CPU_AARCH64 1 | ||
22 | +#endif | ||
23 | + | ||
24 | /* ==== OS() - underlying operating system; only to be used for mandated low-level services like | ||
25 | virtual memory, not to choose a GUI toolkit ==== */ | ||
26 | |||
27 | @@ -1003,7 +1008,8 @@ | ||
28 | || CPU(SPARC64) \ | ||
29 | || CPU(S390X) \ | ||
30 | || CPU(PPC64) \ | ||
31 | - || CPU(MIPS64) | ||
32 | + || CPU(MIPS64) \ | ||
33 | + || CPU(AARCH64) | ||
34 | #define WTF_USE_JSVALUE64 1 | ||
35 | #else | ||
36 | #define WTF_USE_JSVALUE32_64 1 | ||
37 | -- | ||
38 | 1.9.0 | ||
39 | |||
diff --git a/meta-aarch64/recipes-qt/qt4/qt4-x11-free_4.8.6.bbappend b/meta-aarch64/recipes-qt/qt4/qt4-x11-free_4.8.6.bbappend new file mode 100644 index 0000000..d969143 --- /dev/null +++ b/meta-aarch64/recipes-qt/qt4/qt4-x11-free_4.8.6.bbappend | |||
@@ -0,0 +1,5 @@ | |||
1 | FILESEXTRAPATHS_prepend := "${THISDIR}/files:" | ||
2 | |||
3 | SRC_URI_append = " \ | ||
4 | file://aarch64.patch \ | ||
5 | " | ||
diff --git a/meta-aarch64/recipes-support/emacs/emacs_23.4.bbappend b/meta-aarch64/recipes-support/emacs/emacs_23.4.bbappend new file mode 100644 index 0000000..8db9345 --- /dev/null +++ b/meta-aarch64/recipes-support/emacs/emacs_23.4.bbappend | |||
@@ -0,0 +1 @@ | |||
COMPATIBLE_HOST_aarch64 = "0" | |||