Generate interface for specified versions using the current generator and generator options
(self)
| 1892 | self.validextensionstructs[parent].sort() |
| 1893 | |
| 1894 | def apiGen(self): |
| 1895 | """Generate interface for specified versions using the current |
| 1896 | generator and generator options""" |
| 1897 | |
| 1898 | self.gen.logMsg('diag', '*******************************************') |
| 1899 | self.gen.logMsg('diag', ' Registry.apiGen file:', self.genOpts.filename, |
| 1900 | 'api:', self.genOpts.apiname, |
| 1901 | 'profile:', self.genOpts.profile) |
| 1902 | self.gen.logMsg('diag', '*******************************************') |
| 1903 | |
| 1904 | # Could reset required/declared flags for all features here. |
| 1905 | # This has been removed as never used. The initial motivation was |
| 1906 | # the idea of calling apiGen() repeatedly for different targets, but |
| 1907 | # this has never been done. The 20% or so build-time speedup that |
| 1908 | # might result is not worth the effort to make it actually work. |
| 1909 | # |
| 1910 | # self.apiReset() |
| 1911 | |
| 1912 | # Compile regexps used to select versions & extensions |
| 1913 | regVersions = re.compile(self.genOpts.versions) |
| 1914 | regEmitVersions = re.compile(self.genOpts.emitversions) |
| 1915 | regAddExtensions = re.compile(self.genOpts.addExtensions) |
| 1916 | regRemoveExtensions = re.compile(self.genOpts.removeExtensions) |
| 1917 | regEmitExtensions = re.compile(self.genOpts.emitExtensions) |
| 1918 | regEmitSpirv = re.compile(self.genOpts.emitSpirv) |
| 1919 | regEmitFormats = re.compile(self.genOpts.emitFormats) |
| 1920 | |
| 1921 | # Get all matching API feature names & add to list of FeatureInfo |
| 1922 | # Note we used to select on feature version attributes, not names. |
| 1923 | self.genFeatures = {} |
| 1924 | apiMatch = False |
| 1925 | for key in self.apidict: |
| 1926 | fi = self.apidict[key] |
| 1927 | api = fi.elem.get('api') |
| 1928 | if apiNameMatch(self.genOpts.apiname, api): |
| 1929 | apiMatch = True |
| 1930 | if regVersions.match(fi.name): |
| 1931 | # Matches API & version #s being generated. |
| 1932 | # Mark for emission and add to the generated features list. |
| 1933 | # @@ Could use 'declared' instead of 'emit'? |
| 1934 | fi.emit = (regEmitVersions.match(fi.name) is not None) |
| 1935 | self.genFeatures[fi.name] = fi |
| 1936 | if not fi.emit: |
| 1937 | self.gen.logMsg('diag', 'NOT tagging feature api =', api, |
| 1938 | 'name =', fi.name, 'version =', fi.version, |
| 1939 | 'for emission (does not match emitversions pattern)') |
| 1940 | else: |
| 1941 | self.gen.logMsg('diag', 'Including feature api =', api, |
| 1942 | 'name =', fi.name, 'version =', fi.version, |
| 1943 | 'for emission (matches emitversions pattern)') |
| 1944 | else: |
| 1945 | self.gen.logMsg('diag', 'NOT including feature api =', api, |
| 1946 | 'name =', fi.name, 'version =', fi.version, |
| 1947 | '(does not match requested versions)') |
| 1948 | else: |
| 1949 | self.gen.logMsg('diag', 'NOT including feature api =', api, |
| 1950 | 'name =', fi.name, |
| 1951 | '(does not match requested API)') |