• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2013-2021 The Khronos Group Inc.
2#
3# SPDX-License-Identifier: Apache-2.0
4
5# If a recipe fails, delete its target file. Without this cleanup, the leftover
6# file from the failed recipe can falsely satisfy dependencies on subsequent
7# runs of `make`.
8.DELETE_ON_ERROR:
9
10QUIET	 ?= @
11MKDIR	 = mkdir -p
12CP	 = cp
13RM	 = rm -f
14RMRF	 = rm -rf
15
16# Generator scripts and options
17# GENOPTS can be e.g. '-noprotect'
18
19PYTHON ?= python3
20SCRIPTS = ../scripts
21GENOPTS =
22
23# Generate Vulkan headers from XML. Many other files can be generated
24# from vk.xml using the scripts, but they are all generated from
25# ../Makefile as part of the process of building the Specification.
26#
27# Targets:
28#
29# default / install - regenerate headers in ../include/vulkan/.
30# validate - run XML validator on vk.xml against the schema.
31# test - check if vulkan_core.h compiles.
32# clean_dirt - remove intermediate files.
33# clean - remove installed and intermediate files.
34
35GENERATED   = ../gen
36INCLUDE     = $(GENERATED)/include
37TESTS	    = ../tests
38VULKAN	    = $(INCLUDE)/vulkan
39SRC	    = ../src
40VULKAN_VIDEO_CODECS_STD_H = $(INCLUDE)/vk_video
41
42# Static files needed for a complete set of headers, cached in the
43# repository
44STATIC_HEADERS = $(VULKAN)/vulkan.h $(VULKAN)/vk_platform.h \
45                 $(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codecs_common.h \
46                 $(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h264std.h \
47                 $(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h264std_decode.h \
48                 $(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h264std_encode.h \
49                 $(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h265std.h \
50                 $(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h265std_decode.h \
51                 $(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h265std_encode.h
52# Where static headers are stored
53STATIC	                         = ../include/vulkan
54STATIC_VULKAN_VIDEO_CODECS_STD_H = ../include/vk_video
55
56# Vulkan platform-specific headers
57PLATFORM_HEADERS = \
58    $(VULKAN)/vulkan_android.h \
59    $(VULKAN)/vulkan_fuchsia.h \
60    $(VULKAN)/vulkan_ggp.h \
61    $(VULKAN)/vulkan_ios.h \
62    $(VULKAN)/vulkan_macos.h \
63    $(VULKAN)/vulkan_vi.h \
64    $(VULKAN)/vulkan_wayland.h \
65    $(VULKAN)/vulkan_win32.h \
66    $(VULKAN)/vulkan_xcb.h \
67    $(VULKAN)/vulkan_xlib.h \
68    $(VULKAN)/vulkan_directfb.h \
69    $(VULKAN)/vulkan_xlib_xrandr.h \
70    $(VULKAN)/vulkan_metal.h \
71    $(VULKAN)/vulkan_screen.h \
72    $(VULKAN)/vulkan_beta.h
73HEADERS     = $(VULKAN)/vulkan_core.h $(PLATFORM_HEADERS)
74
75default install: $(HEADERS) $(STATIC_HEADERS)
76
77$(VULKAN)/vulkan.h: $(STATIC)/vulkan.h
78	$(QUIET)$(MKDIR) $(VULKAN)
79	$(CP) $? $@
80
81$(VULKAN)/vk_platform.h: $(STATIC)/vk_platform.h
82	$(QUIET)$(MKDIR) $(VULKAN)
83	$(CP) $? $@
84
85$(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codecs_common.h: $(STATIC_VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codecs_common.h
86	$(QUIET)$(MKDIR) $(VULKAN_VIDEO_CODECS_STD_H)
87	$(CP) $? $@
88
89$(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h264std.h: $(STATIC_VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h264std.h
90	$(QUIET)$(MKDIR) $(VULKAN_VIDEO_CODECS_STD_H)
91	$(CP) $? $@
92
93$(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h264std_decode.h: $(STATIC_VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h264std_decode.h
94	$(QUIET)$(MKDIR) $(VULKAN_VIDEO_CODECS_STD_H)
95	$(CP) $? $@
96
97$(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h264std_encode.h: $(STATIC_VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h264std_encode.h
98	$(QUIET)$(MKDIR) $(VULKAN_VIDEO_CODECS_STD_H)
99	$(CP) $? $@
100
101$(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h265std.h: $(STATIC_VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h265std.h
102	$(QUIET)$(MKDIR) $(VULKAN_VIDEO_CODECS_STD_H)
103	$(CP) $? $@
104
105$(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h265std_decode.h: $(STATIC_VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h265std_decode.h
106	$(QUIET)$(MKDIR) $(VULKAN_VIDEO_CODECS_STD_H)
107	$(CP) $? $@
108
109$(VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h265std_encode.h: $(STATIC_VULKAN_VIDEO_CODECS_STD_H)/vulkan_video_codec_h265std_encode.h
110	$(QUIET)$(MKDIR) $(VULKAN_VIDEO_CODECS_STD_H)
111	$(CP) $? $@
112
113################################################
114
115# Autogenerate vulkan header from XML API description
116
117# Python and XML files on which vulkan_core.h depends
118GENSCRIPT   = $(SCRIPTS)/genvk.py
119VKXML	    = vk.xml
120VKH_DEPENDS = $(VKXML) $(GENSCRIPT) $(SCRIPTS)/reg.py $(SCRIPTS)/generator.py
121
122$(HEADERS): $(VKH_DEPENDS)
123	$(MKDIR) $(VULKAN)
124	$(PYTHON) $(GENSCRIPT) $(GENOPTS) -registry $(VKXML) \
125	    -o $(VULKAN) $(notdir $@)
126
127platform: $(PLATFORM_HEADERS)
128
129# Verify registry XML file against the schema
130validate:
131	jing -c registry.rnc $(VKXML)
132	$(PYTHON) $(GENSCRIPT) -validate -registry $(VKXML)
133
134# Test that vulkan_core.h compiles
135
136# Platforms to test
137TESTDEFS = -DVK_USE_PLATFORM_XCB_KHR -DVK_USE_PLATFORM_XLIB_KHR
138
139test: $(HEADERS) $(STATIC_HEADERS)
140	gcc -Wall -std=c99 -c -I$(INCLUDE) -I$(TESTS) $(TESTS)/htest.c
141	gcc -Wall -std=c11 -c -I$(INCLUDE) -I$(TESTS) $(TESTS)/htest.c
142	g++ -Wall -c -std=c++98 -I$(INCLUDE) -I$(TESTS) $(TESTS)/htest.c
143	g++ -Wall -c -std=c++11 -I$(INCLUDE) -I$(TESTS) $(TESTS)/htest.c
144	$(RM) $(TESTS)/test.o
145
146################################################
147
148# Files to clean up
149PYDIRT = diag.txt dumpReg.txt errwarn.txt *.pyc regdump.txt
150DIRT = $(PYDIRT) ERRS \#*
151
152# Clean intermediate files
153clean_dirt:
154	-$(RM) $(DIRT)
155
156# Clean generated targets and intermediates
157clean clobber: clean_dirt
158	-$(RMRF) $(INCLUDE)
159