2014年4月10日木曜日

linaro external toolchainでのビルド (リトライ)

えー、月日の経つのは早いもんですなぁ。
ちょっと忙しいとこれだもんね。ま、やむをえないですが。

久々に、pullしてみると、meta-linaroでeglibc-2.19が追加されていたので、
再度挑戦してみましたっっっ

つっても、やっぱり32bitのhfはチェックしてないみたいで、
前回修正したところがぼろぼろと同じエラーで出てきました。

珍しいことにパッチを残していたので、それを使って直しましたよ~
んで、今回は、linaroのフルビルドとext-linaroとgnu gccとで全部確認がとれましたので、
パッチをサブミットしてみました。
採用されるといいですね。
採用されないと、なんだかなぁなので、一応ここにも貼っておきます。

Subject: [meta-linaro][PATCH] external-linaro-toolchain: Fix for 32bit armhf build

Use ld-linux-armhf.so.3 if call convention hard.
Fix QA issue errors by packaging approprieately.
Add eglibc-locale_2.19.bbappend to fix QA issue error.
  An empty directory is created while do_install.

Signed-off-by: Kazuya Nishimura 
---
 .../conf/distro/include/tcmode-external-linaro.inc |    1 +
 .../eglibc/eglibc-locale_2.19.bbappend             |   23 ++++++++++++
 .../external-linaro-toolchain.bb                   |   38 ++++++++++++++++----
 3 files changed, 56 insertions(+), 6 deletions(-)
 create mode 100755 meta-linaro-toolchain/recipes-core/eglibc/eglibc-locale_2.19.bbappend

diff --git a/meta-linaro-toolchain/conf/distro/include/tcmode-external-linaro.inc b/meta-linaro-toolchain/conf/distro/include/tcmode-external-linaro.inc
index 1d9fd59..26d464c 100644
--- a/meta-linaro-toolchain/conf/distro/include/tcmode-external-linaro.inc
+++ b/meta-linaro-toolchain/conf/distro/include/tcmode-external-linaro.inc
@@ -41,6 +41,7 @@ DISTRO_FEATURES_LIBC = "ipv4 ipv6 libc-backtrace libc-big-macros libc-bsd libc-c
    libc-getlogin libc-idn libc-inet-anl libc-libm libc-libm-big \
    libc-memusage libc-nis libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc \
    libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp libc-posix-regexp-glibc \
+   libc-charsets libc-locales libc-locale-code \
    libc-posix-wchar-io"
 
 ENABLE_BINARY_LOCALE_GENERATION = "0"
