Commit Graph

101 Commits

Author SHA1 Message Date
Nan Zhang 6d34b308ff Added phony module type for soong.
The "required" field within "phony" module in .bp file has to be
non-empty. And "phony" module doesn't contain any "src" files.
Bug: b/32981153
Test: make -j out/soong/build.ninja

Change-Id: Iaa2009467c44702572b97ca9cbd02c1d368c8d83
2017-02-06 22:23:19 -08:00
Colin Cross c0d58b4a0f Fix envDeps initialization and locking
If Config.GetEnv was called when envDeps was uninitialized (for
example in a test) it would panic, which if recovered (for example in
a test) would cause it to continue without unlocking the mutex, and
could later deadlock.  Fix the initialization by initializing in
GetEnv if necessary, and use defer to avoid holding the mutex after
a panic.

Test: soong tests
Change-Id: I453522faaf47ff6fbc4702345cfe177100bdc522
2017-02-06 15:45:16 -08:00
Colin Cross faeb7aa135 Support data properties for test binaries
Allow tests to specify a data property that lists files or filegroup
modules that will be packaged alongside the test.  Also add a path
property to filegroup modules to allow shifting the path of the
packaged files, and add ExpandSourcesSubDir to expand the filegroup
sources while including a shifted relative path in the Paths objects.

Test: soong tests, manually adding data to a module
Change-Id: I52a48942660e12755d313ef13279313361b4fc35
2017-02-02 16:23:30 -08:00
Colin Cross 294941bee9 Update soong to use pathtools.FileSystem
Update soong to follow changes in
https://github.com/google/blueprint/pull/141

Test: soong tests
Change-Id: I49a9b83cac7590dc75b26b31136b8707c188bc4a
2017-02-02 16:19:56 -08:00
Nan Zhang b9eeb1d79a Fixed then comments to describe how to use android.ModuleBase object.
Since we have changed the package name from 'common' to 'android'

Test: Manual.
Change-Id: Ic9649f3216609b36fa31db096509de42f83e9ba4
2017-02-02 10:59:16 -08:00
Colin Cross 7fc17dbfce Remove extra basePath from ModuleSrcPath
ModuleSrcPath contains an embedded basePath as well as a
SoucePath that contains another basePath.  Remove the embedded
basePath, and make the SourcePath embedded.

Test: no change to build.ninja
Change-Id: I3cdf3477eca41ed35fac08a892aab22cbcdb2224
2017-02-01 15:14:31 -08:00
Vishwath Mohan 1b017a76e1 Hide CFI behind a global flag.
This CL ensures that locally enabling CFI in a .bp file is not honored
unless it is enabled globally using ENABLE_CFI=true first, effectively
hiding it behind a flag.

Bug: 30227045
Bug: 22033465
Test: m -j40 works and device boots
Test: cfi is correctly honored only when the global flag is set.
Change-Id: Iccc6e4bf5e7828ab8ce6056f3e40922712faa0d8
2017-01-19 14:40:34 -08:00
Jack He 8cc714313c Add Android.bp variables to the soong build parser
* BtConfigIncludeDir: BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR
* BtHcilpIncluded: BOARD_BLUETOOTH_BDROID_HCILP_INCLUDED
* BtHciUseMct: BLUETOOTH_HCI_USE_MCT

Bug: 32958753
Test: Code compilation, no user visible effects

Change-Id: I0dc53172ee823e4e0fa69749e1297713796538cf
2017-01-11 16:07:44 -08:00
Treehugger Robot 5c8b8c6d6e Merge "Do not duplicate arch properties when cpu variant == arch variant" 2016-12-20 20:01:38 +00:00
Colin Cross 0801633173 Do not duplicate arch properties when cpu variant == arch variant
build/make/board/generic_mips/BoardConfig.mk sets
TARGET_CPU_VARIANT := TARGET_ARCH_VARIANT, which can cause the same
variant-specific properties to be applied twice.

