$shell commands in Android.mk -> Android.bp migration.

1,875 views
Skip to first unread message

Frederic Plourde

unread,
Aug 20, 2019, 5:40:10 PM8/20/19
to Android Building

Hi android building !


  I used to have this in one of my Android.mk makefiles :

$(shell (cd $(LOCAL_PATH)/../../ && ./pre-build-script.sh))


but I just noticed that this practice is now discouraged on the Soong Android.bp build system

From the Build System Best Practices document,  I could read :

Don't use $(shell) to write files, create symlinks, etc. We expect to enforce this in the future. Encode these as build rules in the build graph instead. This can be problematic in a number of ways:


Could you give me a concrete example of how I could run this "pre-build-script.sh" shell script before *every* build in my new Android.bp file ?

thx :)


Frederic Plourde
Principal Engineer

Collabora ltd.

Dan Willemsen

unread,
Aug 22, 2019, 2:18:41 PM8/22/19
to Android Building
What is your pre-build-script.sh script doing? Right now, since it has no dependencies and no output files, you're essentially running it on every build, even when the user is only trying to compile a single file in a different section of the tree. That's deprecated since it has a huge performance impact.

Generally, if this is something that takes inputs and produces output files, you may be able to use a genrule. But without knowing anything about what this script is doing, I can't help much more than that.

- Dan



--
--
You received this message because you are subscribed to the "Android Building" mailing list.
To post to this group, send email to android-...@googlegroups.com
To unsubscribe from this group, send email to
android-buildi...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-building?hl=en

---
You received this message because you are subscribed to the Google Groups "Android Building" group.
To unsubscribe from this group and stop receiving emails from it, send an email to android-buildi...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/android-building/1131b0a7-0656-4813-9226-c233f3c2a05c%40googlegroups.com.

NIRAJ DESAI

unread,
Sep 20, 2019, 1:51:27 PM9/20/19
to Android Building
I have a similar need

I am trying to integrate the conan package management system.

I have written a custom generator for conan that creates an Android.bp file with the appropriate targets that are downloaded via conan

I need to run a script that will install these dependencies during build time.

My file structure is:

- vendor/mycompany/external/Android.bp
- vendor/mycompany/external/conanInstallDependencies.sh
- vendor/mycompany/conan/conanfile.txt

I am able to run the script using $(shell) via Android.mk but I am not sure how to integrate Android.mk and the Android.bp that uses the conan deps  to ensure the build order is satisfied

It works with Android.mk, but I have to run the build twice.
- First build iteration will download the dependencies via Conan and place them in the proper folder location but the build will fail because the Android.bp that is generated by Conan is not executed
- Second build iteration will find the existing Android.bp that was generated by Conan and the build will succeed


I essentially want to create a target that is called "conanInstallDependencies"
This target would  be simple, it will only invoke the "conanInstallDependencies.sh" script

I would want the Conan-generated Android.bp to "link" or "be dependent" on the "conanInstallDependencies" target so that this Android.bp is always built after the "conanInstallDependencies" Android.bp





On Thursday, August 22, 2019 at 11:18:41 AM UTC-7, Dan Willemsen wrote:
What is your pre-build-script.sh script doing? Right now, since it has no dependencies and no output files, you're essentially running it on every build, even when the user is only trying to compile a single file in a different section of the tree. That's deprecated since it has a huge performance impact.

Generally, if this is something that takes inputs and produces output files, you may be able to use a genrule. But without knowing anything about what this script is doing, I can't help much more than that.

- Dan



On Tue, Aug 20, 2019 at 2:40 PM Frederic Plourde <fredinf...@gmail.com> wrote:

Hi android building !


  I used to have this in one of my Android.mk makefiles :

$(shell (cd $(LOCAL_PATH)/../../ && ./pre-build-script.sh))


but I just noticed that this practice is now discouraged on the Soong Android.bp build system

From the Build System Best Practices document,  I could read :

Don't use $(shell) to write files, create symlinks, etc. We expect to enforce this in the future. Encode these as build rules in the build graph instead. This can be problematic in a number of ways:


Could you give me a concrete example of how I could run this "pre-build-script.sh" shell script before *every* build in my new Android.bp file ?

thx :)


Frederic Plourde
Principal Engineer

Collabora ltd.

--
--
You received this message because you are subscribed to the "Android Building" mailing list.
To post to this group, send email to android-...@googlegroups.com
To unsubscribe from this group, send email to

For more options, visit this group at
http://groups.google.com/group/android-building?hl=en

---
You received this message because you are subscribed to the Google Groups "Android Building" group.
To unsubscribe from this group and stop receiving emails from it, send an email to android-...@googlegroups.com.

Dan Willemsen

unread,
Sep 20, 2019, 2:09:15 PM9/20/19
to Android Building
You'll need to execute conan before running the android build. It's not enforced yet, but the source tree is expected to be read-only during the build -- in particularly we start caching the Android.bp files nearly immediately upon build startup, so adding new ones isn't going to work. Nothing from the Android.bp files are executed before we finish reading all the Android.bp files.

- Dan


For more options, visit this group at
http://groups.google.com/group/android-building?hl=en

---
You received this message because you are subscribed to the Google Groups "Android Building" group.
To unsubscribe from this group and stop receiving emails from it, send an email to android-buildi...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/android-building/8627b939-8c30-49fa-86cf-32c142de15c7%40googlegroups.com.

Wesolowski, Krzysztof

unread,
Sep 23, 2019, 10:49:26 AM9/23/19
to android-...@googlegroups.com
Propobably would be better for other users of you source tree if conan downloaded content is kept in some repo more or less as cache, so no networking is needed at build time and still git sha1 can uniquely identify state of dependencies.

Maybe conan update should be closer to "repo post-sync" action?


From: 'Dan Willemsen' via Android Building <android-...@googlegroups.com>
Sent: Friday, September 20, 2019 8:08:52 PM
To: Android Building <android-...@googlegroups.com>
Subject: Re: [android-building] $shell commands in Android.mk -> Android.bp migration.
 
Reply all
Reply to author
Forward
0 new messages