137 lines
4.6 KiB
Python
Executable file
137 lines
4.6 KiB
Python
Executable file
#!/usr/bin/env python
|
|
#
|
|
# Copyright 2015 Google Inc. All rights reserved.
|
|
#
|
|
# 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.
|
|
|
|
import os
|
|
|
|
|
|
def local_path(path):
|
|
return os.path.normpath(os.path.join(os.path.dirname(__file__), path))
|
|
|
|
|
|
def find(path, names):
|
|
found = []
|
|
for root, _, files in os.walk(path):
|
|
for file_name in sorted(files):
|
|
if file_name in names:
|
|
abspath = os.path.abspath(os.path.join(root, file_name))
|
|
rel_to_root = abspath.replace(os.path.abspath(path), '')
|
|
found.append(rel_to_root[1:]) # strip leading /
|
|
return found
|
|
|
|
|
|
def sdk_version_from_path(path):
|
|
return int(path.split('/')[0].split('-')[1])
|
|
|
|
|
|
def sdk_versions():
|
|
versions = []
|
|
for sdk in os.listdir(local_path('current/platforms')):
|
|
if sdk.startswith('android-'):
|
|
versions.append(sdk_version_from_path(sdk))
|
|
return sorted(versions)
|
|
|
|
|
|
def gen_defaults():
|
|
defaults = []
|
|
for sdk in sdk_versions():
|
|
default = []
|
|
arch_flags = []
|
|
|
|
for arch in ['arm', 'arm64', 'mips', 'mips64', 'x86', 'x86_64']:
|
|
arch_path = local_path(
|
|
'current/platforms/android-{sdk}/arch-{arch}'.format(sdk=sdk, arch=arch))
|
|
if not os.path.exists(arch_path):
|
|
arch_flags.append(
|
|
' {arch}: {{ enabled: false, }},'.format(arch=arch))
|
|
|
|
default.append('cc_defaults {{\n'
|
|
' name: "ndk_{version}_defaults",'.format(version=sdk))
|
|
if len(arch_flags) > 0:
|
|
default.append(' arch: {{\n{arch_flags}\n'
|
|
' }},'.format(arch_flags='\n'.join(arch_flags)))
|
|
default.append('}')
|
|
defaults.append('\n'.join(default))
|
|
return defaults
|
|
|
|
|
|
def get_prebuilts(names):
|
|
prebuilts_path = local_path('current/platforms')
|
|
prebuilts = find(prebuilts_path, names)
|
|
prebuilts = [p for p in prebuilts if 'arch-arm/' in p]
|
|
prebuilts.sort(key=sdk_version_from_path)
|
|
return prebuilts
|
|
|
|
|
|
def gen_lib_prebuilt(prebuilt, name, version):
|
|
platform = os.path.join('current', 'platforms',
|
|
prebuilt.partition('/')[0])
|
|
includes = os.path.join(platform, 'arch-{}/usr/include')
|
|
arch_flags = []
|
|
for arch in ['arm', 'arm64', 'mips', 'mips64', 'x86', 'x86_64']:
|
|
inc = includes.format(arch)
|
|
if os.path.exists(inc):
|
|
arch_flags.append(
|
|
' {arch}: {{\n'
|
|
' export_include_dirs: ["{includes}"],\n'
|
|
' }},'.format(arch=arch, includes=inc))
|
|
return ('ndk_prebuilt_library {{\n'
|
|
' name: "ndk_{name}.{version}",\n'
|
|
' defaults: ["ndk_{version}_defaults"],\n'
|
|
' sdk_version: "{version}",\n'
|
|
' arch: {{\n{arch_flags}\n'
|
|
' }},\n'
|
|
'}}'.format(name=name, version=version,
|
|
arch_flags='\n'.join(arch_flags)))
|
|
|
|
|
|
def gen_crt_prebuilt(_, name, version):
|
|
return ('ndk_prebuilt_object {{\n'
|
|
' name: "ndk_{name}.{version}",\n'
|
|
' defaults: ["ndk_{version}_defaults"],\n'
|
|
' sdk_version: "{version}",\n'
|
|
'}}'.format(name=name, version=version))
|
|
|
|
|
|
def gen_prebuilts(fn, names):
|
|
prebuilts = []
|
|
for prebuilt in get_prebuilts(names):
|
|
name = os.path.splitext(os.path.basename(prebuilt))[0]
|
|
version = sdk_version_from_path(prebuilt)
|
|
prebuilts.append(fn(prebuilt, name, version))
|
|
return prebuilts
|
|
|
|
|
|
def main():
|
|
blueprints = gen_defaults()
|
|
blueprints.extend(gen_prebuilts(gen_lib_prebuilt, ('libc.so', 'libm.so')))
|
|
blueprints.extend(gen_prebuilts(gen_crt_prebuilt, (
|
|
'crtbegin_so.o',
|
|
'crtend_so.o',
|
|
'crtbegin_dynamic.o',
|
|
'crtbegin_static.o',
|
|
'crtend_android.o')))
|
|
|
|
with open(local_path('Android.bp'), 'w') as f:
|
|
f.write('// THIS FILE IS AUTOGENERATED BY gen-blueprints.py\n')
|
|
f.write('// DO NOT EDIT\n')
|
|
f.write('\n')
|
|
f.write('\n\n'.join(blueprints))
|
|
f.write('\n\n')
|
|
f.write('build = ["stl.bp"]\n')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|