One of the goals of soong is to reduce the number of different ways we
compile the same code, which makes it much harder to determine if a
change is going to break a build.  We try to move as many of these
decisions to runtime as possible.  For example, you can compile the
two subdirectories as separate shared libraries, and then choose which
one to install and load at runtime.

For cases where you absolutely must handle it at compile time, you can
see examples at
https://android.googlesource.com/platform/art.git/+/master/build/art.go
or 
https://android.googlesource.com/platform/external/llvm.git/+/master/soong/llvm.go.
You will need to define your own module type that extends cc_library
or cc_binary, add a property struct to it that contains your subdirs
property, then in a load hook read the environment variable and copy
the values out of your property struct into the Srcs property.

On Fri, Aug 4, 2017 at 1:32 AM,  <shalinisalo...@gmail.com> wrote:
> Hi,
>
> I have been working with Android O preview source code and have been
> studying its new build system, soong.
>
> I’m facing issue regarding conditional compilation of source files inside
> different directories based on value of environment variable.
>
> Let’s say Android O-source code has two directories A and B. Each of the
> directories contain top level Android.bp inside them. I would like soong to
> conditionally compile sources in directory A or B depending up on the value
> of an environment variable $ENV_VARIABLE.
>
> ENV_VARIABLE is not specified (null) or contains a string value.
>
> If ENV_VARIABLE is not  null, Android.bp file in A should be compiled,
> otherwise Android.bp file in B should be compiled.
>
> Currently, both the Android.bp files in A and B are compiled with soong. So,
> we need soong to compile Android.bp file in A or B based on the value of
> $ENV_VARIABLE.
>
>
>
> I tried the below approach :
>
> 1.       Added  My_struct struct { Srcs []string } to varaibleProperties in
> build/soong/variable.go
>
> +   My_struct struct{
>
> +                Srcs[]string
>
> +                }
> 2.+ My_struct       *string `json:",omitempty to productVariables in
> build/soong/variable.go
> 3.Passed ENV_VARIABLE to My_struct in build/make/core/soong_config.mk
>
> +   echo '    "My_struct": "$(ENV_VARIABLE)",'
>
> I would like to change Android.bp in directory A in the following way so
> that whenever My_struct has a valid string, soong should compile sources
> specified in the subdirs field.
>
>
> +               product_variables: {
>
> +                   my_struct: {
>
> +                       subdirs =[“../B”],
>
> +                   },
>
> +               },
>
>  }
>
>
>
> But subdirs is not a property in .bp module. Can you please provide help on
> how to achieve this?
>
>
>
> Thank You.
>
>
>
> --
> --
> You received this message because you are subscribed to the "Android
> Building" mailing list.
> To post to this group, send email to android-building@googlegroups.com
> To unsubscribe from this group, send email to
> android-building+unsubscr...@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-building+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
-- 
You received this message because you are subscribed to the "Android Building" 
mailing list.
To post to this group, send email to android-building@googlegroups.com
To unsubscribe from this group, send email to
android-building+unsubscr...@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-building+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to