Commit Graph

57 Commits

Author SHA1 Message Date
Dan Willemsen 3bf15e71d3 Record module type statistics
Creates a build_system_stats.txt build artifact that contains statistics
on how many BUILD_* modules are defined in a build. Also writes out
information about the Soong module types sent from the Soong build.

Merged-In: Iaf0c7062f542dc6942b5349854f3d49267cac4a5
Change-Id: Iaf0c7062f542dc6942b5349854f3d49267cac4a5
2016-07-29 19:58:35 +00:00
Dan Willemsen e72fc63901 Merge "Add NATIVE_TESTS class, move host native tests" 2016-06-06 23:59:23 +00:00
Dan Willemsen b40d9ece5f Allow arm prebuilts for x86_arm builds
But only for static and shared libraries -- we disable building other
types of modules for arm, so don't support the prebuilts for them
either.

This is needed so that we can build these libraries under Soong, and
expose them to Make using BUILD_PREBUILT.

Bug: 27526885
Change-Id: I4f6ec922aed37591b6257b7022b81fb65d05b0fe
2016-05-31 14:01:34 -07:00
Dan Willemsen 7fe992c0cc Add NATIVE_TESTS class, move host native tests
Host native tests have been getting installed into
out/host/linux-x86/bin/..., but this pollutes the bin directory with a
lot of poorly named tests. Also, to support 32-bit and 64-bit tests, we
need to have different names with different suffixes. This causes
problems when tests expect to be named something specific (like gtest).
It's also convenient to store test data next to the test itself.

So with this change, native tests will be installed in
out/host/linux-x86/nativetest[64]/$(LOCAL_MODULE)/$(LOCAL_MODULE_STEM)
just like target tests get installed into /data/nativetest[64].

Implement this using a new NATIVE_TESTS class, which is like
EXECUTABLES, but sets up the install path differently, and configures
the rpath to load shared libraries with the proper relative path.
LOCAL_MODULE_RELATIVE_PATH can be used to control the directory name, it
will default to $(LOCAL_MODULE). This way multiple related tests can be
grouped together.

Target native tests also use NATIVE_TESTS now, but nothing should change
other than LOCAL_MODULE_RELATIVE_PATH can be used.

Change-Id: I535e42b1a6b21c5b8d6a580aa2f944d2be35e27d
2016-05-24 12:43:16 -07:00
Ying Wang c160c3f21a Don't reset LOCAL_*MODULE_STEM.
By resetting we lose LOCAL_*MODULE_STEM values for the second include
of the *_internal.mk.
We don't need to reset because we now store the default value to a
temporary variable my_*module_stem in configure_module_stem.mk.

Bug: 27775991
Change-Id: I36d1ff3d177818677fb38bdb3d340dd2ff34c404
2016-04-19 12:20:47 -07:00
Ying Wang 87538e4f8b Support x86+arm multilib build.
Support TARGET_2ND_ARCH as the binary translation arch.
See target/board/generic_x86_arm/BoardConfig.mk and
target/product/aosp_x86_arm.mk as example for the setup.

In BoardConfig, use the TARGET_2ND_ARCH/etc. variables to set up the
binary translation arch;
Set "TARGET_TRANSLATE_2ND_ARCH := true" to tell the build system it's
not a typical 64-bit multilib configuration.
In product makefile, use "PRODUCT_PACKAGES += libfoo_<2nd_arch>" to
install the TARGET_2ND_ARCH libraries. This also pulls in any dependency
libraries.
By default we don't install any TARGET_2ND_ARCH modules, unless it's
pulled in by PRODUCT_PACKAGES.

Bug: 27526885
Change-Id: I0578e9c80da0532d2fa886a8fcdb140bbc703009
(cherry-pick from commit 277e75a488)
2016-03-25 13:29:53 -07:00
Dan Willemsen dbf0792279 Remove debug statement
Change-Id: Ic8b6082a61e2fb1b09b2b254312d3dc7ef59d987
2016-02-10 14:40:08 -08:00
Dan Willemsen d6e3b84185 Tell Soong about HOST_CROSS_*
This configures Soong to build windows binaries, which requires support
for 64-bit windows binaries in BUILD_PREBUILT for USE_SOONG=true.

module_arch_supported.mk did not support 64-bit being the secondary
architecture when evaluating multilib conditionals. All other uses of
HOST_*_IS_64_BIT already check the proper version.