diff --git a/meta-linaro-toolchain/recipes-core/eglibc/eglibc-locale_2.19.bbappend b/meta-linaro-toolchain/recipes-core/eglibc/eglibc-locale_2.19.bbappend
new file mode 100755
index 0000000..3e91e74
--- /dev/null
+++ b/meta-linaro-toolchain/recipes-core/eglibc/eglibc-locale_2.19.bbappend
@@ -0,0 +1,23 @@
+do_install () {
+ mkdir -p ${D}${datadir}
+ if [ -n "$(ls ${LOCALETREESRC}/${bindir})" ]; then
+  mkdir -p ${D}${bindir}
+  cp -fpPR ${LOCALETREESRC}/${bindir}/* ${D}${bindir}
+ fi
+ if [ -n "$(ls ${LOCALETREESRC}/${localedir})" ]; then
+  mkdir -p ${D}${localedir}
+  cp -fpPR ${LOCALETREESRC}/${localedir}/* ${D}${localedir}
+ fi
+ if [ -e ${LOCALETREESRC}/${libdir}/gconv ]; then
+  mkdir -p ${D}${libdir}
+  cp -fpPR ${LOCALETREESRC}/${libdir}/gconv ${D}${libdir}
+ fi
+ if [ -e ${LOCALETREESRC}/${datadir}/i18n ]; then
+  cp -fpPR ${LOCALETREESRC}/${datadir}/i18n ${D}${datadir}
+ fi
+ if [ -e ${LOCALETREESRC}/${datadir}/locale ]; then
+  cp -fpPR ${LOCALETREESRC}/${datadir}/locale ${D}${datadir}
+ fi
+ chown root.root -R ${D}
+ cp -fpPR ${LOCALETREESRC}/SUPPORTED ${WORKDIR}
+}
diff --git a/meta-linaro-toolchain/recipes-devtools/external-linaro-toolchain/external-linaro-toolchain.bb b/meta-linaro-toolchain/recipes-devtools/external-linaro-toolchain/external-linaro-toolchain.bb
index 240d550..47fd4ca 100644
--- a/meta-linaro-toolchain/recipes-devtools/external-linaro-toolchain/external-linaro-toolchain.bb
+++ b/meta-linaro-toolchain/recipes-devtools/external-linaro-toolchain/external-linaro-toolchain.bb
@@ -41,6 +41,12 @@ PROVIDES += "\
  libitm \
  libitm-dev \
  libitm-staticdev \
+ libasan \
+ libasan-dev \
+ libasan-staticdev \
+ libatomic \
+ libatomic-dev \
+ libatomic-staticdev \
  virtual/linux-libc-headers \
 "
 
@@ -50,12 +56,11 @@ PR = "r2"
 # https://launchpad.net/linaro-toolchain-binaries
 SRC_URI = "file://SUPPORTED"
 
+LDLINUX32 = "${@base_contains("TUNE_FEATURES", "callconvention-hard", "ld-linux-armhf.so.3", "ld-linux.so.3",d)}"
+
 do_install() {
  install -d ${D}${base_libdir}
- install -d ${D}${bindir}
- install -d ${D}${sbindir}
  install -d ${D}${libdir}
- install -d ${D}${libexecdir}
  install -d ${D}${datadir}
  install -d ${D}${includedir}
 
@@ -79,7 +84,7 @@ do_install() {
  fi
 
  # fix up the copied symlinks (they are still pointing to the multiarch directory)
- linker_name="${@base_contains("TUNE_FEATURES", "aarch64", "ld-linux-aarch64.so.1", "ld-linux.so.3",d)}"
+ linker_name="${@base_contains("TUNE_FEATURES", "aarch64", "ld-linux-aarch64.so.1", "${LDLINUX32}",d)}"
  ln -sf ld-${ELT_VER_LIBC}.so ${D}${base_libdir}/${linker_name}
  ln -sf ../../lib/libnsl.so.1 ${D}${libdir}/libnsl.so
  ln -sf ../../lib/librt.so.1 ${D}${libdir}/librt.so
@@ -144,6 +149,12 @@ PACKAGES =+ "\
  libitm \
  libitm-dev \
  libitm-staticdev \
+ libasan \
+ libasan-dev \
+ libasan-staticdev \
+ libatomic \
+ libatomic-dev \
+ libatomic-staticdev \
 "
 
 INSANE_SKIP_${PN}-dbg = "staticdev"
@@ -282,14 +293,16 @@ FILES_libssp-staticdev = " \
 
 FILES_libgfortran = "${base_libdir}/libgfortran.so.*"
 FILES_libgfortran-dev = " \
-  ${base_libdir}/libgfortran.so"
+  ${base_libdir}/libgfortran.so \
+  ${base_libdir}/libgfortran.spec"
 FILES_libgfortran-staticdev = " \
   ${base_libdir}/libgfortran.a \
   ${base_libdir}/libgfortranbegin.a"
 
 FILES_libmudflap = "${base_libdir}/libmudflap*.so.*"
 FILES_libmudflap-dev = "\
-  ${base_libdir}/libmudflap*.so \
+  ${base_libdir}/libmudflap*.so"
+FILES_libmudflap-staticdev = "\
   ${base_libdir}/libmudflap*.a \
   ${base_libdir}/libmudflap*.la"
 
@@ -313,6 +326,19 @@ FILES_libgomp-dev = "\
 FILES_libgomp-staticdev = "\
   ${base_libdir}/libgomp*.a \
   "
+
+FILES_libasan = "\
+  ${base_libdir}/libasan.so.* \
+  "
+FILES_libasan-dev = "\
+  ${base_libdir}/libasan.so \
+  "
+FILES_libatomic ="\
+  ${base_libdir}/libatomic.so.* \
+  "
+FILES_libatomic-dev = "\
+  ${base_libdir}/libatomic.so \
+  "
 ELT_VER_MAIN ??= ""
 
 python () {
-- 
1.7.9.5


それで、そのほかのconfigurationですが、
local.confにこんなかんじで追加します。
EXTERNAL_TOOLCHAIN = "/home/knishimu/workplace/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux"
TCMODE = "external-linaro"

TUNE_CCARGS += "-marm"

EXTERNAL_TOOLCHAINはlinaroのtoolchainをインストールしたパスです。
TUNE_CCARGSはこれをつけないと、thumbでビルドしようとしてエラーになったりするので必要でした。

ではでは~