2019-12-03 16:25:00 +01:00
// Copyright (C) 2019 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package sdk
import (
2021-09-06 11:28:34 +02:00
"fmt"
2019-12-03 16:25:00 +01:00
"testing"
2020-02-25 20:26:33 +01:00
"android/soong/android"
2019-12-03 16:25:00 +01:00
"android/soong/cc"
)
2021-03-09 23:27:13 +01:00
var ccTestFs = android . MockFS {
2021-02-22 12:50:04 +01:00
"Test.cpp" : nil ,
"myinclude/Test.h" : nil ,
"myinclude-android/AndroidTest.h" : nil ,
"myinclude-host/HostTest.h" : nil ,
"arm64/include/Arm64Test.h" : nil ,
"libfoo.so" : nil ,
"aidl/foo/bar/Test.aidl" : nil ,
"some/where/stubslib.map.txt" : nil ,
2020-07-11 05:33:29 +02:00
}
2019-11-19 20:44:10 +01:00
// Adds a native bridge target to the configured list of targets.
var prepareForTestWithNativeBridgeTarget = android . FixtureModifyConfig ( func ( config android . Config ) {
config . Targets [ android . Android ] = append ( config . Targets [ android . Android ] , android . Target {
Os : android . Android ,
Arch : android . Arch {
ArchType : android . Arm64 ,
ArchVariant : "armv8-a" ,
CpuVariant : "cpu" ,
Abi : nil ,
ArchFeatures : nil ,
} ,
NativeBridge : android . NativeBridgeEnabled ,
NativeBridgeHostArchName : "x86_64" ,
NativeBridgeRelativePath : "native_bridge" ,
} )
} )
2021-03-09 23:27:13 +01:00
func testSdkWithCc ( t * testing . T , bp string ) * android . TestResult {
2019-11-30 18:49:09 +01:00
t . Helper ( )
2020-07-11 05:33:29 +02:00
return testSdkWithFs ( t , bp , ccTestFs )
2019-11-30 18:49:09 +01:00
}
2019-12-03 16:25:00 +01:00
// Contains tests for SDK members provided by the cc package.
2020-07-11 05:52:24 +02:00
func TestSingleDeviceOsAssumption ( t * testing . T ) {
// Mock a module with DeviceSupported() == true.
s := & sdk { }
android . InitAndroidArchModule ( s , android . DeviceSupported , android . MultilibCommon )
osTypes := s . getPossibleOsTypes ( )
if len ( osTypes ) != 1 {
// The snapshot generation assumes there is a single device OS. If more are
// added it might need to disable them by default, like it does for host
// OS'es.
t . Errorf ( "expected a single device OS, got %v" , osTypes )
}
}
2019-12-03 16:25:00 +01:00
func TestSdkIsCompileMultilibBoth ( t * testing . T ) {
2019-11-30 18:49:09 +01:00
result := testSdkWithCc ( t , `
2019-12-03 16:25:00 +01:00
sdk {
name : "mysdk" ,
native_shared_libs : [ "sdkmember" ] ,
}
cc_library_shared {
name : "sdkmember" ,
srcs : [ "Test.cpp" ] ,
stl : "none" ,
}
` )
2019-11-21 01:39:12 +01:00
armOutput := result . Module ( "sdkmember" , "android_arm_armv7-a-neon_shared" ) . ( * cc . Module ) . OutputFile ( )
arm64Output := result . Module ( "sdkmember" , "android_arm64_armv8-a_shared" ) . ( * cc . Module ) . OutputFile ( )
2019-12-03 16:25:00 +01:00
var inputs [ ] string
2020-02-25 20:26:33 +01:00
buildParams := result . Module ( "mysdk" , android . CommonOS . Name ) . BuildParamsForTests ( )
2019-12-03 16:25:00 +01:00
for _ , bp := range buildParams {
if bp . Input != nil {
inputs = append ( inputs , bp . Input . String ( ) )
}
}
// ensure that both 32/64 outputs are inputs of the sdk snapshot
ensureListContains ( t , inputs , armOutput . String ( ) )
ensureListContains ( t , inputs , arm64Output . String ( ) )
}
2020-06-30 21:34:00 +02:00
func TestSdkCompileMultilibOverride ( t * testing . T ) {
result := testSdkWithCc ( t , `
sdk {
name : "mysdk" ,
2020-07-10 01:14:03 +02:00
host_supported : true ,
2020-06-30 21:34:00 +02:00
native_shared_libs : [ "sdkmember" ] ,
compile_multilib : "64" ,
}
cc_library_shared {
name : "sdkmember" ,
2020-07-10 01:14:03 +02:00
host_supported : true ,
2020-06-30 21:34:00 +02:00
srcs : [ "Test.cpp" ] ,
stl : "none" ,
compile_multilib : "64" ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "mysdk" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2020-07-10 01:14:03 +02:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_shared {
2021-02-22 13:13:13 +01:00
name : "sdkmember" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-07-10 01:14:03 +02:00
host_supported : true ,
stl : "none" ,
compile_multilib : "64" ,
2020-07-10 20:55:36 +02:00
target : {
2020-07-11 05:52:24 +02:00
host : {
enabled : false ,
} ,
2020-07-10 20:55:36 +02:00
android_arm64 : {
srcs : [ "android/arm64/lib/sdkmember.so" ] ,
} ,
linux_glibc_x86_64 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2020-07-10 20:55:36 +02:00
srcs : [ "linux_glibc/x86_64/lib/sdkmember.so" ] ,
2020-07-10 01:14:03 +02:00
} ,
} ,
}
` ) ,
2020-06-30 21:34:00 +02:00
checkAllCopyRules ( `
2020-07-10 20:55:36 +02:00
. intermediates / sdkmember / android_arm64_armv8 - a_shared / sdkmember . so - > android / arm64 / lib / sdkmember . so
. intermediates / sdkmember / linux_glibc_x86_64_shared / sdkmember . so - > linux_glibc / x86_64 / lib / sdkmember . so
2020-06-30 21:34:00 +02:00
` ) )
}
2019-12-13 20:50:38 +01:00
// Make sure the sdk can use host specific cc libraries static/shared and both.
func TestHostSdkWithCc ( t * testing . T ) {
testSdkWithCc ( t , `
sdk {
name : "mysdk" ,
device_supported : false ,
host_supported : true ,
native_shared_libs : [ "sdkshared" ] ,
native_static_libs : [ "sdkstatic" ] ,
}
cc_library_host_shared {
name : "sdkshared" ,
stl : "none" ,
}
cc_library_host_static {
name : "sdkstatic" ,
stl : "none" ,
}
` )
}
// Make sure the sdk can use cc libraries static/shared and both.
func TestSdkWithCc ( t * testing . T ) {
testSdkWithCc ( t , `
sdk {
name : "mysdk" ,
native_shared_libs : [ "sdkshared" , "sdkboth1" ] ,
native_static_libs : [ "sdkstatic" , "sdkboth2" ] ,
}
cc_library_shared {
name : "sdkshared" ,
stl : "none" ,
}
cc_library_static {
name : "sdkstatic" ,
stl : "none" ,
}
cc_library {
name : "sdkboth1" ,
stl : "none" ,
}
cc_library {
name : "sdkboth2" ,
stl : "none" ,
}
` )
}
Add SDK member support for cc_object.
Test: m nothing
Test: Add
sdk {
name: "runtime-module-sdk",
native_shared_libs: [
"libc",
"libdl",
"libm",
"ld-android",
],
native_objects: [
"crtbegin_dynamic",
"crtbegin_static",
"crtend_android",
],
}
to bionic/apex/Android.bp. Then:
build/soong/scripts/build-aml-prebuilts.sh runtime-module-sdk
Take the generated runtime-module-sdk-current.zip and unzip into a
master-art tree without bionic/, edit the generated Android.bp to
extend cc_prebuilt_* modules with:
nocrt: true,
stl: "none",
system_shared_libs: [],
apex_available: ["//apex_available:anyapex"],
recovery_available: true,
vendor_available: true,
ramdisk_available: true,
Then "m com.android.art.debug". This passes Soong but fails in the
build step because more members are required.
Bug: 148934017
Change-Id: I2ab8f6aadb1440b325697cae4a8ed761c62d15d2
2020-03-10 23:37:59 +01:00
func TestSnapshotWithObject ( t * testing . T ) {
result := testSdkWithCc ( t , `
sdk {
name : "mysdk" ,
native_objects : [ "crtobj" ] ,
}
cc_object {
name : "crtobj" ,
stl : "none" ,
2021-07-22 20:39:44 +02:00
system_shared_libs : [ ] ,
2020-08-21 19:43:51 +02:00
sanitize : {
never : true ,
} ,
Add SDK member support for cc_object.
Test: m nothing
Test: Add
sdk {
name: "runtime-module-sdk",
native_shared_libs: [
"libc",
"libdl",
"libm",
"ld-android",
],
native_objects: [
"crtbegin_dynamic",
"crtbegin_static",
"crtend_android",
],
}
to bionic/apex/Android.bp. Then:
build/soong/scripts/build-aml-prebuilts.sh runtime-module-sdk
Take the generated runtime-module-sdk-current.zip and unzip into a
master-art tree without bionic/, edit the generated Android.bp to
extend cc_prebuilt_* modules with:
nocrt: true,
stl: "none",
system_shared_libs: [],
apex_available: ["//apex_available:anyapex"],
recovery_available: true,
vendor_available: true,
ramdisk_available: true,
Then "m com.android.art.debug". This passes Soong but fails in the
build step because more members are required.
Bug: 148934017
Change-Id: I2ab8f6aadb1440b325697cae4a8ed761c62d15d2
2020-03-10 23:37:59 +01:00
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "mysdk" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
Add SDK member support for cc_object.
Test: m nothing
Test: Add
sdk {
name: "runtime-module-sdk",
native_shared_libs: [
"libc",
"libdl",
"libm",
"ld-android",
],
native_objects: [
"crtbegin_dynamic",
"crtbegin_static",
"crtend_android",
],
}
to bionic/apex/Android.bp. Then:
build/soong/scripts/build-aml-prebuilts.sh runtime-module-sdk
Take the generated runtime-module-sdk-current.zip and unzip into a
master-art tree without bionic/, edit the generated Android.bp to
extend cc_prebuilt_* modules with:
nocrt: true,
stl: "none",
system_shared_libs: [],
apex_available: ["//apex_available:anyapex"],
recovery_available: true,
vendor_available: true,
ramdisk_available: true,
Then "m com.android.art.debug". This passes Soong but fails in the
build step because more members are required.
Bug: 148934017
Change-Id: I2ab8f6aadb1440b325697cae4a8ed761c62d15d2
2020-03-10 23:37:59 +01:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_object {
2021-02-22 13:13:13 +01:00
name : "crtobj" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
Add SDK member support for cc_object.
Test: m nothing
Test: Add
sdk {
name: "runtime-module-sdk",
native_shared_libs: [
"libc",
"libdl",
"libm",
"ld-android",
],
native_objects: [
"crtbegin_dynamic",
"crtbegin_static",
"crtend_android",
],
}
to bionic/apex/Android.bp. Then:
build/soong/scripts/build-aml-prebuilts.sh runtime-module-sdk
Take the generated runtime-module-sdk-current.zip and unzip into a
master-art tree without bionic/, edit the generated Android.bp to
extend cc_prebuilt_* modules with:
nocrt: true,
stl: "none",
system_shared_libs: [],
apex_available: ["//apex_available:anyapex"],
recovery_available: true,
vendor_available: true,
ramdisk_available: true,
Then "m com.android.art.debug". This passes Soong but fails in the
build step because more members are required.
Bug: 148934017
Change-Id: I2ab8f6aadb1440b325697cae4a8ed761c62d15d2
2020-03-10 23:37:59 +01:00
stl : "none" ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2021-07-22 20:39:44 +02:00
system_shared_libs : [ ] ,
2020-08-21 19:43:51 +02:00
sanitize : {
never : true ,
} ,
Add SDK member support for cc_object.
Test: m nothing
Test: Add
sdk {
name: "runtime-module-sdk",
native_shared_libs: [
"libc",
"libdl",
"libm",
"ld-android",
],
native_objects: [
"crtbegin_dynamic",
"crtbegin_static",
"crtend_android",
],
}
to bionic/apex/Android.bp. Then:
build/soong/scripts/build-aml-prebuilts.sh runtime-module-sdk
Take the generated runtime-module-sdk-current.zip and unzip into a
master-art tree without bionic/, edit the generated Android.bp to
extend cc_prebuilt_* modules with:
nocrt: true,
stl: "none",
system_shared_libs: [],
apex_available: ["//apex_available:anyapex"],
recovery_available: true,
vendor_available: true,
ramdisk_available: true,
Then "m com.android.art.debug". This passes Soong but fails in the
build step because more members are required.
Bug: 148934017
Change-Id: I2ab8f6aadb1440b325697cae4a8ed761c62d15d2
2020-03-10 23:37:59 +01:00
arch : {
arm64 : {
srcs : [ "arm64/lib/crtobj.o" ] ,
} ,
arm : {
srcs : [ "arm/lib/crtobj.o" ] ,
} ,
} ,
}
` ) ,
checkAllCopyRules ( `
. intermediates / crtobj / android_arm64_armv8 - a / crtobj . o - > arm64 / lib / crtobj . o
. intermediates / crtobj / android_arm_armv7 - a - neon / crtobj . o - > arm / lib / crtobj . o
` ) ,
)
}
2019-12-11 19:34:15 +01:00
func TestSnapshotWithCcDuplicateHeaders ( t * testing . T ) {
result := testSdkWithCc ( t , `
sdk {
name : "mysdk" ,
native_shared_libs : [ "mynativelib1" , "mynativelib2" ] ,
}
cc_library_shared {
name : "mynativelib1" ,
srcs : [
"Test.cpp" ,
] ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "myinclude" ] ,
2019-12-11 19:34:15 +01:00
stl : "none" ,
}
cc_library_shared {
name : "mynativelib2" ,
srcs : [
"Test.cpp" ,
] ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "myinclude" ] ,
2019-12-11 19:34:15 +01:00
stl : "none" ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "mysdk" , "" ,
2019-12-11 19:34:15 +01:00
checkAllCopyRules ( `
2021-02-22 12:50:04 +01:00
myinclude / Test . h - > include / myinclude / Test . h
2019-11-21 01:39:12 +01:00
. intermediates / mynativelib1 / android_arm64_armv8 - a_shared / mynativelib1 . so - > arm64 / lib / mynativelib1 . so
. intermediates / mynativelib1 / android_arm_armv7 - a - neon_shared / mynativelib1 . so - > arm / lib / mynativelib1 . so
. intermediates / mynativelib2 / android_arm64_armv8 - a_shared / mynativelib2 . so - > arm64 / lib / mynativelib2 . so
. intermediates / mynativelib2 / android_arm_armv7 - a - neon_shared / mynativelib2 . so - > arm / lib / mynativelib2 . so
2019-12-11 19:34:15 +01:00
` ) ,
)
}
2021-02-17 11:55:25 +01:00
func TestSnapshotWithCcExportGeneratedHeaders ( t * testing . T ) {
result := testSdkWithCc ( t , `
sdk {
name : "mysdk" ,
native_shared_libs : [ "mynativelib" ] ,
}
cc_library_shared {
name : "mynativelib" ,
srcs : [
"Test.cpp" ,
] ,
generated_headers : [
"generated_foo" ,
] ,
export_generated_headers : [
"generated_foo" ,
] ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "myinclude" ] ,
2021-02-17 11:55:25 +01:00
stl : "none" ,
}
genrule {
name : "generated_foo" ,
cmd : "generate-foo" ,
out : [
"generated_foo/protos/foo/bar.h" ,
] ,
export_include_dirs : [
"." ,
"protos" ,
] ,
}
` )
2021-03-21 23:01:55 +01:00
// TODO(b/183322862): Remove this and fix the issue.
errorHandler := android . FixtureExpectsAtLeastOneErrorMatchingPattern ( ` module source path "snapshot/include_gen/generated_foo/gen/protos" does not exist ` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "mysdk" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2021-02-17 11:55:25 +01:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_shared {
name : "mynativelib" ,
prefer : false ,
visibility : [ "//visibility:public" ] ,
apex_available : [ "//apex_available:platform" ] ,
stl : "none" ,
compile_multilib : "both" ,
2021-02-17 13:17:40 +01:00
export_include_dirs : [
"include/myinclude" ,
"include_gen/generated_foo/gen" ,
"include_gen/generated_foo/gen/protos" ,
] ,
2021-02-17 11:55:25 +01:00
arch : {
arm64 : {
srcs : [ "arm64/lib/mynativelib.so" ] ,
} ,
arm : {
srcs : [ "arm/lib/mynativelib.so" ] ,
} ,
} ,
}
` ) ,
checkAllCopyRules ( `
2021-02-22 12:50:04 +01:00
myinclude / Test . h - > include / myinclude / Test . h
2021-02-17 13:17:40 +01:00
. intermediates / generated_foo / gen / generated_foo / protos / foo / bar . h - > include_gen / generated_foo / gen / generated_foo / protos / foo / bar . h
2021-02-17 11:55:25 +01:00
. intermediates / mynativelib / android_arm64_armv8 - a_shared / mynativelib . so - > arm64 / lib / mynativelib . so
. intermediates / mynativelib / android_arm_armv7 - a - neon_shared / mynativelib . so - > arm / lib / mynativelib . so
` ) ,
2021-03-21 23:01:55 +01:00
snapshotTestErrorHandler ( checkSnapshotWithoutSource , errorHandler ) ,
snapshotTestErrorHandler ( checkSnapshotWithSourcePreferred , errorHandler ) ,
snapshotTestErrorHandler ( checkSnapshotPreferredWithSource , errorHandler ) ,
2021-02-17 11:55:25 +01:00
)
}
2020-09-15 03:32:35 +02:00
// Verify that when the shared library has some common and some arch specific
// properties that the generated snapshot is optimized properly. Substruct
// handling is tested with the sanitize clauses (but note there's a lot of
// built-in logic in sanitize.go that can affect those flags).
2019-12-11 21:00:57 +01:00
func TestSnapshotWithCcSharedLibraryCommonProperties ( t * testing . T ) {
result := testSdkWithCc ( t , `
sdk {
name : "mysdk" ,
native_shared_libs : [ "mynativelib" ] ,
}
cc_library_shared {
name : "mynativelib" ,
srcs : [
"Test.cpp" ,
"aidl/foo/bar/Test.aidl" ,
] ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "myinclude" ] ,
2020-09-15 03:32:35 +02:00
sanitize : {
fuzzer : false ,
integer_overflow : true ,
diag : { undefined : false } ,
} ,
2019-12-11 21:00:57 +01:00
arch : {
arm64 : {
export_system_include_dirs : [ "arm64/include" ] ,
2020-09-15 03:32:35 +02:00
sanitize : {
integer_overflow : false ,
} ,
2019-12-11 21:00:57 +01:00
} ,
} ,
stl : "none" ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "mysdk" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2019-12-11 21:00:57 +01:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_shared {
name : "mynativelib" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-03-11 19:42:08 +01:00
stl : "none" ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "include/myinclude" ] ,
2020-09-15 03:32:35 +02:00
sanitize : {
fuzzer : false ,
diag : {
undefined : false ,
} ,
} ,
2019-12-11 21:00:57 +01:00
arch : {
arm64 : {
srcs : [ "arm64/lib/mynativelib.so" ] ,
export_system_include_dirs : [ "arm64/include/arm64/include" ] ,
2020-09-15 03:32:35 +02:00
sanitize : {
integer_overflow : false ,
} ,
2019-12-11 21:00:57 +01:00
} ,
arm : {
srcs : [ "arm/lib/mynativelib.so" ] ,
2020-09-15 03:32:35 +02:00
sanitize : {
integer_overflow : true ,
} ,
2019-12-11 21:00:57 +01:00
} ,
} ,
}
` ) ,
checkAllCopyRules ( `
2021-02-22 12:50:04 +01:00
myinclude / Test . h - > include / myinclude / Test . h
2020-10-29 00:38:33 +01:00
. intermediates / mynativelib / android_arm64_armv8 - a_shared / mynativelib . so - > arm64 / lib / mynativelib . so
2019-12-11 21:00:57 +01:00
arm64 / include / Arm64Test . h - > arm64 / include / arm64 / include / Arm64Test . h
2019-11-21 01:39:12 +01:00
. intermediates / mynativelib / android_arm_armv7 - a - neon_shared / mynativelib . so - > arm / lib / mynativelib . so ` ) ,
2019-12-11 21:00:57 +01:00
)
}
2020-01-16 12:47:25 +01:00
func TestSnapshotWithCcBinary ( t * testing . T ) {
result := testSdkWithCc ( t , `
module_exports {
name : "mymodule_exports" ,
native_binaries : [ "mynativebinary" ] ,
}
cc_binary {
name : "mynativebinary" ,
srcs : [
"Test.cpp" ,
] ,
compile_multilib : "both" ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "mymodule_exports" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2020-01-16 12:47:25 +01:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_binary {
2021-02-22 13:13:13 +01:00
name : "mynativebinary" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-01-16 12:47:25 +01:00
compile_multilib : "both" ,
arch : {
arm64 : {
srcs : [ "arm64/bin/mynativebinary" ] ,
} ,
arm : {
srcs : [ "arm/bin/mynativebinary" ] ,
} ,
} ,
}
` ) ,
checkAllCopyRules ( `
. intermediates / mynativebinary / android_arm64_armv8 - a / mynativebinary - > arm64 / bin / mynativebinary
. intermediates / mynativebinary / android_arm_armv7 - a - neon / mynativebinary - > arm / bin / mynativebinary
` ) ,
)
}
2020-03-02 11:16:35 +01:00
func TestMultipleHostOsTypesSnapshotWithCcBinary ( t * testing . T ) {
result := testSdkWithCc ( t , `
module_exports {
name : "myexports" ,
device_supported : false ,
host_supported : true ,
native_binaries : [ "mynativebinary" ] ,
target : {
windows : {
enabled : true ,
} ,
} ,
}
cc_binary {
name : "mynativebinary" ,
device_supported : false ,
host_supported : true ,
srcs : [
"Test.cpp" ,
] ,
compile_multilib : "both" ,
stl : "none" ,
target : {
windows : {
enabled : true ,
} ,
} ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "myexports" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2020-03-02 11:16:35 +01:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_binary {
2021-02-22 13:13:13 +01:00
name : "mynativebinary" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-03-02 11:16:35 +01:00
device_supported : false ,
host_supported : true ,
2020-05-28 23:58:01 +02:00
stl : "none" ,
2020-03-02 11:16:35 +01:00
target : {
2020-07-11 05:52:24 +02:00
host : {
enabled : false ,
} ,
2020-03-02 11:16:35 +01:00
linux_glibc : {
compile_multilib : "both" ,
} ,
linux_glibc_x86_64 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2020-03-02 11:16:35 +01:00
srcs : [ "linux_glibc/x86_64/bin/mynativebinary" ] ,
} ,
linux_glibc_x86 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2020-03-02 11:16:35 +01:00
srcs : [ "linux_glibc/x86/bin/mynativebinary" ] ,
} ,
windows : {
compile_multilib : "64" ,
} ,
windows_x86_64 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2020-03-02 11:16:35 +01:00
srcs : [ "windows/x86_64/bin/mynativebinary.exe" ] ,
} ,
} ,
}
` ) ,
checkAllCopyRules ( `
. intermediates / mynativebinary / linux_glibc_x86_64 / mynativebinary - > linux_glibc / x86_64 / bin / mynativebinary
. intermediates / mynativebinary / linux_glibc_x86 / mynativebinary - > linux_glibc / x86 / bin / mynativebinary
. intermediates / mynativebinary / windows_x86_64 / mynativebinary . exe - > windows / x86_64 / bin / mynativebinary . exe
` ) ,
)
}
2020-07-11 05:52:24 +02:00
func TestSnapshotWithSingleHostOsType ( t * testing . T ) {
2021-03-20 01:36:55 +01:00
result := android . GroupFixturePreparers (
prepareForSdkTest ,
2021-03-09 23:27:13 +01:00
ccTestFs . AddToFixture ( ) ,
cc . PrepareForTestOnLinuxBionic ,
android . FixtureModifyConfig ( func ( config android . Config ) {
config . Targets [ android . LinuxBionic ] = [ ] android . Target {
{ android . LinuxBionic , android . Arch { ArchType : android . X86_64 } , android . NativeBridgeDisabled , "" , "" , false } ,
}
} ) ,
) . RunTestWithBp ( t , `
2020-07-11 05:52:24 +02:00
cc_defaults {
name : "mydefaults" ,
device_supported : false ,
host_supported : true ,
compile_multilib : "64" ,
target : {
host : {
enabled : false ,
} ,
linux_bionic : {
enabled : true ,
} ,
} ,
}
module_exports {
name : "myexports" ,
defaults : [ "mydefaults" ] ,
native_shared_libs : [ "mynativelib" ] ,
native_binaries : [ "mynativebinary" ] ,
compile_multilib : "64" , // The built-in default in sdk.go overrides mydefaults.
}
cc_library {
name : "mynativelib" ,
defaults : [ "mydefaults" ] ,
srcs : [
"Test.cpp" ,
] ,
stl : "none" ,
}
cc_binary {
name : "mynativebinary" ,
defaults : [ "mydefaults" ] ,
srcs : [
"Test.cpp" ,
] ,
stl : "none" ,
}
2021-03-09 23:27:13 +01:00
` )
2020-07-11 05:52:24 +02:00
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "myexports" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2020-07-11 05:52:24 +02:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_binary {
2021-02-22 13:13:13 +01:00
name : "mynativebinary" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-07-11 05:52:24 +02:00
device_supported : false ,
host_supported : true ,
stl : "none" ,
compile_multilib : "64" ,
target : {
host : {
enabled : false ,
} ,
linux_bionic_x86_64 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2020-07-11 05:52:24 +02:00
srcs : [ "x86_64/bin/mynativebinary" ] ,
} ,
} ,
}
2021-02-22 13:13:13 +01:00
cc_prebuilt_library_shared {
name : "mynativelib" ,
2020-07-11 05:52:24 +02:00
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-07-11 05:52:24 +02:00
device_supported : false ,
host_supported : true ,
stl : "none" ,
compile_multilib : "64" ,
target : {
host : {
enabled : false ,
} ,
linux_bionic_x86_64 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2021-02-22 13:13:13 +01:00
srcs : [ "x86_64/lib/mynativelib.so" ] ,
2020-07-11 05:52:24 +02:00
} ,
} ,
}
` ) ,
checkAllCopyRules ( `
. intermediates / mynativebinary / linux_bionic_x86_64 / mynativebinary - > x86_64 / bin / mynativebinary
. intermediates / mynativelib / linux_bionic_x86_64_shared / mynativelib . so - > x86_64 / lib / mynativelib . so
` ) ,
)
}
2020-05-28 23:58:01 +02:00
// Test that we support the necessary flags for the linker binary, which is
// special in several ways.
func TestSnapshotWithCcStaticNocrtBinary ( t * testing . T ) {
result := testSdkWithCc ( t , `
module_exports {
name : "mymodule_exports" ,
host_supported : true ,
device_supported : false ,
native_binaries : [ "linker" ] ,
}
cc_binary {
name : "linker" ,
host_supported : true ,
static_executable : true ,
nocrt : true ,
stl : "none" ,
srcs : [
"Test.cpp" ,
] ,
compile_multilib : "both" ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "mymodule_exports" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2020-05-28 23:58:01 +02:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_binary {
2021-02-22 13:13:13 +01:00
name : "linker" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-05-28 23:58:01 +02:00
device_supported : false ,
host_supported : true ,
stl : "none" ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2020-05-28 23:58:01 +02:00
static_executable : true ,
nocrt : true ,
2020-07-11 05:52:24 +02:00
target : {
host : {
enabled : false ,
} ,
linux_glibc_x86_64 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2020-05-28 23:58:01 +02:00
srcs : [ "x86_64/bin/linker" ] ,
} ,
2020-07-11 05:52:24 +02:00
linux_glibc_x86 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2020-05-28 23:58:01 +02:00
srcs : [ "x86/bin/linker" ] ,
} ,
} ,
}
` ) ,
checkAllCopyRules ( `
. intermediates / linker / linux_glibc_x86_64 / linker - > x86_64 / bin / linker
. intermediates / linker / linux_glibc_x86 / linker - > x86 / bin / linker
` ) ,
)
}
2019-12-11 19:42:17 +01:00
func TestSnapshotWithCcSharedLibrary ( t * testing . T ) {
2019-11-30 18:49:09 +01:00
result := testSdkWithCc ( t , `
2019-12-03 16:25:00 +01:00
sdk {
name : "mysdk" ,
native_shared_libs : [ "mynativelib" ] ,
}
cc_library_shared {
name : "mynativelib" ,
srcs : [
"Test.cpp" ,
"aidl/foo/bar/Test.aidl" ,
] ,
2020-03-04 15:22:45 +01:00
apex_available : [ "apex1" , "apex2" ] ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "myinclude" ] ,
2019-12-03 16:25:00 +01:00
aidl : {
export_aidl_headers : true ,
} ,
stl : "none" ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "mysdk" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2019-12-03 16:25:00 +01:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_shared {
name : "mynativelib" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-03-04 15:22:45 +01:00
apex_available : [
"apex1" ,
"apex2" ,
] ,
2020-03-11 19:42:08 +01:00
stl : "none" ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "include/myinclude" ] ,
2019-12-03 16:25:00 +01:00
arch : {
arm64 : {
srcs : [ "arm64/lib/mynativelib.so" ] ,
Fix the snapshot handling of generated headers
Previously, the snapshot handling code did not preserve the directory
structure of generated include directories and instead just copied the
headers into the same module specific directory and added that single
directory to the export_include_dirs (or similar) property.
That had a couple of issues:
* The include directory was repeated in the ..._include_dirs property.
* It did not work when the include directories overlapped.
In the latter case it had a couple of issues:
* Code which compiled fine against the source would not compile against
the prebuilt.
* Header files were duplicated in the output.
e.g. assume the following generated header file structure:
foo/
foo.h
bar/
bar.h
baz/
baz.h
When the sdk snapshot was passed include directories of "foo", "bar" and
headers of "foo/foo.h", "bar/bar.h", "bar/baz/baz.h" it would generate a
snapshot with the structure:
include_gen/
foo.h
bar.h
baz/
baz.h
And:
export_include_dirs: ["include_gen", "include_gen"]
However, when the include directories overlapped and include directories
of "foo", "bar" and "bar/baz" were passed in the directory structure
would be the same and the export_include_dirs would contain 3 usages of
"include_gen".
That meant that source code which used the following would build
against the source (because it would find "baz.h" in the "bar/baz"
include directory) but would fail when built against the prebuilts
because the "include_gen" directory did not contain "baz.h":
#include "baz.h"
This change preserves the input directory structure for generated files
in a similar way to how it does it for source files. So, the snapshot
structure looks something like this:
include_gen/
foo/
foo.h
bar/
bar.h
baz/
baz.h
And:
export_include_dirs: [
"include_gen/foo",
"include_gen/bar",
"include_gen/bar/baz",
],
Bug: 180427921
Test: m nothing
Change-Id: Id69eef8cf5eecd033841d3b7cd0c044a697ce404
2021-02-22 12:35:24 +01:00
export_include_dirs : [ "arm64/include_gen/mynativelib/android_arm64_armv8-a_shared/gen/aidl" ] ,
2019-12-03 16:25:00 +01:00
} ,
arm : {
srcs : [ "arm/lib/mynativelib.so" ] ,
Fix the snapshot handling of generated headers
Previously, the snapshot handling code did not preserve the directory
structure of generated include directories and instead just copied the
headers into the same module specific directory and added that single
directory to the export_include_dirs (or similar) property.
That had a couple of issues:
* The include directory was repeated in the ..._include_dirs property.
* It did not work when the include directories overlapped.
In the latter case it had a couple of issues:
* Code which compiled fine against the source would not compile against
the prebuilt.
* Header files were duplicated in the output.
e.g. assume the following generated header file structure:
foo/
foo.h
bar/
bar.h
baz/
baz.h
When the sdk snapshot was passed include directories of "foo", "bar" and
headers of "foo/foo.h", "bar/bar.h", "bar/baz/baz.h" it would generate a
snapshot with the structure:
include_gen/
foo.h
bar.h
baz/
baz.h
And:
export_include_dirs: ["include_gen", "include_gen"]
However, when the include directories overlapped and include directories
of "foo", "bar" and "bar/baz" were passed in the directory structure
would be the same and the export_include_dirs would contain 3 usages of
"include_gen".
That meant that source code which used the following would build
against the source (because it would find "baz.h" in the "bar/baz"
include directory) but would fail when built against the prebuilts
because the "include_gen" directory did not contain "baz.h":
#include "baz.h"
This change preserves the input directory structure for generated files
in a similar way to how it does it for source files. So, the snapshot
structure looks something like this:
include_gen/
foo/
foo.h
bar/
bar.h
baz/
baz.h
And:
export_include_dirs: [
"include_gen/foo",
"include_gen/bar",
"include_gen/bar/baz",
],
Bug: 180427921
Test: m nothing
Change-Id: Id69eef8cf5eecd033841d3b7cd0c044a697ce404
2021-02-22 12:35:24 +01:00
export_include_dirs : [ "arm/include_gen/mynativelib/android_arm_armv7-a-neon_shared/gen/aidl" ] ,
2019-12-03 16:25:00 +01:00
} ,
} ,
}
` ) ,
checkAllCopyRules ( `
2021-02-22 12:50:04 +01:00
myinclude / Test . h - > include / myinclude / Test . h
2019-11-21 01:39:12 +01:00
. intermediates / mynativelib / android_arm64_armv8 - a_shared / mynativelib . so - > arm64 / lib / mynativelib . so
Fix the snapshot handling of generated headers
Previously, the snapshot handling code did not preserve the directory
structure of generated include directories and instead just copied the
headers into the same module specific directory and added that single
directory to the export_include_dirs (or similar) property.
That had a couple of issues:
* The include directory was repeated in the ..._include_dirs property.
* It did not work when the include directories overlapped.
In the latter case it had a couple of issues:
* Code which compiled fine against the source would not compile against
the prebuilt.
* Header files were duplicated in the output.
e.g. assume the following generated header file structure:
foo/
foo.h
bar/
bar.h
baz/
baz.h
When the sdk snapshot was passed include directories of "foo", "bar" and
headers of "foo/foo.h", "bar/bar.h", "bar/baz/baz.h" it would generate a
snapshot with the structure:
include_gen/
foo.h
bar.h
baz/
baz.h
And:
export_include_dirs: ["include_gen", "include_gen"]
However, when the include directories overlapped and include directories
of "foo", "bar" and "bar/baz" were passed in the directory structure
would be the same and the export_include_dirs would contain 3 usages of
"include_gen".
That meant that source code which used the following would build
against the source (because it would find "baz.h" in the "bar/baz"
include directory) but would fail when built against the prebuilts
because the "include_gen" directory did not contain "baz.h":
#include "baz.h"
This change preserves the input directory structure for generated files
in a similar way to how it does it for source files. So, the snapshot
structure looks something like this:
include_gen/
foo/
foo.h
bar/
bar.h
baz/
baz.h
And:
export_include_dirs: [
"include_gen/foo",
"include_gen/bar",
"include_gen/bar/baz",
],
Bug: 180427921
Test: m nothing
Change-Id: Id69eef8cf5eecd033841d3b7cd0c044a697ce404
2021-02-22 12:35:24 +01:00
. intermediates / mynativelib / android_arm64_armv8 - a_shared / gen / aidl / aidl / foo / bar / Test . h - > arm64 / include_gen / mynativelib / android_arm64_armv8 - a_shared / gen / aidl / aidl / foo / bar / Test . h
. intermediates / mynativelib / android_arm64_armv8 - a_shared / gen / aidl / aidl / foo / bar / BnTest . h - > arm64 / include_gen / mynativelib / android_arm64_armv8 - a_shared / gen / aidl / aidl / foo / bar / BnTest . h
. intermediates / mynativelib / android_arm64_armv8 - a_shared / gen / aidl / aidl / foo / bar / BpTest . h - > arm64 / include_gen / mynativelib / android_arm64_armv8 - a_shared / gen / aidl / aidl / foo / bar / BpTest . h
2019-11-21 01:39:12 +01:00
. intermediates / mynativelib / android_arm_armv7 - a - neon_shared / mynativelib . so - > arm / lib / mynativelib . so
Fix the snapshot handling of generated headers
Previously, the snapshot handling code did not preserve the directory
structure of generated include directories and instead just copied the
headers into the same module specific directory and added that single
directory to the export_include_dirs (or similar) property.
That had a couple of issues:
* The include directory was repeated in the ..._include_dirs property.
* It did not work when the include directories overlapped.
In the latter case it had a couple of issues:
* Code which compiled fine against the source would not compile against
the prebuilt.
* Header files were duplicated in the output.
e.g. assume the following generated header file structure:
foo/
foo.h
bar/
bar.h
baz/
baz.h
When the sdk snapshot was passed include directories of "foo", "bar" and
headers of "foo/foo.h", "bar/bar.h", "bar/baz/baz.h" it would generate a
snapshot with the structure:
include_gen/
foo.h
bar.h
baz/
baz.h
And:
export_include_dirs: ["include_gen", "include_gen"]
However, when the include directories overlapped and include directories
of "foo", "bar" and "bar/baz" were passed in the directory structure
would be the same and the export_include_dirs would contain 3 usages of
"include_gen".
That meant that source code which used the following would build
against the source (because it would find "baz.h" in the "bar/baz"
include directory) but would fail when built against the prebuilts
because the "include_gen" directory did not contain "baz.h":
#include "baz.h"
This change preserves the input directory structure for generated files
in a similar way to how it does it for source files. So, the snapshot
structure looks something like this:
include_gen/
foo/
foo.h
bar/
bar.h
baz/
baz.h
And:
export_include_dirs: [
"include_gen/foo",
"include_gen/bar",
"include_gen/bar/baz",
],
Bug: 180427921
Test: m nothing
Change-Id: Id69eef8cf5eecd033841d3b7cd0c044a697ce404
2021-02-22 12:35:24 +01:00
. intermediates / mynativelib / android_arm_armv7 - a - neon_shared / gen / aidl / aidl / foo / bar / Test . h - > arm / include_gen / mynativelib / android_arm_armv7 - a - neon_shared / gen / aidl / aidl / foo / bar / Test . h
. intermediates / mynativelib / android_arm_armv7 - a - neon_shared / gen / aidl / aidl / foo / bar / BnTest . h - > arm / include_gen / mynativelib / android_arm_armv7 - a - neon_shared / gen / aidl / aidl / foo / bar / BnTest . h
. intermediates / mynativelib / android_arm_armv7 - a - neon_shared / gen / aidl / aidl / foo / bar / BpTest . h - > arm / include_gen / mynativelib / android_arm_armv7 - a - neon_shared / gen / aidl / aidl / foo / bar / BpTest . h
2019-12-03 16:25:00 +01:00
` ) ,
)
}
2020-03-06 13:30:43 +01:00
func TestSnapshotWithCcSharedLibrarySharedLibs ( t * testing . T ) {
result := testSdkWithCc ( t , `
sdk {
name : "mysdk" ,
native_shared_libs : [
"mynativelib" ,
"myothernativelib" ,
"mysystemnativelib" ,
] ,
}
cc_library {
name : "mysystemnativelib" ,
srcs : [
"Test.cpp" ,
] ,
stl : "none" ,
}
cc_library_shared {
name : "myothernativelib" ,
srcs : [
"Test.cpp" ,
] ,
system_shared_libs : [
// A reference to a library that is not an sdk member. Uses libm as that
// is in the default set of modules available to this test and so is available
// both here and also when the generated Android.bp file is tested in
// CheckSnapshot(). This ensures that the system_shared_libs property correctly
// handles references to modules that are not sdk members.
"libm" ,
] ,
stl : "none" ,
}
cc_library {
name : "mynativelib" ,
srcs : [
"Test.cpp" ,
] ,
shared_libs : [
// A reference to another sdk member.
"myothernativelib" ,
] ,
target : {
android : {
shared : {
shared_libs : [
// A reference to a library that is not an sdk member. The libc library
// is used here to check that the shared_libs property is handled correctly
// in a similar way to how libm is used to check system_shared_libs above.
"libc" ,
] ,
} ,
} ,
} ,
stl : "none" ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "mysdk" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2020-03-06 13:30:43 +01:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_shared {
name : "mynativelib" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-03-11 19:42:08 +01:00
stl : "none" ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2020-03-06 13:30:43 +01:00
shared_libs : [
"myothernativelib" ,
"libc" ,
] ,
arch : {
arm64 : {
srcs : [ "arm64/lib/mynativelib.so" ] ,
} ,
arm : {
srcs : [ "arm/lib/mynativelib.so" ] ,
} ,
} ,
}
cc_prebuilt_library_shared {
name : "myothernativelib" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-03-11 19:42:08 +01:00
stl : "none" ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2020-03-06 13:30:43 +01:00
system_shared_libs : [ "libm" ] ,
arch : {
arm64 : {
srcs : [ "arm64/lib/myothernativelib.so" ] ,
} ,
arm : {
srcs : [ "arm/lib/myothernativelib.so" ] ,
} ,
} ,
}
cc_prebuilt_library_shared {
name : "mysystemnativelib" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-03-11 19:42:08 +01:00
stl : "none" ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2020-03-06 13:30:43 +01:00
arch : {
arm64 : {
srcs : [ "arm64/lib/mysystemnativelib.so" ] ,
} ,
arm : {
srcs : [ "arm/lib/mysystemnativelib.so" ] ,
} ,
} ,
}
` ) ,
checkAllCopyRules ( `
. intermediates / mynativelib / android_arm64_armv8 - a_shared / mynativelib . so - > arm64 / lib / mynativelib . so
. intermediates / mynativelib / android_arm_armv7 - a - neon_shared / mynativelib . so - > arm / lib / mynativelib . so
. intermediates / myothernativelib / android_arm64_armv8 - a_shared / myothernativelib . so - > arm64 / lib / myothernativelib . so
. intermediates / myothernativelib / android_arm_armv7 - a - neon_shared / myothernativelib . so - > arm / lib / myothernativelib . so
. intermediates / mysystemnativelib / android_arm64_armv8 - a_shared / mysystemnativelib . so - > arm64 / lib / mysystemnativelib . so
. intermediates / mysystemnativelib / android_arm_armv7 - a - neon_shared / mysystemnativelib . so - > arm / lib / mysystemnativelib . so
` ) ,
)
}
2019-12-11 19:42:17 +01:00
func TestHostSnapshotWithCcSharedLibrary ( t * testing . T ) {
2019-11-30 18:49:09 +01:00
result := testSdkWithCc ( t , `
2019-12-03 16:25:00 +01:00
sdk {
name : "mysdk" ,
device_supported : false ,
host_supported : true ,
native_shared_libs : [ "mynativelib" ] ,
}
cc_library_shared {
name : "mynativelib" ,
device_supported : false ,
host_supported : true ,
srcs : [
"Test.cpp" ,
"aidl/foo/bar/Test.aidl" ,
] ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "myinclude" ] ,
2019-12-03 16:25:00 +01:00
aidl : {
export_aidl_headers : true ,
} ,
stl : "none" ,
2020-03-05 15:09:58 +01:00
sdk_version : "minimum" ,
2019-12-03 16:25:00 +01:00
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "mysdk" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2019-12-03 16:25:00 +01:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_shared {
2021-02-22 13:13:13 +01:00
name : "mynativelib" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2019-12-03 16:25:00 +01:00
device_supported : false ,
host_supported : true ,
2020-03-05 15:09:58 +01:00
sdk_version : "minimum" ,
2020-03-11 19:42:08 +01:00
stl : "none" ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "include/myinclude" ] ,
2020-07-11 05:52:24 +02:00
target : {
host : {
enabled : false ,
} ,
linux_glibc_x86_64 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2019-12-03 16:25:00 +01:00
srcs : [ "x86_64/lib/mynativelib.so" ] ,
Fix the snapshot handling of generated headers
Previously, the snapshot handling code did not preserve the directory
structure of generated include directories and instead just copied the
headers into the same module specific directory and added that single
directory to the export_include_dirs (or similar) property.
That had a couple of issues:
* The include directory was repeated in the ..._include_dirs property.
* It did not work when the include directories overlapped.
In the latter case it had a couple of issues:
* Code which compiled fine against the source would not compile against
the prebuilt.
* Header files were duplicated in the output.
e.g. assume the following generated header file structure:
foo/
foo.h
bar/
bar.h
baz/
baz.h
When the sdk snapshot was passed include directories of "foo", "bar" and
headers of "foo/foo.h", "bar/bar.h", "bar/baz/baz.h" it would generate a
snapshot with the structure:
include_gen/
foo.h
bar.h
baz/
baz.h
And:
export_include_dirs: ["include_gen", "include_gen"]
However, when the include directories overlapped and include directories
of "foo", "bar" and "bar/baz" were passed in the directory structure
would be the same and the export_include_dirs would contain 3 usages of
"include_gen".
That meant that source code which used the following would build
against the source (because it would find "baz.h" in the "bar/baz"
include directory) but would fail when built against the prebuilts
because the "include_gen" directory did not contain "baz.h":
#include "baz.h"
This change preserves the input directory structure for generated files
in a similar way to how it does it for source files. So, the snapshot
structure looks something like this:
include_gen/
foo/
foo.h
bar/
bar.h
baz/
baz.h
And:
export_include_dirs: [
"include_gen/foo",
"include_gen/bar",
"include_gen/bar/baz",
],
Bug: 180427921
Test: m nothing
Change-Id: Id69eef8cf5eecd033841d3b7cd0c044a697ce404
2021-02-22 12:35:24 +01:00
export_include_dirs : [ "x86_64/include_gen/mynativelib/linux_glibc_x86_64_shared/gen/aidl" ] ,
2019-12-03 16:25:00 +01:00
} ,
2020-07-11 05:52:24 +02:00
linux_glibc_x86 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2019-12-03 16:25:00 +01:00
srcs : [ "x86/lib/mynativelib.so" ] ,
Fix the snapshot handling of generated headers
Previously, the snapshot handling code did not preserve the directory
structure of generated include directories and instead just copied the
headers into the same module specific directory and added that single
directory to the export_include_dirs (or similar) property.
That had a couple of issues:
* The include directory was repeated in the ..._include_dirs property.
* It did not work when the include directories overlapped.
In the latter case it had a couple of issues:
* Code which compiled fine against the source would not compile against
the prebuilt.
* Header files were duplicated in the output.
e.g. assume the following generated header file structure:
foo/
foo.h
bar/
bar.h
baz/
baz.h
When the sdk snapshot was passed include directories of "foo", "bar" and
headers of "foo/foo.h", "bar/bar.h", "bar/baz/baz.h" it would generate a
snapshot with the structure:
include_gen/
foo.h
bar.h
baz/
baz.h
And:
export_include_dirs: ["include_gen", "include_gen"]
However, when the include directories overlapped and include directories
of "foo", "bar" and "bar/baz" were passed in the directory structure
would be the same and the export_include_dirs would contain 3 usages of
"include_gen".
That meant that source code which used the following would build
against the source (because it would find "baz.h" in the "bar/baz"
include directory) but would fail when built against the prebuilts
because the "include_gen" directory did not contain "baz.h":
#include "baz.h"
This change preserves the input directory structure for generated files
in a similar way to how it does it for source files. So, the snapshot
structure looks something like this:
include_gen/
foo/
foo.h
bar/
bar.h
baz/
baz.h
And:
export_include_dirs: [
"include_gen/foo",
"include_gen/bar",
"include_gen/bar/baz",
],
Bug: 180427921
Test: m nothing
Change-Id: Id69eef8cf5eecd033841d3b7cd0c044a697ce404
2021-02-22 12:35:24 +01:00
export_include_dirs : [ "x86/include_gen/mynativelib/linux_glibc_x86_shared/gen/aidl" ] ,
2019-12-03 16:25:00 +01:00
} ,
} ,
}
2021-02-22 13:13:13 +01:00
` ) ,
2022-05-24 22:10:05 +02:00
checkAllCopyRules ( `
myinclude / Test . h - > include / myinclude / Test . h
. intermediates / mynativelib / linux_glibc_x86_64_shared / mynativelib . so - > x86_64 / lib / mynativelib . so
. intermediates / mynativelib / linux_glibc_x86_64_shared / gen / aidl / aidl / foo / bar / Test . h - > x86_64 / include_gen / mynativelib / linux_glibc_x86_64_shared / gen / aidl / aidl / foo / bar / Test . h
. intermediates / mynativelib / linux_glibc_x86_64_shared / gen / aidl / aidl / foo / bar / BnTest . h - > x86_64 / include_gen / mynativelib / linux_glibc_x86_64_shared / gen / aidl / aidl / foo / bar / BnTest . h
. intermediates / mynativelib / linux_glibc_x86_64_shared / gen / aidl / aidl / foo / bar / BpTest . h - > x86_64 / include_gen / mynativelib / linux_glibc_x86_64_shared / gen / aidl / aidl / foo / bar / BpTest . h
. intermediates / mynativelib / linux_glibc_x86_shared / mynativelib . so - > x86 / lib / mynativelib . so
. intermediates / mynativelib / linux_glibc_x86_shared / gen / aidl / aidl / foo / bar / Test . h - > x86 / include_gen / mynativelib / linux_glibc_x86_shared / gen / aidl / aidl / foo / bar / Test . h
. intermediates / mynativelib / linux_glibc_x86_shared / gen / aidl / aidl / foo / bar / BnTest . h - > x86 / include_gen / mynativelib / linux_glibc_x86_shared / gen / aidl / aidl / foo / bar / BnTest . h
. intermediates / mynativelib / linux_glibc_x86_shared / gen / aidl / aidl / foo / bar / BpTest . h - > x86 / include_gen / mynativelib / linux_glibc_x86_shared / gen / aidl / aidl / foo / bar / BpTest . h
` ) ,
)
}
2019-12-11 19:42:17 +01:00
2020-03-02 11:16:35 +01:00
func TestMultipleHostOsTypesSnapshotWithCcSharedLibrary ( t * testing . T ) {
result := testSdkWithCc ( t , `
sdk {
name : "mysdk" ,
device_supported : false ,
host_supported : true ,
native_shared_libs : [ "mynativelib" ] ,
target : {
windows : {
enabled : true ,
} ,
} ,
}
cc_library_shared {
name : "mynativelib" ,
device_supported : false ,
host_supported : true ,
srcs : [
"Test.cpp" ,
] ,
stl : "none" ,
target : {
windows : {
enabled : true ,
} ,
} ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "mysdk" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2020-03-02 11:16:35 +01:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_shared {
2021-02-22 13:13:13 +01:00
name : "mynativelib" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-03-02 11:16:35 +01:00
device_supported : false ,
host_supported : true ,
2020-03-11 19:42:08 +01:00
stl : "none" ,
2020-03-02 11:16:35 +01:00
target : {
2020-07-11 05:52:24 +02:00
host : {
enabled : false ,
} ,
2020-07-10 01:14:03 +02:00
linux_glibc : {
compile_multilib : "both" ,
} ,
2020-03-02 11:16:35 +01:00
linux_glibc_x86_64 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2020-03-02 11:16:35 +01:00
srcs : [ "linux_glibc/x86_64/lib/mynativelib.so" ] ,
} ,
linux_glibc_x86 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2020-03-02 11:16:35 +01:00
srcs : [ "linux_glibc/x86/lib/mynativelib.so" ] ,
} ,
2020-07-10 01:14:03 +02:00
windows : {
compile_multilib : "64" ,
} ,
2020-03-02 11:16:35 +01:00
windows_x86_64 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2020-03-02 11:16:35 +01:00
srcs : [ "windows/x86_64/lib/mynativelib.dll" ] ,
} ,
} ,
}
` ) ,
checkAllCopyRules ( `
. intermediates / mynativelib / linux_glibc_x86_64_shared / mynativelib . so - > linux_glibc / x86_64 / lib / mynativelib . so
. intermediates / mynativelib / linux_glibc_x86_shared / mynativelib . so - > linux_glibc / x86 / lib / mynativelib . so
. intermediates / mynativelib / windows_x86_64_shared / mynativelib . dll - > windows / x86_64 / lib / mynativelib . dll
` ) ,
)
}
2019-12-11 19:42:17 +01:00
func TestSnapshotWithCcStaticLibrary ( t * testing . T ) {
result := testSdkWithCc ( t , `
2019-12-16 18:43:48 +01:00
module_exports {
name : "myexports" ,
2019-12-11 19:42:17 +01:00
native_static_libs : [ "mynativelib" ] ,
}
cc_library_static {
name : "mynativelib" ,
srcs : [
"Test.cpp" ,
"aidl/foo/bar/Test.aidl" ,
] ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "myinclude" ] ,
2019-12-11 19:42:17 +01:00
aidl : {
export_aidl_headers : true ,
} ,
stl : "none" ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "myexports" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2019-12-11 19:42:17 +01:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_static {
name : "mynativelib" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-03-11 19:42:08 +01:00
stl : "none" ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "include/myinclude" ] ,
2019-12-11 19:42:17 +01:00
arch : {
arm64 : {
srcs : [ "arm64/lib/mynativelib.a" ] ,
Fix the snapshot handling of generated headers
Previously, the snapshot handling code did not preserve the directory
structure of generated include directories and instead just copied the
headers into the same module specific directory and added that single
directory to the export_include_dirs (or similar) property.
That had a couple of issues:
* The include directory was repeated in the ..._include_dirs property.
* It did not work when the include directories overlapped.
In the latter case it had a couple of issues:
* Code which compiled fine against the source would not compile against
the prebuilt.
* Header files were duplicated in the output.
e.g. assume the following generated header file structure:
foo/
foo.h
bar/
bar.h
baz/
baz.h
When the sdk snapshot was passed include directories of "foo", "bar" and
headers of "foo/foo.h", "bar/bar.h", "bar/baz/baz.h" it would generate a
snapshot with the structure:
include_gen/
foo.h
bar.h
baz/
baz.h
And:
export_include_dirs: ["include_gen", "include_gen"]
However, when the include directories overlapped and include directories
of "foo", "bar" and "bar/baz" were passed in the directory structure
would be the same and the export_include_dirs would contain 3 usages of
"include_gen".
That meant that source code which used the following would build
against the source (because it would find "baz.h" in the "bar/baz"
include directory) but would fail when built against the prebuilts
because the "include_gen" directory did not contain "baz.h":
#include "baz.h"
This change preserves the input directory structure for generated files
in a similar way to how it does it for source files. So, the snapshot
structure looks something like this:
include_gen/
foo/
foo.h
bar/
bar.h
baz/
baz.h
And:
export_include_dirs: [
"include_gen/foo",
"include_gen/bar",
"include_gen/bar/baz",
],
Bug: 180427921
Test: m nothing
Change-Id: Id69eef8cf5eecd033841d3b7cd0c044a697ce404
2021-02-22 12:35:24 +01:00
export_include_dirs : [ "arm64/include_gen/mynativelib/android_arm64_armv8-a_static/gen/aidl" ] ,
2019-12-11 19:42:17 +01:00
} ,
arm : {
srcs : [ "arm/lib/mynativelib.a" ] ,
Fix the snapshot handling of generated headers
Previously, the snapshot handling code did not preserve the directory
structure of generated include directories and instead just copied the
headers into the same module specific directory and added that single
directory to the export_include_dirs (or similar) property.
That had a couple of issues:
* The include directory was repeated in the ..._include_dirs property.
* It did not work when the include directories overlapped.
In the latter case it had a couple of issues:
* Code which compiled fine against the source would not compile against
the prebuilt.
* Header files were duplicated in the output.
e.g. assume the following generated header file structure:
foo/
foo.h
bar/
bar.h
baz/
baz.h
When the sdk snapshot was passed include directories of "foo", "bar" and
headers of "foo/foo.h", "bar/bar.h", "bar/baz/baz.h" it would generate a
snapshot with the structure:
include_gen/
foo.h
bar.h
baz/
baz.h
And:
export_include_dirs: ["include_gen", "include_gen"]
However, when the include directories overlapped and include directories
of "foo", "bar" and "bar/baz" were passed in the directory structure
would be the same and the export_include_dirs would contain 3 usages of
"include_gen".
That meant that source code which used the following would build
against the source (because it would find "baz.h" in the "bar/baz"
include directory) but would fail when built against the prebuilts
because the "include_gen" directory did not contain "baz.h":
#include "baz.h"
This change preserves the input directory structure for generated files
in a similar way to how it does it for source files. So, the snapshot
structure looks something like this:
include_gen/
foo/
foo.h
bar/
bar.h
baz/
baz.h
And:
export_include_dirs: [
"include_gen/foo",
"include_gen/bar",
"include_gen/bar/baz",
],
Bug: 180427921
Test: m nothing
Change-Id: Id69eef8cf5eecd033841d3b7cd0c044a697ce404
2021-02-22 12:35:24 +01:00
export_include_dirs : [ "arm/include_gen/mynativelib/android_arm_armv7-a-neon_static/gen/aidl" ] ,
2019-12-11 19:42:17 +01:00
} ,
} ,
}
` ) ,
checkAllCopyRules ( `
2021-02-22 12:50:04 +01:00
myinclude / Test . h - > include / myinclude / Test . h
2019-11-21 01:39:12 +01:00
. intermediates / mynativelib / android_arm64_armv8 - a_static / mynativelib . a - > arm64 / lib / mynativelib . a
Fix the snapshot handling of generated headers
Previously, the snapshot handling code did not preserve the directory
structure of generated include directories and instead just copied the
headers into the same module specific directory and added that single
directory to the export_include_dirs (or similar) property.
That had a couple of issues:
* The include directory was repeated in the ..._include_dirs property.
* It did not work when the include directories overlapped.
In the latter case it had a couple of issues:
* Code which compiled fine against the source would not compile against
the prebuilt.
* Header files were duplicated in the output.
e.g. assume the following generated header file structure:
foo/
foo.h
bar/
bar.h
baz/
baz.h
When the sdk snapshot was passed include directories of "foo", "bar" and
headers of "foo/foo.h", "bar/bar.h", "bar/baz/baz.h" it would generate a
snapshot with the structure:
include_gen/
foo.h
bar.h
baz/
baz.h
And:
export_include_dirs: ["include_gen", "include_gen"]
However, when the include directories overlapped and include directories
of "foo", "bar" and "bar/baz" were passed in the directory structure
would be the same and the export_include_dirs would contain 3 usages of
"include_gen".
That meant that source code which used the following would build
against the source (because it would find "baz.h" in the "bar/baz"
include directory) but would fail when built against the prebuilts
because the "include_gen" directory did not contain "baz.h":
#include "baz.h"
This change preserves the input directory structure for generated files
in a similar way to how it does it for source files. So, the snapshot
structure looks something like this:
include_gen/
foo/
foo.h
bar/
bar.h
baz/
baz.h
And:
export_include_dirs: [
"include_gen/foo",
"include_gen/bar",
"include_gen/bar/baz",
],
Bug: 180427921
Test: m nothing
Change-Id: Id69eef8cf5eecd033841d3b7cd0c044a697ce404
2021-02-22 12:35:24 +01:00
. intermediates / mynativelib / android_arm64_armv8 - a_static / gen / aidl / aidl / foo / bar / Test . h - > arm64 / include_gen / mynativelib / android_arm64_armv8 - a_static / gen / aidl / aidl / foo / bar / Test . h
. intermediates / mynativelib / android_arm64_armv8 - a_static / gen / aidl / aidl / foo / bar / BnTest . h - > arm64 / include_gen / mynativelib / android_arm64_armv8 - a_static / gen / aidl / aidl / foo / bar / BnTest . h
. intermediates / mynativelib / android_arm64_armv8 - a_static / gen / aidl / aidl / foo / bar / BpTest . h - > arm64 / include_gen / mynativelib / android_arm64_armv8 - a_static / gen / aidl / aidl / foo / bar / BpTest . h
2019-11-21 01:39:12 +01:00
. intermediates / mynativelib / android_arm_armv7 - a - neon_static / mynativelib . a - > arm / lib / mynativelib . a
Fix the snapshot handling of generated headers
Previously, the snapshot handling code did not preserve the directory
structure of generated include directories and instead just copied the
headers into the same module specific directory and added that single
directory to the export_include_dirs (or similar) property.
That had a couple of issues:
* The include directory was repeated in the ..._include_dirs property.
* It did not work when the include directories overlapped.
In the latter case it had a couple of issues:
* Code which compiled fine against the source would not compile against
the prebuilt.
* Header files were duplicated in the output.
e.g. assume the following generated header file structure:
foo/
foo.h
bar/
bar.h
baz/
baz.h
When the sdk snapshot was passed include directories of "foo", "bar" and
headers of "foo/foo.h", "bar/bar.h", "bar/baz/baz.h" it would generate a
snapshot with the structure:
include_gen/
foo.h
bar.h
baz/
baz.h
And:
export_include_dirs: ["include_gen", "include_gen"]
However, when the include directories overlapped and include directories
of "foo", "bar" and "bar/baz" were passed in the directory structure
would be the same and the export_include_dirs would contain 3 usages of
"include_gen".
That meant that source code which used the following would build
against the source (because it would find "baz.h" in the "bar/baz"
include directory) but would fail when built against the prebuilts
because the "include_gen" directory did not contain "baz.h":
#include "baz.h"
This change preserves the input directory structure for generated files
in a similar way to how it does it for source files. So, the snapshot
structure looks something like this:
include_gen/
foo/
foo.h
bar/
bar.h
baz/
baz.h
And:
export_include_dirs: [
"include_gen/foo",
"include_gen/bar",
"include_gen/bar/baz",
],
Bug: 180427921
Test: m nothing
Change-Id: Id69eef8cf5eecd033841d3b7cd0c044a697ce404
2021-02-22 12:35:24 +01:00
. intermediates / mynativelib / android_arm_armv7 - a - neon_static / gen / aidl / aidl / foo / bar / Test . h - > arm / include_gen / mynativelib / android_arm_armv7 - a - neon_static / gen / aidl / aidl / foo / bar / Test . h
. intermediates / mynativelib / android_arm_armv7 - a - neon_static / gen / aidl / aidl / foo / bar / BnTest . h - > arm / include_gen / mynativelib / android_arm_armv7 - a - neon_static / gen / aidl / aidl / foo / bar / BnTest . h
. intermediates / mynativelib / android_arm_armv7 - a - neon_static / gen / aidl / aidl / foo / bar / BpTest . h - > arm / include_gen / mynativelib / android_arm_armv7 - a - neon_static / gen / aidl / aidl / foo / bar / BpTest . h
2019-12-11 19:42:17 +01:00
` ) ,
)
}
func TestHostSnapshotWithCcStaticLibrary ( t * testing . T ) {
result := testSdkWithCc ( t , `
2019-12-16 18:43:48 +01:00
module_exports {
name : "myexports" ,
2019-12-11 19:42:17 +01:00
device_supported : false ,
host_supported : true ,
native_static_libs : [ "mynativelib" ] ,
}
cc_library_static {
name : "mynativelib" ,
device_supported : false ,
host_supported : true ,
srcs : [
"Test.cpp" ,
"aidl/foo/bar/Test.aidl" ,
] ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "myinclude" ] ,
2019-12-11 19:42:17 +01:00
aidl : {
export_aidl_headers : true ,
} ,
stl : "none" ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "myexports" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2019-12-11 19:42:17 +01:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_static {
2021-02-22 13:13:13 +01:00
name : "mynativelib" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2019-12-11 19:42:17 +01:00
device_supported : false ,
host_supported : true ,
2020-03-11 19:42:08 +01:00
stl : "none" ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "include/myinclude" ] ,
2020-07-11 05:52:24 +02:00
target : {
host : {
enabled : false ,
} ,
linux_glibc_x86_64 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2019-12-11 19:42:17 +01:00
srcs : [ "x86_64/lib/mynativelib.a" ] ,
Fix the snapshot handling of generated headers
Previously, the snapshot handling code did not preserve the directory
structure of generated include directories and instead just copied the
headers into the same module specific directory and added that single
directory to the export_include_dirs (or similar) property.
That had a couple of issues:
* The include directory was repeated in the ..._include_dirs property.
* It did not work when the include directories overlapped.
In the latter case it had a couple of issues:
* Code which compiled fine against the source would not compile against
the prebuilt.
* Header files were duplicated in the output.
e.g. assume the following generated header file structure:
foo/
foo.h
bar/
bar.h
baz/
baz.h
When the sdk snapshot was passed include directories of "foo", "bar" and
headers of "foo/foo.h", "bar/bar.h", "bar/baz/baz.h" it would generate a
snapshot with the structure:
include_gen/
foo.h
bar.h
baz/
baz.h
And:
export_include_dirs: ["include_gen", "include_gen"]
However, when the include directories overlapped and include directories
of "foo", "bar" and "bar/baz" were passed in the directory structure
would be the same and the export_include_dirs would contain 3 usages of
"include_gen".
That meant that source code which used the following would build
against the source (because it would find "baz.h" in the "bar/baz"
include directory) but would fail when built against the prebuilts
because the "include_gen" directory did not contain "baz.h":
#include "baz.h"
This change preserves the input directory structure for generated files
in a similar way to how it does it for source files. So, the snapshot
structure looks something like this:
include_gen/
foo/
foo.h
bar/
bar.h
baz/
baz.h
And:
export_include_dirs: [
"include_gen/foo",
"include_gen/bar",
"include_gen/bar/baz",
],
Bug: 180427921
Test: m nothing
Change-Id: Id69eef8cf5eecd033841d3b7cd0c044a697ce404
2021-02-22 12:35:24 +01:00
export_include_dirs : [ "x86_64/include_gen/mynativelib/linux_glibc_x86_64_static/gen/aidl" ] ,
2019-12-11 19:42:17 +01:00
} ,
2020-07-11 05:52:24 +02:00
linux_glibc_x86 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2019-12-11 19:42:17 +01:00
srcs : [ "x86/lib/mynativelib.a" ] ,
Fix the snapshot handling of generated headers
Previously, the snapshot handling code did not preserve the directory
structure of generated include directories and instead just copied the
headers into the same module specific directory and added that single
directory to the export_include_dirs (or similar) property.
That had a couple of issues:
* The include directory was repeated in the ..._include_dirs property.
* It did not work when the include directories overlapped.
In the latter case it had a couple of issues:
* Code which compiled fine against the source would not compile against
the prebuilt.
* Header files were duplicated in the output.
e.g. assume the following generated header file structure:
foo/
foo.h
bar/
bar.h
baz/
baz.h
When the sdk snapshot was passed include directories of "foo", "bar" and
headers of "foo/foo.h", "bar/bar.h", "bar/baz/baz.h" it would generate a
snapshot with the structure:
include_gen/
foo.h
bar.h
baz/
baz.h
And:
export_include_dirs: ["include_gen", "include_gen"]
However, when the include directories overlapped and include directories
of "foo", "bar" and "bar/baz" were passed in the directory structure
would be the same and the export_include_dirs would contain 3 usages of
"include_gen".
That meant that source code which used the following would build
against the source (because it would find "baz.h" in the "bar/baz"
include directory) but would fail when built against the prebuilts
because the "include_gen" directory did not contain "baz.h":
#include "baz.h"
This change preserves the input directory structure for generated files
in a similar way to how it does it for source files. So, the snapshot
structure looks something like this:
include_gen/
foo/
foo.h
bar/
bar.h
baz/
baz.h
And:
export_include_dirs: [
"include_gen/foo",
"include_gen/bar",
"include_gen/bar/baz",
],
Bug: 180427921
Test: m nothing
Change-Id: Id69eef8cf5eecd033841d3b7cd0c044a697ce404
2021-02-22 12:35:24 +01:00
export_include_dirs : [ "x86/include_gen/mynativelib/linux_glibc_x86_static/gen/aidl" ] ,
2019-12-11 19:42:17 +01:00
} ,
} ,
}
` ) ,
checkAllCopyRules ( `
2021-02-22 12:50:04 +01:00
myinclude / Test . h - > include / myinclude / Test . h
2019-12-11 19:42:17 +01:00
. intermediates / mynativelib / linux_glibc_x86_64_static / mynativelib . a - > x86_64 / lib / mynativelib . a
Fix the snapshot handling of generated headers
Previously, the snapshot handling code did not preserve the directory
structure of generated include directories and instead just copied the
headers into the same module specific directory and added that single
directory to the export_include_dirs (or similar) property.
That had a couple of issues:
* The include directory was repeated in the ..._include_dirs property.
* It did not work when the include directories overlapped.
In the latter case it had a couple of issues:
* Code which compiled fine against the source would not compile against
the prebuilt.
* Header files were duplicated in the output.
e.g. assume the following generated header file structure:
foo/
foo.h
bar/
bar.h
baz/
baz.h
When the sdk snapshot was passed include directories of "foo", "bar" and
headers of "foo/foo.h", "bar/bar.h", "bar/baz/baz.h" it would generate a
snapshot with the structure:
include_gen/
foo.h
bar.h
baz/
baz.h
And:
export_include_dirs: ["include_gen", "include_gen"]
However, when the include directories overlapped and include directories
of "foo", "bar" and "bar/baz" were passed in the directory structure
would be the same and the export_include_dirs would contain 3 usages of
"include_gen".
That meant that source code which used the following would build
against the source (because it would find "baz.h" in the "bar/baz"
include directory) but would fail when built against the prebuilts
because the "include_gen" directory did not contain "baz.h":
#include "baz.h"
This change preserves the input directory structure for generated files
in a similar way to how it does it for source files. So, the snapshot
structure looks something like this:
include_gen/
foo/
foo.h
bar/
bar.h
baz/
baz.h
And:
export_include_dirs: [
"include_gen/foo",
"include_gen/bar",
"include_gen/bar/baz",
],
Bug: 180427921
Test: m nothing
Change-Id: Id69eef8cf5eecd033841d3b7cd0c044a697ce404
2021-02-22 12:35:24 +01:00
. intermediates / mynativelib / linux_glibc_x86_64_static / gen / aidl / aidl / foo / bar / Test . h - > x86_64 / include_gen / mynativelib / linux_glibc_x86_64_static / gen / aidl / aidl / foo / bar / Test . h
. intermediates / mynativelib / linux_glibc_x86_64_static / gen / aidl / aidl / foo / bar / BnTest . h - > x86_64 / include_gen / mynativelib / linux_glibc_x86_64_static / gen / aidl / aidl / foo / bar / BnTest . h
. intermediates / mynativelib / linux_glibc_x86_64_static / gen / aidl / aidl / foo / bar / BpTest . h - > x86_64 / include_gen / mynativelib / linux_glibc_x86_64_static / gen / aidl / aidl / foo / bar / BpTest . h
2019-12-11 19:42:17 +01:00
. intermediates / mynativelib / linux_glibc_x86_static / mynativelib . a - > x86 / lib / mynativelib . a
Fix the snapshot handling of generated headers
Previously, the snapshot handling code did not preserve the directory
structure of generated include directories and instead just copied the
headers into the same module specific directory and added that single
directory to the export_include_dirs (or similar) property.
That had a couple of issues:
* The include directory was repeated in the ..._include_dirs property.
* It did not work when the include directories overlapped.
In the latter case it had a couple of issues:
* Code which compiled fine against the source would not compile against
the prebuilt.
* Header files were duplicated in the output.
e.g. assume the following generated header file structure:
foo/
foo.h
bar/
bar.h
baz/
baz.h
When the sdk snapshot was passed include directories of "foo", "bar" and
headers of "foo/foo.h", "bar/bar.h", "bar/baz/baz.h" it would generate a
snapshot with the structure:
include_gen/
foo.h
bar.h
baz/
baz.h
And:
export_include_dirs: ["include_gen", "include_gen"]
However, when the include directories overlapped and include directories
of "foo", "bar" and "bar/baz" were passed in the directory structure
would be the same and the export_include_dirs would contain 3 usages of
"include_gen".
That meant that source code which used the following would build
against the source (because it would find "baz.h" in the "bar/baz"
include directory) but would fail when built against the prebuilts
because the "include_gen" directory did not contain "baz.h":
#include "baz.h"
This change preserves the input directory structure for generated files
in a similar way to how it does it for source files. So, the snapshot
structure looks something like this:
include_gen/
foo/
foo.h
bar/
bar.h
baz/
baz.h
And:
export_include_dirs: [
"include_gen/foo",
"include_gen/bar",
"include_gen/bar/baz",
],
Bug: 180427921
Test: m nothing
Change-Id: Id69eef8cf5eecd033841d3b7cd0c044a697ce404
2021-02-22 12:35:24 +01:00
. intermediates / mynativelib / linux_glibc_x86_static / gen / aidl / aidl / foo / bar / Test . h - > x86 / include_gen / mynativelib / linux_glibc_x86_static / gen / aidl / aidl / foo / bar / Test . h
. intermediates / mynativelib / linux_glibc_x86_static / gen / aidl / aidl / foo / bar / BnTest . h - > x86 / include_gen / mynativelib / linux_glibc_x86_static / gen / aidl / aidl / foo / bar / BnTest . h
. intermediates / mynativelib / linux_glibc_x86_static / gen / aidl / aidl / foo / bar / BpTest . h - > x86 / include_gen / mynativelib / linux_glibc_x86_static / gen / aidl / aidl / foo / bar / BpTest . h
2019-12-11 19:42:17 +01:00
` ) ,
)
}
2020-02-19 17:19:27 +01:00
2020-03-12 11:24:35 +01:00
func TestSnapshotWithCcLibrary ( t * testing . T ) {
result := testSdkWithCc ( t , `
module_exports {
name : "myexports" ,
native_libs : [ "mynativelib" ] ,
}
cc_library {
name : "mynativelib" ,
srcs : [
"Test.cpp" ,
] ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "myinclude" ] ,
2020-03-12 11:24:35 +01:00
stl : "none" ,
2020-09-07 17:39:22 +02:00
recovery_available : true ,
2020-08-13 20:45:31 +02:00
vendor_available : true ,
2020-03-12 11:24:35 +01:00
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "myexports" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2020-03-12 11:24:35 +01:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library {
2021-02-22 13:13:13 +01:00
name : "mynativelib" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-08-13 20:45:31 +02:00
vendor_available : true ,
2020-03-12 11:24:35 +01:00
stl : "none" ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "include/myinclude" ] ,
2020-03-12 11:24:35 +01:00
arch : {
arm64 : {
static : {
srcs : [ "arm64/lib/mynativelib.a" ] ,
} ,
shared : {
srcs : [ "arm64/lib/mynativelib.so" ] ,
} ,
} ,
arm : {
static : {
srcs : [ "arm/lib/mynativelib.a" ] ,
} ,
shared : {
srcs : [ "arm/lib/mynativelib.so" ] ,
} ,
} ,
} ,
}
` ) ,
checkAllCopyRules ( `
2021-02-22 12:50:04 +01:00
myinclude / Test . h - > include / myinclude / Test . h
2020-03-12 11:24:35 +01:00
. intermediates / mynativelib / android_arm64_armv8 - a_static / mynativelib . a - > arm64 / lib / mynativelib . a
. intermediates / mynativelib / android_arm64_armv8 - a_shared / mynativelib . so - > arm64 / lib / mynativelib . so
. intermediates / mynativelib / android_arm_armv7 - a - neon_static / mynativelib . a - > arm / lib / mynativelib . a
2021-03-21 13:56:33 +01:00
. intermediates / mynativelib / android_arm_armv7 - a - neon_shared / mynativelib . so - > arm / lib / mynativelib . so
` ) ,
// TODO(b/183315522): Remove this and fix the issue.
snapshotTestErrorHandler ( checkSnapshotPreferredWithSource , android . FixtureExpectsAtLeastOneErrorMatchingPattern ( ` \Qunrecognized property "arch.arm.shared.export_include_dirs"\E ` ) ) ,
2020-03-12 11:24:35 +01:00
)
}
2022-05-13 02:40:00 +02:00
func TestSnapshotSameLibraryWithNativeLibsAndNativeSharedLib ( t * testing . T ) {
result := testSdkWithCc ( t , `
module_exports {
host_supported : true ,
name : "myexports" ,
target : {
android : {
native_shared_libs : [
"mynativelib" ,
] ,
} ,
not_windows : {
native_libs : [
"mynativelib" ,
] ,
} ,
} ,
}
cc_library {
name : "mynativelib" ,
host_supported : true ,
srcs : [
"Test.cpp" ,
] ,
stl : "none" ,
recovery_available : true ,
vendor_available : true ,
}
` )
CheckSnapshot ( t , result , "myexports" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2022-05-13 02:40:00 +02:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library {
name : "mynativelib" ,
prefer : false ,
visibility : [ "//visibility:public" ] ,
apex_available : [ "//apex_available:platform" ] ,
host_supported : true ,
vendor_available : true ,
stl : "none" ,
compile_multilib : "both" ,
target : {
host : {
enabled : false ,
} ,
android_arm64 : {
shared : {
srcs : [ "android/arm64/lib/mynativelib.so" ] ,
} ,
static : {
enabled : false ,
} ,
} ,
android_arm : {
shared : {
srcs : [ "android/arm/lib/mynativelib.so" ] ,
} ,
static : {
enabled : false ,
} ,
} ,
linux_glibc_x86_64 : {
enabled : true ,
static : {
srcs : [ "linux_glibc/x86_64/lib/mynativelib.a" ] ,
} ,
shared : {
srcs : [ "linux_glibc/x86_64/lib/mynativelib.so" ] ,
} ,
} ,
linux_glibc_x86 : {
enabled : true ,
static : {
srcs : [ "linux_glibc/x86/lib/mynativelib.a" ] ,
} ,
shared : {
srcs : [ "linux_glibc/x86/lib/mynativelib.so" ] ,
} ,
} ,
} ,
}
` ) ,
checkAllCopyRules ( `
. intermediates / mynativelib / android_arm64_armv8 - a_shared / mynativelib . so - > android / arm64 / lib / mynativelib . so
. intermediates / mynativelib / android_arm_armv7 - a - neon_shared / mynativelib . so - > android / arm / lib / mynativelib . so
. intermediates / mynativelib / linux_glibc_x86_64_static / mynativelib . a - > linux_glibc / x86_64 / lib / mynativelib . a
. intermediates / mynativelib / linux_glibc_x86_64_shared / mynativelib . so - > linux_glibc / x86_64 / lib / mynativelib . so
. intermediates / mynativelib / linux_glibc_x86_static / mynativelib . a - > linux_glibc / x86 / lib / mynativelib . a
. intermediates / mynativelib / linux_glibc_x86_shared / mynativelib . so - > linux_glibc / x86 / lib / mynativelib . so
` ) ,
)
}
func TestSnapshotSameLibraryWithAndroidNativeLibsAndHostNativeSharedLib ( t * testing . T ) {
result := testSdkWithCc ( t , `
module_exports {
host_supported : true ,
name : "myexports" ,
target : {
android : {
native_libs : [
"mynativelib" ,
] ,
} ,
not_windows : {
native_shared_libs : [
"mynativelib" ,
] ,
} ,
} ,
}
cc_library {
name : "mynativelib" ,
host_supported : true ,
srcs : [
"Test.cpp" ,
] ,
stl : "none" ,
recovery_available : true ,
vendor_available : true ,
}
` )
CheckSnapshot ( t , result , "myexports" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2022-05-13 02:40:00 +02:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library {
name : "mynativelib" ,
prefer : false ,
visibility : [ "//visibility:public" ] ,
apex_available : [ "//apex_available:platform" ] ,
host_supported : true ,
vendor_available : true ,
stl : "none" ,
compile_multilib : "both" ,
target : {
host : {
enabled : false ,
} ,
android_arm64 : {
static : {
srcs : [ "android/arm64/lib/mynativelib.a" ] ,
} ,
shared : {
srcs : [ "android/arm64/lib/mynativelib.so" ] ,
} ,
} ,
android_arm : {
static : {
srcs : [ "android/arm/lib/mynativelib.a" ] ,
} ,
shared : {
srcs : [ "android/arm/lib/mynativelib.so" ] ,
} ,
} ,
linux_glibc_x86_64 : {
enabled : true ,
shared : {
srcs : [ "linux_glibc/x86_64/lib/mynativelib.so" ] ,
} ,
static : {
enabled : false ,
} ,
} ,
linux_glibc_x86 : {
enabled : true ,
shared : {
srcs : [ "linux_glibc/x86/lib/mynativelib.so" ] ,
} ,
static : {
enabled : false ,
} ,
} ,
} ,
}
` ) ,
checkAllCopyRules ( `
. intermediates / mynativelib / android_arm64_armv8 - a_static / mynativelib . a - > android / arm64 / lib / mynativelib . a
. intermediates / mynativelib / android_arm64_armv8 - a_shared / mynativelib . so - > android / arm64 / lib / mynativelib . so
. intermediates / mynativelib / android_arm_armv7 - a - neon_static / mynativelib . a - > android / arm / lib / mynativelib . a
. intermediates / mynativelib / android_arm_armv7 - a - neon_shared / mynativelib . so - > android / arm / lib / mynativelib . so
. intermediates / mynativelib / linux_glibc_x86_64_shared / mynativelib . so - > linux_glibc / x86_64 / lib / mynativelib . so
. intermediates / mynativelib / linux_glibc_x86_shared / mynativelib . so - > linux_glibc / x86 / lib / mynativelib . so
` ) ,
)
}
func TestSnapshotSameLibraryWithNativeStaticLibsAndNativeSharedLib ( t * testing . T ) {
testSdkError ( t , "Incompatible member types" , `
module_exports {
host_supported : true ,
name : "myexports" ,
target : {
android : {
native_shared_libs : [
"mynativelib" ,
] ,
} ,
not_windows : {
native_static_libs : [
"mynativelib" ,
] ,
} ,
} ,
}
cc_library {
name : "mynativelib" ,
host_supported : true ,
srcs : [
] ,
stl : "none" ,
recovery_available : true ,
vendor_available : true ,
}
` )
}
2020-02-19 17:19:27 +01:00
func TestHostSnapshotWithMultiLib64 ( t * testing . T ) {
result := testSdkWithCc ( t , `
module_exports {
name : "myexports" ,
device_supported : false ,
host_supported : true ,
target : {
host : {
compile_multilib : "64" ,
} ,
} ,
native_static_libs : [ "mynativelib" ] ,
}
cc_library_static {
name : "mynativelib" ,
device_supported : false ,
host_supported : true ,
srcs : [
"Test.cpp" ,
"aidl/foo/bar/Test.aidl" ,
] ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "myinclude" ] ,
2020-02-19 17:19:27 +01:00
aidl : {
export_aidl_headers : true ,
} ,
stl : "none" ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "myexports" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2020-02-19 17:19:27 +01:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_static {
2021-02-22 13:13:13 +01:00
name : "mynativelib" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-02-19 17:19:27 +01:00
device_supported : false ,
host_supported : true ,
2020-03-11 19:42:08 +01:00
stl : "none" ,
2020-07-10 01:14:03 +02:00
compile_multilib : "64" ,
2021-02-17 13:17:40 +01:00
export_include_dirs : [
"include/myinclude" ,
"include_gen/mynativelib/linux_glibc_x86_64_static/gen/aidl" ,
] ,
2020-07-11 05:52:24 +02:00
target : {
host : {
enabled : false ,
} ,
linux_glibc_x86_64 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2020-02-19 17:19:27 +01:00
srcs : [ "x86_64/lib/mynativelib.a" ] ,
} ,
} ,
}
2021-02-22 13:13:13 +01:00
` ) ,
2020-02-19 17:19:27 +01:00
checkAllCopyRules ( `
2021-02-22 12:50:04 +01:00
myinclude / Test . h - > include / myinclude / Test . h
2021-02-17 13:17:40 +01:00
. intermediates / mynativelib / linux_glibc_x86_64_static / gen / aidl / aidl / foo / bar / Test . h - > include_gen / mynativelib / linux_glibc_x86_64_static / gen / aidl / aidl / foo / bar / Test . h
. intermediates / mynativelib / linux_glibc_x86_64_static / gen / aidl / aidl / foo / bar / BnTest . h - > include_gen / mynativelib / linux_glibc_x86_64_static / gen / aidl / aidl / foo / bar / BnTest . h
. intermediates / mynativelib / linux_glibc_x86_64_static / gen / aidl / aidl / foo / bar / BpTest . h - > include_gen / mynativelib / linux_glibc_x86_64_static / gen / aidl / aidl / foo / bar / BpTest . h
2020-02-19 17:19:27 +01:00
. intermediates / mynativelib / linux_glibc_x86_64_static / mynativelib . a - > x86_64 / lib / mynativelib . a
` ) ,
)
}
2020-02-21 17:29:57 +01:00
func TestSnapshotWithCcHeadersLibrary ( t * testing . T ) {
result := testSdkWithCc ( t , `
sdk {
name : "mysdk" ,
native_header_libs : [ "mynativeheaders" ] ,
}
cc_library_headers {
name : "mynativeheaders" ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "myinclude" ] ,
2020-02-21 17:29:57 +01:00
stl : "none" ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "mysdk" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2020-02-21 17:29:57 +01:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_headers {
name : "mynativeheaders" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-02-21 17:29:57 +01:00
stl : "none" ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "include/myinclude" ] ,
2020-02-21 17:29:57 +01:00
}
` ) ,
checkAllCopyRules ( `
2021-02-22 12:50:04 +01:00
myinclude / Test . h - > include / myinclude / Test . h
2020-02-21 17:29:57 +01:00
` ) ,
)
}
2019-11-19 20:44:10 +01:00
func TestSnapshotWithCcHeadersLibraryAndNativeBridgeSupport ( t * testing . T ) {
result := android . GroupFixturePreparers (
cc . PrepareForTestWithCcDefaultModules ,
PrepareForTestWithSdkBuildComponents ,
ccTestFs . AddToFixture ( ) ,
prepareForTestWithNativeBridgeTarget ,
) . RunTestWithBp ( t , `
sdk {
name : "mysdk" ,
native_header_libs : [ "mynativeheaders" ] ,
traits : {
native_bridge_support : [ "mynativeheaders" ] ,
} ,
}
cc_library_headers {
name : "mynativeheaders" ,
export_include_dirs : [ "myinclude" ] ,
stl : "none" ,
system_shared_libs : [ ] ,
native_bridge_supported : true ,
}
` )
CheckSnapshot ( t , result , "mysdk" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2019-11-19 20:44:10 +01:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_headers {
name : "mynativeheaders" ,
prefer : false ,
visibility : [ "//visibility:public" ] ,
apex_available : [ "//apex_available:platform" ] ,
native_bridge_supported : true ,
stl : "none" ,
compile_multilib : "both" ,
system_shared_libs : [ ] ,
export_include_dirs : [ "include/myinclude" ] ,
}
` ) ,
checkAllCopyRules ( `
myinclude / Test . h - > include / myinclude / Test . h
` ) ,
)
}
// TestSnapshotWithCcHeadersLibrary_DetectsNativeBridgeSpecificProperties verifies that when a
// module that has different output files for a native bridge target requests the native bridge
// variants are copied into the sdk snapshot that it reports an error.
func TestSnapshotWithCcHeadersLibrary_DetectsNativeBridgeSpecificProperties ( t * testing . T ) {
android . GroupFixturePreparers (
cc . PrepareForTestWithCcDefaultModules ,
PrepareForTestWithSdkBuildComponents ,
ccTestFs . AddToFixture ( ) ,
prepareForTestWithNativeBridgeTarget ,
) . ExtendWithErrorHandler ( android . FixtureExpectsAtLeastOneErrorMatchingPattern (
` \ QArchitecture variant "arm64_native_bridge" of sdk member "mynativeheaders" has properties distinct from other variants ; this is not yet supported . The properties are :
export_include_dirs : [
"arm64_native_bridge/include/myinclude_nativebridge" ,
"arm64_native_bridge/include/myinclude" ,
] , \ E ` ) ) .
RunTestWithBp ( t , `
sdk {
name : "mysdk" ,
native_header_libs : [ "mynativeheaders" ] ,
traits : {
native_bridge_support : [ "mynativeheaders" ] ,
} ,
}
cc_library_headers {
name : "mynativeheaders" ,
export_include_dirs : [ "myinclude" ] ,
stl : "none" ,
system_shared_libs : [ ] ,
native_bridge_supported : true ,
target : {
native_bridge : {
export_include_dirs : [ "myinclude_nativebridge" ] ,
} ,
} ,
}
` )
}
2021-09-06 11:28:34 +02:00
func TestSnapshotWithCcHeadersLibraryAndImageVariants ( t * testing . T ) {
testImageVariant := func ( t * testing . T , property , trait string ) {
result := android . GroupFixturePreparers (
cc . PrepareForTestWithCcDefaultModules ,
PrepareForTestWithSdkBuildComponents ,
ccTestFs . AddToFixture ( ) ,
) . RunTestWithBp ( t , fmt . Sprintf ( `
sdk {
name : "mysdk" ,
native_header_libs : [ "mynativeheaders" ] ,
traits : {
% s : [ "mynativeheaders" ] ,
} ,
}
cc_library_headers {
name : "mynativeheaders" ,
export_include_dirs : [ "myinclude" ] ,
stl : "none" ,
system_shared_libs : [ ] ,
% s : true ,
}
` , trait , property ) )
CheckSnapshot ( t , result , "mysdk" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( fmt . Sprintf ( `
2021-09-06 11:28:34 +02:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_headers {
name : "mynativeheaders" ,
prefer : false ,
visibility : [ "//visibility:public" ] ,
apex_available : [ "//apex_available:platform" ] ,
% s : true ,
stl : "none" ,
compile_multilib : "both" ,
system_shared_libs : [ ] ,
export_include_dirs : [ "include/myinclude" ] ,
}
` , property ) ) ,
checkAllCopyRules ( `
myinclude / Test . h - > include / myinclude / Test . h
` ) ,
)
}
2021-09-15 18:25:10 +02:00
t . Run ( "ramdisk" , func ( t * testing . T ) {
testImageVariant ( t , "ramdisk_available" , "ramdisk_image_required" )
} )
2021-09-06 11:28:34 +02:00
t . Run ( "recovery" , func ( t * testing . T ) {
testImageVariant ( t , "recovery_available" , "recovery_image_required" )
} )
}
2020-02-21 17:29:57 +01:00
func TestHostSnapshotWithCcHeadersLibrary ( t * testing . T ) {
result := testSdkWithCc ( t , `
sdk {
name : "mysdk" ,
device_supported : false ,
host_supported : true ,
native_header_libs : [ "mynativeheaders" ] ,
}
cc_library_headers {
name : "mynativeheaders" ,
device_supported : false ,
host_supported : true ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "myinclude" ] ,
2020-02-21 17:29:57 +01:00
stl : "none" ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "mysdk" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2020-02-21 17:29:57 +01:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_headers {
2021-02-22 13:13:13 +01:00
name : "mynativeheaders" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-02-21 17:29:57 +01:00
device_supported : false ,
host_supported : true ,
stl : "none" ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "include/myinclude" ] ,
2020-07-11 05:52:24 +02:00
target : {
host : {
enabled : false ,
} ,
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
linux_glibc_x86_64 : {
enabled : true ,
} ,
linux_glibc_x86 : {
2020-07-11 05:52:24 +02:00
enabled : true ,
} ,
} ,
2020-02-21 17:29:57 +01:00
}
` ) ,
checkAllCopyRules ( `
2021-02-22 12:50:04 +01:00
myinclude / Test . h - > include / myinclude / Test . h
2020-02-21 17:29:57 +01:00
` ) ,
)
}
2020-03-02 11:16:35 +01:00
func TestDeviceAndHostSnapshotWithCcHeadersLibrary ( t * testing . T ) {
result := testSdkWithCc ( t , `
sdk {
name : "mysdk" ,
host_supported : true ,
native_header_libs : [ "mynativeheaders" ] ,
}
cc_library_headers {
name : "mynativeheaders" ,
host_supported : true ,
stl : "none" ,
2021-02-22 12:50:04 +01:00
export_system_include_dirs : [ "myinclude" ] ,
2020-03-02 11:16:35 +01:00
target : {
android : {
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "myinclude-android" ] ,
2020-03-02 11:16:35 +01:00
} ,
host : {
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "myinclude-host" ] ,
2020-03-02 11:16:35 +01:00
} ,
} ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "mysdk" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2020-03-02 11:16:35 +01:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_headers {
2021-02-22 13:13:13 +01:00
name : "mynativeheaders" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-03-02 11:16:35 +01:00
host_supported : true ,
2020-03-11 19:42:08 +01:00
stl : "none" ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2021-02-22 12:50:04 +01:00
export_system_include_dirs : [ "common_os/include/myinclude" ] ,
2020-03-02 11:16:35 +01:00
target : {
2020-07-11 05:52:24 +02:00
host : {
enabled : false ,
} ,
2020-03-02 11:16:35 +01:00
android : {
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "android/include/myinclude-android" ] ,
2020-03-02 11:16:35 +01:00
} ,
linux_glibc : {
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "linux_glibc/include/myinclude-host" ] ,
2020-03-02 11:16:35 +01:00
} ,
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
linux_glibc_x86_64 : {
enabled : true ,
} ,
linux_glibc_x86 : {
enabled : true ,
} ,
2020-03-02 11:16:35 +01:00
} ,
}
` ) ,
checkAllCopyRules ( `
2021-02-22 12:50:04 +01:00
myinclude / Test . h - > common_os / include / myinclude / Test . h
myinclude - android / AndroidTest . h - > android / include / myinclude - android / AndroidTest . h
myinclude - host / HostTest . h - > linux_glibc / include / myinclude - host / HostTest . h
2020-03-02 11:16:35 +01:00
` ) ,
)
}
2020-03-24 02:19:52 +01:00
func TestSystemSharedLibPropagation ( t * testing . T ) {
result := testSdkWithCc ( t , `
sdk {
name : "mysdk" ,
2021-07-22 20:39:44 +02:00
native_shared_libs : [ "sslnil" , "sslempty" , "sslnonempty" ] ,
2020-03-24 02:19:52 +01:00
}
cc_library {
name : "sslnil" ,
host_supported : true ,
}
cc_library {
name : "sslempty" ,
system_shared_libs : [ ] ,
}
cc_library {
name : "sslnonempty" ,
system_shared_libs : [ "sslnil" ] ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "mysdk" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2020-03-24 02:19:52 +01:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_shared {
name : "sslnil" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2020-03-24 02:19:52 +01:00
arch : {
arm64 : {
srcs : [ "arm64/lib/sslnil.so" ] ,
} ,
arm : {
srcs : [ "arm/lib/sslnil.so" ] ,
} ,
} ,
}
cc_prebuilt_library_shared {
name : "sslempty" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2020-03-24 02:19:52 +01:00
system_shared_libs : [ ] ,
arch : {
arm64 : {
srcs : [ "arm64/lib/sslempty.so" ] ,
} ,
arm : {
srcs : [ "arm/lib/sslempty.so" ] ,
} ,
} ,
}
cc_prebuilt_library_shared {
name : "sslnonempty" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2020-03-24 02:19:52 +01:00
system_shared_libs : [ "sslnil" ] ,
arch : {
arm64 : {
srcs : [ "arm64/lib/sslnonempty.so" ] ,
} ,
arm : {
srcs : [ "arm/lib/sslnonempty.so" ] ,
} ,
} ,
}
2021-07-22 20:39:44 +02:00
` ) )
2020-03-24 02:19:52 +01:00
result = testSdkWithCc ( t , `
sdk {
name : "mysdk" ,
host_supported : true ,
2021-07-22 20:39:44 +02:00
native_shared_libs : [ "sslvariants" ] ,
2020-03-24 02:19:52 +01:00
}
cc_library {
name : "sslvariants" ,
host_supported : true ,
target : {
android : {
system_shared_libs : [ ] ,
} ,
} ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "mysdk" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2020-03-24 02:19:52 +01:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_shared {
2021-02-22 13:13:13 +01:00
name : "sslvariants" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-03-24 02:19:52 +01:00
host_supported : true ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2020-03-24 02:19:52 +01:00
target : {
2020-07-11 05:52:24 +02:00
host : {
enabled : false ,
} ,
2020-03-24 02:19:52 +01:00
android : {
system_shared_libs : [ ] ,
} ,
android_arm64 : {
srcs : [ "android/arm64/lib/sslvariants.so" ] ,
} ,
android_arm : {
srcs : [ "android/arm/lib/sslvariants.so" ] ,
} ,
linux_glibc_x86_64 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2020-03-24 02:19:52 +01:00
srcs : [ "linux_glibc/x86_64/lib/sslvariants.so" ] ,
} ,
linux_glibc_x86 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2020-03-24 02:19:52 +01:00
srcs : [ "linux_glibc/x86/lib/sslvariants.so" ] ,
} ,
} ,
}
2021-02-22 13:13:13 +01:00
` ) ,
2022-05-24 22:10:05 +02:00
)
2020-03-24 02:19:52 +01:00
}
2020-04-01 21:38:01 +02:00
func TestStubsLibrary ( t * testing . T ) {
result := testSdkWithCc ( t , `
sdk {
name : "mysdk" ,
native_shared_libs : [ "stubslib" ] ,
}
2020-04-21 21:45:35 +02:00
cc_library {
name : "internaldep" ,
}
2020-04-01 21:38:01 +02:00
cc_library {
name : "stubslib" ,
2020-04-21 21:45:35 +02:00
shared_libs : [ "internaldep" ] ,
2020-04-01 21:38:01 +02:00
stubs : {
symbol_file : "some/where/stubslib.map.txt" ,
versions : [ "1" , "2" , "3" ] ,
} ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "mysdk" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2020-04-01 21:38:01 +02:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_shared {
name : "stubslib" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2020-04-01 21:38:01 +02:00
stubs : {
2020-09-24 17:53:04 +02:00
versions : [
"1" ,
"2" ,
"3" ,
"current" is implicitly added to stubs.versions
So far, when a library `libfoo` has `stubs.versions: ["10", "11"]`, then
`shared_libs: ["libfoo"]` is linked to the version 11 of the stub.
This requires the author of `libfoo` to manually update the property
whenever a new version is introduced. Otherwise, clients are not able
to use the newly added APIs because the latest stub is for an old
version.
This change eliminates the need for manual updating. "current" version
is always implicitly added to `stubs.versions`. It is added even when
nothing is set on the property, if `stubs.symbol_file` is set. i.e.
```
cc_library {
name: "libfoo",
stubs: {
symbol_file: "libfoo.map.txt",
// no versions: [...] needed
},
}
cc_library {
name: "a_client",
shared_libs: ["libfoo"],
apex_available: ["myapex"],
min_sdk_version: "29",
}
apex {
name: "myapex",
native_shared_libraries: ["a_client"],
min_sdk_version: "29",
}
```
`a_client` links to the "current" stub of `libfoo` that has all symbols
shown in the map file.
Note that, above doesn't mean that the client has unlimited access to
APIs that are introduced even after the min_sdk_version of the client
(29 in this example). The use of such APIs still has to be guarded with
`__builtin_available` check.
Bug: N/A
Test: m
Change-Id: I70bb1600c18e74d36c6b24c3569d2149f02aaf96
2021-03-17 12:21:35 +01:00
"current" ,
2020-09-24 17:53:04 +02:00
] ,
2020-04-01 21:38:01 +02:00
} ,
arch : {
arm64 : {
srcs : [ "arm64/lib/stubslib.so" ] ,
} ,
arm : {
srcs : [ "arm/lib/stubslib.so" ] ,
} ,
} ,
}
` ) )
}
2020-05-04 16:32:08 +02:00
func TestDeviceAndHostSnapshotWithStubsLibrary ( t * testing . T ) {
result := testSdkWithCc ( t , `
sdk {
name : "mysdk" ,
host_supported : true ,
native_shared_libs : [ "stubslib" ] ,
}
cc_library {
name : "internaldep" ,
host_supported : true ,
}
cc_library {
name : "stubslib" ,
host_supported : true ,
shared_libs : [ "internaldep" ] ,
stubs : {
symbol_file : "some/where/stubslib.map.txt" ,
versions : [ "1" , "2" , "3" ] ,
} ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "mysdk" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2020-05-04 16:32:08 +02:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_shared {
2021-02-22 13:13:13 +01:00
name : "stubslib" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-05-04 16:32:08 +02:00
host_supported : true ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2020-05-04 16:32:08 +02:00
stubs : {
2020-09-24 17:53:04 +02:00
versions : [
"1" ,
"2" ,
"3" ,
"current" is implicitly added to stubs.versions
So far, when a library `libfoo` has `stubs.versions: ["10", "11"]`, then
`shared_libs: ["libfoo"]` is linked to the version 11 of the stub.
This requires the author of `libfoo` to manually update the property
whenever a new version is introduced. Otherwise, clients are not able
to use the newly added APIs because the latest stub is for an old
version.
This change eliminates the need for manual updating. "current" version
is always implicitly added to `stubs.versions`. It is added even when
nothing is set on the property, if `stubs.symbol_file` is set. i.e.
```
cc_library {
name: "libfoo",
stubs: {
symbol_file: "libfoo.map.txt",
// no versions: [...] needed
},
}
cc_library {
name: "a_client",
shared_libs: ["libfoo"],
apex_available: ["myapex"],
min_sdk_version: "29",
}
apex {
name: "myapex",
native_shared_libraries: ["a_client"],
min_sdk_version: "29",
}
```
`a_client` links to the "current" stub of `libfoo` that has all symbols
shown in the map file.
Note that, above doesn't mean that the client has unlimited access to
APIs that are introduced even after the min_sdk_version of the client
(29 in this example). The use of such APIs still has to be guarded with
`__builtin_available` check.
Bug: N/A
Test: m
Change-Id: I70bb1600c18e74d36c6b24c3569d2149f02aaf96
2021-03-17 12:21:35 +01:00
"current" ,
2020-09-24 17:53:04 +02:00
] ,
2020-05-04 16:32:08 +02:00
} ,
target : {
2020-07-11 05:52:24 +02:00
host : {
enabled : false ,
} ,
2020-05-04 16:32:08 +02:00
android_arm64 : {
srcs : [ "android/arm64/lib/stubslib.so" ] ,
} ,
android_arm : {
srcs : [ "android/arm/lib/stubslib.so" ] ,
} ,
linux_glibc_x86_64 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2020-05-04 16:32:08 +02:00
srcs : [ "linux_glibc/x86_64/lib/stubslib.so" ] ,
} ,
linux_glibc_x86 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2020-05-04 16:32:08 +02:00
srcs : [ "linux_glibc/x86/lib/stubslib.so" ] ,
} ,
} ,
}
2021-02-22 13:13:13 +01:00
` ) ,
2022-05-24 22:10:05 +02:00
)
2020-05-04 16:32:08 +02:00
}
2020-06-17 23:52:25 +02:00
func TestUniqueHostSoname ( t * testing . T ) {
result := testSdkWithCc ( t , `
sdk {
name : "mysdk" ,
host_supported : true ,
native_shared_libs : [ "mylib" ] ,
}
cc_library {
name : "mylib" ,
host_supported : true ,
unique_host_soname : true ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "mysdk" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2020-06-17 23:52:25 +02:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_shared {
2021-02-22 13:13:13 +01:00
name : "mylib" ,
prefer : false ,
2020-09-29 17:00:55 +02:00
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-06-17 23:52:25 +02:00
host_supported : true ,
unique_host_soname : true ,
2020-07-10 01:14:03 +02:00
compile_multilib : "both" ,
2020-06-17 23:52:25 +02:00
target : {
2020-07-11 05:52:24 +02:00
host : {
enabled : false ,
} ,
2020-06-17 23:52:25 +02:00
android_arm64 : {
srcs : [ "android/arm64/lib/mylib.so" ] ,
} ,
android_arm : {
srcs : [ "android/arm/lib/mylib.so" ] ,
} ,
linux_glibc_x86_64 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2020-06-17 23:52:25 +02:00
srcs : [ "linux_glibc/x86_64/lib/mylib-host.so" ] ,
} ,
linux_glibc_x86 : {
Enable sdk and sdk members in os_arch granularity
This amends Idad7ef138cdbcbd209d390bf6c10ca8365d4619f. With the change,
when there is a member that returns IsHostOsDependent() == true,
the sdk having the member and the member itself are disable for host and
only the os that the member supports is explicitly enabled.
However, that change will cause a problem when we add the support for
the linux_bionic_arm64 target. The target is not enabled when building
sdk snapshots. The only linux_bionic target that is enabled is
'linux_bionic_x86_64'. However, since the granularity is os which is
linux_bionic, the snapshot is generated as follows.
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic: {
enabled: true,
},
linux_bionic_x86_64: {
srcs: ["x86_64/bin/..."],
},
// no srcs for linux_bionic_arm64
},
}
Above is a problem for linux_bionic_arm64 target because the target is
enabled (via linux_bionic.enabled: true), but srcs is not provided.
To fix the problem, the enabling of a target is done in a target
(os_arch) granularity, rather than os granularity. For example, above
now becomes ...
cc_prebuilt_binary {
target: {
host: {
enabled: false,
},
linux_bionic_x86_64: {
enabled: true,
srcs: ["x86_64/bin/..."],
},
},
}
Only the targets that the snapshot actually can provide srcs are enabled
and the rest of the host targets are disabled.
Bug: 159685774
Test: m nothing
Test: build/soong/scripts/build-aml-prebuilts.sh
runtime-module-host-exports
Change-Id: Ibca48c40f6dc4628b5f4bfa4ceb68ebe0973cc81
2020-10-19 15:47:34 +02:00
enabled : true ,
2020-06-17 23:52:25 +02:00
srcs : [ "linux_glibc/x86/lib/mylib-host.so" ] ,
} ,
} ,
}
` ) ,
checkAllCopyRules ( `
. intermediates / mylib / android_arm64_armv8 - a_shared / mylib . so - > android / arm64 / lib / mylib . so
. intermediates / mylib / android_arm_armv7 - a - neon_shared / mylib . so - > android / arm / lib / mylib . so
. intermediates / mylib / linux_glibc_x86_64_shared / mylib - host . so - > linux_glibc / x86_64 / lib / mylib - host . so
. intermediates / mylib / linux_glibc_x86_shared / mylib - host . so - > linux_glibc / x86 / lib / mylib - host . so
` ) ,
)
}
2020-10-29 00:38:33 +01:00
func TestNoSanitizerMembers ( t * testing . T ) {
result := testSdkWithCc ( t , `
sdk {
name : "mysdk" ,
native_shared_libs : [ "mynativelib" ] ,
}
cc_library_shared {
name : "mynativelib" ,
srcs : [ "Test.cpp" ] ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "myinclude" ] ,
2020-10-29 00:38:33 +01:00
arch : {
arm64 : {
export_system_include_dirs : [ "arm64/include" ] ,
sanitize : {
hwaddress : true ,
} ,
} ,
} ,
}
` )
2021-03-12 13:19:43 +01:00
CheckSnapshot ( t , result , "mysdk" , "" ,
2022-05-24 22:10:05 +02:00
checkAndroidBpContents ( `
2020-10-29 00:38:33 +01:00
// This is auto-generated. DO NOT EDIT.
cc_prebuilt_library_shared {
name : "mynativelib" ,
prefer : false ,
visibility : [ "//visibility:public" ] ,
2020-11-03 01:11:09 +01:00
apex_available : [ "//apex_available:platform" ] ,
2020-10-29 00:38:33 +01:00
compile_multilib : "both" ,
2021-02-22 12:50:04 +01:00
export_include_dirs : [ "include/myinclude" ] ,
2020-10-29 00:38:33 +01:00
arch : {
arm64 : {
export_system_include_dirs : [ "arm64/include/arm64/include" ] ,
} ,
arm : {
srcs : [ "arm/lib/mynativelib.so" ] ,
} ,
} ,
}
` ) ,
checkAllCopyRules ( `
2021-02-22 12:50:04 +01:00
myinclude / Test . h - > include / myinclude / Test . h
2020-10-29 00:38:33 +01:00
arm64 / include / Arm64Test . h - > arm64 / include / arm64 / include / Arm64Test . h
2021-03-21 13:56:33 +01:00
. intermediates / mynativelib / android_arm_armv7 - a - neon_shared / mynativelib . so - > arm / lib / mynativelib . so
` ) ,
2020-10-29 00:38:33 +01:00
)
}