Пример #1
0
def run(params={}):
    target_name = params['target_name']
    target_config = fn.get_target_config(target_name)

    archs = target_config['archs']
    build_types = target_config['build_types']

    if archs and len(archs) > 0:
        for arch in archs:
            for build_type in build_types:
                log.info('Building for: {0}/{1}...'.format(
                    arch['conan_arch'], build_type))

                # conan install
                build_dir = os.path.join(
                    fn.root_dir(),
                    const.DIR_NAME_BUILD,
                    target_name,
                    build_type,
                    arch['conan_arch'],
                    const.DIR_NAME_BUILD_CONAN,
                )

                fn.remove_dir(build_dir)
                fn.create_dir(build_dir)

                run_args = [
                    'conan',
                    'install',
                    os.path.join(
                        fn.root_dir(),
                        const.DIR_NAME_FILES,
                        const.DIR_NAME_FILES_TARGETS,
                        target_name,
                        const.DIR_NAME_FILES_TARGET_CONAN,
                        const.DIR_NAME_FILES_TARGET_CONAN_RECIPE,
                        const.FILE_NAME_FILES_TARGET_CONAN_RECIPE_CONANFILE_PY,
                    ),
                    '--profile',
                    '{0}'.format(target_config['conan_profile']),
                    '-s',
                    'arch={0}'.format(arch['conan_arch']),
                    '-s',
                    'build_type={0}'.format(build_type),
                    '--build=missing',
                    '--update',
                ]

                fn.run_simple(run_args, build_dir)
    else:
        log.error(
            'Arch list for "{0}" is invalid or empty'.format(target_name))
Пример #2
0
def run(params={}):
    target_name = params['target_name']
    target_config = fn.get_target_config(target_name)

    archs = target_config['archs']
    build_types = target_config['build_types']

    log.info('Packaging...')

    if archs and len(archs) > 0:
        for arch in archs:
            for build_type in build_types:
                log.info('Copying for: {0}/{1}...'.format(
                    arch['conan_arch'], build_type))

                # create folders
                dist_dir = os.path.join(
                    fn.root_dir(),
                    const.DIR_NAME_DIST,
                    target_name,
                    build_type,
                    arch['conan_arch'],
                )

                fn.remove_dir(dist_dir)
                fn.create_dir(dist_dir)

                build_dir = os.path.join(
                    fn.root_dir(),
                    const.DIR_NAME_BUILD,
                    target_name,
                    build_type,
                    arch['conan_arch'],
                    const.DIR_NAME_BUILD_TARGET,
                    'bin',
                )

                # copy files
                fn.copy_all_inside(build_dir, dist_dir)
    else:
        log.error(
            'Arch list for "{0}" is invalid or empty'.format(target_name))
