#!/usr/bin/env python
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import argparse
import subprocess
import shutil
import sys
import os


def main():
  parser = argparse.ArgumentParser(description='Creates Flutter.framework')

  parser.add_argument('--dst', type=str, required=True)
  parser.add_argument('--device-out-dir', type=str, required=True)
  parser.add_argument('--simulator-out-dir', type=str, required=True)

  args = parser.parse_args()

  fat_framework = os.path.join(args.dst, 'Flutter.framework')
  device_framework = os.path.join(args.device_out_dir, 'Flutter.framework')
  simulator_framework = os.path.join(args.simulator_out_dir, 'Flutter.framework')

  device_dylib = os.path.join(device_framework, 'Flutter')
  simulator_dylib = os.path.join(simulator_framework, 'Flutter')

  if not os.path.isdir(device_framework):
    print 'Cannot find iOS device Framework at', device_framework
    return 1

  if not os.path.isdir(simulator_framework):
    print 'Cannot find iOS simulator Framework at', simulator_framework
    return 1

  if not os.path.isfile(device_dylib):
    print 'Cannot find iOS device dylib at', device_dylib
    return 1

  if not os.path.isfile(simulator_dylib):
    print 'Cannot find iOS simulator dylib at', simulator_dylib
    return 1

  shutil.rmtree(fat_framework, True)
  shutil.copytree(device_framework, fat_framework)

  subprocess.call([
    'lipo',
    device_dylib,
    simulator_dylib,
    '-create',
    '-output',
    os.path.join(fat_framework, 'Flutter')
  ])


if __name__ == '__main__':
  sys.exit(main())

#!/usr/bin/env python
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import argparse
import subprocess
import shutil
import sys
import os


def main():
  parser = argparse.ArgumentParser(description='Creates Flutter.framework')

  parser.add_argument('--dst', type=str, required=True)
  # TODO(cbracken) eliminate --device-out-dir and make armv7-out-dir and
  # arm64-out-dir required once bot recipe is updated.
  parser.add_argument('--device-out-dir', type=str, required=False)
  parser.add_argument('--arm64-out-dir', type=str, required=False)
  parser.add_argument('--armv7-out-dir', type=str, required=False)
  parser.add_argument('--simulator-out-dir', type=str, required=True)

  args = parser.parse_args()
  if not (args.arm64_out_dir or args.device_out_dir):
    print 'One of --device-out-dir or --arm64-out-dir must be specified'

  fat_framework = os.path.join(args.dst, 'Flutter.framework')
  arm64_framework = os.path.join(args.arm64_out_dir if args.arm64_out_dir else args.device_out_dir, 'Flutter.framework')
  armv7_framework = os.path.join(args.armv7_out_dir, 'Flutter.framework') if args.armv7_out_dir else None
  simulator_framework = os.path.join(args.simulator_out_dir, 'Flutter.framework')

  arm64_dylib = os.path.join(arm64_framework, 'Flutter')
  armv7_dylib = os.path.join(armv7_framework, 'Flutter') if args.armv7_out_dir else None
  simulator_dylib = os.path.join(simulator_framework, 'Flutter')

  if not os.path.isdir(arm64_framework):
    print 'Cannot find iOS arm64 Framework at', arm64_framework
    return 1

  # TODO(cbracken): require armv7 once bot recipe is updated.
  if armv7_framework and not os.path.isdir(armv7_framework):
    print 'Cannot find iOS armv7 Framework at', armv7_framework
    return 1

  if not os.path.isdir(simulator_framework):
    print 'Cannot find iOS simulator Framework at', simulator_framework
    return 1

  if not os.path.isfile(arm64_dylib):
    print 'Cannot find iOS arm64 dylib at', arm64_dylib
    return 1

  # TODO(cbracken): require armv7 once bot recipe is updated.
  if armv7_dylib and not os.path.isfile(armv7_dylib):
    print 'Cannot find iOS armv7 dylib at', armv7_dylib
    return 1

  if not os.path.isfile(simulator_dylib):
    print 'Cannot find iOS simulator dylib at', simulator_dylib
    return 1

  shutil.rmtree(fat_framework, True)
  shutil.copytree(arm64_framework, fat_framework)

  # TODO(cbracken): require armv7 once bot recipe is updated.
  dylibs = [arm64_dylib, simulator_dylib]
  if armv7_dylib:
    dylibs += [armv7_dylib]

  subprocess.call(['lipo'] + dylibs + [
    '-create',
    '-output',
    os.path.join(fat_framework, 'Flutter')
  ])


if __name__ == '__main__':
  sys.exit(main())

Add armv7 support to create_ios_framework script (#4942)