Change-Id: Iff664733e6991f4adbe8ddd620b091bbb55d1d86
2016-02-09 16:00:14 -08:00
Dan Willemsen 057aaea54a Add HOST_CROSS_OS
Instead of using recursive make to change the HOST_OS when building the
windows SDK under linux, add the concept of cross-building to another
host os.

Bug: 23566667
Change-Id: I6dc525b601b6251d458d197c30bf4660d7485502
2015-09-09 18:12:29 +00:00
Ying Wang a11cf4d535 Don't set up the prebuilt apk rule twice.
For apps, we don't want to set up the prebuilt apk rule twice even if
"LOCAL_MULTILIB := both", which for apps really means to set up only the
jni library rules twice. See also build/core/install_jni_libs.mk.

Change-Id: Id0406c3c605c6ede613dba06178a1710590c09b3
2014-12-01 15:56:19 -08:00
Ying Wang 85f24a406b Reset LOCAL_2ND_ARCH_VAR_PREFIX before referencing it.
Change-Id: I9182ce1efe09609100d19c9fae2bc4fe7358dfc0
2014-10-21 18:36:43 -07:00
Ying Wang 34d5f1b27e Real "LOCAL_MULTILIB := both" for prebuilts
This uses the fact that unsetting LOCAL_MULTILIB equals "either".
It's useful to build for both 32-bit and 64-bit in the same prebuilt
module definition.

Bug: 13751317
Change-Id: I4f1625a83e13f22f807039afebae73f69ed35918
2014-05-16 10:49:57 -07:00
Ying Wang 6feb6d5607 Support host multilib build
This change basically ported our target multilib to the host side.
It supports 2 host build modes: x86 and x86_64 multilib build.
For now you need to set "BUILD_HOST_64bit=true" to switch to x86_64
multilib build. Later we'll default to x86_64 build and have a flag
to force 32-bit only build, which may be needed by SDK build.

In host module definition, like in target ones, you can use the
following
LOCAL variables to set up multilib configuration:
LOCAL_MULTILIB: can be "both", "first", "32" or "64".
It also supports the same set of arch or 32-vs-64 specific LOCAL
variables.
By default, it builds only for the first arch.

To keep path compatibility, in x86_64 build files are still output to
out/host/linux-x86; Both 32-bit and 64-bit executables are in
out/host/linux-86/bin;
In x86_64 build 32-bit shared libraries are installed to
out/host/linux-x86/lib32
and 64-bit shared libraries are installed to out/host/linux-x86/lib;
32-bit object files are output to out/host/linux-x86/obj32 and 64-bit
object files
are output to out/host/linux-x86/obj.

Bug: 13751317
Change-Id: I6044f83b7db369a33e05209e8c588eb6dc83409f
2014-05-14 16:55:04 -07:00
Colin Cross e6e48f67d8 add support for LOCAL_MULTILIB
LOCAL_MULTILIB replaces LOCAL_32_BIT_ONLY and
LOCAL_NO_2ND_ARCH, although both are still supported.

Set LOCAL_MULTILIB := 32 to always build a module 32-bit.
This is the same as specifying LOCAL_32_BIT_ONLY.

Set LOCAL_MULTILIB := first to always build a module for
the first architecture (64-bit on a 64-bit target, 32-bit on a
32-bit target).  This is the same as specifying LOCAL_NO_2ND_ARCH.

Set LOCAL_MULTILIB := both to build for both architectures
on a mulitlib (64-bit) target.

If LOCAL_MULTILIB is not set libraries will default to "both",
and executables, packages, and prebuilts will default to building
for the first architecture if supported by the module, otherwise
the second.

Executables that set LOCAL_MULTILIB := both must set either
LOCAL_MODULE_STEM_32 and LOCAL_MODULE_STEM_64 or
LOCAL_MODULE_PATH_32 and LOCAL_MODULE_PATH_64 to specify how to
differentiate the install locations of the two versions.

Change-Id: I22ab6aa342b231c307b1d8a86cea4fd91eea39f5
2014-03-26 13:12:59 -07:00
Colin Cross 3a14c87520 fix build
Include prebuilt_internal.mk for host builds.

Change-Id: I750d6f71b3a2c67b11536babb8b39060005f4ff4
2014-02-13 16:41:52 -08:00
Colin Cross e18cb93e48 support LOCAL_MODULE_TARGET_ARCH for prebuilts
Prebuilts often support only a single architecture, allow them to
use LOCAL_MODULE_TARGET_ARCH to specify it.

