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))
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))
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))
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))
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 ))