def artifact_write_recipe(recipe: Optional[Recipe] = None, artifact_path: str = "") -> str: if recipe is None: recipe = Recipe() artifact_path = artifact_path_absolute(artifact_path) json_text = proto_util.message_to_json(recipe, including_default_value_fields=True) json_file_path = artifact_get_recipe_file_path(artifact_path) util.file_write_text_atomic(json_file_path, json_text) return artifact_path
def _get_built_in_binary_recipe_from_build_github_repo( project_name: str, version_hash: str, build_version_hash: str, platform_suffixes: List[str], tools: List[ToolNameAndPath], ) -> List[recipe_wrap.RecipeWrap]: result: List[recipe_wrap.RecipeWrap] = [] for platform_suffix in platform_suffixes: tags: List[str] = [] add_common_tags_from_platform_suffix(tags, platform_suffix) binaries = [ Binary( name=binary.name, tags=tags, path=( f"{project_name}/{(binary.subpath + '.exe') if 'Windows' in tags and binary.add_exe_on_windows else binary.subpath}" ), version=version_hash, ) for binary in tools ] result.append( recipe_wrap.RecipeWrap( f"{BUILT_IN_BINARY_RECIPES_PATH_PREFIX}/{project_name}_{version_hash}_{platform_suffix}", Recipe( download_and_extract_archive_set=RecipeDownloadAndExtractArchiveSet( archive_set=ArchiveSet( archives=[ Archive( url=f"https://github.com/paulthomson/build-{project_name}/releases/download/github/paulthomson/build-{project_name}/{build_version_hash}/build-{project_name}-{build_version_hash}-{platform_suffix}.zip", output_file=f"{project_name}.zip", output_directory=project_name, ) ], binaries=binaries, ) ) ), ) ) return result
def get_github_release_recipe( # pylint: disable=too-many-branches,too-many-statements; binary: Binary, ) -> recipe_wrap.RecipeWrap: project_name = binary_name_to_project_name(binary.name) if project_name == "graphicsfuzz": # Special case: platform = util.get_platform() # Not used. tags = PLATFORMS[:] # All host platforms. repo_name = f"gfbuild-{project_name}" version = binary.version artifact_name = f"gfbuild-{project_name}-{version}" elif project_name == "amber" and binary.name in ("amber_apk", "amber_apk_test"): # Special case: platform = util.get_platform() # Not used. tags = PLATFORMS[:] # All host platforms. tags.append("Debug") repo_name = f"gfbuild-{project_name}" version = binary.version artifact_name = f"gfbuild-{project_name}-{version}-android_apk" else: # Normal case: platform = get_platform_from_binary(binary) config = get_config_from_binary(binary) arch = "x64" tags = [platform, config, arch] repo_name = f"gfbuild-{project_name}" version = binary.version artifact_name = f"gfbuild-{project_name}-{version}-{platform}_{arch}_{config}" recipe = recipe_wrap.RecipeWrap( path=f"{BUILT_IN_BINARY_RECIPES_PATH_PREFIX}/{artifact_name}", recipe=Recipe( download_and_extract_archive_set= RecipeDownloadAndExtractArchiveSet(archive_set=ArchiveSet( archives=[ Archive( url= f"https://github.com/google/{repo_name}/releases/download/github/google/{repo_name}/{version}/{artifact_name}.zip", output_file=f"{project_name}.zip", output_directory=f"{project_name}", ) ], binaries=[], ))), ) executable_suffix = ".exe" if platform == "Windows" else "" if project_name == "glslang": binaries = [ Binary( name="glslangValidator", tags=tags, path=f"{project_name}/bin/glslangValidator{executable_suffix}", version=version, ) ] elif project_name == "SPIRV-Tools": binaries = [ Binary( name="spirv-opt", tags=tags, path=f"{project_name}/bin/spirv-opt{executable_suffix}", version=version, ), Binary( name="spirv-as", tags=tags, path=f"{project_name}/bin/spirv-as{executable_suffix}", version=version, ), Binary( name="spirv-dis", tags=tags, path=f"{project_name}/bin/spirv-dis{executable_suffix}", version=version, ), Binary( name="spirv-val", tags=tags, path=f"{project_name}/bin/spirv-val{executable_suffix}", version=version, ), Binary( name="spirv-fuzz", tags=tags, path=f"{project_name}/bin/spirv-fuzz{executable_suffix}", version=version, ), Binary( name="spirv-reduce", tags=tags, path=f"{project_name}/bin/spirv-reduce{executable_suffix}", version=version, ), ] elif project_name == "swiftshader": binaries = [ Binary( name="swift_shader_icd", tags=tags, path=f"{project_name}/lib/vk_swiftshader_icd.json", version=version, ) ] elif project_name == "amber": if binary.name in ("amber_apk", "amber_apk_test"): binaries = [ Binary( name="amber_apk", tags=tags, path=f"{project_name}/amber.apk", version=version, ), Binary( name="amber_apk_test", tags=tags, path=f"{project_name}/amber-test.apk", version=version, ), ] else: if platform == "Linux": vulkan_loader_name = "libvulkan.so.1" elif platform == "Mac": vulkan_loader_name = "libvulkan.1.dylib" elif platform == "Windows": vulkan_loader_name = "vulkan-1.dll" else: raise AssertionError( f"Unknown platform for Amber's Vulkan loader: {platform}") binaries = [ Binary( name="amber", tags=tags, path=f"{project_name}/bin/amber{executable_suffix}", version=version, ), Binary( name=AMBER_VULKAN_LOADER_NAME, tags=tags, path=f"{project_name}/lib/{vulkan_loader_name}", version=version, ), ] elif project_name == "graphicsfuzz": binaries = [ Binary( name="graphicsfuzz-tool", tags=tags, path=f"{project_name}/python/drivers/graphicsfuzz-tool", version=version, ) ] elif project_name == "llpc": if platform != "Linux": raise AssertionError("amdllpc is only available on Linux") binaries = [ Binary( name="amdllpc", tags=tags, path=f"{project_name}/bin/amdllpc{executable_suffix}", version=version, ) ] else: raise AssertionError(f"Unknown project name: {project_name}") recipe.recipe.download_and_extract_archive_set.archive_set.binaries.extend( binaries) return recipe
def get_graphics_fuzz_121() -> List[recipe_wrap.RecipeWrap]: return [ recipe_wrap.RecipeWrap( f"{BUILT_IN_BINARY_RECIPES_PATH_PREFIX}/graphicsfuzz_v1.2.1", Recipe( download_and_extract_archive_set= RecipeDownloadAndExtractArchiveSet(archive_set=ArchiveSet( archives=[ Archive( url= "https://github.com/google/graphicsfuzz/releases/download/v1.2.1/graphicsfuzz.zip", output_file="graphicsfuzz.zip", output_directory="graphicsfuzz", ) ], binaries=[ # # glslangValidator Binary( name="glslangValidator", tags=["Linux", "x64", "Release"], path="graphicsfuzz/bin/Linux/glslangValidator", version="40c16ec0b3ad03fc170f1369a58e7bbe662d82cd", ), Binary( name="glslangValidator", tags=["Windows", "x64", "Release"], path= "graphicsfuzz/bin/Windows/glslangValidator.exe", version="40c16ec0b3ad03fc170f1369a58e7bbe662d82cd", ), Binary( name="glslangValidator", tags=["Mac", "x64", "Release"], path="graphicsfuzz/bin/Mac/glslangValidator", version="40c16ec0b3ad03fc170f1369a58e7bbe662d82cd", ), # # spirv-opt Binary( name="spirv-opt", tags=[ "Linux", "x64", "Release", SPIRV_OPT_NO_VALIDATE_AFTER_ALL_TAG, ], path="graphicsfuzz/bin/Linux/spirv-opt", version="a2ef7be242bcacaa9127a3ce011602ec54b2c9ed", ), Binary( name="spirv-opt", tags=[ "Windows", "x64", "Release", SPIRV_OPT_NO_VALIDATE_AFTER_ALL_TAG, ], path="graphicsfuzz/bin/Windows/spirv-opt.exe", version="a2ef7be242bcacaa9127a3ce011602ec54b2c9ed", ), Binary( name="spirv-opt", tags=[ "Mac", "x64", "Release", SPIRV_OPT_NO_VALIDATE_AFTER_ALL_TAG, ], path="graphicsfuzz/bin/Mac/spirv-opt", version="a2ef7be242bcacaa9127a3ce011602ec54b2c9ed", ), # # spirv-dis Binary( name="spirv-dis", tags=["Linux", "x64", "Release"], path="graphicsfuzz/bin/Linux/spirv-dis", version="a2ef7be242bcacaa9127a3ce011602ec54b2c9ed", ), Binary( name="spirv-dis", tags=["Windows", "x64", "Release"], path="graphicsfuzz/bin/Windows/spirv-dis.exe", version="a2ef7be242bcacaa9127a3ce011602ec54b2c9ed", ), Binary( name="spirv-dis", tags=["Mac", "x64", "Release"], path="graphicsfuzz/bin/Mac/spirv-dis", version="a2ef7be242bcacaa9127a3ce011602ec54b2c9ed", ), # # spirv-as Binary( name="spirv-as", tags=["Linux", "x64", "Release"], path="graphicsfuzz/bin/Linux/spirv-as", version="a2ef7be242bcacaa9127a3ce011602ec54b2c9ed", ), Binary( name="spirv-as", tags=["Windows", "x64", "Release"], path="graphicsfuzz/bin/Windows/spirv-as.exe", version="a2ef7be242bcacaa9127a3ce011602ec54b2c9ed", ), Binary( name="spirv-as", tags=["Mac", "x64", "Release"], path="graphicsfuzz/bin/Mac/spirv-as", version="a2ef7be242bcacaa9127a3ce011602ec54b2c9ed", ), # # spirv-val Binary( name="spirv-val", tags=["Linux", "x64", "Release"], path="graphicsfuzz/bin/Linux/spirv-val", version="a2ef7be242bcacaa9127a3ce011602ec54b2c9ed", ), Binary( name="spirv-val", tags=["Windows", "x64", "Release"], path="graphicsfuzz/bin/Windows/spirv-val.exe", version="a2ef7be242bcacaa9127a3ce011602ec54b2c9ed", ), Binary( name="spirv-val", tags=["Mac", "x64", "Release"], path="graphicsfuzz/bin/Mac/spirv-val", version="a2ef7be242bcacaa9127a3ce011602ec54b2c9ed", ), ], ))), ) ]
def artifact_read_recipe(artifact_path: str = "") -> Recipe: recipe = Recipe() json_file_path = artifact_get_recipe_file_path(artifact_path) json_text = util.file_read_text(json_file_path) proto_util.json_to_message(json_text, recipe) return recipe