diff --git a/CMakeLists.txt b/CMakeLists.txt index fe8ffc8..ea40581 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,6 +18,15 @@ endif () include_directories ("${CMAKE_CURRENT_BINARY_DIR}") +if (WIN32) + set(VK_PLATFORM "win32") +elseif(LINUX) + set(VK_PLATFORM "xcb") +else() + message(FATAL_ERROR "unhandled platform") +endif() + + ##----------------------------------------------------------------------------- add_custom_command ( OUTPUT @@ -27,8 +36,9 @@ COMMENT COMMAND "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/tools/spec.py" - "${CMAKE_CURRENT_SOURCE_DIR}/specs/xml/vk.xml" - "${CMAKE_CURRENT_BINARY_DIR}/vk.hpp" + "--src" "${CMAKE_CURRENT_SOURCE_DIR}/specs/xml/vk.xml" + "--dst" "${CMAKE_CURRENT_BINARY_DIR}/vk.hpp" + "--platform" "${VK_PLATFORM}" DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/tools/spec.py" "${CMAKE_CURRENT_SOURCE_DIR}/specs/xml/vk.xml" diff --git a/tools/spec.py b/tools/spec.py index 00a3309..e72b586 100644 --- a/tools/spec.py +++ b/tools/spec.py @@ -42,7 +42,7 @@ class registry: return result - def serialise(self, platform:str): + def serialise(self, platform:Set[str]): required = [] for (_,f) in self.features.items(): @@ -490,18 +490,18 @@ class extension(type): else: raise "Unknown extension node" - def apply(self, reg:registry, platform:str): + def apply(self, reg:registry, platform:Set[str]): if self.name in reg.applied: return [] reg.applied.add(self.name) - if self.platform and self.platform != platform: + if self.platform and self.platform not in platform: return [] required = [] for dep in self.depends: - required = reg.extensions[dep].apply (reg, platform) + required = reg.extensions[dep].apply(reg, platform) logging.info("Applying extension:", self.name, file=sys.stderr) for node in self.requires: @@ -650,8 +650,14 @@ if __name__ == '__main__': logging.getLogger().setLevel(logging.WARNING) parser = argparse.ArgumentParser(description='Transform XML API specification into C++ headers') - parser.add_argument('src', type=str, help='the path to the XML file to transform') - parser.add_argument('dst', type=str, help='the output path for the result') + parser.add_argument('--src', type=str, help='the path to the XML file to transform') + parser.add_argument('--dst', type=str, help='the output path for the result') + parser.add_argument( + '--platform', + type=str, + action='append', + help='a platform to generate output for. may be specific multiple times"' + ) args = parser.parse_args() @@ -681,7 +687,7 @@ if __name__ == '__main__': #reg.extensions['VK_KHR_surface'].apply(reg, platform='xcb') extensions = ["VK_KHR_swapchain", "VK_EXT_debug_report", "VK_KHR_external_memory"] - q = reg.serialise(platform='xcb') + q = reg.serialise(args.platform) dst.write("#pragma once\n")