diff mbox series

[v2] include/mk/env_post.mk: enable __ANDROID__ definition for Android build

Message ID 1556124939-7699-1-git-send-email-ruanzw@xiaopeng.com
State Rejected
Delegated to: Petr Vorel
Headers show
Series [v2] include/mk/env_post.mk: enable __ANDROID__ definition for Android build | expand

Commit Message

阮正旺 April 24, 2019, 4:55 p.m. UTC
The definition of __ANDROID__ has been widely used to compile android-specific
things (i.e. busybox [1] [2], dnsmasq [3]), so we expected NDK to automatically
pass it to help build LTP for android, but unfortunately it didn't (it is tested
with android-ndk-r19c). Currently, we have to manually specify -D__ANDROID__ in
configure step before launch 'make ANDROID=1' command, and this is suffering for
those who don't have good knowledge of LTP, so it is necessary to enable it if
built for android.

In the past, there had been a lot of discussion about which one of __ANDROID__
and ANDROID was the best choice to define the android-only code, but __ANDROID__
seems better right now [4].

[1] https://git.busybox.net/busybox/tree/configs/android_defconfig
[2] https://git.busybox.net/busybox/tree/configs/android_ndk_defconfig
[3] http://thekelleys.org.uk/gitweb/?p=dnsmasq.git;a=blob_plain;f=bld/Android.mk;hb=HEAD
[4] https://groups.google.com/forum/#!topic/android-ndk/cf9_f1SLXls

Signed-off-by: Zhengwang Ruan <ruanzw@xiaopeng.com>
---
 include/mk/env_post.mk | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Steve Muckle April 24, 2019, 7:27 p.m. UTC | #1
On 4/24/19 9:55 AM, Zhengwang Ruan wrote:
> The definition of __ANDROID__ has been widely used to compile android-specific
> things (i.e. busybox [1] [2], dnsmasq [3]), so we expected NDK to automatically
> pass it to help build LTP for android, but unfortunately it didn't (it is tested
> with android-ndk-r19c). Currently, we have to manually specify -D__ANDROID__ in
> configure step before launch 'make ANDROID=1' command, and this is suffering for
> those who don't have good knowledge of LTP, so it is necessary to enable it if
> built for android.

Hi Zhengwang I mentioned in the other thread but just to get it here 
also, __ANDROID__ seems to be defined for me by the NDK. Could you try 
the steps Sandeep shared?

thanks,
steve
Petr Vorel April 24, 2019, 9:11 p.m. UTC | #2
Hi,

> On 4/24/19 9:55 AM, Zhengwang Ruan wrote:
> > The definition of __ANDROID__ has been widely used to compile android-specific
> > things (i.e. busybox [1] [2], dnsmasq [3]), so we expected NDK to automatically
> > pass it to help build LTP for android, but unfortunately it didn't (it is tested
> > with android-ndk-r19c). Currently, we have to manually specify -D__ANDROID__ in
> > configure step before launch 'make ANDROID=1' command, and this is suffering for
> > those who don't have good knowledge of LTP, so it is necessary to enable it if
> > built for android.

> Hi Zhengwang I mentioned in the other thread but just to get it here also,
> __ANDROID__ seems to be defined for me by the NDK. Could you try the steps
> Sandeep shared?

Using old way (getting standalone toolchain from NDK r19, using API 27
and define $AR, $CC, $LD, ... variables) confirms what Steve said [1]: -D__ANDROID__
is not defined on the command line (see below), but #error macro inside #ifdef
__ANDROID__ guard is proved that arm-linux-androideabi-gcc defines it.

Just for sure I tested the same using Sandeep's way (NDK r20-beta2, using
variables with API 26) [2], it behaves the same.
IMHO the patch is not needed.

BTW minimal Android API for LTP is 26 (API 24 complains for missing hasmntopt()).

> thanks,
> steve


Kind regards,
Petr

[1]
/opt/android-standalone-toolchain.api-27/bin/arm-linux-androideabi-gcc --sysroot=/opt/android-standalone-toolchain.api-27/sysroot -I/opt/android-standalone-toolchain.api-27/sysroot/usr/include -I/include -g -O2 -fno-strict-aliasing -pipe -Wall -W -Wold-style-definition -I. -DLTPLIB -Werror-implicit-function-declaration --sysroot=/opt/android-standalone-toolchain.api-27/sysroot -I/opt/android-standalone-toolchain.api-27/sysroot/usr/include -I/include -I../include -I../include -I../include/old/  -c -o tst_kernel.o tst_kernel.c

[2]
/opt/android-ndk-r20-beta2/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android26-clang -g -O2 -g -O2 -fno-strict-aliasing -pipe -Wall -W -Wold-style-definition -I. -DLTPLIB -Werror-implicit-function-declaration -D_FORTIFY_SOURCE=2 -I../include -I../include -I../include/old/  -c -o tst_resource.o tst_resource.c
阮正旺 April 25, 2019, 3:13 a.m. UTC | #3
Hi Steve, Petr, Sandeep,


-------- Original Message --------
From: Steve Muckle
Sent: Wed, 24 Apr 2019 12:27:32 -0700
To: Zhengwang Ruan, Ltp, Petr Vorel, Sandeep Patil
Cc:
Subject: Re: [PATCH v2] include/mk/env_post.mk: enable __ANDROID__ 
definition for Android build
> On 4/24/19 9:55 AM, Zhengwang Ruan wrote:
>> The definition of __ANDROID__ has been widely used to compile 
>> android-specific
>> things (i.e. busybox [1] [2], dnsmasq [3]), so we expected NDK to 
>> automatically
>> pass it to help build LTP for android, but unfortunately it didn't 
>> (it is tested
>> with android-ndk-r19c). Currently, we have to manually specify 
>> -D__ANDROID__ in
>> configure step before launch 'make ANDROID=1' command, and this is 
>> suffering for
>> those who don't have good knowledge of LTP, so it is necessary to 
>> enable it if
>> built for android.
>
> Hi Zhengwang I mentioned in the other thread but just to get it here 
> also, __ANDROID__ seems to be defined for me by the NDK. Could you try 
> the steps Sandeep shared?

Yes, I tried. And it proves NDK has defined it, and this patch is not 
needed.

Thank you guys very much for your time and helping me review this.

--

Kind Regards,

Zhengwang

>
> thanks,
> steve
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body smarttemplateinserted="true">
    <div id="smartTemplate4-template">
      <p>Hi Steve, Petr, Sandeep,<br>
      </p>
    </div>
    <br>
    <div id="smartTemplate4-quoteHeader">-------- Original Message --------<br>
      From: Steve Muckle<br>
      Sent: Wed, 24 Apr 2019 12:27:32 -0700<br>
      To: Zhengwang Ruan, Ltp, Petr Vorel, Sandeep Patil<br>
      Cc: <br>
      Subject: Re: [PATCH v2] include/mk/env_post.mk: enable __ANDROID__
      definition for Android build<br>
    </div>
    <blockquote type="cite"
      cite="mid:15aeaa52-eecc-e21a-eb86-d66cfe81928e@google.com">On
      4/24/19 9:55 AM, Zhengwang Ruan wrote:
      <br>
      <blockquote type="cite">The definition of __ANDROID__ has been
        widely used to compile android-specific
        <br>
        things (i.e. busybox [1] [2], dnsmasq [3]), so we expected NDK
        to automatically
        <br>
        pass it to help build LTP for android, but unfortunately it
        didn't (it is tested
        <br>
        with android-ndk-r19c). Currently, we have to manually specify
        -D__ANDROID__ in
        <br>
        configure step before launch 'make ANDROID=1' command, and this
        is suffering for
        <br>
        those who don't have good knowledge of LTP, so it is necessary
        to enable it if
        <br>
        built for android.
        <br>
      </blockquote>
      <br>
      Hi Zhengwang I mentioned in the other thread but just to get it
      here also, __ANDROID__ seems to be defined for me by the NDK.
      Could you try the steps Sandeep shared?
      <br>
    </blockquote>
    <p>Yes, I tried. And it proves NDK has defined it, and this patch is
      not needed.<br>
    </p>
    <p>Thank you guys very much for your time and helping me review
      this.</p>
    <p>--<br>
    </p>
    <p>Kind Regards,</p>
    <p>Zhengwang<br>
    </p>
    <blockquote type="cite"
      cite="mid:15aeaa52-eecc-e21a-eb86-d66cfe81928e@google.com">
      <br>
      thanks,
      <br>
      steve
      <br>
    </blockquote>
  </body>
</html>
diff mbox series

Patch

diff --git a/include/mk/env_post.mk b/include/mk/env_post.mk
index 913bdf5..7953e0a 100644
--- a/include/mk/env_post.mk
+++ b/include/mk/env_post.mk
@@ -44,7 +44,7 @@  endif
 ifeq ($(ANDROID),1)
 # There are many undeclared functions, it's best not to accidentally overlook
 # them.
-CFLAGS				+= -Werror-implicit-function-declaration
+CFLAGS				+= -Werror-implicit-function-declaration -D__ANDROID__
 
 LDFLAGS				+= -L$(top_builddir)/lib/android_libpthread
 LDFLAGS				+= -L$(top_builddir)/lib/android_librt