Пример #3
0
def run(params={}):
    target_name = params['target_name']
    target_config = fn.get_target_config(target_name)

    archs = target_config['archs']
    build_types = target_config['build_types']
    module_name = 'library'

    log.info('Creating AAR library...')

    if archs and len(archs) > 0:
        if build_types and len(build_types) > 0:
            for build_type in build_types:
                log.info('Creating AAR library for: {0}...'.format(build_type))

                build_dir = os.path.join(
                    fn.root_dir(),
                    const.DIR_NAME_BUILD,
                    target_name,
                    build_type,
                )

                android_library_build_dir = os.path.join(
                    build_dir,
                    'aar',
                )

                fn.remove_dir(android_library_build_dir)
                fn.create_dir(android_library_build_dir)

                android_project_dir = os.path.join(
                    fn.root_dir(),
                    const.DIR_NAME_FILES,
                    const.DIR_NAME_FILES_TARGETS,
                    target_name,
                    const.DIR_NAME_FILES_TARGET_SUPPORT,
                    'android-aar-project',
                )

                fn.copy_dir(android_project_dir, android_library_build_dir)

                # copy djinni support lib files
                djinni_support_lib_dir = os.path.join(
                    fn.root_dir(),
                    const.DIR_NAME_FILES,
                    'djinni',
                    'support-lib',
                )

                fn.copy_all_inside(
                    os.path.join(djinni_support_lib_dir, 'java'),
                    os.path.join(
                        android_library_build_dir,
                        module_name,
                        'src',
                        'main',
                        'java'
                    )
                )

                # copy all modules djinni files
                modules_dir = os.path.join(
                    fn.root_dir(),
                    const.DIR_NAME_FILES,
                    'djinni',
                )

                modules = fn.find_dirs_simple(modules_dir, '*')

                for module in modules:
                    module_dir_name = os.path.basename(module)

                    if module_dir_name == 'support-lib':
                        continue

                    module_dir = os.path.join(
                        modules_dir, module_dir_name, 'generated-src', 'java'
                    )

                    if fn.dir_exists(module_dir):
                        fn.copy_all_inside(
                            module_dir,
                            os.path.join(
                                android_library_build_dir,
                                module_name,
                                'src',
                                'main',
                                'java'
                            )
                        )

                # copy all modules implementation files
                modules_dir = os.path.join(
                    fn.root_dir(),
                    const.DIR_NAME_FILES,
                    const.DIR_NAME_FILES_SRC,
                )

                modules = fn.find_dirs_simple(modules_dir, '*')

                for module in modules:
                    module_dir_name = os.path.basename(module)

                    module_dir = os.path.join(
                        modules_dir, module_dir_name, 'java'
                    )

                    if fn.dir_exists(module_dir):
                        fn.copy_all_inside(
                            module_dir,
                            os.path.join(
                                android_library_build_dir,
                                module_name,
                                'src',
                                'main',
                                'java'
                            )
                        )

                # copy all native libraries
                for arch in archs:
                    compiled_arch_dir = os.path.join(
                        build_dir,
                        arch['conan_arch'],
                        const.DIR_NAME_BUILD_TARGET,
                        'lib',
                    )

                    target_arch_dir = os.path.join(
                        android_library_build_dir,
                        'library',
                        'src',
                        'main',
                        'jniLibs',
                        arch['arch'],
                    )

                    fn.copy_all_inside(
                        compiled_arch_dir,
                        target_arch_dir,
                    )

                # build aar
                android_module_dir = os.path.join(
                    android_library_build_dir,
                    module_name,
                )

                run_args = [
                    '../gradlew',
                    'bundle{0}Aar'.format(build_type),
                ]

                fn.run_simple(
                    run_args,
                    android_module_dir
                )

                # copy files
                arr_dir = os.path.join(
                    android_library_build_dir,
                    module_name,
                    'build',
                    'outputs',
                    'aar',
                )

                dist_dir = os.path.join(
                    fn.root_dir(),
                    const.DIR_NAME_DIST,
                    target_name,
                    build_type,
                )

                fn.remove_dir(dist_dir)

                fn.copy_all_inside(
                    arr_dir,
                    dist_dir
                )
        else:
            log.info('Build type list for "{0}" is invalid or empty'.format(
                target_name
            ))
    else:
        log.info('Arch list for "{0}" is invalid or empty'.format(target_name))
Пример #4
0
def run(params={}):
    target_name = params['target_name']
    target_config = fn.get_target_config(target_name)

    archs = target_config['archs']
    build_types = target_config['build_types']

    if archs and len(archs) > 0:
        for arch in archs:
            for build_type in build_types:
                log.info('Building for: {0}/{1}...'.format(
                    arch['conan_arch'], build_type))

                # conan install
                build_dir = os.path.join(
                    fn.root_dir(),
                    const.DIR_NAME_BUILD,
                    target_name,
                    build_type,
                    arch['conan_arch'],
                    const.DIR_NAME_BUILD_CONAN,
                )

                fn.remove_dir(build_dir)
                fn.create_dir(build_dir)

                run_args = [
                    'conan',
                    'install',
                    os.path.join(
                        fn.root_dir(),
                        const.DIR_NAME_FILES,
                        const.DIR_NAME_FILES_TARGETS,
                        target_name,
                        const.DIR_NAME_FILES_TARGET_CONAN,
                        const.DIR_NAME_FILES_TARGET_CONAN_RECIPE,
                        const.FILE_NAME_FILES_TARGET_CONAN_RECIPE_CONANFILE_PY,
                    ),
                    '--profile',
                    '{0}'.format(target_config['conan_profile']),
                    '-s',
                    'arch={0}'.format(arch['conan_arch']),
                    '-s',
                    'build_type={0}'.format(build_type),
                    '-o',
                    '{0}:ios_arch={1}'.format(target_name, arch['arch']),
                    '-o',
                    '{0}:ios_platform={1}'.format(target_name,
                                                  arch['platform']),
                    '-o',
                    '{0}:ios_deployment_target={1}'.format(
                        target_name, target_config['min_version']),
                    '-o',
                    '{0}:enable_bitcode={1}'.format(
                        target_name,
                        ('1' if target_config['bitcode'] else '0')),
                    '-o',
                    '{0}:enable_arc={1}'.format(
                        target_name,
                        ('1' if target_config['enable_arc'] else '0')),
                    '-o',
                    '{0}:enable_visibility={1}'.format(
                        target_name,
                        ('1' if target_config['enable_visibility'] else '0')),
                    '-o',
                    '{0}:cmake_toolchain_file={1}'.format(
                        target_name,
                        os.path.join(
                            fn.root_dir(),
                            const.DIR_NAME_FILES,
                            const.DIR_NAME_FILES_CMAKE,
                            'toolchains',
                            'ios.cmake',
                        )),
                    '-o',
                    'darwin-toolchain:bitcode={0}'.format(
                        'True' if target_config['bitcode'] else 'False'),
                    '--build=missing',
                    '--update',
                ]

                fn.run_simple(run_args, build_dir)
    else:
        log.error(
            'Arch list for "{0}" is invalid or empty'.format(target_name))
