kopia lustrzana https://github.com/micropython/micropython
windows/msvc: Implement automatic qstr generation using makeqstrdefs.
Note this still needs some work: currently all source files are always preprocessed no matter which one actually changed, moreover that happens file by file without any parallellism so builds are painstakingly slow.pull/1888/merge
rodzic
61b560f63f
commit
9a627e8881
|
@ -3,33 +3,74 @@
|
|||
|
||||
<Import Project="paths.props" Condition="'$(PyPathsIncluded)' != 'True'"/>
|
||||
|
||||
<!--Generate qstrdefs.h and mpversion.h similar to what is done in py/py.mk-->
|
||||
<Target Name="GenerateHeaders" DependsOnTargets="MakeQstrData;MakeVersionHdr">
|
||||
<!--Generate qstrdefs.h and mpversion.h similar to what is done in py/mkrules.mk-->
|
||||
<Target Name="GenerateHeaders" DependsOnTargets="MakeVersionHdr;MakeQstrData">
|
||||
</Target>
|
||||
|
||||
<PropertyGroup>
|
||||
<DestDir>$(PyBuildDir)genhdr\</DestDir>
|
||||
<PySrcDir>$(PyBaseDir)py\</PySrcDir>
|
||||
<QstrDefs>$(PyBaseDir)unix\qstrdefsport.h</QstrDefs>
|
||||
<QstrDefsCollected>$(DestDir)qstrdefscollected.h</QstrDefsCollected>
|
||||
<QstrGen>$(DestDir)qstrdefs.generated.h</QstrGen>
|
||||
<PyPython Condition="'$(PyPython)' == ''">python</PyPython>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PyQstrSourceFiles Include="@(ClCompile);$(PySrcDir)qstrdefs.h"/>
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="MakeDestDir">
|
||||
<MakeDir Directories="$(DestDir)"/>
|
||||
</Target>
|
||||
|
||||
<Target Name="MakeQstrData" DependsOnTargets="MakeDestDir">
|
||||
<PropertyGroup>
|
||||
<PreProc>$(DestDir)qstrdefs.preprocessed.h</PreProc>
|
||||
<QstrDefs>$(PyBaseDir)unix\qstrdefsport.h</QstrDefs>
|
||||
<DestFile>$(DestDir)qstrdefs.generated.h</DestFile>
|
||||
<TmpFile>$(DestFile).tmp</TmpFile>
|
||||
</PropertyGroup>
|
||||
<Target Name="MakeQstrDefs" DependsOnTargets="MakeDestDir" Inputs="@(PyQstrSourceFiles)" Outputs="$(QstrDefsCollected)">
|
||||
<ItemGroup>
|
||||
<PyIncDirs Include="$(PyIncDirs)"/>
|
||||
<PreProcDefs Include=" %(ClCompile.PreProcessorDefinitions)"/>
|
||||
<PyQstrSourceFiles>
|
||||
<Qstr>$([System.String]::new('%(FullPath)').Replace('$(PyBaseDir)', '$(DestDir)'))</Qstr>
|
||||
</PyQstrSourceFiles>
|
||||
<PyQstrSourceFiles>
|
||||
<Qstr>$([System.IO.Path]::ChangeExtension('%(Qstr)', '.qstr'))</Qstr>
|
||||
<PreProc>$([System.IO.Path]::ChangeExtension('%(Qstr)', '.pp'))</PreProc>
|
||||
<QstrDir>$([System.IO.Path]::GetDirectoryName('%(Qstr)'))</QstrDir>
|
||||
<PreProcOnly>$([System.String]::new('%(FileName)').Contains('qstrdefs'))</PreProcOnly>
|
||||
</PyQstrSourceFiles>
|
||||
</ItemGroup>
|
||||
<Exec Command="cl /nologo /I@(PyIncDirs, ' /I') /Fi$(PreProc) /P $(PySrcDir)qstrdefs.h"/>
|
||||
<Exec Command="$(PyPython) $(PySrcDir)makeqstrdata.py $(PreProc) $(QstrDefs) > $(TmpFile)"/>
|
||||
<MSBuild Projects="$(MSBuildThisFileFullPath)" Targets="CopyFileIfDifferent" Properties="SourceFile=$(TmpFile);DestFile=$(DestFile)"/>
|
||||
<PropertyGroup>
|
||||
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Preprocess and pass to makeqstrdefs if needed, else just copy -->
|
||||
<MakeDir Directories="@(PyQstrSourceFiles->'%(QstrDir)')"/>
|
||||
<Touch Files="$(QstrGen)" AlwaysCreate="true"/>
|
||||
|
||||
<Exec Command="cl /nologo /I@(PyIncDirs, ' /I') /D@(PreProcDefs, ' /D') /Fi%(PyQstrSourceFiles.PreProc) /P %(PyQstrSourceFiles.Identity)"/>
|
||||
<Exec Command="$(PyPython) $(PySrcDir)makeqstrdefs.py -s -o %(PyQstrSourceFiles.Qstr) %(PyQstrSourceFiles.PreProc)" Condition="'%(PyQstrSourceFiles.PreProcOnly)' != 'True'"/>
|
||||
<Copy SourceFiles="%(PyQstrSourceFiles.PreProc)" DestinationFiles="%(PyQstrSourceFiles.Qstr)" Condition="'%(PyQstrSourceFiles.PreProcOnly)' == 'True'"/>
|
||||
|
||||
<!-- Collect all output (where qstrdefs file(s) have priority over autogenerated ones), then
|
||||
filter out lines which definitely aren't qstr definitions so we don't end up with a huge (> 10mb) filesize -->
|
||||
<ReadLinesFromFile File="%(PyQstrSourceFiles.Qstr)" Condition="'%(PyQstrSourceFiles.PreProcOnly)' == 'True'">
|
||||
<Output TaskParameter="Lines" ItemName="PreProcLines"/>
|
||||
</ReadLinesFromFile>
|
||||
<ReadLinesFromFile File="%(PyQstrSourceFiles.Qstr)">
|
||||
<Output TaskParameter="Lines" ItemName="PreProcLines"/>
|
||||
</ReadLinesFromFile>
|
||||
<ItemGroup>
|
||||
<QStrLines Include="@(PreProcLines)" Condition="$([System.String]::new('%(Identity)').Contains('Q'))"/>
|
||||
</ItemGroup>
|
||||
|
||||
<WriteLinesToFile Lines="@(QStrLines)" File="$(QstrDefsCollected)" Overwrite="true"/>
|
||||
</Target>
|
||||
|
||||
<Target Name="MakeQstrData" DependsOnTargets="MakeQstrDefs">
|
||||
<PropertyGroup>
|
||||
<TmpFile>$(DestFile).tmp</TmpFile>
|
||||
</PropertyGroup>
|
||||
<Exec Command="$(PyPython) $(PySrcDir)makeqstrdata.py $(QstrDefs) $(QstrDefsCollected) > $(TmpFile)"/>
|
||||
<MSBuild Projects="$(MSBuildThisFileFullPath)" Targets="CopyFileIfDifferent" Properties="SourceFile=$(TmpFile);DestFile=$(QstrGen)"/>
|
||||
</Target>
|
||||
|
||||
<Target Name="MakeVersionHdr" DependsOnTargets="MakeDestDir">
|
||||
|
|
Ładowanie…
Reference in New Issue