Change-Id: I2514f66f682ef267bbf1a1ab78510faff0a18b64
2014-02-13 15:36:41 -08:00
Colin Cross 78d642f426 build: rename LOCAL_32BIT_ONLY to LOCAL_32_BIT_ONLY
Rename for consistency with TARGET_IS_64_BIT.

Change-Id: I824dcaed0c1e88b8246bcffb21ab3f1772175926
2014-01-29 18:35:23 -08:00
Colin Cross 0b70c4374c Set up rules to build prebuilts for TARGET_2ND_ARCH
Prebuilts built for the 2nd arch will install into 2nd arch
directories.

Change-Id: I3d020a3c1fb0f2eb0579933f8a66e410e66fdd44
2014-01-24 16:44:02 -08:00
Brian Carlstrom ced4bff58e Add DEXPREOPT support for ART
Change-Id: I24d0d7b2a23a769f5d69bd4dc14be22e1475b759
2013-12-17 14:44:00 -08:00
Ying Wang a02428e4f6 am 405dac7f: am 8f01a3c0: Merge "Add missing LOCAL_ADDITIONAL_DEPENDENCIES dependency to BUILD_PREBUILT."
* commit '405dac7f000af3a02b374533f76a7f2eaedbc954':
  Add missing LOCAL_ADDITIONAL_DEPENDENCIES dependency to BUILD_PREBUILT.
2013-08-13 18:29:30 -07:00
Elliott Hughes 32d315a399 Add missing LOCAL_ADDITIONAL_DEPENDENCIES dependency to BUILD_PREBUILT.
Change-Id: Id7c0e77110653e618d783026cd4b4aeadb3c45ec
2013-08-13 17:05:34 -07:00
Ying Wang 883071ff1f Don't check build prebuilt modules.
Change-Id: I35bcd97cf41d1f6e0cdc2676a07127bff4f14e6d
2013-08-02 13:30:54 -07:00
Ying Wang 988251c922 Fix $(so_suffix) error.
Change-Id: I32cb4d4efe0a473e67a54c035df4dd82b6e4a3f0
(cherry picked from commit 80b71fa326)
2013-07-15 15:57:25 +00:00
Ying Wang 80b71fa326 Fix $(so_suffix) error.
Change-Id: I32cb4d4efe0a473e67a54c035df4dd82b6e4a3f0
2013-07-15 08:47:33 -07:00
Ying Wang ba9636d47f Establish the built module dependencies on prebuilt shared library
This is needed because the linker command line uses -rpath-link with
built module path ($(*_OUT_INTERMEDIATE_LIBRARIES)) to search for indirect
dependency libraries.

Change-Id: I21d537c7c697dfb18df25d3d2bb7bffe2f9d370f
(cherry picked from commit ada8f29657)
2013-07-13 05:31:11 +00:00
Ying Wang ada8f29657 Establish the built module dependencies on prebuilt shared library
This is needed because the linker command line uses -rpath-link with
built module path ($(*_OUT_INTERMEDIATE_LIBRARIES)) to search for indirect
dependency libraries.

Change-Id: I21d537c7c697dfb18df25d3d2bb7bffe2f9d370f
2013-07-12 22:05:14 -07:00
Ying Wang d6b1d61d84 Do vendor check on modules installed by LOCAL_SHARED_LIBRARIES
Since commit 6c86a1 we have split LOCAL_SHARED_LIBRARIES out of
LOCAL_REQUIRED_MODULES and the vendor check does no longer cover the
installed modules introduced by LOCAL_SHARED_LIBRARIES.
This change brings back the coverage.

Change-Id: Ie78692e48f173a3350792eb2fee8127ff9433caa
2013-04-15 17:41:55 -07:00
Ying Wang 6c86a133c7 Use $(my_prefix)DEPENDENCIES_ON_SHARED_LIBRARIES
To disentangle the host/target shared library dependencies.

Change-Id: I3122b370a7c24425861ab6dba91e6d8d84b27249
2013-02-25 18:12:11 -08:00
Ying Wang 90397c1029 Add deps on LOCAL_SHARED_LIBRARIES for prebuilts.
This is necessary for prebuilt build cache to work properly.