Пример #5
0
def run(params={}):
    target_name = params['target_name']
    target_config = fn.get_target_config(target_name)

    archs = target_config['archs']
    build_types = target_config['build_types']
    install_headers = target_config['install_headers']

    if archs and len(archs) > 0:
        for arch in archs:
            for build_type in build_types:
                log.info('Building for: {0}/{1}...'.format(
                    arch['conan_arch'],
                    build_type
                ))

                # conan build
                build_dir = os.path.join(
                    fn.root_dir(),
                    const.DIR_NAME_BUILD,
                    target_name,
                    build_type,
                    arch['conan_arch'],
                    const.DIR_NAME_BUILD_TARGET,
                )

                fn.remove_dir(build_dir)
                fn.create_dir(build_dir)

                run_args = [
                    'conan',
                    'build',
                    os.path.join(
                        fn.root_dir(),
                        const.DIR_NAME_FILES,
                        const.DIR_NAME_FILES_TARGETS,
                        target_name,
                        const.DIR_NAME_FILES_TARGET_CONAN,
                        const.DIR_NAME_FILES_TARGET_CONAN_RECIPE,
                        const.FILE_NAME_FILES_TARGET_CONAN_RECIPE_CONANFILE_PY,
                    ),    
                    '--source-folder',
                    os.path.join(
                        fn.root_dir(),
                        const.DIR_NAME_FILES,
                        const.DIR_NAME_FILES_TARGETS,
                        target_name,
                        const.DIR_NAME_FILES_TARGET_CMAKE,
                    ),
                    '--build-folder',
                    os.path.join(
                        fn.root_dir(),
                        const.DIR_NAME_BUILD,
                        target_name,
                        build_type,
                        arch['conan_arch'],
                        const.DIR_NAME_BUILD_TARGET,
                    ),
                    '--install-folder',
                    os.path.join(
                        fn.root_dir(),
                        const.DIR_NAME_BUILD,
                        target_name,
                        build_type,
                        arch['conan_arch'],
                        const.DIR_NAME_BUILD_CONAN,
                    ),                  
                ]

                fn.run_simple(
                    run_args,
                    build_dir
                )

                # headers
                dist_headers_dir = os.path.join(
                    fn.root_dir(),
                    const.DIR_NAME_BUILD,
                    target_name,
                    build_type,
                    archs[0]['conan_arch'],
                    const.DIR_NAME_BUILD_TARGET,
                    'lib',
                    '{0}.framework'.format(target_config['project_name']),
                    'Headers',
                )

                fn.create_dir(dist_headers_dir)

                if install_headers:
                    for header in install_headers:
                        source_header_dir = os.path.join(
                            fn.root_dir(),
                            header['path'],
                        )

                        if header['type'] == 'dir':
                            fn.copy_all_inside(
                                source_header_dir,
                                dist_headers_dir,
                            )
                        else:
                            log.error('Invalid type for install header list for {0}'.format(
                                target_name
                            ))

    else:
        log.error('Arch list for "{0}" is invalid or empty'.format(
            target_name
        ))