summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Hatle <mark.hatle@xilinx.com>2020-01-28 16:08:11 -0800
committerMark Hatle <mark.hatle@xilinx.com>2020-01-31 15:56:00 -0800
commit9eef527d26394a917224187350765ab1b46e13a8 (patch)
tree711ccb7ada414bf1fd48ac55e9f7bf90c2ffde2d
parent7c6ee7c2e9c9e45bb7e9480b50cd61dc009d530d (diff)
downloadmeta-xilinx-9eef527d26394a917224187350765ab1b46e13a8.tar.gz
Enable multilib baremetal toolchains
Distro Changes: When building a multilib, we need to disable configsite cache. Otherwise the system will fail to generate the SDK as there are no configsite entries due to newlib based multilibs. Recipe Changes: gcc - globally disable multilib configuration - Disable Linux specific configurations (EXTRACONFFUNCS) gcc-cross-canadian - enable multilib on a recipe specific basis libgcc - add a noop override to do_multilib_install to avoid Linux specific multilib processing newlib - arm/v6+m/nofp and arm/v8-m.base/nofp do not have newlib trap implementations. libgloss contains these, workaround by disabling builtin trap syscall handler. - misc workarounds for multilib installs libgloss - Allow MLPREFIX for newlib dependencies meta-toolchain - adjust to install only the items we want/need packagegroup-newlib-standalone-sdk-target - new pkggroup for the custom baremetal SDK to select the right set of packages Signed-off-by: Mark Hatle <mark.hatle@xilinx.com>
-rw-r--r--meta-xilinx-standalone/conf/distro/xilinx-standalone.conf5
-rw-r--r--meta-xilinx-standalone/recipes-bsp/newlib/libgloss_3.1.%.bbappend2
-rw-r--r--meta-xilinx-standalone/recipes-bsp/newlib/newlib_3.1.%.bbappend9
-rw-r--r--meta-xilinx-standalone/recipes-core/meta/meta-toolchain.bbappend1
-rw-r--r--meta-xilinx-standalone/recipes-core/packagegroups/packagegroup-newlib-standalone-sdk-target.bb11
-rw-r--r--meta-xilinx-standalone/recipes-devtools/gcc/gcc-cross-canadian_%.bbappend7
-rw-r--r--meta-xilinx-standalone/recipes-devtools/gcc/gcc-cross_%.bbappend4
-rw-r--r--meta-xilinx-standalone/recipes-devtools/gcc/gcc-runtime_%.bbappend34
-rw-r--r--meta-xilinx-standalone/recipes-devtools/gcc/gcc-xilinx-standalone.inc2
-rw-r--r--meta-xilinx-standalone/recipes-devtools/gcc/libgcc_%.bbappend22
10 files changed, 72 insertions, 25 deletions
diff --git a/meta-xilinx-standalone/conf/distro/xilinx-standalone.conf b/meta-xilinx-standalone/conf/distro/xilinx-standalone.conf
index cece6848..1017202d 100644
--- a/meta-xilinx-standalone/conf/distro/xilinx-standalone.conf
+++ b/meta-xilinx-standalone/conf/distro/xilinx-standalone.conf
@@ -13,4 +13,7 @@ require conf/distro/include/yocto-uninative.inc
13INHERIT += "uninative" 13INHERIT += "uninative"
14 14
15# Hold this until it gets merged in core, we need libc.a and libgloss.a for cross-canadian 15# Hold this until it gets merged in core, we need libc.a and libgloss.a for cross-canadian
16LIBC_DEPENDENCIES_append = " newlib-staticdev libgloss-staticdev" \ No newline at end of file 16LIBC_DEPENDENCIES_append = " newlib-staticdev libgloss-staticdev"
17
18# No cached configsite files
19TOOLCHAIN_NEED_CONFIGSITE_CACHE = ""
diff --git a/meta-xilinx-standalone/recipes-bsp/newlib/libgloss_3.1.%.bbappend b/meta-xilinx-standalone/recipes-bsp/newlib/libgloss_3.1.%.bbappend
index cd6a7d8d..d7f0d068 100644
--- a/meta-xilinx-standalone/recipes-bsp/newlib/libgloss_3.1.%.bbappend
+++ b/meta-xilinx-standalone/recipes-bsp/newlib/libgloss_3.1.%.bbappend
@@ -1,3 +1,5 @@
1DEPENDS += "${MLPREFIX}newlib"
2
1do_configure_prepend_microblaze() { 3do_configure_prepend_microblaze() {
2 # hack for microblaze, which needs xilinx.ld to literally do any linking (its hard coded in its LINK_SPEC) 4 # hack for microblaze, which needs xilinx.ld to literally do any linking (its hard coded in its LINK_SPEC)
3 export CC="${CC} -L${S}/libgloss/microblaze" 5 export CC="${CC} -L${S}/libgloss/microblaze"
diff --git a/meta-xilinx-standalone/recipes-bsp/newlib/newlib_3.1.%.bbappend b/meta-xilinx-standalone/recipes-bsp/newlib/newlib_3.1.%.bbappend
index 1b6e00ee..9f5774fb 100644
--- a/meta-xilinx-standalone/recipes-bsp/newlib/newlib_3.1.%.bbappend
+++ b/meta-xilinx-standalone/recipes-bsp/newlib/newlib_3.1.%.bbappend
@@ -1,3 +1,6 @@
1# Some of the currently required multilibs require specific workarounds.
2# The override values below are linked specifically to the baremetal toolchain BSPs
3
1do_configure_prepend_microblaze() { 4do_configure_prepend_microblaze() {
2 # hack for microblaze, which needs xilinx.ld to literally do any linking (its hard coded in its LINK_SPEC) 5 # hack for microblaze, which needs xilinx.ld to literally do any linking (its hard coded in its LINK_SPEC)
3 export CC="${CC} -L${S}/libgloss/microblaze" 6 export CC="${CC} -L${S}/libgloss/microblaze"
@@ -7,6 +10,12 @@ do_configure_prepend(){
7 export CC_FOR_TARGET="${CC}" 10 export CC_FOR_TARGET="${CC}"
8} 11}
9 12
13# Fix for multilib newlib installations
14do_install_prepend() {
15 mkdir -p $(dirname ${D}${libdir})
16 mkdir -p $(dirname ${D}${includedir})
17}
18
10# Add MicroBlaze Patches 19# Add MicroBlaze Patches
11FILESEXTRAPATHS_append := "${THISDIR}/files:" 20FILESEXTRAPATHS_append := "${THISDIR}/files:"
12SRC_URI_append = " \ 21SRC_URI_append = " \
diff --git a/meta-xilinx-standalone/recipes-core/meta/meta-toolchain.bbappend b/meta-xilinx-standalone/recipes-core/meta/meta-toolchain.bbappend
new file mode 100644
index 00000000..0b4812d0
--- /dev/null
+++ b/meta-xilinx-standalone/recipes-core/meta/meta-toolchain.bbappend
@@ -0,0 +1 @@
TOOLCHAIN_TARGET_TASK_xilinx-standalone = "${@multilib_pkg_extend(d, 'packagegroup-newlib-standalone-sdk-target')}"
diff --git a/meta-xilinx-standalone/recipes-core/packagegroups/packagegroup-newlib-standalone-sdk-target.bb b/meta-xilinx-standalone/recipes-core/packagegroups/packagegroup-newlib-standalone-sdk-target.bb
new file mode 100644
index 00000000..d943938b
--- /dev/null
+++ b/meta-xilinx-standalone/recipes-core/packagegroups/packagegroup-newlib-standalone-sdk-target.bb
@@ -0,0 +1,11 @@
1SUMMARY = "Target packages for the standalone SDK"
2
3PACKAGE_ARCH = "${TUNE_PKGARCH}"
4
5inherit packagegroup
6
7RDEPENDS_${PN} = "\
8 libgcc-dev \
9 libstdc++-dev \
10 ${LIBC_DEPENDENCIES} \
11 "
diff --git a/meta-xilinx-standalone/recipes-devtools/gcc/gcc-cross-canadian_%.bbappend b/meta-xilinx-standalone/recipes-devtools/gcc/gcc-cross-canadian_%.bbappend
index 822891be..90dbae9a 100644
--- a/meta-xilinx-standalone/recipes-devtools/gcc/gcc-cross-canadian_%.bbappend
+++ b/meta-xilinx-standalone/recipes-devtools/gcc/gcc-cross-canadian_%.bbappend
@@ -1,5 +1,12 @@
1require gcc-xilinx-standalone.inc 1require gcc-xilinx-standalone.inc
2 2
3# We want to use the stock multilib configs, when available
4EXTRACONFFUNCS_xilinx-standalone = ""
5
6EXTRA_OECONF_append_xilinx-standalone = " \
7 --enable-multilib \
8"
9
3# Temporary hack to build gcc cross canadian for tclibc-newlib as --with-sysroot=/not/exist 10# Temporary hack to build gcc cross canadian for tclibc-newlib as --with-sysroot=/not/exist
4# has been removed from TARGET_OS for elf and eabi in gcc-cross-canadian.inc 11# has been removed from TARGET_OS for elf and eabi in gcc-cross-canadian.inc
5 12
diff --git a/meta-xilinx-standalone/recipes-devtools/gcc/gcc-cross_%.bbappend b/meta-xilinx-standalone/recipes-devtools/gcc/gcc-cross_%.bbappend
index 19862cb9..dd810a12 100644
--- a/meta-xilinx-standalone/recipes-devtools/gcc/gcc-cross_%.bbappend
+++ b/meta-xilinx-standalone/recipes-devtools/gcc/gcc-cross_%.bbappend
@@ -1 +1,5 @@
1require gcc-xilinx-standalone.inc 1require gcc-xilinx-standalone.inc
2
3# We want to use the stock multilib configs, when available
4EXTRACONFFUNCS_xilinx-standalone = ""
5
diff --git a/meta-xilinx-standalone/recipes-devtools/gcc/gcc-runtime_%.bbappend b/meta-xilinx-standalone/recipes-devtools/gcc/gcc-runtime_%.bbappend
index cc99009c..873f83ea 100644
--- a/meta-xilinx-standalone/recipes-devtools/gcc/gcc-runtime_%.bbappend
+++ b/meta-xilinx-standalone/recipes-devtools/gcc/gcc-runtime_%.bbappend
@@ -9,7 +9,6 @@ EXTRA_OECONF_append_xilinx-standalone_class-target = " \
9 --enable-plugins \ 9 --enable-plugins \
10 --with-gnu-as \ 10 --with-gnu-as \
11 --disable-libitm \ 11 --disable-libitm \
12 --enable-multilib \
13" 12"
14 13
15EXTRA_OECONF_append_xilinx-standalone_aarch64_class-target = " \ 14EXTRA_OECONF_append_xilinx-standalone_aarch64_class-target = " \
@@ -45,28 +44,19 @@ EXTRA_OECONF_append_xilinx-standalone_microblaze_class-target = " \
45 44
46# Changes local to gcc-runtime... 45# Changes local to gcc-runtime...
47 46
48# Due to multilibs, we need to clear the default TUNE_CCARGS on arm
49TUNE_CCARGS_xilinx-standalone_arm_class-target = ""
50
51# Configure fails on multilib when using a cache file, this re-sets it to nothing
52EXTRA_OECONF_append_xilinx-standalone_class-target = " --cache-file="
53
54# Dont build libitm, etc. 47# Dont build libitm, etc.
55RUNTIMETARGET_xilinx-standalone_class-target = "libstdc++-v3" 48RUNTIMETARGET_xilinx-standalone_class-target = "libstdc++-v3"
56 49
57# Recursve 5 levels due to the several combinations of multilibs built 50do_install_append_xilinx-standalone_class-target() {
58FILES_libstdc++-staticdev_append_xilinx-standalone_class-target = " \ 51 # Fixup what gcc-runtime normally would do, we don't want linux directories!
59 ${libdir}/libsupc++.a* \ 52 rm -rf ${D}${includedir}/c++/${BINV}/${TARGET_ARCH}${TARGET_VENDOR}-linux
60 ${libdir}/libstdc++*.a* \
61 ${libdir}/**/libsupc++.a* \
62 ${libdir}/**/libstdc++*.a* \
63 ${libdir}/**/**/libsupc++.a* \
64 ${libdir}/**/**/libstdc++*.a* \
65 ${libdir}/**/**/**/libsupc++.a* \
66 ${libdir}/**/**/**/libstdc++*.a* \
67 ${libdir}/**/**/**/**/libsupc++.a* \
68 ${libdir}/**/**/**/**/libstdc++*.a* \
69 ${libdir}/**/**/**/**/**/libsupc++.a* \
70 ${libdir}/**/**/**/**/**/libstdc++*.a* \
71"
72 53
54 # The multilibs have different headers, so stop combining them!
55 if [ "${TARGET_VENDOR_MULTILIB_ORIGINAL}" != "" -a "${TARGET_VENDOR}" != "${TARGET_VENDOR_MULTILIB_ORIGINAL}" ]; then
56 rm -rf ${D}${includedir}/c++/${BINV}/${TARGET_ARCH}${TARGET_VENDOR_MULTILIB_ORIGINAL}-${TARGET_OS}
57 fi
58}
59
60FILES_${PN}-dbg_append_xilinx-standalone_class-target = "\
61 ${libdir}/libstdc++.a-gdb.py \
62"
diff --git a/meta-xilinx-standalone/recipes-devtools/gcc/gcc-xilinx-standalone.inc b/meta-xilinx-standalone/recipes-devtools/gcc/gcc-xilinx-standalone.inc
index 6e3fca0c..21d30361 100644
--- a/meta-xilinx-standalone/recipes-devtools/gcc/gcc-xilinx-standalone.inc
+++ b/meta-xilinx-standalone/recipes-devtools/gcc/gcc-xilinx-standalone.inc
@@ -1,5 +1,4 @@
1# Any changes to this file should be synced with gcc-runtime_%.bbappend 1# Any changes to this file should be synced with gcc-runtime_%.bbappend
2
3LINKER_HASH_STYLE_xilinx-standalone = "" 2LINKER_HASH_STYLE_xilinx-standalone = ""
4SYMVERS_CONF_xilinx-standalone = "" 3SYMVERS_CONF_xilinx-standalone = ""
5 4
@@ -10,7 +9,6 @@ EXTRA_OECONF_append_xilinx-standalone = " \
10 --enable-plugins \ 9 --enable-plugins \
11 --with-gnu-as \ 10 --with-gnu-as \
12 --disable-libitm \ 11 --disable-libitm \
13 --enable-multilib \
14" 12"
15 13
16EXTRA_OECONF_append_xilinx-standalone_aarch64 = " \ 14EXTRA_OECONF_append_xilinx-standalone_aarch64 = " \
diff --git a/meta-xilinx-standalone/recipes-devtools/gcc/libgcc_%.bbappend b/meta-xilinx-standalone/recipes-devtools/gcc/libgcc_%.bbappend
new file mode 100644
index 00000000..e6801c2f
--- /dev/null
+++ b/meta-xilinx-standalone/recipes-devtools/gcc/libgcc_%.bbappend
@@ -0,0 +1,22 @@
1python do_multilib_install_xilinx-standalone_class-target () {
2 pass
3}
4
5standalone_fixup () {
6 (
7 cd ${D}${libdir}
8 for each in ${TARGET_SYS}/*/* ; do
9 ln -s $each $(basename $each)
10 done
11 )
12}
13
14FIXUP_FUNCTION = ""
15FIXUP_FUNCTION_xilinx-standalone_class-target = " standalone_fixup"
16
17do_install[postfuncs] .= "${FIXUP_FUNCTION}"
18
19FILES_${PN}-dev_append_xilinx-standalone_class-target = " \
20 ${libdir}/*.a \
21 ${libdir}/*.o \
22"