• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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