Test: lunch aosp_mips-eng && mmma -j external/skia TARGET_ARCH_VARIANT=mips32r2dspr2-fp
Change-Id: Ie4abe804f8ce898bf89664ae749b9bc8ac3e649f
2016-12-20 09:53:14 -08:00
Hiroshi Yamauchi e2a106353f Add ArtUseReadBarrier to ProductVariables.
Bug: 33492005
Test: top-level angler build.
Change-Id: Ib04284bac923a143038655d495bcbacaabf61440
2016-12-19 15:31:32 -08:00
Colin Cross 068e0feace Support filegroups
filegroup is a module that contains a list of files, and can be used
to export files across package boundaries.  filegroups (and genrules)
can be referenced from srcs properties of other modules using the
syntax ":module".

Test: m -j
Change-Id: I3d6fc4819c0b4225b474e0ad42f0d947f55a5961
2016-12-17 16:34:03 +00:00
Colin Cross bb2e2b7d7f Support arm_on_x86 properties
Allow Android.bp files to set properties when an x86 device supports
arm abis.

Test: lunch aosp_fugu-userdebug && mmma -j frameworks/compile/libbcc
Change-Id: Ic142a3f93175924a826dea9908b2e5183a486184
2016-12-08 17:27:25 -08:00
Colin Cross 6bc59ef731 Support eng product variable
The eng product variable will be true for builds where
TARGET_BUILD_VARIANT==eng.

Test: mmma -j frameworks/compile/libbcc
Change-Id: I808129740643495370bea64df3fe5bcf01eb9915
2016-12-08 09:46:35 -08:00
Dan Willemsen 4353bc4422 Support system/vendor for devices without a vendor partition
Test: lunch aosp_arm-eng; m -j vulkan.default
Change-Id: I91eabf98f53c455ec4ade95215f11a6f89631747
2016-12-05 17:21:13 -08:00
Dan Willemsen 7ed1ae3fa4 Import/Export LOCAL_PROPRIETARY_MODULE
Test: androidmk hardware/broadcom/libbt/Android.mk
Test: m -j vulkan.default, inspect out/soong/Android-aosp_flounder.mk
Change-Id: I8a9553f772a1d434eb0069c1575e1b0d6db36bc9
2016-12-05 17:20:57 -08:00
Colin Cross a2f296f054 Fall back to prebuilts if source modules are disabled
In lieu of having an environment variable to override prebuilts
preferences (for now), fall back to prebuilts whenever the source
module is disabled.  Complicated source modules (like LLVM) that
already have Go logic can then use an environment variariable to
disable their source module whenever they want to use prebuilts.

Computes UsePrebuilt once using information from both the source
and prebuilt modules, and stores the result in the prebuilt module.

Test: m -j libLLVM
Test: m -j libLLVM FORCE_BUILD_LLVM_COMPONENTS=true
Change-Id: Ib0819a03e9492e55f55de3402e05b3a043644a39
2016-11-30 13:09:45 -08:00
Colin Cross 99d7c23006 Provide config helpers for environment variables
Add GetenvWithDefault, IsEnvTrue, and IsEnvFalse helpers to Config.

Test: m -j checkbuild
Change-Id: Id855e5349115eb2a18b2e73cfd1bd84b5874ff93
2016-11-29 15:29:34 -08:00
Colin Cross 0f3c72fa17 Disable installing unused prebuilts
If the source module is being used instead of the prebuilt module,
disable installing the prebuilt module.

Test: m -j checkbuild
Change-Id: I55e77021b0f9572b0737d960cba89274f696775d
2016-11-29 15:29:34 -08:00
Colin Cross cc4f3e3f94 Don't generate Android.mk data if the module is disabled
Move the calls to the AndroidMkProvider to after checking if the
module is disabled.  Disabled modules may not have all the state
necessary to generate the data.

