Skip to content

Commit cc2ef8b

Browse files
committed
Use target batching
All hail target batching? ALSO: If using `@(None)`/etc. into a sub-directory, as `src/java-interop` does for e.g. `$(OutputPath)win-x64\java-interop.dll`, you MUST: 1. Use `%(Link) to have the *relative* sub-dir + filename, AND 2. You MUST use `\` for the sub-dir! With these two incantations, `<Copy/>` will *ignore* any errors about the source files not existing, IFF the source & destination file paths are IDENTICAL. (String-wise identical!) Thus if you use `\`, you're 'fine' -- strings compare -- but if you use `/`, you're in for pain and suffering.
1 parent 95ec6a1 commit cc2ef8b

File tree

2 files changed

+35
-104
lines changed

2 files changed

+35
-104
lines changed

src/java-interop/Directory.Build.targets

Lines changed: 35 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,34 @@
77
<_JavaInteropLibName Condition=" '$(OS)' != 'Windows_NT' And !Exists ('/Library/Frameworks/') ">libjava-interop.so</_JavaInteropLibName>
88
<_JavaInteropLibName Condition=" '$(OS)' == 'Windows_NT' ">java-interop.dll</_JavaInteropLibName>
99
</PropertyGroup>
10-
<PropertyGroup Condition=" '$(OS)' != 'Windows_NT' ">
11-
<_PrimaryOutputPath>$(OutputPath)$(_JavaInteropLibName)</_PrimaryOutputPath>
12-
</PropertyGroup>
13-
<PropertyGroup Condition=" '$(OS)' == 'Windows_NT' ">
14-
<_PrimaryDir>win-x64</_PrimaryDir>
15-
<_PrimaryArch>x86_amd64</_PrimaryArch>
16-
<_PrimaryOutputPath>$(OutputPath)$(_PrimaryDir)\$(_JavaInteropLibName)</_PrimaryOutputPath>
17-
<_SecondaryDir>win-x86</_SecondaryDir>
18-
<_SecondaryArch>x86</_SecondaryArch>
19-
<_SecondaryOutputPath>$(OutputPath)$(_SecondaryDir)\$(_JavaInteropLibName)</_SecondaryOutputPath>
20-
</PropertyGroup>
2110

22-
<ItemGroup Condition=" '$(OS)' == 'Windows_NT' ">
23-
<None Include="$(_PrimaryOutputPath)">
24-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
25-
<Link>$(_PrimaryDir)\$(_JavaInteropLibName)</Link>
26-
</None>
27-
<None Include="$(_SecondaryOutputPath)">
28-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
29-
<Link>$(_SecondaryDir)\$(_JavaInteropLibName)</Link>
30-
</None>
11+
<ItemGroup>
12+
<ClInclude Include="*.h" />
13+
</ItemGroup>
14+
15+
<ItemGroup>
16+
<ClCompile Include="$(IntermediateOutputPath)jni.c" />
17+
<ClCompile Include="*.cc" />
3118
</ItemGroup>
3219

20+
<ItemGroup Condition=" '$(OS)' == 'Windows_NT' ">
21+
<_JavaInteropNativeLib Include="CMakeLists.txt">
22+
<Arch>x86_amd64</Arch>
23+
<Dir>win-x64\</Dir>
24+
</_JavaInteropNativeLib>
25+
<_JavaInteropNativeLib Include="CMakeLists.txt">
26+
<Arch>x86</Arch>
27+
<Dir>win-x86\</Dir>
28+
</_JavaInteropNativeLib>
29+
</ItemGroup>
3330
<ItemGroup Condition=" '$(OS)' != 'Windows_NT' ">
34-
<None Include="$(_PrimaryOutputPath)">
31+
<_JavaInteropNativeLib Include="CMakeLists.txt" />
32+
</ItemGroup>
33+
34+
<ItemGroup>
35+
<None Include="@(_JavaInteropNativeLib->'$(OutputPath)%(Dir)$(_JavaInteropLibName)')">
3536
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
37+
<Link>%(Dir)$(_JavaInteropLibName)</Link>
3638
</None>
3739
</ItemGroup>
3840

@@ -43,11 +45,6 @@
4345
<Exec Command="$(_RunJNIEnvGen) $(IntermediateOutputPath)jni.g.cs $(IntermediateOutputPath)jni.c" />
4446
</Target>
4547

46-
<Target Name="_BuildLibs"
47-
BeforeTargets="Build"
48-
DependsOnTargets="_BuildPrimaryLib;_BuildSecondaryLib">
49-
</Target>
50-
5148
<Target Name="_GetCmakeOptions">
5249
<PropertyGroup Condition=" '$(TargetFramework)' == 'net472' And '@(MonoIncludePath->Count())' != '0' ">
5350
<_MonoDirs>"-DMONO_INCLUDE_LIST=@(MonoIncludePath, ';')"</_MonoDirs>
@@ -61,69 +58,38 @@
6158
</PropertyGroup>
6259
</Target>
6360

64-
<Target Name="_BuildPrimaryLib"
65-
DependsOnTargets="GetNativeBuildCommands;_BuildJni_c;_GetCmakeOptions"
66-
Inputs="CMakeLists.txt;$(MSBuildThisFileFullPath);java-interop.csproj"
67-
Outputs="$(_PrimaryOutputPath)">
68-
<MakeDir Directories="$(IntermediateOutputPath)$(_PrimaryDir)" />
69-
<ItemGroup>
70-
<_Cmake
71-
Condition=" '$(PrepareNativeToolchain)' != '' "
72-
Include="PrepareNativeToolchain=$(PrepareNativeToolchain) $(_PrimaryArch)"
73-
/>
74-
<_Cmake Include="CmakePath=$(CmakePath)" />
75-
<_Cmake Include="CmakeGenerator=$(CmakeGenerator)" />
76-
<_Cmake Include="CmakeSourceDir=$(MSBuildThisFileDirectory)" />
77-
<_Cmake Include="CmakeBuildDir=$(MSBuildThisFileDirectory)$(IntermediateOutputPath)$(_PrimaryDir)" />
78-
<_Cmake Include="CmakeExtraArgs=$(_ExtraArgs)" />
79-
</ItemGroup>
80-
<MSBuild
81-
Projects="..\..\build-tools\scripts\RunCmake.proj"
82-
Properties="@(_Cmake)"
83-
Targets="Cmake"
84-
/>
85-
<MakeDir Directories="$(OutputPath)$(_PrimaryDir)" />
86-
<ItemGroup>
87-
<_Libs Include="$(IntermediateOutputPath)$(_PrimaryDir)\$(_JavaInteropLibName)*" />
88-
</ItemGroup>
89-
<Copy
90-
SourceFiles="@(_Libs)"
91-
DestinationFolder="$(OutputPath)$(_PrimaryDir)"
92-
/>
93-
<Touch Files="$(_PrimaryOutputPath)" />
94-
</Target>
95-
96-
<Target Name="_BuildSecondaryLib"
97-
Condition=" '$(_SecondaryOutputPath)' != '' "
61+
<Target Name="_BuildLibs"
9862
DependsOnTargets="GetNativeBuildCommands;_BuildJni_c;_GetCmakeOptions"
99-
Inputs="CMakeLists.txt;$(MSBuildThisFileFullPath);java-interop.csproj"
100-
Outputs="$(_SecondaryOutputPath)">
101-
<MakeDir Directories="$(IntermediateOutputPath)$(_SecondaryDir)" />
63+
BeforeTargets="Build"
64+
Inputs="@(_JavaInteropNativeLib);$(MSBuildThisFileFullPath);java-interop.csproj;@(ClInclude);$(ClCompile)"
65+
Outputs="$(OutputPath)%(_JavaInteropNativeLib.Dir)$(_JavaInteropLibName)">
66+
<Message Text="# jonp: _Test: Building: @(_JavaInteropNativeLib->'%(Identity) for %(Arch)', ' ')" />
67+
<MakeDir Directories="$(IntermediateOutputPath)%(_JavaInteropNativeLib.Dir)" />
10268
<ItemGroup>
10369
<_Cmake
10470
Condition=" '$(PrepareNativeToolchain)' != '' "
105-
Include="PrepareNativeToolchain=$(PrepareNativeToolchain) $(_SecondaryArch)"
71+
Include="PrepareNativeToolchain=$(PrepareNativeToolchain) %(_JavaInteropNativeLib.Arch)"
10672
/>
10773
<_Cmake Include="CmakePath=$(CmakePath)" />
10874
<_Cmake Include="CmakeGenerator=$(CmakeGenerator)" />
10975
<_Cmake Include="CmakeSourceDir=$(MSBuildThisFileDirectory)" />
110-
<_Cmake Include="CmakeBuildDir=$(MSBuildThisFileDirectory)$(IntermediateOutputPath)$(_SecondaryDir)" />
76+
<_Cmake Include="CmakeBuildDir=$(MSBuildThisFileDirectory)$(IntermediateOutputPath)%(_JavaInteropNativeLib.Dir)" />
11177
<_Cmake Include="CmakeExtraArgs=$(_ExtraArgs)" />
11278
</ItemGroup>
11379
<MSBuild
11480
Projects="..\..\build-tools\scripts\RunCmake.proj"
11581
Properties="@(_Cmake)"
11682
Targets="Cmake"
11783
/>
118-
<MakeDir Directories="$(OutputPath)$(_SecondaryDir)" />
84+
<MakeDir Directories="$(OutputPath)%(_JavaInteropNativeLib.Dir)" />
11985
<ItemGroup>
120-
<_Libs Include="$(IntermediateOutputPath)$(_SecondaryDir)\$(_JavaInteropLibName)*" />
86+
<_Libs Include="$(IntermediateOutputPath)%(_JavaInteropNativeLib.Dir)$(_JavaInteropLibName)*" />
12187
</ItemGroup>
12288
<Copy
12389
SourceFiles="@(_Libs)"
124-
DestinationFolder="$(OutputPath)$(_SecondaryDir)"
90+
DestinationFolder="$(OutputPath)%(_JavaInteropNativeLib.Dir)"
12591
/>
126-
<Touch Files="$(_SecondaryOutputPath)" />
92+
<Touch Files="$(OutputPath)%(_JavaInteropNativeLib.Dir)$(_JavaInteropLibName)" />
12793
</Target>
12894

12995
<Target Name="_Clean"

src/java-interop/java-interop.csproj

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -16,41 +16,6 @@
1616
<OptimizationLevel>3</OptimizationLevel>
1717
</PropertyGroup>
1818

19-
<ItemGroup>
20-
<ClInclude Include="java-interop.h" />
21-
<ClInclude Include="java-interop-dlfcn.h" />
22-
<ClInclude Include="java-interop-gc-bridge.h" />
23-
<ClInclude Include="java-interop-jvm.h" />
24-
<ClInclude Include="java-interop-logger.h" />
25-
<ClInclude Include="java-interop-mono.h" />
26-
<ClInclude Include="java-interop-util.h" />
27-
</ItemGroup>
28-
29-
<PropertyGroup>
30-
<_MonoIncludePath>@(MonoIncludePath->'%(FullPath)')</_MonoIncludePath>
31-
<_JdkIncludePath>@(JdkIncludePath->'%(FullPath)')</_JdkIncludePath>
32-
</PropertyGroup>
33-
34-
<ItemDefinitionGroup>
35-
<ClCompile>
36-
<PreprocessorDefinitions>$([MSBuild]::Unescape($(DefineSymbols.Replace(' ', ';'))))</PreprocessorDefinitions>
37-
<AdditionalIncludeDirectories>$([MSBuild]::Unescape($(_MonoIncludePath)));$([MSBuild]::Unescape($(_JdkIncludePath)))</AdditionalIncludeDirectories>
38-
</ClCompile>
39-
</ItemDefinitionGroup>
40-
41-
<ItemGroup>
42-
<ClCompile Include="$(IntermediateOutputPath)jni.c" />
43-
<ClCompile Include="java-interop.cc" />
44-
<ClCompile Include="java-interop-dlfcn.cc" />
45-
<ClCompile Include="java-interop-jvm.cc" />
46-
<ClCompile Include="java-interop-logger.cc" />
47-
</ItemGroup>
48-
49-
<ItemGroup Condition=" '$(TargetFramework)' == 'net472' ">
50-
<ClCompile Include="java-interop-mono.cc" />
51-
<ClCompile Include="java-interop-gc-bridge-mono.cc" />
52-
</ItemGroup>
53-
5419
<ItemGroup>
5520
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" PrivateAssets="All" Version="1.0.0" />
5621
</ItemGroup>

0 commit comments

Comments
 (0)