1#!/bin/bash 2 3# Copyright 2022 The Android Open Source Project 4# 5# Licensed under the Apache License, Version 2.0 (the "License"); 6# you may not use this file except in compliance with the License. 7# You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, software 12# distributed under the License is distributed on an "AS IS" BASIS, 13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14# See the License for the specific language governing permissions and 15# limitations under the License. 16 17PROJECT_ROOT=$(pwd) 18 19WHICH=which 20if [[ "$OSTYPE" == "msys" ]]; then 21 WHICH=where 22fi 23 24if [ -z "$1" ] || [ -z "$2" ]; 25then 26 AOSP_DIR=$(pwd)/../.. 27 export GOLDFISH_OPENGL_DIR=$AOSP_DIR/device/generic/goldfish-opengl 28 export VULKAN_CEREAL_DIR=$AOSP_DIR/device/generic/vulkan-cereal 29 export VULKAN_REGISTRY_DIR=$AOSP_DIR/external/gfxstream-protocols/registry/vulkan 30else 31 export GOLDFISH_OPENGL_DIR=$1 32 export VULKAN_CEREAL_DIR=$2 33 export VULKAN_REGISTRY_DIR=registry/vulkan 34fi 35 36# Detect clang-format 37if ! $WHICH clang-format > /dev/null; then 38 echo "Failed to find clang-format." 1>&2 39 exit 1 40fi 41 42# Generate Vulkan headers 43VULKAN_HEADERS_ROOT=$PROJECT_ROOT/include/vulkan 44rm -rf $VULKAN_HEADERS_ROOT && mkdir -p $VULKAN_HEADERS_ROOT 45if [ $? -ne 0 ]; then 46 echo "Failed to clear the old Vulkan headers." 1>&2 47 exit 1 48fi 49 50cd $VULKAN_REGISTRY_DIR/xml && make GENOPTS="-removeExtensions VK_GOOGLE_gfxstream" GENERATED=$VULKAN_HEADERS_ROOT 51if [ $? -ne 0 ]; then 52 echo "Failed to generate Vulkan headers." 1>&2 53 exit 1 54fi 55 56cd $PROJECT_ROOT 57 58export VK_CEREAL_GUEST_ENCODER_DIR=$GOLDFISH_OPENGL_DIR/system/vulkan_enc 59export VK_CEREAL_GUEST_HAL_DIR=$GOLDFISH_OPENGL_DIR/system/vulkan 60export VK_CEREAL_HOST_DECODER_DIR=$VULKAN_CEREAL_DIR/stream-servers/vulkan 61export VK_CEREAL_HOST_INCLUDE_DIR=$VULKAN_CEREAL_DIR/stream-servers 62export VK_CEREAL_HOST_SCRIPTS_DIR=$VULKAN_CEREAL_DIR/scripts 63export VK_CEREAL_BASELIB_PREFIX=aemu/base 64export VK_CEREAL_BASELIB_LINKNAME=aemu-base.headers 65export VK_CEREAL_VK_HEADER_TARGET=gfxstream_vulkan_headers 66export VK_CEREAL_UTILS_LINKNAME=gfxstream_utils.headers 67export VK_CEREAL_UTILS_PREFIX=utils 68 69VK_CEREAL_OUTPUT_DIR=$VK_CEREAL_HOST_DECODER_DIR/cereal 70if [ -d "$VK_CEREAL_GUEST_DIR" ]; then 71 mkdir -p $VK_CEREAL_GUEST_ENCODER_DIR 72 mkdir -p $VK_CEREAL_GUEST_HAL_DIR 73fi 74if [ -d "$VK_CEREAL_HOST_DIR" ]; then 75 mkdir -p $VK_CEREAL_HOST_DECODER_DIR 76 mkdir -p $VK_CEREAL_OUTPUT_DIR 77fi 78 79VULKAN_REGISTRY_XML_DIR=$VULKAN_REGISTRY_DIR/xml 80VULKAN_REGISTRY_SCRIPTS_DIR=$VULKAN_REGISTRY_DIR/scripts 81 82python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $VK_CEREAL_OUTPUT_DIR 83 84 85# Generate VK_ANDROID_native_buffer specific Vulkan definitions. 86if [ -d $VK_CEREAL_HOST_DECODER_DIR ]; then 87 OUT_DIR=$VK_CEREAL_HOST_DECODER_DIR 88 OUT_FILE_BASENAME="vk_android_native_buffer.h" 89 90 python3 registry/vulkan/scripts/genvk.py -registry registry/vulkan/xml/vk.xml -o $OUT_DIR \ 91 $OUT_FILE_BASENAME 92 93 if [ $? -ne 0 ]; then 94 echo "Failed to generate vk_android_native_buffer.h" 1>&2 95 exit 1 96 fi 97 if ! clang-format -i $OUT_DIR/$OUT_FILE_BASENAME; then 98 echo "Failed to reformat vk_android_native_buffer.h" 1>&2 99 exit 1 100 fi 101fi 102 103# Generate gfxstream specific Vulkan definitions. 104for OUT_DIR in $VK_CEREAL_HOST_DECODER_DIR $VK_CEREAL_GUEST_ENCODER_DIR; do 105 if [ -d "$OUT_DIR" ]; then 106 OUT_FILE_BASENAME=vulkan_gfxstream.h 107 python3 registry/vulkan/scripts/genvk.py -registry registry/vulkan/xml/vk.xml -o $OUT_DIR \ 108 $OUT_FILE_BASENAME 109 110 if [ $? -ne 0 ]; then 111 echo "Failed to generate gfxstream specific vulkan headers." 1>&2 112 exit 1 113 fi 114 if ! clang-format -i $OUT_DIR/$OUT_FILE_BASENAME; then 115 echo "Failed to reformat gfxstream specific vulkan headers." 1>&2 116 exit 1 117 fi 118 fi 119done 120