cab7d0c118
Change-Id: I31f4f2aff4e35dac066d208a9048ab0f96020fd1 Reviewed-on: https://skia-review.googlesource.com/118681 Reviewed-by: Mike Klein <mtklein@google.com> Commit-Queue: Ben Wagner <benjaminwagner@google.com>
92 lines
3.0 KiB
Python
Executable File
92 lines
3.0 KiB
Python
Executable File
#!/usr/bin/env python
|
|
#
|
|
# Copyright 2018 Google Inc.
|
|
#
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
|
|
"""Create the asset."""
|
|
|
|
|
|
import argparse
|
|
import common
|
|
import os
|
|
import shutil
|
|
import subprocess
|
|
import utils
|
|
|
|
# This is basically all the deps of g++-multilib-mips64el-linux-gnuabi64 that
|
|
# are not already installed on the bots.
|
|
#
|
|
# We could try to also include packages that *are* already installed on the bots
|
|
# as well, but that would be quite a bit, and would probably entail more hacky
|
|
# fixes like below.
|
|
#
|
|
# There is probably a way to generate this list from apt, but it's not as
|
|
# straightforward as it should be.
|
|
PKGS = [
|
|
'binutils-mips64el-linux-gnuabi64',
|
|
'cpp-7-mips64el-linux-gnuabi64',
|
|
'g++-7-mips64el-linux-gnuabi64',
|
|
'gcc-7-cross-base',
|
|
'gcc-7-mips64el-linux-gnuabi64',
|
|
'gcc-7-mips64el-linux-gnuabi64-base',
|
|
'libatomic1-mips64el-cross',
|
|
'libc6-dev-mips64el-cross',
|
|
'libc6-mips64el-cross',
|
|
'libgcc-7-dev-mips64el-cross',
|
|
'libgcc1-mips64el-cross',
|
|
'libgomp1-mips64el-cross',
|
|
'libmpfr6', # This is new in buster, so build machines don't have it yet.
|
|
'libstdc++-7-dev-mips64el-cross',
|
|
'libstdc++6-mips64el-cross',
|
|
'linux-libc-dev-mips64el-cross',
|
|
]
|
|
|
|
def create_asset(target_dir):
|
|
"""Create the asset."""
|
|
# This is all a bit hacky. Rather than installing to a chroot, we just extract
|
|
# all the packages to the target dir, then fix things up so that it can be
|
|
# used in our recipes.
|
|
with utils.tmp_dir():
|
|
# Download required Debian packages.
|
|
subprocess.check_call(['apt-get', 'download'] + PKGS)
|
|
for f in os.listdir('.'):
|
|
subprocess.check_call(['dpkg-deb', '--extract', f, target_dir])
|
|
parent_dir = os.path.join(target_dir, 'usr')
|
|
# Remove unnecessary files that cause problems with zipping (due to dangling
|
|
# symlinks).
|
|
os.remove(os.path.join(parent_dir,
|
|
'lib/gcc-cross/mips64el-linux-gnuabi64/7/libcc1.so'))
|
|
shutil.rmtree(os.path.join(parent_dir, 'share'))
|
|
# Remove usr/ prefix.
|
|
for d in os.listdir(parent_dir):
|
|
os.rename(os.path.join(parent_dir, d), os.path.join(target_dir, d))
|
|
os.rmdir(parent_dir)
|
|
# Remove absolute paths in GNU ld scripts.
|
|
lib_dir = os.path.join(target_dir, 'mips64el-linux-gnuabi64/lib')
|
|
ld_script_token = 'OUTPUT_FORMAT(elf64-tradlittlemips)'
|
|
ld_script_files = subprocess.check_output(
|
|
['grep', '--recursive', '--files-with-matches',
|
|
'--binary-files=without-match', '--fixed-strings', ld_script_token,
|
|
lib_dir]).split()
|
|
abs_path = '/usr/mips64el-linux-gnuabi64/lib/'
|
|
for f in ld_script_files:
|
|
with open(f) as script:
|
|
contents = script.read()
|
|
contents = contents.replace(abs_path, '')
|
|
with open(f, 'w') as script:
|
|
script.write(contents)
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('--target_dir', '-t', required=True)
|
|
args = parser.parse_args()
|
|
create_asset(args.target_dir)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|