33
44 <UsingTask TaskName =" PInvokeTableGenerator" AssemblyFile =" $(WasmAppBuilderTasksAssemblyPath)" />
55 <UsingTask TaskName =" IcallTableGenerator" AssemblyFile =" $(WasmAppBuilderTasksAssemblyPath)" />
6+ <UsingTask TaskName =" Microsoft.WebAssembly.Build.Tasks.EmccCompile" AssemblyFile =" $(WasmAppBuilderTasksAssemblyPath)" />
67
78 <PropertyGroup >
89 <_WasmBuildNativeCoreDependsOn >
165166 <_EmccOptimizationFlagDefault Condition =" '$(_EmccOptimizationFlagDefault)' == ''" >-Oz</_EmccOptimizationFlagDefault >
166167
167168 <EmccCompileOptimizationFlag Condition =" '$(EmccCompileOptimizationFlag)' == ''" >$(_EmccOptimizationFlagDefault)</EmccCompileOptimizationFlag >
168- <EmccLinkOptimizationFlag Condition =" '$(EmccLinkOptimizationFlag)' == ''" >$(_EmccOptimizationFlagDefault) </EmccLinkOptimizationFlag >
169+ <EmccLinkOptimizationFlag Condition =" '$(EmccLinkOptimizationFlag)' == ''" >-O0 </EmccLinkOptimizationFlag >
169170 </PropertyGroup >
170171
171172 <ItemGroup >
172173 <_EmccCommonFlags Include =" $(_DefaultEmccFlags)" />
173174 <_EmccCommonFlags Include =" $(EmccFlags)" />
174175 <_EmccCommonFlags Include =" -s DISABLE_EXCEPTION_CATCHING=0" />
175176 <_EmccCommonFlags Include =" -g" Condition =" '$(WasmNativeStrip)' == 'false'" />
176- <_EmccCommonFlags Include =" -DENABLE_AOT=1" Condition =" '$(RunAOTCompilation)' == 'true'" />
177- <_EmccCommonFlags Include =" -DDRIVER_GEN=1" Condition =" '$(RunAOTCompilation)' == 'true'" />
178- <_EmccCommonFlags Include =" -DINVARIANT_GLOBALIZATION=1" Condition =" '$(InvariantGlobalization)' == 'true'" />
179- <_EmccCommonFlags Include =" -DLINK_ICALLS=1" Condition =" '$(WasmLinkIcalls)' == 'true'" />
180177 <_EmccCommonFlags Include =" -v" Condition =" '$(EmccVerbose)' != 'false'" />
181178 </ItemGroup >
182179
186183 </PropertyGroup >
187184
188185 <ItemGroup >
189- <_WasmObjectsToBuild Include =" $(_WasmRuntimePackSrcDir)\*.c" />
190- <_WasmObjectsToBuild OutputPath =" $(_WasmIntermediateOutputPath)%(FileName).o" />
191-
192186 <_DotnetJSSrcFile Include =" $(_WasmRuntimePackSrcDir)\*.js" />
193- <_WasmPInvokeModules Include =" %(_WasmNativeFileForLinking.FileName)" />
194187 </ItemGroup >
195188 </Target >
196189
227220 <!-- Adding optimization flag at the top, so it gets precedence -->
228221 <_EmccCFlags Include =" $(EmccCompileOptimizationFlag)" />
229222 <_EmccCFlags Include =" @(_EmccCommonFlags)" />
223+
224+ <_EmccCFlags Include =" -DENABLE_AOT=1" Condition =" '$(RunAOTCompilation)' == 'true'" />
225+ <_EmccCFlags Include =" -DDRIVER_GEN=1" Condition =" '$(RunAOTCompilation)' == 'true'" />
226+ <_EmccCFlags Include =" -DINVARIANT_GLOBALIZATION=1" Condition =" '$(InvariantGlobalization)' == 'true'" />
227+ <_EmccCFlags Include =" -DLINK_ICALLS=1" Condition =" '$(WasmLinkIcalls)' == 'true'" />
230228 <_EmccCFlags Include =" -DCORE_BINDINGS" />
231229 <_EmccCFlags Include =" -DGEN_PINVOKE=1" />
230+
232231 <_EmccCFlags Include =" " -I%(_EmccIncludePaths.Identity)" " />
233232 <_EmccCFlags Include =" -g" Condition =" '$(WasmNativeDebugSymbols)' == 'true'" />
234233 <_EmccCFlags Include =" -s EXPORTED_FUNCTIONS='[@(_ExportedFunctions->'" %(Identity)" ', ',')]'" Condition =" @(_ExportedFunctions->Count()) > 0" />
235234
236235 <_EmccCFlags Include =" $(EmccExtraCFlags)" />
236+
237+ <_WasmRuntimePackSrcFile Remove =" @(_WasmRuntimePackSrcFile)" />
238+ <_WasmRuntimePackSrcFile Include =" $(_WasmRuntimePackSrcDir)\*.c" />
239+ <_WasmRuntimePackSrcFile ObjectFile =" $(_WasmIntermediateOutputPath)%(FileName).o" />
240+ <_WasmSourceFileToCompile Include =" @(_WasmRuntimePackSrcFile)" />
237241 </ItemGroup >
238242
239243 <PropertyGroup >
244+ <_EmBuilder Condition =" $([MSBuild]::IsOSPlatform('WINDOWS'))" >embuilder.bat</_EmBuilder >
245+ <_EmBuilder Condition =" !$([MSBuild]::IsOSPlatform('WINDOWS'))" >embuilder.py</_EmBuilder >
240246 <_EmccCompileRsp >$(_WasmIntermediateOutputPath)emcc-compile.rsp</_EmccCompileRsp >
241247 </PropertyGroup >
242248
243249 <WriteLinesToFile Lines =" @(_EmccCFlags)" File =" $(_EmccCompileRsp)" Overwrite =" true" WriteOnlyWhenDifferent =" true" />
244250
251+ <!-- warm up the cache -->
252+ <Exec Command =" $(_EmBuilder) build MINIMAL" EnvironmentVariables =" @(EmscriptenEnvVars)" StandardOutputImportance =" Low" StandardErrorImportance =" Low" />
253+
245254 <Message Text =" Compiling native assets with emcc. This may take a while ..." Importance =" High" />
246- <Exec Command = ' emcc "@$(_EmccDefaultFlagsRsp )" "@$(_EmccCompileRsp )" "%(_WasmObjectsToBuild.Identity)" -c -o "%(_WasmObjectsToBuild.OutputPath )"' EnvironmentVariables =" @(EmscriptenEnvVars)" />
255+ <EmccCompile SourceFiles = " @(_WasmSourceFileToCompile )" Arguments = ' "@$(_EmccDefaultFlagsRsp )" "@$(_EmccCompileRsp )"' EnvironmentVariables =" @(EmscriptenEnvVars)" />
247256 </Target >
248257
249258 <Target Name =" _WasmLinkDotNet" >
250259 <ItemGroup >
251- <_WasmRuntimePackNativeLibs Include =" $(MicrosoftNetCoreAppRuntimePackRidNativeDir)\*.a" />
252- <_WasmObjects Include =" @(_WasmRuntimePackNativeLibs)" />
253- <_WasmObjects Include =" @(_WasmObjectsToBuild->'%(OutputPath)')" />
254-
255260 <!-- Adding optimization flag at the top, so it gets precedence -->
256261 <_EmccLDFlags Include =" $(EmccLinkOptimizationFlag)" />
257262 <_EmccLDFlags Include =" @(_EmccCommonFlags)" />
263+
258264 <_EmccLDFlags Include =" -s TOTAL_MEMORY=536870912" />
259265 <_EmccLDFlags Include =" $(EmccExtraLDFlags)" />
266+ </ItemGroup >
267+
268+ <EmccCompile
269+ Condition =" @(_BitCodeFile->Count()) > 0"
270+ SourceFiles =" @(_BitCodeFile)"
271+ Arguments =" " @$(_EmccDefaultFlagsRsp)" @(_EmccLDFlags->'%(Identity)', ' ')"
272+ EnvironmentVariables =" @(EmscriptenEnvVars)" />
273+
274+ <ItemGroup >
275+ <!-- order seems to matter -->
276+ <_WasmNativeFileForLinking Include =" %(_BitcodeFile.ObjectFile)" />
277+ <_WasmNativeFileForLinking Include =" %(_WasmSourceFileToCompile.ObjectFile)" />
260278
261- <_EmccLDFlags Include = " --js-library " %(_DotnetJSSrcFile.Identity) " " / >
262- <_EmccLDFlags Include =" --js-library " %(_WasmExtraJSFile.Identity) " " Condition = " '%(_WasmExtraJSFile.Kind)' == 'js-library' " />
279+ <!-- libmono* needs to be at the end, since it is used to resolve references the previous .o files -- >
280+ <_WasmNativeFileForLinking Include =" $(MicrosoftNetCoreAppRuntimePackRidNativeDir)\*.a " />
263281
264- <_EmccLDFlags Include =" --pre-js " %(_WasmExtraJSFile.Identity)" " Condition =" '%(_WasmExtraJSFile.Kind)' == 'pre-js'" />
265- <_EmccLDFlags Include =" --post-js " %(_WasmExtraJSFile.Identity)" " Condition =" '%(_WasmExtraJSFile.Kind)' == 'post-js'" />
282+ <_EmccLinkStepArgs Include =" @(_EmccLDFlags)" />
283+ <_EmccLinkStepArgs Include =" --js-library " %(_DotnetJSSrcFile.Identity)" " />
284+ <_EmccLinkStepArgs Include =" --js-library " %(_WasmExtraJSFile.Identity)" " Condition =" '%(_WasmExtraJSFile.Kind)' == 'js-library'" />
266285
267- <_EmccLDFlags Include =" " %(_WasmNativeFileForLinking.Identity)" " />
268- <_EmccLDFlags Include =" " %(_WasmObjects.Identity)" " />
269- <_EmccLDFlags Include =" -o " $(_WasmIntermediateOutputPath)dotnet.js" " />
286+ <_EmccLinkStepArgs Include =" --pre-js " %(_WasmExtraJSFile.Identity)" " Condition =" '%(_WasmExtraJSFile.Kind)' == 'pre-js'" />
287+ <_EmccLinkStepArgs Include =" --post-js " %(_WasmExtraJSFile.Identity)" " Condition =" '%(_WasmExtraJSFile.Kind)' == 'post-js'" />
288+
289+ <_EmccLinkStepArgs Include =" " %(_WasmNativeFileForLinking.Identity)" " />
290+ <_EmccLinkStepArgs Include =" -o " $(_WasmIntermediateOutputPath)dotnet.js" " />
270291 </ItemGroup >
271292
272293 <PropertyGroup >
273294 <_EmccLinkRsp >$(_WasmIntermediateOutputPath)emcc-link.rsp</_EmccLinkRsp >
274295 </PropertyGroup >
275296
276- <WriteLinesToFile Lines =" @(_EmccLDFlags)" File =" $(_EmccLinkRsp)" Overwrite =" true" WriteOnlyWhenDifferent =" true" />
277- <Message Text =" Running emcc with @(_EmccLDFlags->'%(Identity)', ' ')" Importance =" Low" />
297+ <WriteLinesToFile Lines =" @(_EmccLinkStepArgs)" File =" $(_EmccLinkRsp)" Overwrite =" true" WriteOnlyWhenDifferent =" true" />
298+
299+ <Message Text =" Linking with emcc. This may take a while ..." Importance =" High" />
300+ <Message Text =" Running emcc with @(_EmccLinkStepArgs->'%(Identity)', ' ')" Importance =" Low" />
278301 <Exec Command =' emcc "@$(_EmccDefaultFlagsRsp)" "@$(_EmccLinkRsp)"' EnvironmentVariables =" @(EmscriptenEnvVars)" />
279302
280303 <Exec Command =' wasm-opt$(_ExeExt) --strip-dwarf "$(_WasmIntermediateOutputPath)dotnet.wasm" -o "$(_WasmIntermediateOutputPath)dotnet.wasm"' Condition =" '$(WasmNativeStrip)' == 'true'" IgnoreStandardErrorWarningFormat =" true" EnvironmentVariables =" @(EmscriptenEnvVars)" />
289312
290313 <Target Name =" _GenerateDriverGenC" Condition =" '$(RunAOTCompilation)' != 'true' and '$(WasmProfilers)' != ''" >
291314 <PropertyGroup >
292- <EmccFlags >$(EmccFlags ) -DDRIVER_GEN=1</EmccFlags >
315+ <EmccExtraCFlags >$(EmccExtraCFlags ) -DDRIVER_GEN=1</EmccExtraCFlags >
293316 <InitAotProfilerCmd >
294317void mono_profiler_init_aot (const char *desc)%3B
295318EMSCRIPTEN_KEEPALIVE void mono_wasm_load_profiler_aot (const char *desc) { mono_profiler_init_aot (desc)%3B }
@@ -405,7 +428,7 @@ EMSCRIPTEN_KEEPALIVE void mono_wasm_load_profiler_aot (const char *desc) { mono_
405428 Profilers =" $(WasmProfilers)"
406429 AotModulesTablePath =" $(_WasmIntermediateOutputPath)driver-gen.c"
407430 UseLLVM =" true"
408- DisableParallelAot =" true "
431+ DisableParallelAot =" $(DisableParallelAot) "
409432 DedupAssembly =" $(_WasmDedupAssembly)"
410433 LLVMDebug =" dwarfdebug"
411434 LLVMPath =" $(EmscriptenUpstreamBinPath)" >
@@ -420,8 +443,7 @@ EMSCRIPTEN_KEEPALIVE void mono_wasm_load_profiler_aot (const char *desc) { mono_
420443
421444 <_AOTAssemblies Include =" @(_WasmAssembliesInternal)" Condition =" '%(_WasmAssembliesInternal._InternalForceInterpret)' != 'true'" />
422445 <_BitcodeFile Include =" %(_WasmAssembliesInternal.LlvmBitcodeFile)" />
423-
424- <_WasmNativeFileForLinking Include =" @(_BitcodeFile)" />
446+ <_BitcodeFile ObjectFile =" $(_WasmIntermediateOutputPath)%(FileName).o" />
425447 </ItemGroup >
426448 </Target >
427449
0 commit comments