• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2013-2022 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
21XML_CONSISTENCY = $(SCRIPTS)/xml_consistency.py
22GENOPTS =
23
24# Generate Vulkan headers from XML. Many other files can be generated
25# from vk.xml using the scripts, but they are all generated from
26# ../Makefile as part of the process of building the Specification.
27#
28# Targets:
29#
30# default / install - regenerate headers in ../include/vulkan/.
31# validate - run XML validator on vk.xml against the schema.
32# test - check if vulkan_core.h compiles.
33# clean_dirt - remove intermediate files.
34# clean - remove installed and intermediate files.
35
36GENERATED   = ../gen
37INCLUDE     = $(GENERATED)/include
38TESTS	    = ../tests
39VULKAN	    = $(INCLUDE)/vulkan
40SRC	    = ../src
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# Where static headers are stored
46STATIC				 = ../include/vulkan
47
48# Vulkan platform-specific headers
49PLATFORM_HEADERS = \
50    $(VULKAN)/vulkan_android.h \
51    $(VULKAN)/vulkan_fuchsia.h \
52    $(VULKAN)/vulkan_ggp.h \
53    $(VULKAN)/vulkan_ios.h \
54    $(VULKAN)/vulkan_macos.h \
55    $(VULKAN)/vulkan_vi.h \
56    $(VULKAN)/vulkan_wayland.h \
57    $(VULKAN)/vulkan_win32.h \
58    $(VULKAN)/vulkan_xcb.h \
59    $(VULKAN)/vulkan_xlib.h \
60    $(VULKAN)/vulkan_directfb.h \
61    $(VULKAN)/vulkan_xlib_xrandr.h \
62    $(VULKAN)/vulkan_metal.h \
63    $(VULKAN)/vulkan_screen.h \
64    $(VULKAN)/vulkan_beta.h
65HEADERS     = $(VULKAN)/vulkan_core.h $(PLATFORM_HEADERS)
66
67default: install
68
69################################################
70
71# Autogenerate vulkan header from XML API description
72
73# Python and XML files on which vulkan_core.h depends
74GENSCRIPT   = $(SCRIPTS)/genvk.py
75VKXML	    = vk.xml
76VKH_DEPENDS = $(VKXML) $(GENSCRIPT) $(SCRIPTS)/reg.py $(SCRIPTS)/generator.py
77
78$(HEADERS): $(VKH_DEPENDS)
79	$(MKDIR) $(VULKAN)
80	$(PYTHON) $(GENSCRIPT) $(GENOPTS) -registry $(VKXML) \
81	    -o $(VULKAN) $(notdir $@)
82
83platform: $(PLATFORM_HEADERS)
84
85# Autogenerate video codec headers from XML
86
87VIDEO_INCLUDE = $(INCLUDE)/vk_video
88CODECS = vulkan_video_codecs_common.h \
89	 vulkan_video_codec_h264std.h \
90	 vulkan_video_codec_h264std_decode.h \
91	 vulkan_video_codec_h264std_encode.h \
92	 vulkan_video_codec_h265std.h \
93	 vulkan_video_codec_h265std_decode.h \
94	 vulkan_video_codec_h265std_encode.h
95CODEC_HEADERS = $(CODECS:%=$(VIDEO_INCLUDE)/%)
96CODECXML = video.xml
97
98codec_headers: $(CODEC_HEADERS)
99
100$(VIDEO_INCLUDE)/%.h: $(CODECXML) $(GENSCRIPT) $(SCRIPTS)/reg.py $(SCRIPTS)/generator.py
101	$(QUIET)$(MKDIR) $(VIDEO_INCLUDE)
102	$(QUIET)$(PYTHON) $(GENSCRIPT) $(GENOPTS) -registry $(CODECXML) -o $(VIDEO_INCLUDE) $(notdir $@)
103
104# Verify registry XML files against the schema
105validate:
106	jing -c registry.rnc $(VKXML)
107	$(PYTHON) $(XML_CONSISTENCY) $(VKXML)
108	jing -c registry.rnc $(CODECXML)
109
110# Test that generated Vulkan headers compile
111
112# Platforms to test
113TESTDEFS = -DVK_USE_PLATFORM_XCB_KHR -DVK_USE_PLATFORM_XLIB_KHR
114
115test: $(HEADERS) $(STATIC_HEADERS) $(CODEC_HEADERS)
116	gcc -Wall -pedantic-errors -std=c99 -c -I$(INCLUDE) -I$(TESTS) $(TESTS)/htest.c
117	gcc -Wall -pedantic-errors -std=c11 -c -I$(INCLUDE) -I$(TESTS) $(TESTS)/htest.c
118	g++ -Wall -pedantic-errors -c -std=c++11 -I$(INCLUDE) -I$(TESTS) $(TESTS)/htest.c
119	$(RM) htest.o
120
121# Test that generated video codec headers compile
122
123vtest: $(CODEC_HEADERS)
124	gcc -Wall -std=c99 -c -I$(INCLUDE) $(TESTS)/vtest.c
125	$(RM) vtest.o
126
127################################################
128
129install: $(HEADERS) $(STATIC_HEADERS) $(CODEC_HEADERS)
130
131$(VULKAN)/vulkan.h: $(STATIC)/vulkan.h
132	$(QUIET)$(MKDIR) $(VULKAN)
133	$(CP) $? $@
134
135$(VULKAN)/vk_platform.h: $(STATIC)/vk_platform.h
136	$(QUIET)$(MKDIR) $(VULKAN)
137	$(CP) $? $@
138
139################################################
140
141# Files to clean up
142PYDIRT = diag.txt dumpReg.txt errwarn.txt *.pyc regdump.txt
143DIRT = $(PYDIRT) ERRS *.o
144
145# Clean intermediate files
146clean_dirt:
147	-$(RM) $(DIRT) \#*
148
149# Clean generated targets and intermediates
150clean clobber: clean_dirt
151	-$(RMRF) $(INCLUDE) $(VIDEO_INCLUDE)
152