Test: m -j libLLVM
Change-Id: Iab27a26e604f3810bcc2d9f61b1839aa7bc428b4
2016-11-29 15:29:34 -08:00
Dan Willemsen d2ede879b5 Add basic VNDK support in Soong
Export a list of libraries in the VNDK, which is currently empty.

Take in Make's global BOARD_VNDK_VERSION, and use that as the SDK
version for modules that specify use_vndk: true.

Modules that use the vndk have some configuration as if they were
building against the NDK (the absence of globally defined headers), but
in other cases look like platform modules (using the platform libc++,
for now).

This change does not attempt to enforce any linking constraints, that
will come in a later patch.

Test: out/soong/build.ninja doesn't change
Change-Id: I3be206b67015ac5177b7eef4a451c579e3dc903f
2016-11-28 13:45:24 -08:00
Colin Cross 33bfb0a36a genrule: support deps files
If a genrule sets deps_file: true, use a file in the gen directory
as a GCC-style deps file.

Test: m -j libLLVMObject
Change-Id: Id410165847e4eaea1853a392512e38787c431523
2016-11-22 15:41:09 -08:00
Colin Cross 2ee10a0659 genrule: expand $$ to $$
An escaped $ sign in an expanded string needs to be re-escaped so it
can pass through to ninja.

Test: m -j libLLVMObject
Change-Id: I2f7890417fd6f534e6e21cace3d86ae9ef708ce5
2016-11-22 15:41:08 -08:00
Dan Willemsen 00fcbde401 Add LinuxBionic OsType
Actual support will come in later changes.

Bug: 31559095
Test: out/soong/build.ninja is identical
Change-Id: I31392fb78a51f43567d16aef89e32cd5137cdbc1
2016-11-17 01:49:50 -08:00
Dan Willemsen 0a37a2a2b8 Encode default enabled state in OsType
Currently our only default-disabled Os is Windows since it's HostCross,
but we'll be adding non-default Host and Device types in the future.

Bug: 31559095
Test: out/soong/build.ninja is identical
Change-Id: I2bc3a3cc76f2c95ea040bc34ba6706fcc178c68d
2016-11-17 01:49:39 -08:00
Dan Albert 073379e549 Revert "Revert "Use the platform SDK version from the config.""
This reverts commit 74b8b55bb2.

Test: OUT_DIR=ndk-out DIST_DIR=ndk-dist \
          build/soong/scripts/build-ndk-prebuilts.sh
Bug: None

Change-Id: Ia320609ec6fb382b13ff9007a6496b73198ff871
2016-11-10 11:11:07 -08:00
Dan Albert 22c0b4131d Fix the Platform_sdk_version default.
N has merged into aosp now.

Test: OUT_DIR=ndk-out DIST_DIR=ndk-dist \
          build/soong/scripts/build-ndk-prebuilts.sh
Bug: None

Change-Id: I2685c700e2cb138708a3e8a5f51281c30fb582db
2016-11-10 11:11:07 -08:00
Dan Albert 74b8b55bb2 Revert "Use the platform SDK version from the config."
This reverts commit 9bef523809.

Reason for revert: Broke things

Change-Id: Ic3deac4fb6992572ac0cc95fa04d003e0c29f113
2016-11-09 19:39:42 +00:00
Dan Albert 9bef523809 Use the platform SDK version from the config.
N is in AOSP now.

Test: make ndk && ls out/soong/ndk/platforms/android-24
Bug: None
Change-Id: I846ee12d10e962931bf22c94c37cdf7207dd4ff7
2016-11-08 12:53:39 -08:00
Colin Cross 6f080dff81 Support genrules with multiple tools
To allow genrules with more than one tool, rename the tool property to
tools and make it an array, replace $tool with $(location <label>),
and use $() for other variables for consistency.

Also remove the host bin directory from the genrule path, and the
$srcDir variable, using either of them would have caused dependency
issues.

