#! /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.

import argparse
import os
import sys

fmt = '''
target_cpu = "{arch}"
is_debug = {debug}
ndk = "{android_ndk_dir}"
ndk_api = {api_level}
skia_enable_fontmgr_empty = true
skia_enable_pdf = false
skia_skqp_global_error_tolerance = 8
skia_use_dng_sdk = false
skia_use_expat = false
skia_use_icu = false
skia_use_libheif = false
skia_use_lua = false
skia_use_piex = false
skia_tools_require_resources = true
extra_cflags = [ "-DSK_ENABLE_DUMP_GPU" ]
'''

def parse_args():
    parser = argparse.ArgumentParser(description='Generate args.gn file.')
    parser.add_argument('target_build_dir')
    parser.add_argument('android_ndk_dir' )
    parser.add_argument('--arch',  metavar='architecture', default='arm',
        help='defaults to "arm", valid values: "arm" "arm64" "x86" "x64"')
    parser.add_argument('--api_level', type=int, metavar='api_level',
        default=26, help='android API level, defaults to 26')
    parser.add_argument('--enable_workarounds', default=False,
        action='store_true', help="enable GPU work-arounds, defaults to false")
    parser.add_argument('--debug', default=False, action='store_true',
        help='compile native code in debug mode, defaults to false')

    # parse the args and convert bools to strings.
    args = parser.parse_args()
    gn_bool = lambda b : 'true' if b else 'false'
    args.enable_workarounds = gn_bool(args.enable_workarounds)
    args.debug = gn_bool(args.debug)
    args.android_ndk_dir = os.path.abspath(args.android_ndk_dir)
    return args

def make_args_gn(out_dir, args):
    if not os.path.exists(out_dir):
        os.makedirs(out_dir)
    with open(os.path.join(out_dir, 'args.gn'), 'w') as o:
        o.write(fmt.format(**args))

if __name__ == '__main__':
    args = parse_args()
    make_args_gn(args.target_build_dir, vars(args))
