diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-03-30 15:02:21 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-03-31 10:10:29 +0100 |
commit | 8b41b5ddfe20bfc22133339597ffce2829caa229 (patch) | |
tree | f078b267fd25468b5336e8cb253b030cf8b20453 | |
parent | 408e0b46aec572a17e72844bbce1139af7cf05c8 (diff) | |
download | poky-8b41b5ddfe20bfc22133339597ffce2829caa229.tar.gz |
multilib_header: Update wrapper to handle arm 32/64 bit
Having arm 32/64 bit headers coexisting turns out to be tricky. Unfortunately
our wrapper works using wordsize.h and this differs on arm so we can't use it.
Therefore replicate the logic here for arm. I did look into writing our
own wordsize.h but we also need to remap kernel headers on arm and
since wordsize.h comes from libc, that doesn't work for kernel headers.
(From OE-Core rev: 141dc7136c9c62da1d30132df4b3244fe6d8898d)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | meta/classes/multilib_header.bbclass | 7 | ||||
-rw-r--r-- | scripts/multilib_header_wrapper.h | 26 |
2 files changed, 16 insertions, 17 deletions
diff --git a/meta/classes/multilib_header.bbclass b/meta/classes/multilib_header.bbclass index 304c28e771..e03f5b13b2 100644 --- a/meta/classes/multilib_header.bbclass +++ b/meta/classes/multilib_header.bbclass | |||
@@ -13,13 +13,9 @@ oe_multilib_header() { | |||
13 | ;; | 13 | ;; |
14 | *) | 14 | *) |
15 | esac | 15 | esac |
16 | # We use | ||
17 | # For ARM: We don't support multilib builds. | ||
18 | # For MIPS: "n32" is a special case, which needs to be | 16 | # For MIPS: "n32" is a special case, which needs to be |
19 | # distinct from both 64-bit and 32-bit. | 17 | # distinct from both 64-bit and 32-bit. |
20 | case ${TARGET_ARCH} in | 18 | case ${TARGET_ARCH} in |
21 | arm*) return | ||
22 | ;; | ||
23 | mips*) case "${MIPSPKGSFX_ABI}" in | 19 | mips*) case "${MIPSPKGSFX_ABI}" in |
24 | "-n32") | 20 | "-n32") |
25 | ident=n32 | 21 | ident=n32 |
@@ -31,9 +27,6 @@ oe_multilib_header() { | |||
31 | ;; | 27 | ;; |
32 | *) ident=${SITEINFO_BITS} | 28 | *) ident=${SITEINFO_BITS} |
33 | esac | 29 | esac |
34 | if echo ${TARGET_ARCH} | grep -q arm; then | ||
35 | return | ||
36 | fi | ||
37 | for each_header in "$@" ; do | 30 | for each_header in "$@" ; do |
38 | if [ ! -f "${D}/${includedir}/$each_header" ]; then | 31 | if [ ! -f "${D}/${includedir}/$each_header" ]; then |
39 | bberror "oe_multilib_header: Unable to find header $each_header." | 32 | bberror "oe_multilib_header: Unable to find header $each_header." |
diff --git a/scripts/multilib_header_wrapper.h b/scripts/multilib_header_wrapper.h index 5a87540884..f516673b63 100644 --- a/scripts/multilib_header_wrapper.h +++ b/scripts/multilib_header_wrapper.h | |||
@@ -21,11 +21,23 @@ | |||
21 | * | 21 | * |
22 | */ | 22 | */ |
23 | 23 | ||
24 | #include <bits/wordsize.h> | ||
25 | 24 | ||
26 | #ifdef __WORDSIZE | 25 | #if defined (__arm__) |
26 | #define __MHWORDSIZE 32 | ||
27 | #elif defined (__aarch64__) && defined ( __LP64__) | ||
28 | #define __MHWORDSIZE 64 | ||
29 | #elif defined (__aarch64__) | ||
30 | #define __MHWORDSIZE 32 | ||
31 | #else | ||
32 | #include <bits/wordsize.h> | ||
33 | #if defined (__WORDSIZE) | ||
34 | #define __MHWORDSIZE __WORDSIZE | ||
35 | #else | ||
36 | #error "__WORDSIZE is not defined" | ||
37 | #endif | ||
38 | #endif | ||
27 | 39 | ||
28 | #if __WORDSIZE == 32 | 40 | #if __MHWORDSIZE == 32 |
29 | 41 | ||
30 | #ifdef _MIPS_SIM | 42 | #ifdef _MIPS_SIM |
31 | 43 | ||
@@ -41,15 +53,9 @@ | |||
41 | #include <ENTER_HEADER_FILENAME_HERE-32.h> | 53 | #include <ENTER_HEADER_FILENAME_HERE-32.h> |
42 | #endif | 54 | #endif |
43 | 55 | ||
44 | #elif __WORDSIZE == 64 | 56 | #elif __MHWORDSIZE == 64 |
45 | #include <ENTER_HEADER_FILENAME_HERE-64.h> | 57 | #include <ENTER_HEADER_FILENAME_HERE-64.h> |
46 | #else | 58 | #else |
47 | #error "Unknown __WORDSIZE detected" | 59 | #error "Unknown __WORDSIZE detected" |
48 | #endif /* matches #if __WORDSIZE == 32 */ | 60 | #endif /* matches #if __WORDSIZE == 32 */ |
49 | |||
50 | #else /* __WORDSIZE is not defined */ | ||
51 | |||
52 | #error "__WORDSIZE is not defined" | ||
53 | |||
54 | #endif | ||
55 | 61 | ||