Change-Id: Ica28ce4d245a948142e067d82ff84ce1aef2134e
2013-02-12 12:28:45 -08:00
Ying Wang 63d94fa305 Build from source or prebuilt
With this change, you can easily switch between building from source
code and prebuilt.
Set LOCAL_PREBUILT_MODULE_FILE to the path of the prebuilt file,
relative to the top of the source tree, in the usual module definition.
The prebuilt will be used unless any of the followings satisfied:
1) ANDROID_BUILD_FROM_SOURCE is "true", which disable prebuilt globally;
2) The module name is in ANDROID_NO_PREBUILT_MODULES;
3) The LOCAL_PATH is prefixed by any of ANDROID_NO_PREBUILT_PATHS.
A developer can set ANDROID_NO_PREBUILT_MODULES or
ANDROID_NO_PREBUILT_PATHS to build only his own module(s) from source,
while build other modules from prebuilts.
You can set ANDROID_BUILD_FROM_SOURCE to true to build everything from
source.
Those variables can be set with shell environmental variable or in your
buildspec.mk.

Sometimes module B is able to be built from source only if module A is
also
built from source, for example, if B is the test apk of A.
In that case, you can use the macro include-if-build-from-source to
include B's Android.mk only if A is built from source too, or
if-build-from-source to conditionally include the definition of module
B,
if their module definitions are in the same Android.mk.

Support host-executable-hook and host-shared-library-hook.

Change-Id: Icab7cf028c87eaba0dd7efc2a7749fd6f32b44e4
2012-12-14 14:48:00 -08:00
Ying Wang fe3f62d06b Support LOCAL_EXPORT_C_INCLUDE_DIRS for prebuilts too
Change-Id: I09e8e849f642792e3a74e2564820ab9bbf1eb28c
2012-12-03 18:24:55 -08:00
Ying Wang 13d6950ef8 NOTICE file only module
To pick up a NOTICE file in LOCAL_PATH and attach it to
/system/lib/libfoo.so, use the following syntax:

include $(CLEAR_VARS)
LOCAL_MODULE_CLASS := NOTICE_FILES
LOCAL_INSTALLED_MODULE := $(PRODUCT_OUT)/system/lib/libfoo.so
include $(BUILD_NOTICE_FILE)

Bug: 7460213
Change-Id: Ie692be72deab37be04d1b578578c131a0885a090
2012-11-01 17:29:10 -07:00
Ying Wang b1a4e4e89e Delete the misleading var TARGET_OUT_STATIC_LIBRARIES.
Which can be replaced by TARGET_OUT_INTERMEDIATE_LIBRARIES.

Change-Id: I965ff1ebe70fc3113c19e4896277c876dcedb6a5
2012-05-15 16:12:18 -07:00
Ying Wang 616e596385 Write out export_includes whenever the module is built.
Bug: 6362268
Change-Id: If872cf8fe597a02e6ca740a181cea85f486df98e
2012-04-18 17:35:55 -07:00
Ying Wang c32af65886 Revert "Write out export_includes whenever the module is built."
This reverts commit 40c34f3778
2012-04-18 16:55:07 -07:00
Ying Wang 40c34f3778 Write out export_includes whenever the module is built.
Bug: 6362268
Change-Id: Ic5d028c108423c694736a06c05ec13093d42f1b8
2012-04-18 16:30:17 -07:00
Ying Wang 5f074803fb Build system support to export include paths
Bug: 5573756
With this change, we can set LOCAL_EXPORT_C_INCLUDE_DIRS in the module
definition to export include dir paths.
Paths in LOCAL_EXPORT_C_INCLUDE_DIRS should be relative to the top dir
of the source tree.
If a library (shared or static) exports some include paths, any module
using it will import the include paths and add them to the compiler
command line.

Change-Id: I49aabc589d2cf214044d13ccd5532ef68209adf0
2011-11-17 10:52:32 -08:00
Doug Zongker 08d79c12de sign non-PRESIGNED prebuilt apks
Since dev keys can now vary per device, we can't assume they are
checked in with the correct signature.

Change-Id: I7577a3a6bd98d005c15936c99b2944acc4412798
2011-10-05 09:49:24 -07:00
Ying Wang 3c21fe5b12 Support for product-specific dev keys.
Change-Id: Id577a72ee9f7cd70e8ca77efcbf10a37885c7d6f
2011-10-04 10:50:08 -07:00
Ying Wang c36b450ab1 Fix OVERRIDE_BUILT_MODULE_PATH for prebuilt shared libraries.
So that prebuilt shared libraries can be referenced with the module name
in other module's Android.mk.

