blob: d7f6b7ad315c6422d95b19b0ed915691a21c92cc [file] [log] [blame] [edit]
# Copyright 2024-2025 The Khronos Group Inc.
# SPDX-License-Identifier: Apache-2.0
# Makefile.release - update external files generated in Vulkan spec
# repository when a public specification update is done.
# Needed to get the right version of test, apparently
SHELL = /bin/bash
REVISION = 999
# Location of other repository clones
GIT = ..
SPEC = $(GIT)/Vulkan-Docs
# As of 1.4.322 spec update, the build process has been changed to use a
# Vulkan-Hpp located underneath Vulkan-Docs (not a submodule).
# If you are using one located elsewhere then override HPP.
HPP = $(SPEC)/Vulkan-Hpp
REGISTRY = $(GIT)/registry/vulkan
update: revision-check create-branch update-files push-branch
echo "Verify that Vulkan-Headers is on a branch with the new header updates."
echo "Then push them to github and create an MR there with:"
echo " make -f Makefile.release REVISION=$(REVISION) push-branch"
# Working branch for the update, and a test if it exists
BRANCH = update-$(REVISION)
# Switch to new branch which will contain the update
create-branch: revision-check
git switch -q main
git pull -q
# If branch already exists, do nothing
@if test `git branch -l $(BRANCH) | wc -l` == 1 ; then \
echo "Branch $(BRANCH) already exists" ; \
git switch $(BRANCH) ; \
else \
echo "Creating branch $(BRANCH)" ; \
git switch -c $(BRANCH) ; \
fi
# Update headers and scripts in the new branch
update-files: remove-files update-headers update-scripts
# To ensure updates are caught, old versions of installed files are
# removed.
# Files in include/ to keep
HEADERS_KEEP = \
include/vulkan/vk_icd.h \
include/vulkan/vk_layer.h
remove-files:
rm -rf $(filter-out $(HEADERS_KEEP), $(wildcard include/vulkan/*))
rm -rf include/vk_video
rm -rf registry
mkdir include/vk_video registry registry/profiles registry/spec_tools
# Vulkan SC Vulkan-Hpp headers not published in the Vulkan-Headers repository
SCHPPFILES = \
include/vulkan/vulkansc.hpp \
include/vulkan/vulkansc.cppm \
include/vulkan/vulkansc_*.hpp
update-headers:
if test ! -d $(SPEC)/gen/include/ ; then \
echo "No C header file source directory $(SPEC)/gen/include" ; \
exit 1 ; \
fi
if test ! -d $(HPP)/vulkan ; then \
echo "No C++ header file source directory $(HPP)/vulkan" ; \
exit 1 ; \
fi
cp -r $(SPEC)/gen/include/* include/
cp -r $(HPP)/vulkan/* include/vulkan/
rm -f $(SCHPPFILES)
# Top-level scripts / XML to install
SCRIPTS = \
$(SPEC)/scripts/base_generator.py \
$(SPEC)/scripts/cgenerator.py \
$(SPEC)/scripts/generator.py \
$(SPEC)/scripts/parse_dependency.py \
$(SPEC)/scripts/reg.py \
$(SPEC)/scripts/stripAPI.py \
$(SPEC)/scripts/apiconventions.py \
$(SPEC)/scripts/vkconventions.py \
$(SPEC)/scripts/vulkan_object.py \
$(SPEC)/xml/vk.xml \
$(SPEC)/xml/video.xml \
$(REGISTRY)/specs/latest/validation/validusage.json
# Scripts in registry/spec_tools to install
SCRIPT_TOOLS = \
$(SPEC)/scripts/spec_tools/conventions.py \
$(SPEC)/scripts/spec_tools/util.py
# Profiles to install
PROFILES = \
$(wildcard $(SPEC)/xml/profiles/*)
update-scripts:
cp $(SCRIPTS) registry/
cp $(PROFILES) registry/profiles/
cp $(SCRIPT_TOOLS) registry/spec_tools/
# Once the branch is updated, push it to upstream and create an MR
# This should be used cautiously after verifying the branch contents are
# indeed correct and updates.
push-branch: revision-check
git switch $(BRANCH)
git add -u
echo "Detect new files and add them. This may not always succeed."
echo "Adding new files:" `git diff --name-only main`
git add `git diff --name-only main`
git commit -m "Update for Vulkan-Docs 1.4.$(REVISION)"
# Ideally we could automatically create the github PR.
# This will require additional software, see e.g.
# https://medium.com/@ravipatel.it/creating-a-git-pull-request-using-the-command-line-a-detailed-guide-4ef1ea017fe2
# https://gist.github.com/devinschumacher/bc66c162d9c6c167952f1943d0e6419c
# Gitlab supports this via 'git push' options e.g.
# -o merge_request.create -o merge_request.target=main -o merge_request.remove_source_branch \
# -o merge_request.title="Update for Vulkan-Docs 1.4.$(REVISION)" \
# -o merge_request.assign=oddhack
# But for github we must manually create a PR after pushing
git push --set-upstream origin $(BRANCH)
git switch main
git branch -d $(BRANCH)
echo "Now create a pull request by going to the URL:"
echo " https://github.com/KhronosGroup/Vulkan-Headers/pull/new/$(BRANCH)"
echo "After accepting this PR, continue with:"
echo " make -f Makefile.release REVISION=$(REVISION) tag-branch"
# Tag main for the update after accepting the update PR
TAG = v1.4.$(REVISION)
tag-branch:
git switch main
git pull
git tag -a $(TAG) -m "Update for Vulkan-Docs 1.4.$(REVISION)"
git push origin $(TAG)
echo "Now continue with Step 12 of the process (update public registry) from the wiki, until more scripting is done"
revision-check:
@if test $(REVISION) = 999 ; then echo "Must specify explicit REVISION= in make invocation" ; exit 1 ; fi