1e5c31af7Sopenharmony_ci# Copyright 2013-2024 The Khronos Group Inc. 2e5c31af7Sopenharmony_ci# 3e5c31af7Sopenharmony_ci# SPDX-License-Identifier: Apache-2.0 4e5c31af7Sopenharmony_ci 5e5c31af7Sopenharmony_ci# If a recipe fails, delete its target file. Without this cleanup, the leftover 6e5c31af7Sopenharmony_ci# file from the failed recipe can falsely satisfy dependencies on subsequent 7e5c31af7Sopenharmony_ci# runs of `make`. 8e5c31af7Sopenharmony_ci.DELETE_ON_ERROR: 9e5c31af7Sopenharmony_ci 10e5c31af7Sopenharmony_ciQUIET ?= @ 11e5c31af7Sopenharmony_ciMKDIR = mkdir -p 12e5c31af7Sopenharmony_ciCP = cp 13e5c31af7Sopenharmony_ciRM = rm -f 14e5c31af7Sopenharmony_ciRMRF = rm -rf 15e5c31af7Sopenharmony_ci 16e5c31af7Sopenharmony_ci# Generator scripts and options 17e5c31af7Sopenharmony_ci# GENOPTS can be e.g. '-noprotect' 18e5c31af7Sopenharmony_ci 19e5c31af7Sopenharmony_ciPYTHON ?= python3 20e5c31af7Sopenharmony_ciSCRIPTS = ../scripts 21e5c31af7Sopenharmony_ciXML_CONSISTENCY = $(SCRIPTS)/xml_consistency.py 22e5c31af7Sopenharmony_ciGENOPTS = 23e5c31af7Sopenharmony_ci 24e5c31af7Sopenharmony_ci# Generate Vulkan headers from XML. Many other files can be generated 25e5c31af7Sopenharmony_ci# from vk.xml using the scripts, but they are all generated from 26e5c31af7Sopenharmony_ci# ../Makefile as part of the process of building the Specification. 27e5c31af7Sopenharmony_ci# 28e5c31af7Sopenharmony_ci# Targets: 29e5c31af7Sopenharmony_ci# 30e5c31af7Sopenharmony_ci# default / install - regenerate headers in ../include/vulkan/. 31e5c31af7Sopenharmony_ci# validate - run XML validator on vk.xml against the schema. 32e5c31af7Sopenharmony_ci# test - check if vulkan_core.h compiles. 33e5c31af7Sopenharmony_ci# clean_dirt - remove intermediate files. 34e5c31af7Sopenharmony_ci# clean - remove installed and intermediate files. 35e5c31af7Sopenharmony_ci 36e5c31af7Sopenharmony_ciGENERATED = ../gen 37e5c31af7Sopenharmony_ciINCLUDE = $(GENERATED)/include 38e5c31af7Sopenharmony_ciTESTS = ../tests 39e5c31af7Sopenharmony_ciVULKAN = $(INCLUDE)/vulkan 40e5c31af7Sopenharmony_ciJSON = $(GENERATED)/out/json 41e5c31af7Sopenharmony_ciSRC = ../src 42e5c31af7Sopenharmony_ci 43e5c31af7Sopenharmony_ciVULKAN_API ?= vulkan 44e5c31af7Sopenharmony_ciifeq ($(VULKAN_API),vulkan) 45e5c31af7Sopenharmony_ciAPI_SUFFIX := 46e5c31af7Sopenharmony_ciMISRACOPTS ?= 47e5c31af7Sopenharmony_ciMISRACPPOPTS ?= 48e5c31af7Sopenharmony_cielse 49e5c31af7Sopenharmony_ciAPI_SUFFIX := _sc 50e5c31af7Sopenharmony_ci# default options for generating MISRA C or MISRA C++ headers 51e5c31af7Sopenharmony_ci# can be overridden from commandline 52e5c31af7Sopenharmony_ciMISRACOPTS ?= -misracstyle 53e5c31af7Sopenharmony_ciMISRACPPOPTS ?= -misracppstyle 54e5c31af7Sopenharmony_ciendif 55e5c31af7Sopenharmony_ci 56e5c31af7Sopenharmony_ci# Static files needed for a complete set of headers, cached in the 57e5c31af7Sopenharmony_ci# repository 58e5c31af7Sopenharmony_ciSTATIC_HEADERS = $(VULKAN)/vulkan$(API_SUFFIX).h $(VULKAN)/vk_platform.h 59e5c31af7Sopenharmony_ci 60e5c31af7Sopenharmony_ci# Where static headers are stored 61e5c31af7Sopenharmony_ciSTATIC = ../include/vulkan 62e5c31af7Sopenharmony_ciSTATIC_JSON_SRC = ../json 63e5c31af7Sopenharmony_ci 64e5c31af7Sopenharmony_ci# Vulkan platform-specific headers 65e5c31af7Sopenharmony_ciPLATFORM_HEADERS = \ 66e5c31af7Sopenharmony_ci $(VULKAN)/vulkan_android.h \ 67e5c31af7Sopenharmony_ci $(VULKAN)/vulkan_fuchsia.h \ 68e5c31af7Sopenharmony_ci $(VULKAN)/vulkan_ggp.h \ 69e5c31af7Sopenharmony_ci $(VULKAN)/vulkan_ios.h \ 70e5c31af7Sopenharmony_ci $(VULKAN)/vulkan_macos.h \ 71e5c31af7Sopenharmony_ci $(VULKAN)/vulkan_vi.h \ 72e5c31af7Sopenharmony_ci $(VULKAN)/vulkan_wayland.h \ 73e5c31af7Sopenharmony_ci $(VULKAN)/vulkan_win32.h \ 74e5c31af7Sopenharmony_ci $(VULKAN)/vulkan_xcb.h \ 75e5c31af7Sopenharmony_ci $(VULKAN)/vulkan_xlib.h \ 76e5c31af7Sopenharmony_ci $(VULKAN)/vulkan_directfb.h \ 77e5c31af7Sopenharmony_ci $(VULKAN)/vulkan_xlib_xrandr.h \ 78e5c31af7Sopenharmony_ci $(VULKAN)/vulkan_metal.h \ 79e5c31af7Sopenharmony_ci $(VULKAN)/vulkan_screen.h \ 80e5c31af7Sopenharmony_ci $(VULKAN)/vulkan_beta.h 81e5c31af7Sopenharmony_ci 82e5c31af7Sopenharmony_ci#@ vulkan_sci.h is Vulkan SC-specific 83e5c31af7Sopenharmony_ciifeq ($(VULKAN_API),vulkansc) 84e5c31af7Sopenharmony_ciPLATFORM_HEADERS := $(PLATFORM_HEADERS) $(VULKAN)/vulkan_sci.h 85e5c31af7Sopenharmony_ciendif 86e5c31af7Sopenharmony_ci 87e5c31af7Sopenharmony_ciHEADERS_H = $(VULKAN)/vulkan$(API_SUFFIX)_core.h $(PLATFORM_HEADERS) 88e5c31af7Sopenharmony_ciifeq ($(VULKAN_API),vulkansc) 89e5c31af7Sopenharmony_ciHEADERS_HPP = $(VULKAN)/vulkan$(API_SUFFIX)_core.hpp 90e5c31af7Sopenharmony_ciSTATIC_JSON = $(STATIC_JSON_SRC)/vkpcc.json 91e5c31af7Sopenharmony_ciJSON_PCC = $(JSON)/vkpcc.json 92e5c31af7Sopenharmony_ciSTATIC_CTS_COPY = \ 93e5c31af7Sopenharmony_ci $(JSON)/cts/vkjson_data_default.h \ 94e5c31af7Sopenharmony_ci $(JSON)/cts/vkjson_parser_default.h 95e5c31af7Sopenharmony_ciJSON_SCHEMA = $(JSON)/vk.json 96e5c31af7Sopenharmony_ciJSON_GENERATOR = $(JSON)/vulkan_json_data.hpp \ 97e5c31af7Sopenharmony_ci $(JSON)/vulkan_json_gen.h \ 98e5c31af7Sopenharmony_ci $(JSON)/vulkan_json_gen.c 99e5c31af7Sopenharmony_ciJSON_PARSER = $(JSON)/vulkan_json_parser.hpp 100e5c31af7Sopenharmony_ciJSON_CTS = $(JSON)/cts/vulkan_json_data.hpp $(JSON)/cts/vulkan_json_parser.hpp 101e5c31af7Sopenharmony_ciJSON_SCRIPTS = $(SCRIPTS)/json_parser.py $(SCRIPTS)/json_generator.py 102e5c31af7Sopenharmony_ciendif 103e5c31af7Sopenharmony_ciHEADERS = $(HEADERS_H) $(HEADERS_HPP) 104e5c31af7Sopenharmony_ciJSON_FILES = $(JSON_SCHEMA) $(JSON_GENERATOR) $(JSON_PARSER) 105e5c31af7Sopenharmony_ciJSON_CTS_FILES = $(JSON_CTS) 106e5c31af7Sopenharmony_ci 107e5c31af7Sopenharmony_cidefault: install 108e5c31af7Sopenharmony_ci 109e5c31af7Sopenharmony_ciinstall: $(HEADERS) $(STATIC_HEADERS) $(CODEC_HEADERS) $(JSON_FILES) $(JSON_PCC) $(JSON_CTS_FILES) $(STATIC_CTS_COPY) 110e5c31af7Sopenharmony_ci 111e5c31af7Sopenharmony_ci$(VULKAN)/vulkan$(API_SUFFIX).h: $(STATIC)/vulkan$(API_SUFFIX).h 112e5c31af7Sopenharmony_ci $(QUIET)$(MKDIR) $(VULKAN) 113e5c31af7Sopenharmony_ci $(CP) $? $@ 114e5c31af7Sopenharmony_ci 115e5c31af7Sopenharmony_ci$(VULKAN)/vulkan$(API_SUFFIX).hpp: $(STATIC)/vulkan$(API_SUFFIX).h 116e5c31af7Sopenharmony_ci $(QUIET)$(MKDIR) $(VULKAN) 117e5c31af7Sopenharmony_ci $(CP) $? $@ 118e5c31af7Sopenharmony_ci 119e5c31af7Sopenharmony_ci$(VULKAN)/vk_platform.h: $(STATIC)/vk_platform.h 120e5c31af7Sopenharmony_ci $(QUIET)$(MKDIR) $(VULKAN) 121e5c31af7Sopenharmony_ci $(CP) $? $@ 122e5c31af7Sopenharmony_ci 123e5c31af7Sopenharmony_ci################################################ 124e5c31af7Sopenharmony_ci 125e5c31af7Sopenharmony_ci# Autogenerate vulkan header from XML API description 126e5c31af7Sopenharmony_ci 127e5c31af7Sopenharmony_ci# Python and XML files on which vulkan_core.h depends 128e5c31af7Sopenharmony_ciGENSCRIPT = $(SCRIPTS)/genvk.py 129e5c31af7Sopenharmony_ciVKXML = vk.xml 130e5c31af7Sopenharmony_ciVKH_DEPENDS = $(VKXML) $(GENSCRIPT) $(SCRIPTS)/reg.py $(SCRIPTS)/generator.py 131e5c31af7Sopenharmony_ci 132e5c31af7Sopenharmony_ci$(HEADERS_H): $(VKH_DEPENDS) 133e5c31af7Sopenharmony_ci $(MKDIR) $(VULKAN) 134e5c31af7Sopenharmony_ci $(PYTHON) $(GENSCRIPT) $(MISRACOPTS) $(GENOPTS) -registry $(VKXML) \ 135e5c31af7Sopenharmony_ci -o $(VULKAN) $(notdir $@) 136e5c31af7Sopenharmony_ci 137e5c31af7Sopenharmony_ci$(HEADERS_HPP): $(VKH_DEPENDS) 138e5c31af7Sopenharmony_ci $(MKDIR) $(VULKAN) 139e5c31af7Sopenharmony_ci $(PYTHON) $(GENSCRIPT) $(MISRACPPOPTS) $(GENOPTS) -registry $(VKXML) \ 140e5c31af7Sopenharmony_ci -o $(VULKAN) $(notdir $@) 141e5c31af7Sopenharmony_ci 142e5c31af7Sopenharmony_ciplatform: $(PLATFORM_HEADERS) 143e5c31af7Sopenharmony_ci 144e5c31af7Sopenharmony_ci# Autogenerate video codec headers from XML 145e5c31af7Sopenharmony_ci 146e5c31af7Sopenharmony_ciVIDEO_INCLUDE = $(INCLUDE)/vk_video 147e5c31af7Sopenharmony_ciCODECS = vulkan_video_codecs_common.h \ 148e5c31af7Sopenharmony_ci vulkan_video_codec_h264std.h \ 149e5c31af7Sopenharmony_ci vulkan_video_codec_h264std_decode.h \ 150e5c31af7Sopenharmony_ci vulkan_video_codec_h264std_encode.h \ 151e5c31af7Sopenharmony_ci vulkan_video_codec_h265std.h \ 152e5c31af7Sopenharmony_ci vulkan_video_codec_h265std_decode.h \ 153e5c31af7Sopenharmony_ci vulkan_video_codec_h265std_encode.h 154e5c31af7Sopenharmony_ciCODECXML = video.xml 155e5c31af7Sopenharmony_ci# Do not build video headers for Vulkan SC 156e5c31af7Sopenharmony_ciifeq ($(VULKAN_API),vulkan) 157e5c31af7Sopenharmony_ciCODEC_HEADERS = $(CODECS:%=$(VIDEO_INCLUDE)/%) 158e5c31af7Sopenharmony_cielse 159e5c31af7Sopenharmony_ciCODEC_HEADERS = 160e5c31af7Sopenharmony_ciendif 161e5c31af7Sopenharmony_ci 162e5c31af7Sopenharmony_cicodec_headers: $(CODEC_HEADERS) 163e5c31af7Sopenharmony_ci 164e5c31af7Sopenharmony_ci$(VIDEO_INCLUDE)/%.h: $(CODECXML) $(GENSCRIPT) $(SCRIPTS)/reg.py $(SCRIPTS)/generator.py 165e5c31af7Sopenharmony_ci $(QUIET)$(MKDIR) $(VIDEO_INCLUDE) 166e5c31af7Sopenharmony_ci $(QUIET)$(PYTHON) $(GENSCRIPT) $(GENOPTS) -registry $(CODECXML) -o $(VIDEO_INCLUDE) $(notdir $@) 167e5c31af7Sopenharmony_ci 168e5c31af7Sopenharmony_ci# Verify registry XML files against the schema 169e5c31af7Sopenharmony_civalidate: 170e5c31af7Sopenharmony_ci jing -c registry.rnc $(VKXML) 171e5c31af7Sopenharmony_ci $(PYTHON) $(XML_CONSISTENCY) $(VKXML) 172e5c31af7Sopenharmony_ci jing -c registry.rnc $(CODECXML) 173e5c31af7Sopenharmony_ci 174e5c31af7Sopenharmony_ci# Test that generated Vulkan headers compile 175e5c31af7Sopenharmony_ci 176e5c31af7Sopenharmony_ci# Platforms to test 177e5c31af7Sopenharmony_ciTESTDEFS = -DVK_USE_PLATFORM_XCB_KHR -DVK_USE_PLATFORM_XLIB_KHR 178e5c31af7Sopenharmony_ci 179e5c31af7Sopenharmony_ciTESTFILE = $(TESTS)/htest$(API_SUFFIX).c 180e5c31af7Sopenharmony_ci 181e5c31af7Sopenharmony_ci#@ -DUSE_HPP=1 is used only for Vulkan SC build 182e5c31af7Sopenharmony_citest: $(HEADERS) $(STATIC_HEADERS) $(CODEC_HEADERS) 183e5c31af7Sopenharmony_ci gcc -Wall -pedantic-errors -std=c99 -c -I$(INCLUDE) -I$(TESTS) $(TESTFILE) 184e5c31af7Sopenharmony_ci gcc -Wall -pedantic-errors -std=c11 -c -I$(INCLUDE) -I$(TESTS) $(TESTFILE) 185e5c31af7Sopenharmony_ci g++ -Wall -pedantic-errors -c -std=c++11 -I$(INCLUDE) -I$(TESTS) $(TESTFILE) 186e5c31af7Sopenharmony_ciifeq ($(VULKAN_API),vulkansc) 187e5c31af7Sopenharmony_ci g++ -Wall -pedantic-errors -c -std=c++98 -I$(INCLUDE) -I$(TESTS) $(TESTFILE) 188e5c31af7Sopenharmony_ci g++ -Wall -pedantic-errors -c -std=c++11 -I$(INCLUDE) -I$(TESTS) -DUSE_HPP=1 $(TESTFILE) 189e5c31af7Sopenharmony_ciendif 190e5c31af7Sopenharmony_ci $(RM) htest.o $(TESTS)/test.o 191e5c31af7Sopenharmony_ci 192e5c31af7Sopenharmony_ci# Test that generated video codec headers compile 193e5c31af7Sopenharmony_ci 194e5c31af7Sopenharmony_civtest: $(CODEC_HEADERS) 195e5c31af7Sopenharmony_ci gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODECS_COMMON 196e5c31af7Sopenharmony_ci gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_H264STD 197e5c31af7Sopenharmony_ci gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_H264STD_DECODE 198e5c31af7Sopenharmony_ci gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_H264STD_ENCODE 199e5c31af7Sopenharmony_ci gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_H264STD -D VULKAN_VIDEO_CODEC_H264STD_DECODE -D VULKAN_VIDEO_CODEC_H264STD_ENCODE 200e5c31af7Sopenharmony_ci gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_H265STD 201e5c31af7Sopenharmony_ci gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_H265STD_DECODE 202e5c31af7Sopenharmony_ci gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_H265STD_ENCODE 203e5c31af7Sopenharmony_ci gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_CODEC_H265STD -D VULKAN_VIDEO_CODEC_H265STD_DECODE -D VULKAN_VIDEO_CODEC_H265STD_ENCODE 204e5c31af7Sopenharmony_ci gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_ALL 205e5c31af7Sopenharmony_ci gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c -D VULKAN_VIDEO_ALL -D VK_NO_STDINT_H 206e5c31af7Sopenharmony_ci $(RM) vtest.o 207e5c31af7Sopenharmony_ci 208e5c31af7Sopenharmony_ci################################################ 209e5c31af7Sopenharmony_ci 210e5c31af7Sopenharmony_ci# Autogenerate JSON Schema and utils from the XML API description 211e5c31af7Sopenharmony_ci$(JSON_FILES): $(VKH_DEPENDS) $(JSON_SCRIPTS) 212e5c31af7Sopenharmony_ci $(QUIET)$(MKDIR) $(JSON) 213e5c31af7Sopenharmony_ci $(PYTHON) $(GENSCRIPT) $(GENOPTS) -registry $(VKXML) \ 214e5c31af7Sopenharmony_ci -o $(JSON) $(notdir $@) 215e5c31af7Sopenharmony_ci 216e5c31af7Sopenharmony_ci$(JSON_CTS_FILES): $(VKH_DEPENDS) $(JSON_SCRIPTS) 217e5c31af7Sopenharmony_ci $(QUIET)$(MKDIR) $(JSON)/cts 218e5c31af7Sopenharmony_ci $(PYTHON) $(GENSCRIPT) $(GENOPTS) -registry $(VKXML) --iscts \ 219e5c31af7Sopenharmony_ci -o $(JSON)/cts $(notdir $@) 220e5c31af7Sopenharmony_ci 221e5c31af7Sopenharmony_ci$(JSON)/cts/vkjson_data_default.h: $(STATIC_JSON_SRC)/vkjson_data_default.h 222e5c31af7Sopenharmony_ci $(QUIET)$(MKDIR) $(JSON)/cts 223e5c31af7Sopenharmony_ci $(CP) $? $@ 224e5c31af7Sopenharmony_ci 225e5c31af7Sopenharmony_ci$(JSON)/cts/vkjson_parser_default.h: $(STATIC_JSON_SRC)/vkjson_parser_default.h 226e5c31af7Sopenharmony_ci $(QUIET)$(MKDIR) $(JSON)/cts 227e5c31af7Sopenharmony_ci $(CP) $? $@ 228e5c31af7Sopenharmony_ci 229e5c31af7Sopenharmony_ci$(JSON_PCC): $(STATIC_JSON) 230e5c31af7Sopenharmony_ci $(QUIET)$(MKDIR) $(JSON) 231e5c31af7Sopenharmony_ci $(CP) $? $@ 232e5c31af7Sopenharmony_ci 233e5c31af7Sopenharmony_ci################################################ 234e5c31af7Sopenharmony_ci 235e5c31af7Sopenharmony_ci# Files to clean up 236e5c31af7Sopenharmony_ciPYDIRT = diag.txt dumpReg.txt errwarn.txt *.pyc regdump.txt 237e5c31af7Sopenharmony_ciDIRT = $(PYDIRT) ERRS *.o 238e5c31af7Sopenharmony_ci 239e5c31af7Sopenharmony_ci# Clean intermediate files 240e5c31af7Sopenharmony_ciclean_dirt: 241e5c31af7Sopenharmony_ci -$(RM) $(DIRT) \#* 242e5c31af7Sopenharmony_ci 243e5c31af7Sopenharmony_ci# Clean generated targets and intermediates 244e5c31af7Sopenharmony_ciclean clobber: clean_dirt 245e5c31af7Sopenharmony_ci -$(RMRF) $(INCLUDE) $(JSON) 246e5c31af7Sopenharmony_ci -$(RMRF) $(INCLUDE) $(VIDEO_INCLUDE) 247