-
Notifications
You must be signed in to change notification settings - Fork 4
/
RELEASE.proj
244 lines (222 loc) · 12.7 KB
/
RELEASE.proj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
<Project DefaultTargets="All" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--
MSBuild script to create release version of LDC.
Configures and compiles LLVM and LDC and creates release zip file.
Uses ninja to reduce compile time.
-->
<PropertyGroup>
<!-- General setup -->
<Platform Condition="'$(Platform)' == '' ">x86</Platform>
</PropertyGroup>
<Choose>
<When Condition="'$(Platform)' == 'X64'">
<PropertyGroup>
<WinName>win64</WinName>
<CurlBin>bin64</CurlBin>
<CurlLib>lib64</CurlLib>
</PropertyGroup>
</When>
<Otherwise>
<PropertyGroup>
<WinName>win32</WinName>
<CurlBin>bin</CurlBin>
<CurlLib>lib32mscoff</CurlLib>
</PropertyGroup>
</Otherwise>
</Choose>
<PropertyGroup>
<!-- The CMake build type -->
<CMakeBuildType>Release</CMakeBuildType>
<!-- Temporary directory for all build artefacts -->
<BaseDir>C:\Temp</BaseDir>
<BuildDir>$(BaseDir)\LDC-BUILD$(Platform)</BuildDir>
<SrcDir>$(BuildDir)\src</SrcDir>
<WrkDir>$(BuildDir)\wrk</WrkDir>
<InstallDir>$(BuildDir)\install</InstallDir>
<!-- CMake executable -->
<CMakeExe>cmake</CMakeExe>
<!-- Git executable -->
<GitExe>git</GitExe>
<!-- Ninja executable -->
<NinjaExe>ninja</NinjaExe>
<!-- 7zip executable -->
<SevenZipExe>C:\Program Files\7-Zip\7z.exe</SevenZipExe>
<!-- Python executable -->
<PythonExe>C:/Program Files/Python/Python35/python.exe</PythonExe>
<!-- LibCurl -->
<LibCurlArchiveFile>C:\Software\curl\libcurl-7.48.0-WinSSL-zlib-x86-x64.zip</LibCurlArchiveFile>
<LibCurlArchiveDir>$(InstallDir)\libcurl-7.48.0-WinSSL-zlib-x86-x64</LibCurlArchiveDir>
<LibCurlArchiveDllFile>$(LibCurlArchiveDir)\dmd2\windows\$(CurlBin)\libcurl.dll</LibCurlArchiveDllFile>
<LibCurlArchiveLibFile>$(LibCurlArchiveDir)\dmd2\windows\$(CurlLib)\curl.lib</LibCurlArchiveLibFile>
<!-- LLVM -->
<LLVMSrcFile>C:\Software\LLVM\llvm-5.0.0-2.src.tar.xz</LLVMSrcFile>
<LLVMSrcDir>$(SrcDir)\llvm-5.0.0-2.src</LLVMSrcDir>
<LLVMWrkDir>$(WrkDir)\llvm</LLVMWrkDir>
<LLVMInstallDir>$(InstallDir)\llvm</LLVMInstallDir>
<LLVMTargetsToBuild>X86;AArch64;ARM;PowerPC;NVPTX</LLVMTargetsToBuild>
<!-- DUB -->
<DUBVersion>v1.6.0</DUBVersion>
<DUBGitSource>https://github.com/dlang/dub.git</DUBGitSource>
<DUBSrcDir>$(SrcDir)\dub</DUBSrcDir>
<!-- LDC -->
<LDCVersion>1.6.0</LDCVersion>
<LDCVersionSuffix>-beta1</LDCVersionSuffix>
<!-- Use the following properties to clone from local git folder
<LDCGitSource>C:/OpenSource/ldc/ldc</LDCGitSource>
<LDCDRuntimeGitSource>C:/OpenSource/ldc/ldc/runtime/druntime</LDCDRuntimeGitSource>
<LDCPhobosGitSource>C:/OpenSource/ldc/ldc/runtime/phobos</LDCPhobosGitSource>
<LDCTestGitSource>C:/OpenSource/ldc/ldc/tests/d2/dmd-testsuite</LDCTestGitSource>
-->
<LDCGitSource>https://github.com/ldc-developers/ldc.git</LDCGitSource>
<LDCDRuntimeGitSource>https://github.com/ldc-developers/druntime.git</LDCDRuntimeGitSource>
<LDCPhobosGitSource>https://github.com/ldc-developers/phobos.git</LDCPhobosGitSource>
<LDCTestGitSource>https://github.com/ldc-developers/dmd-testsuite.git</LDCTestGitSource>
<LDCSrcDir>$(SrcDir)\ldc</LDCSrcDir>
<LDCWrkDir>$(WrkDir)\ldc</LDCWrkDir>
<LDCInstallDir>$(InstallDir)\ldc2-$(LDCVersion)$(LDCVersionSuffix)-$(WinName)-msvc</LDCInstallDir>
<LDCArchiveFileName>ldc2-$(LDCVersion)$(LDCVersionSuffix)-$(WinName)-msvc.zip</LDCArchiveFileName>
</PropertyGroup>
<ItemGroup>
<LibCurlDirectories Include="$(LibCurlArchiveDir)"/>
<LLVMDirectories Include="$(LLVMSrcDir);$(LLVMWrkDir);$(LLVMInstallDir)"/>
<LDCDirectories Include="$(LDCSrcDir);$(LDCWrkDir);$(LDCInstallDir)"/>
</ItemGroup>
<Target Name="LibCurl">
<RemoveDir Directories="@(LibCurlArchiveDir)" />
<MakeDir Directories="$(LibCurlArchiveDir)"/>
<Exec Command=""$(SevenZipExe)" x "$(LibCurlArchiveFile)" > nul" WorkingDirectory="$(LibCurlArchiveDir)"/>
</Target>
<Target Name="LLVM">
<RemoveDir Directories="@(LLVMDirectories)" />
<MakeDir Directories="@(LLVMDirectories)"/>
<Exec Command=""$(SevenZipExe)" x "$(LLVMSrcFile)" -so | "$(SevenZipExe)" x -aoa -si -ttar -o. > nul" WorkingDirectory="$(LLVMSrcDir)\.."/>
<Exec Command=""$(CMakeExe)" -G Ninja -DCMAKE_BUILD_TYPE=$(CMakeBuildType) "$(LLVMSrcDir)" -DCMAKE_INSTALL_PREFIX="$(LLVMInstallDir)" -DPYTHON_EXECUTABLE="$(PythonExe)" -DLLVM_TARGETS_TO_BUILD="$(LLVMTargetsToBuild)" -DLLVM_USE_CRT_$(CMakeBuildType.ToUpper())=MT" WorkingDirectory="$(LLVMWrkDir)"/>
<Exec Command=""$(NinjaExe)" install" WorkingDirectory="$(LLVMWrkDir)"/>
</Target>
<Target Name="LDC">
<RemoveDir Directories="@(LDCDirectories)" />
<MakeDir Directories="@(LDCDirectories)"/>
<Exec Command=""$(GitExe)" clone --branch v$(LDCVersion)$(LDCVersionSuffix) --single-branch $(LDCGitSource) ldc" WorkingDirectory="$(LDCSrcDir)\.."/>
<CallTarget Targets="LDCGitModules"/>
<Exec Command=""$(GitExe)" submodule init" WorkingDirectory="$(LDCSrcDir)"/>
<Exec Command=""$(GitExe)" submodule update" WorkingDirectory="$(LDCSrcDir)"/>
<!-- build bootstrap LDC using automatically detected D compiler -->
<MakeDir Directories="$(LDCWrkDir)\bootstrap"/>
<Exec Command=""$(CMakeExe)" -G Ninja -DCMAKE_BUILD_TYPE=$(CMakeBuildType) "$(LDCSrcDir)" -DLLVM_ROOT_DIR="$(LLVMInstallDir.Replace('\','/'))"" WorkingDirectory="$(LDCWrkDir)\bootstrap"/>
<Exec Command=""$(NinjaExe)"" WorkingDirectory="$(LDCWrkDir)\bootstrap"/>
<!-- rebuild LDC with bootstrap compiler -->
<Exec Command=""$(CMakeExe)" -G Ninja -DCMAKE_BUILD_TYPE=$(CMakeBuildType) "$(LDCSrcDir)" -DLLVM_ROOT_DIR="$(LLVMInstallDir.Replace('\','/'))" -DD_COMPILER="$(LDCWrkDir)\bootstrap\bin\ldmd2.exe" -DCMAKE_INSTALL_PREFIX="$(LDCInstallDir.Replace('\','/'))" -DINCLUDE_INSTALL_DIR="$(LDCInstallDir.Replace('\','/'))/import"" WorkingDirectory="$(LDCWrkDir)"/>
<Exec Command=""$(NinjaExe)" install" WorkingDirectory="$(LDCWrkDir)"/>
<ReplaceFileText InputFilename="$(LDCInstallDir)\etc\ldc2.conf" OutputFilename="$(LDCInstallDir)\etc\ldc2.conf" MatchExpression="(?i)$(LDCInstallDir.Replace('\','/'))" ReplacementText="%%ldcbinarypath%%/.."/>
<Copy SourceFiles="$(LibCurlArchiveDllFile)" DestinationFolder="$(LDCInstallDir)\bin"/>
<Copy SourceFiles="$(LibCurlArchiveLibFile)" DestinationFolder="$(LDCInstallDir)\lib"/>
<Copy SourceFiles="$(MSBuildThisFileDirectory)..\ldc2-packaging\pkgfiles\README.txt" DestinationFolder="$(LDCInstallDir)"/>
<Copy SourceFiles="$(LDCSrcDir)\LICENSE" DestinationFolder="$(LDCInstallDir)"/>
</Target>
<Target Name="LDCMultilib">
<PropertyGroup>
<LDCInstallDir32>$(BaseDir)\LDC-BUILDx86\install\ldc2-$(LDCVersion)$(LDCVersionSuffix)-win32-msvc</LDCInstallDir32>
</PropertyGroup>
<ItemGroup>
<_CopyItems Include="$(LDCInstallDir32)\lib\**"/>
</ItemGroup>
<Copy SourceFiles="@(_CopyItems)" DestinationFolder="$(LDCInstallDir)\lib32"/>
<RenameDir FromDirectory="$(LDCInstallDir)\lib" ToDirectory="$(LDCInstallDir)\lib64"/>
<ReplaceFileText InputFilename="$(LDCInstallDir)\etc\ldc2.conf" OutputFilename="$(LDCInstallDir)\etc\ldc2.conf" MatchExpression="%%ldcbinarypath%%/../lib" ReplacementText="%%ldcbinarypath%%/../lib64"/>
<ReplaceFileText InputFilename="$(LDCInstallDir32)\etc\ldc2.conf" OutputFilename="$(LDCInstallDir)\etc\ldc2.conf.tmp" MatchExpression="(?s)^.*\r\ndefault:" ReplacementText="i686-pc-windows-msvc:"/>
<ReplaceFileText InputFilename="$(LDCInstallDir)\etc\ldc2.conf.tmp" OutputFilename="$(LDCInstallDir)\etc\ldc2.conf.tmp" MatchExpression="%%ldcbinarypath%%/../lib" ReplacementText="%%ldcbinarypath%%/../lib32"/>
<ItemGroup>
<_FileContents Include="$([System.IO.File]::ReadAllText($(LDCInstallDir)\etc\ldc2.conf.tmp))"/>
</ItemGroup>
<WriteLinesToFile File="$(LDCInstallDir)\etc\ldc2.conf" Lines="@(_FileContents)" Overwrite="false" />
<Delete Files="$(LDCInstallDir)\etc\ldc2.conf.tmp"/>
</Target>
<Target Name="DUB">
<RemoveDir Directories="$(DUBSrcDir)" />
<MakeDir Directories="$(DUBSrcDir)"/>
<Exec Command=""$(GitExe)" clone $(DUBGitSource) dub" WorkingDirectory="$(DUBSrcDir)\.."/>
<Exec Command=""$(GitExe)" checkout $(DUBVersion)" WorkingDirectory="$(DUBSrcDir)"/>
<ReplaceFileText InputFilename="$(DUBSrcDir)\build.cmd" OutputFilename="$(DUBSrcDir)\build.cmd" MatchExpression="curl.lib" ReplacementText=""$(LDCInstallDir)\lib\curl.lib""/>
<Exec Command="(set DC="$(LDCInstallDir)\bin\ldmd2") & "$(DUBSrcDir)\build.cmd"" WorkingDirectory="$(DUBSrcDir)"/>
<Copy SourceFiles="$(DUBSrcDir)\bin\dub.exe" DestinationFolder="$(LDCInstallDir)\bin"/>
</Target>
<Target Name="Tools">
<RemoveDir Directories="$(SrcDir)\tools" />
<Exec Command=""$(GitExe)" clone --recursive https://github.com/dlang/tools.git" WorkingDirectory="$(SrcDir)"/>
<Exec Command=""$(GitExe)" checkout master" WorkingDirectory="$(SrcDir)\tools"/>
<Exec Command=""$(LDCInstallDir)\bin\ldmd2" -w rdmd.d" WorkingDirectory="$(SrcDir)\tools"/>
<Exec Command=""$(LDCInstallDir)\bin\ldmd2" -w ddemangle.d" WorkingDirectory="$(SrcDir)\tools"/>
<Exec Command=""$(LDCInstallDir)\bin\ldmd2" -w DustMite\dustmite.d DustMite\splitter.d" WorkingDirectory="$(SrcDir)\tools"/>
<Copy SourceFiles="$(SrcDir)\tools\rdmd.exe;$(SrcDir)\tools\ddemangle.exe;$(SrcDir)\tools\dustmite.exe" DestinationFolder="$(LDCInstallDir)\bin"/>
</Target>
<Target Name="ZIP">
<PropertyGroup>
<LDCSrcArchiveBaseName>ldc-$(LDCVersion)$(LDCVersionSuffix)-src</LDCSrcArchiveBaseName>
</PropertyGroup>
<Delete Files="$(InstallDir)\$(LDCArchiveFileName)"/>
<Exec Command=""$(SevenZipExe)" a -tzip -mx=9 $(LDCArchiveFileName) $(LDCInstallDir) > nul" WorkingDirectory="$(LDCInstallDir)\.."/>
<Delete Files="$(SrcDir)\$(LDCSrcArchiveBaseName).zip"/>
<RenameDir FromDirectory="$(LDCSrcDir)" ToDirectory="$(SrcDir)\$(LDCSrcArchiveBaseName)"/>
<Exec Command=""$(SevenZipExe)" a -xr!.git* -tzip -mx=9 $(LDCSrcArchiveBaseName).zip $(LDCSrcArchiveBaseName) > nul" WorkingDirectory="$(SrcDir)"/>
</Target>
<Target Name="All">
<CallTarget Targets="LLVM;LibCurl;LDC;DUB;Tools"/>
<CallTarget Targets="LDCMultilib" Condition="'$(Platform)' == 'X64'"/>
<CallTarget Targets="ZIP"/>
</Target>
<Target Name="LDCGitModules">
<ItemGroup>
<Line1 Include="line01"><Text><![CDATA[
[submodule "druntime"]
path = runtime/druntime
url = $(LDCDRuntimeGitSource)
[submodule "phobos"]
path = runtime/phobos
url = $(LDCPhobosGitSource)
[submodule "tests/d2/dmd-testsuite"]
path = tests/d2/dmd-testsuite
url = $(LDCTestGitSource)
]]></Text>
</Line1>
</ItemGroup>
<WriteLinesToFile File="$(LDCSrcDir)\.gitmodules" Lines="@(Line1->'%(Text)')" Overwrite="true" Encoding="utf-8"/>
</Target>
<UsingTask TaskName="ReplaceFileText" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<InputFilename ParameterType="System.String" Required="true" />
<OutputFilename ParameterType="System.String" Required="true" />
<MatchExpression ParameterType="System.String" Required="true" />
<ReplacementText ParameterType="System.String" Required="true" />
</ParameterGroup>
<Task>
<Reference Include="System.Core" />
<Using Namespace="System" />
<Using Namespace="System.IO" />
<Using Namespace="System.Text.RegularExpressions" />
<Code Type="Fragment" Language="cs">
<![CDATA[
File.WriteAllText(
OutputFilename,
Regex.Replace(File.ReadAllText(InputFilename), MatchExpression, ReplacementText)
);
]]>
</Code>
</Task>
</UsingTask>
<UsingTask TaskName="RenameDir" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<FromDirectory ParameterType="System.String" Required="true" />
<ToDirectory ParameterType="System.String" Required="true" />
</ParameterGroup>
<Task>
<Reference Include="System.Core" />
<Using Namespace="System" />
<Using Namespace="System.IO" />
<Code Type="Fragment" Language="cs">
<![CDATA[
Directory.Move(FromDirectory, ToDirectory);
]]>
</Code>
</Task>
</UsingTask>
</Project>