Change-Id: I4c4b471696642694b805b71dd7605b91724ad924
2011-09-15 16:13:39 -07:00
Justin Ho 17a27047bb Revert Ic7c40c50: Support to run dex-preopt on prebuilt apks
Collect some additional system image space, moving odex files to user partition on trygon-user

Change-Id: If992536ff0da14cc5b9ba51811b8a0b76f1b8f83
2011-08-30 14:29:18 -07:00
Ji-Hwan Lee 0219e9292e Enable LOCAL_STRIP_MODULE for prebuilt binaries
Currently, prebuilt binaries with debug symbols are installed unstripped.

There are only a few of prebuilt shared library (that I'm trying to fix),
so I can do this manually by making intermediate target and applying
TARGET_STRIP, each of them, one by one.

But dynamic_binary.mk has more features than stripping binaries
(like copying unstripped binaries to symbols directory)
and if I do it manually, they will lose all the benefits.

Note that this doesn't change anything when LOCAL_STRIP_MODULE is not set.
I actually tried to force strip every BUILD_PREBUILT'ed modules,
but there were a few problems:

- Some packages are not installed (i.e. not in PRODUCT_PACAKGES)
  but are built (i.e. in ALL_MODULES).  And some of them are built in spite
  that they do not have appropriate prebuilt shared library for TARGET_ARCH.
  Stripping them causes "unknown format".

- Some prebuilt modules set LOCAL_MODULE_CLASS incorrectly.
  Example is default.supp of external/valgrind/main, which should be ETC,
  not SHARED_LIBRARY.

Both are better fixed, but I concluded that it's better to be conservative.

Bug: 4585734
Change-Id: If71723b1d76007d45b02429ea5161a8265dd5b6d
2011-07-07 11:07:18 +09:00
Ying Wang 06e2f72bc9 Support to run dex-preopt on prebuilt apks.
Change-Id: Ic7c40c502934d7588166f26bbb6e2f235d1efdea
2011-05-26 16:01:57 -07:00
Ying Wang 5b316b604d Fix dependency of prebuilt target non-static Java libraries.
Change-Id: I498b96ce737e5fc9076de39108252284ee53218f
2011-02-01 13:07:01 -08:00
Ying Wang a83940fa78 Move odex related files to product-specific dir.
For target Java libraries, now the LOCAL_BUILT_MODULE includes both javalib.jar
and the .odex file, if dexpreopt is enabled.
These 2 files are moved to a product-specific dir in this change.
For target Java Libraries, $(intermediates) now points to the product-specific dir.
There is still a javalib.jar in the $(intermediates.COMMON) dir, which is used as dependency.
Nothing is changed for host Java libraries.

Change-Id: I2546dbb940c74537864ca002d1acb49bb731fbbc
2010-10-01 14:41:43 -07:00
Doug Zongker f6a53aa5f2 add "EXTERNAL" as special value of LOCAL_CERTIFICATE
Setting LOCAL_CERTIFICATE to "EXTERNAL" now marks an apk (either a
prebuilt or otherwise) as needing the default test key within the
system, but one that should be signed after the target_files is
produced but before sign_target_files_apks does the rest of the
signing.  (We use this to ship apps on the system that are signed by
third parties, like Facebook.)
2009-12-15 15:06:55 -08:00
Doug Zongker 714111cbdd include pre-signed prebuilt .apks in apkcerts.txt 2009-12-14 10:14:46 -08:00
Doug Zongker 45302ff00b make prebuilt .apks require LOCAL_CERTIFICATE
Require people who check in new prebuilts to decide what keys they
should be signed with, rather than having a fire drill every time we
go to sign a build and discover new prebuilts.
2009-12-11 13:50:35 -08:00
Owen Lin 64d5a80706 Add OVERRIDE_PACKAGES support for prebuild modules.
So that some prebuild module can override existing packages.

Change-Id: I4f0d019e07b84d24cf0234903bd4b06104e0ed27
2009-10-20 22:23:37 -07:00
Brandon Ballinger ed29246e31 Add support for LOCAL_OVERRIDES_PACKAGES to prebuilt build rules. 2009-10-20 17:41:16 -07:00