Bug: 31948427
Test: compare build.ninja
Change-Id: Icf6d3bce2bea00fec1363fd65c0bdf96d09281bf
(cherry picked from commit de6bd86d24)
2016-11-07 10:53:49 -08:00
Colin Cross 6bde0948d2 Add android.Expand
Add android.Expand to expand $() variables in properties.

Test: expand_test
Bug: 31948427
Change-Id: Id30856a1d21d02e8997fcf2358e4a5feeede05be
2016-11-04 15:59:23 -07:00
Colin Cross 7f19f37443 Move globbing to Blueprint
Move Soong's globbing-with-dependencies support into Blueprint so it can
be used for subdirs= lines in Android.bp files.

Blueprint has a slight change in behavior around subname= lines, it now
always uses the subname and doesn't fall back to Blueprints.  To support
the Blueprints files in build/blueprint, use them directly with build=.

Test: build, add source file that matches glob, rebuild
Change-Id: Ifd0b0d3bc061aae0a16d6c7ca9a1cd8672656b4d
2016-11-04 04:54:16 +00:00
Dan Willemsen 9f3c574a39 Add support for Implicit Outputs
Test: mmma -j system/tools/hidl
Test: Inspect out/soong/build.ninja before/after
Change-Id: I8e91a033342a12302d51358c5be244e32ad689d7
2016-11-03 14:35:12 -07:00
Colin Cross d8f2014d3b Fix race condition writing soong.config
soong_build is run twice simultaneously now, once for manifest
generation and once for docs generation.  If one starts writing the
default soong.config file, and the other starts reading it, the reader
can see an empty file and fail.  Write the soong.config file to a
temporary file and the atomically rename it into place.

Bug: 32628314
Test: rm out/soong/soong.config && m -j blah && cat out/soong/soong.config
Change-Id: I8119b11d45093284b24cbc926d81eb9ea4bf2e27
2016-11-03 16:48:37 +00:00
Dan Willemsen 5a054df23c Merge changes from topic 'genpath_yacc'
* changes:
  Add yacc generated headers to the include path
  Add subdir to GenPath
2016-11-03 07:13:32 +00:00
Dan Willemsen 21ec49068f Add subdir to GenPath
We were emulating this for proto files, standardize it and make the
other generators use it as well.

Test: Compare out/soong/build.ninja before/after change
Test: mmma -j system/tools/hidl
Change-Id: I1888c7b981749060a398387bbb9b481270bf6d75
2016-11-02 21:19:11 -07:00
Colin Cross 23ae82a2b2 Support sanitizing a single device arch
Allow specifying one or more architectures to sanitize for.  Defaults to
sanitizing all architectures.  Allows reducing the cost of sanitization
by only sanitizing half of the platform.

Bug: 29498013
Test: No change to build.ninja files with m -j SANITIZE_TARGET=address
Test: m -j SANITIZE_TARGET=address SANITIZE_TARGET_ARCH=arm
Test: nm -D $OUT/system/bin/app_process64 | grep asan, no asan symbols found
Change-Id: I972cccc2f19443895d47b44bd8104105f93ffb7d
2016-11-02 15:18:19 -07:00
Dan Willemsen a03cf6d322 Add clang-tidy support
For every file which we can run clang-tidy (C/C++ clang-built), we add a
new build node that depends on the object file (since clang-tidy does
not export a depfile), and is depended on by the link step. This is
better than how we're doing it in make, since calling tidy can be turned
on or off without needing to rebuild the object files.

This does not attempt to port WITH_TIDY_ONLY from Make, since the way
that it works is broken (due to the lack of a depfile).

Bug: 32244182
Test: WITH_TIDY=true mmma -j bionic/libc
Test: ./soong (Setting ClangTidy: true)
Change-Id: I40bbb5bb00d292d72bf1c293b93080b5f9f6d8ea
2016-10-31 16:21:01 -07:00
Colin Cross 4f6fc9c1d8 Add Path.Base helper
Add Path.Base to return the basename of a Path object.

