extract: Fix cross-partition multi-arch library conflicts
This commit is contained in:
parent
c65b5d1fbb
commit
248f1ec96d
2 changed files with 15 additions and 7 deletions
|
@ -72,7 +72,7 @@ export interface DspModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
export type SoongModuleSpecific = {
|
export type SoongModuleSpecific = {
|
||||||
// Type is mandatory initially, but this is deleted for serialization
|
// This is used initially, but deleted before serialization
|
||||||
_type?: string
|
_type?: string
|
||||||
} & (
|
} & (
|
||||||
SharedLibraryModule |
|
SharedLibraryModule |
|
||||||
|
@ -91,6 +91,9 @@ export type SoongModule = {
|
||||||
system_ext_specific?: boolean
|
system_ext_specific?: boolean
|
||||||
product_specific?: boolean
|
product_specific?: boolean
|
||||||
soc_specific?: boolean
|
soc_specific?: boolean
|
||||||
|
|
||||||
|
// This is used initially, but deleted before serialization
|
||||||
|
_entry?: BlobEntry
|
||||||
} & SoongModuleSpecific
|
} & SoongModuleSpecific
|
||||||
|
|
||||||
function getRelativeInstallPath(entry: BlobEntry, pathParts: Array<string>, installDir: string) {
|
function getRelativeInstallPath(entry: BlobEntry, pathParts: Array<string>, installDir: string) {
|
||||||
|
@ -237,6 +240,7 @@ export function blobToSoongModule(
|
||||||
name: name,
|
name: name,
|
||||||
owner: vendor,
|
owner: vendor,
|
||||||
...moduleSpecific,
|
...moduleSpecific,
|
||||||
|
_entry: entry,
|
||||||
|
|
||||||
// Partition flag
|
// Partition flag
|
||||||
...(entry.partition == 'system_ext' && { system_ext_specific: true }),
|
...(entry.partition == 'system_ext' && { system_ext_specific: true }),
|
||||||
|
@ -247,9 +251,12 @@ export function blobToSoongModule(
|
||||||
}
|
}
|
||||||
|
|
||||||
export function serializeModule(module: SoongModule) {
|
export function serializeModule(module: SoongModule) {
|
||||||
// Type prepended to Soong module props, so remove it from the object
|
// Type is prepended to Soong module props, so remove it from the object
|
||||||
let type = module._type;
|
let type = module._type
|
||||||
delete module._type;
|
delete module._type
|
||||||
|
|
||||||
|
// Delete internal blob entry reference as well
|
||||||
|
delete module._entry
|
||||||
|
|
||||||
// Initial serialization pass. Node.js util.inspect happens to be identical to Soong format.
|
// Initial serialization pass. Node.js util.inspect happens to be identical to Soong format.
|
||||||
let serialized = util.inspect(module, {
|
let serialized = util.inspect(module, {
|
||||||
|
|
|
@ -41,12 +41,13 @@ async function generateBuild(
|
||||||
let baseExt = SPECIAL_FILE_EXTENSIONS.has(ext) ? ext : undefined
|
let baseExt = SPECIAL_FILE_EXTENSIONS.has(ext) ? ext : undefined
|
||||||
let name = path.basename(entry.path, baseExt)
|
let name = path.basename(entry.path, baseExt)
|
||||||
|
|
||||||
// If already exists: skip if it's the other arch variant of a library,
|
// If already exists: skip if it's the other arch variant of a library in
|
||||||
// otherwise rename the module to avoid conflict
|
// the same partition, otherwise rename the module to avoid conflict
|
||||||
if (namedModules.has(name)) {
|
if (namedModules.has(name)) {
|
||||||
let conflictModule = namedModules.get(name)!
|
let conflictModule = namedModules.get(name)!
|
||||||
if (conflictModule._type == 'cc_prebuilt_library_shared' &&
|
if (conflictModule._type == 'cc_prebuilt_library_shared' &&
|
||||||
(conflictModule as SharedLibraryModule).compile_multilib == 'both') {
|
(conflictModule as SharedLibraryModule).compile_multilib == 'both' &&
|
||||||
|
conflictModule._entry?.partition == entry.partition) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue