Пример #1
0
def main(raw_args):
    import cmd_utils
    import os
    import os.path
    from os_utils import get_emsdk_root

    parser = cmd_utils.build_arg_parser(description='Apply patches to the Mono source tree')

    default_help = 'default: %(default)s'

    mono_sources_default = os.environ.get('MONO_SOURCE_ROOT', '')

    if mono_sources_default:
        parser.add_argument('--mono-sources', default=mono_sources_default, help=default_help)
    else:
        parser.add_argument('--mono-sources', required=True)

    args = parser.parse_args(raw_args)

    this_script_dir = os.path.dirname(os.path.realpath(__file__))
    patches_dir = os.path.join(this_script_dir, 'files', 'patches')

    mono_source_root = args.mono_sources

    patches = [
        'fix-mono-android-tkill.diff',
        'mono-dbg-agent-clear-tls-instead-of-abort.diff',
        'bcl-profile-platform-override.diff'
    ]

    from subprocess import Popen
    for patch in patches:
        proc = Popen('bash -c \'patch -N -p1 < %s; exit 0\'' % os.path.join(patches_dir, patch), cwd=mono_source_root, shell=True)
Пример #2
0
def main(raw_args):
    import cmd_utils
    from cmd_utils import custom_bool

    actions = {
        'make': make_product,
        'clean': clean_product
    }

    parser = cmd_utils.build_arg_parser(description='Builds the Mono BCL')

    default_help = 'default: %(default)s'

    parser.add_argument('action', choices=actions.keys())
    parser.add_argument('--product', choices=product_values, action='append', required=True)
    parser.add_argument('--tests', action='store_true', default=False, help=default_help)
    parser.add_argument('--remove-pdb', type=custom_bool, default=True, help=default_help)

    cmd_utils.add_base_arguments(parser, default_help)

    args = parser.parse_args(raw_args)

    opts = bcl_opts_from_args(args)
    products = args.product

    try:
        for product in products:
            action = actions[args.action]
            action(opts, product)
    except BuildError as e:
        sys.exit(e.message)
Пример #3
0
def main(raw_args):
    import cmd_utils

    parser = cmd_utils.build_arg_parser(description='Builds LLVM for Mono')

    default_help = 'default: %(default)s'

    parser.add_argument('action', choices=['make', 'clean'])
    parser.add_argument('--target',
                        choices=target_values,
                        action='append',
                        required=True)

    cmd_utils.add_base_arguments(parser, default_help)

    args = parser.parse_args(raw_args)

    opts = base_opts_from_args(args)
    targets = args.target

    try:
        for target in targets:
            action = {'make': make, 'clean': clean}[args.action]
            action(opts, target)
    except BuildError as e:
        sys.exit(e.message)
Пример #4
0
def main(raw_args):
    import os
    import cmd_utils
    from os_utils import get_emsdk_root

    parser = cmd_utils.build_arg_parser(
        description='Apply patches to the active Emscripten SDK')

    default_help = 'default: %(default)s'

    mono_sources_default = os.environ.get('MONO_SOURCE_ROOT', '')

    if mono_sources_default:
        parser.add_argument('--mono-sources',
                            default=mono_sources_default,
                            help=default_help)
    else:
        parser.add_argument('--mono-sources', required=True)

    args = parser.parse_args(raw_args)

    mono_source_root = args.mono_sources
    emsdk_root = get_emsdk_root()

    patches = [
        '%s/sdks/builds/fix-emscripten-8511.diff' % mono_source_root,
        '%s/sdks/builds/emscripten-pr-8457.diff' % mono_source_root
    ]

    from subprocess import Popen
    for patch in patches:
        proc = Popen('bash -c \'patch -N -p1 < %s; exit 0\'' % patch,
                     cwd=emsdk_root,
                     shell=True)
Пример #5
0
def main(raw_args):
    import os
    import cmd_utils
    from os_utils import get_emsdk_root

    parser = cmd_utils.build_arg_parser(description='Apply patches to the active Emscripten SDK')

    default_help = 'default: %(default)s'

    mono_sources_default = os.environ.get('MONO_SOURCE_ROOT', '')

    if mono_sources_default:
        parser.add_argument('--mono-sources', default=mono_sources_default, help=default_help)
    else:
        parser.add_argument('--mono-sources', required=True)

    args = parser.parse_args(raw_args)

    mono_source_root = args.mono_sources
    emsdk_root = get_emsdk_root()

    patches = [
        '%s/sdks/builds/fix-emscripten-8511.diff' % mono_source_root,
    ]

    from subprocess import Popen
    from sys import exit
    for patch in patches:
        patch_cmd = 'patch -N -p1 < %s' % patch
        print('Running: %s' % patch_cmd)
        proc = Popen('bash -c \'%s; exit $?\'' % patch_cmd, cwd=emsdk_root, shell=True)
        exit_code = proc.wait()
        if exit_code != 0:
            exit('patch exited with error code: %s' % exit_code)
Пример #6
0
def run_main(raw_args, target_platform):
    import cmd_utils
    from collections import OrderedDict
    from typing import Callable

    actions = OrderedDict()
    actions['configure'] = configure
    actions['make'] = make
    actions['copy-bcl'] = copy_bcl
    actions['clean'] = clean

    parser = cmd_utils.build_arg_parser(
        description='Builds the Mono runtime for the Desktop')

    default_help = 'default: %(default)s'

    parser.add_argument('action',
                        choices=['configure', 'make', 'copy-bcl', 'clean'])
    parser.add_argument('--target',
                        choices=targets[target_platform],
                        action='append',
                        required=True)
    parser.add_argument('--with-llvm',
                        action='store_true',
                        default=False,
                        help=default_help)

    cmd_utils.add_runtime_arguments(parser, default_help)

    args = parser.parse_args(raw_args)

    input_action = args.action
    input_targets = args.target

    opts = desktop_opts_from_args(args)

    if not os.path.isdir(opts.mono_source_root):
        print('Mono sources directory not found: ' + opts.mono_source_root)
        sys.exit(1)

    if target_platform == 'osx' and sys.platform != 'darwin' and not 'OSXCROSS_ROOT' in os.environ:
        raise RuntimeError(
            'The \'OSXCROSS_ROOT\' environment variable is required for cross-compiling to macOS'
        )

    if is_cross_compiling(target_platform) and sys.platform == 'darwin':
        raise RuntimeError('Cross-compiling from macOS is not supported')

    action = actions[input_action]

    try:
        for target in input_targets:
            action(opts, 'desktop-%s' % target_platform, target_platform,
                   target)
    except BuildError as e:
        sys.exit(e.message)
Пример #7
0
def main(raw_args):
    import cmd_utils
    import os
    import os.path
    from os_utils import get_emsdk_root

    parser = cmd_utils.build_arg_parser(
        description='Apply patches to the Mono source tree')

    default_help = 'default: %(default)s'

    mono_sources_default = os.environ.get('MONO_SOURCE_ROOT', '')

    if mono_sources_default:
        parser.add_argument('--mono-sources',
                            default=mono_sources_default,
                            help=default_help)
    else:
        parser.add_argument('--mono-sources', required=True)

    args = parser.parse_args(raw_args)

    this_script_dir = os.path.dirname(os.path.realpath(__file__))
    patches_dir = os.path.join(this_script_dir, 'files', 'patches')

    mono_source_root = args.mono_sources

    patches = [
        'fix-mono-android-tkill.diff',
        'mono-dbg-agent-clear-tls-instead-of-abort.diff',
        'bcl-profile-platform-override.diff',
        'mono_ios_asl_log_deprecated.diff',
        'wasm_m2n_trampolines_hook.diff',
    ]

    if os.path.isfile(
            os.path.join(mono_source_root,
                         'mono/tools/offsets-tool/offsets-tool.py')):
        patches += ['offsets-tool-extra-cflags_new.diff']
    else:
        patches += ['offsets-tool-extra-cflags_old.diff']

    from subprocess import Popen
    from sys import exit
    for patch in patches:
        patch_cmd = 'patch -N -p1 < %s' % os.path.join(patches_dir, patch)
        print('Running: %s' % patch_cmd)
        proc = Popen('bash -c \'%s; exit $?\'' % patch_cmd,
                     cwd=mono_source_root,
                     shell=True)
        exit_code = proc.wait()
        if exit_code != 0:
            exit('patch exited with error code: %s' % exit_code)
Пример #8
0
def main(raw_args):
    import cmd_utils
    from collections import OrderedDict
    from typing import Callable

    target_shortcuts = {'all-runtime': runtime_targets}

    target_values = runtime_targets + cross_targets + cross_mxe_targets + list(
        target_shortcuts)

    actions = OrderedDict()
    actions['configure'] = configure
    actions['make'] = make
    actions['clean'] = clean

    parser = cmd_utils.build_arg_parser(
        description='Builds the Mono runtime for WebAssembly')

    emsdk_root_default = os.environ.get('EMSDK_ROOT', default='')

    default_help = 'default: %(default)s'

    parser.add_argument('action', choices=['configure', 'make', 'clean'])
    parser.add_argument('--target',
                        choices=target_values,
                        action='append',
                        required=True)

    cmd_utils.add_runtime_arguments(parser, default_help)

    args = parser.parse_args(raw_args)

    input_action = args.action
    input_targets = args.target

    opts = runtime_opts_from_args(args)

    if not os.path.isdir(opts.mono_source_root):
        print('Mono sources directory not found: ' + opts.mono_source_root)
        sys.exit(1)

    targets = cmd_utils.expand_input_targets(input_targets, target_shortcuts)
    action = actions[input_action]

    try:
        for target in targets:
            action(opts, 'wasm', target)
    except BuildError as e:
        sys.exit(e.message)
def main(raw_args):
    import cmd_utils

    actions = {'build': build, 'install': install, 'clean': clean}

    parser = cmd_utils.build_arg_parser(
        description='Copy the reference assemblies')

    default_help = 'default: %(default)s'

    parser.add_argument('action', choices=actions.keys())

    cmd_utils.add_base_arguments(parser, default_help)

    args = parser.parse_args(raw_args)

    opts = base_opts_from_args(args)

    try:
        action = actions[args.action]
        action(opts)
    except BuildError as e:
        sys.exit(e.message)
Пример #10
0
def main(raw_args):
    import cmd_utils
    from cmd_utils import custom_bool
    from collections import OrderedDict
    from typing import Callable

    target_shortcuts = {
        'all-device': device_targets,
        'all-sim': sim_targets,
        'all-cross': cross_targets
    }

    target_values = device_targets + sim_targets + cross_targets + list(
        target_shortcuts)

    actions = OrderedDict()
    actions['configure'] = configure
    actions['make'] = make
    actions['clean'] = clean

    parser = cmd_utils.build_arg_parser(
        description='Builds the Mono runtime for iOS')

    default_help = 'default: %(default)s'

    default_ios_toolchain = '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain'
    default_osx_toolchain = '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain'
    default_ios_version_min = '10.0'  # Same as Godot

    parser.add_argument('action', choices=['configure', 'make', 'clean'])
    parser.add_argument('--target',
                        choices=target_values,
                        action='append',
                        required=True)
    parser.add_argument('--ios-toolchain',
                        default=default_ios_toolchain,
                        help=default_help)
    parser.add_argument('--ios-sdk', default='', help=default_help)
    parser.add_argument('--ios-version-min',
                        default=default_ios_version_min,
                        help=default_help)
    parser.add_argument('--osx-toolchain',
                        default=default_osx_toolchain,
                        help=default_help)
    parser.add_argument('--osx-sdk', default='', help=default_help)
    parser.add_argument('--osx-triple-abi',
                        default='darwin18',
                        help=default_help)

    cmd_utils.add_runtime_arguments(parser, default_help)

    args = parser.parse_args(raw_args)

    input_action = args.action
    input_targets = args.target

    opts = ios_opts_from_args(args)

    targets = cmd_utils.expand_input_targets(input_targets, target_shortcuts)

    if not os.path.isdir(opts.mono_source_root):
        print('Mono sources directory not found: ' + opts.mono_source_root)
        sys.exit(1)

    action = actions[input_action]

    try:
        for target in targets:
            action(opts, 'ios', target)
    except BuildError as e:
        sys.exit(e.message)
Пример #11
0
def main(raw_args):
    import cmd_utils
    from cmd_utils import custom_bool
    from collections import OrderedDict
    from typing import Callable

    target_shortcuts = {
        'all-runtime': runtime_targets,
        'all-cross': cross_targets,
        'all-cross-win': cross_mxe_targets
    }

    target_values = runtime_targets + cross_targets + cross_mxe_targets + list(target_shortcuts)

    actions = OrderedDict()
    actions['configure'] = configure
    actions['make'] = make
    actions['clean'] = clean

    parser = cmd_utils.build_arg_parser(
        description='Builds the Mono runtime for Android',
        env_vars={
            'ANDROID_SDK_ROOT': 'Overrides default value for --android-sdk',
            'ANDROID_NDK_ROOT': 'Overrides default value for --android-ndk',
            'ANDROID_HOME': 'Same as ANDROID_SDK_ROOT'
        }
    )

    home = os.environ.get('HOME')
    android_sdk_default = os.environ.get('ANDROID_HOME', os.environ.get('ANDROID_SDK_ROOT', path_join(home, 'Android/Sdk')))
    android_ndk_default = os.environ.get('ANDROID_NDK_ROOT', path_join(android_sdk_default, 'ndk-bundle'))

    default_help = 'default: %(default)s'

    parser.add_argument('action', choices=['configure', 'make', 'clean'])
    parser.add_argument('--target', choices=target_values, action='append', required=True)
    parser.add_argument('--toolchains-prefix', default=path_join(home, 'android-toolchains'), help=default_help)
    parser.add_argument('--android-sdk', default=android_sdk_default, help=default_help)
    parser.add_argument('--android-ndk', default=android_ndk_default, help=default_help)
    parser.add_argument('--android-api-version', default='18', help=default_help)
    parser.add_argument('--android-cmake-version', default='autodetect', help=default_help)
    parser.add_argument('--with-monodroid', type=custom_bool, default=True, help=default_help)

    cmd_utils.add_runtime_arguments(parser, default_help)

    args = parser.parse_args(raw_args)

    input_action = args.action
    input_targets = args.target

    opts = android_opts_from_args(args)

    if not os.path.isdir(opts.mono_source_root):
        print('Mono sources directory not found: ' + opts.mono_source_root)
        sys.exit(1)

    targets = cmd_utils.expand_input_targets(input_targets, target_shortcuts)
    action = actions[input_action]

    try:
        for target in targets:
            action(opts, 'android', target)
    except BuildError as e:
        sys.exit(e.message)