Test: builds
Change-Id: I2bf1519dc5039bedb1586e7ec18297a293e32e11
2016-10-27 15:18:17 -07:00
Treehugger Robot 8815351118 Merge "Add a "license" property to ndk_headers." 2016-10-20 22:12:40 +00:00
Dan Albert c6345fb7ec Add a "license" property to ndk_headers.
This field points to the license file for the headers being shipped.

Test: make ndk && less $SOONG_OUT/ndk/NOTICE
Bug: None
Change-Id: I386f4e6f6d9776f422ffc09b8dab69e1911b08a4
2016-10-20 13:30:07 -07:00
Dan Albert 4098deb0b8 Add an NDK ABIs mega build configuration.
The NDK needs generic prebuilts for all architectures.

Test: echo '{ "Ndk_abis": true }' > soong.config && \
          ./soong $OUT_DIR/ndk.timestamp
Bug: None

Change-Id: I2ee3ebbf4cbd1bc593f9e4e9fb44fb66711da9d5
2016-10-19 14:33:37 -07:00
Dan Willemsen 7b872837c6 Allow brillo cflags and debuggable cppflags
Test: mmma -j frameworks/native/{libs/gui,opengl/libs} w/Android.bp
Change-Id: I31286c92ec4befaa486052ba2e6d55cd0d5fe62d
2016-10-17 14:50:08 -07:00
Colin Cross 0d614dd222 Re-enable prebuilt_test
Use a temporary directory as the build directory during tests so files
don't get written to the source tree.

Also add a few more tests for prebuilts with no file specified.

Bug: 31800129
Test: m -j, make sure .soong.environment is not written to the source tree
Change-Id: I623bc114b2ff534c8df9fb3ce273e804711f8f05
2016-10-14 17:07:49 -07:00
Colin Cross ce75d2c6a2 Initial prebuilt support
Support prebuilt shared libraries as an initial proof-of-concept of
prebuilts.  Future changes will support binaries and static libraries,
and the ability to select which to use based on something besides
blueprint properties.

Test: TestPrebuilts run during m -j
Change-Id: I6e84da667e9005ae11844bad01d25cbe4ced1ce3
2016-10-13 14:52:47 -07:00
Colin Cross 4498afc55b Only register mutators once
Mutators are registered into a global variable, and then into the
context when it is created.  Only call registerMutators once so that the
same mutator is not listed multiple times in the global variable when
multiple contexts are created.

Test: go test -v android/soong/android
Change-Id: Ie9e3ed09a89b848462b898476cdfb81a90c64bd3
2016-10-13 14:23:17 -07:00
Colin Cross fc754581fc Add a Name property
Blueprint is going to abdicate responsibility for determining the name
of a module.  Add a name property, and a method to retreive the name.

Test: build.ninja identical
Change-Id: I09c6f5283cd6e28ad4b04c24c5ab8b00f71ae2ab
2016-10-12 17:24:49 -07:00
Colin Cross 1e676bef94 Control mutator order
Register mutators inside lambdas that are called in a defined order to
correctly order mutators before and after the arch and deps mutators.

Test: build.ninja identical
Change-Id: Iefe2a3515aee8570e76a6e76925db4cda0e9e822
2016-10-12 15:33:33 -07:00
Colin Cross 798bfce9d0 Move registration into android package
Mutator registration is tightly coupled with the android package, move
all registration from the soong package to the android package.

Test: build.ninja identical
Change-Id: Ie183d0b52cc7431c9e05b231934d189208ef1efe
2016-10-12 14:30:44 -07:00
Dan Willemsen de18f47250 Mark Soong-exported make variables as readonly
Using new .KATI_READONLY extension.

Test: build/tooks/kati_all_products.sh on AOSP master and internal
Change-Id: I71794c1268456c3403a351c1b242f1e78b060355
2016-10-05 15:21:41 -07:00