Bladeren bron

build: activate static initializers in any project referencing a Lol Engine project

main
Sam Hocevar 1 jaar geleden
bovenliggende
commit
0cabde4bd6
3 gewijzigde bestanden met toevoegingen van 23 en 5 verwijderingen
  1. +1
    -1
      build/msbuild/embed.props
  2. +14
    -4
      build/msbuild/embed.targets
  3. +8
    -0
      build/msbuild/rules.props

+ 1
- 1
build/msbuild/embed.props Bestand weergeven

@@ -12,7 +12,7 @@
<ItemDefinitionGroup>
<LolEmbed>
<CppFileName>$(IntDir)embedded\%(FileName)%(Extension).g.cpp</CppFileName>
<ObjFileName>$(IntDir)embedded\%(FileName)%(Extension).g.obj</ObjFileName>
<ObjFileName>$(IntDir)embedded\%(FileName)%(Extension).g$(ObjectExt)</ObjFileName>
<UpToDateCheckInput>True</UpToDateCheckInput>
<ExecutionDescription>%(FileName)%(Extension) -> %(FileName)%(Extension).g.cpp [embedded]</ExecutionDescription>
</LolEmbed>


+ 14
- 4
build/msbuild/embed.targets Bestand weergeven

@@ -140,7 +140,7 @@

<ItemGroup>
<ClCompile Include="$(LolEmbedRegistry).g.cpp" Condition="'@(LolEmbed)'!=''">
<ObjectFileName>$(LolEmbedRegistry).g.obj</ObjectFileName>
<ObjectFileName>$(LolEmbedRegistry).g$(ObjectExt)</ObjectFileName>
</ClCompile>
</ItemGroup>

@@ -153,14 +153,15 @@


<!--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- LolGatherStaticInitializers target
- GatherLolStaticInitializers/LinkLolStaticInitializers targets
-
- List all static initializers, including those of referenced projects, and put the
- result in the @(LolStaticInitializers) item group. Also return the result as a task
- output so that referencing projects can use it!
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-->

<Target Name="LolGatherStaticInitializers" BeforeTargets="ClCompile" Outputs="@(LolStaticInitializers)">
<Target Name="GatherLolStaticInitializers" BeforeTargets="PrepareForBuild"
Outputs="@(LolStaticInitializers)">

<!-- Static initializer from the LolEmbed registry -->
<ItemGroup Condition="'$(ConfigurationType)'=='StaticLibrary' and '@(LolEmbed)'!=''">
@@ -168,14 +169,23 @@
</ItemGroup>

<!-- Static initializers from all referenced projects -->
<MSBuild Projects="@(ProjectReference)" Targets="LolGatherStaticInitializers" SkipNonexistentTargets="false">
<MSBuild Projects="@(ProjectReference)" Targets="GatherLolStaticInitializers" SkipNonexistentTargets="false">
<Output TaskParameter="TargetOutputs" ItemName="_ReferencedStaticInitializers" />
</MSBuild>

<!-- Create the LolStaticInitializers item group for later use -->
<ItemGroup>
<LolStaticInitializers Include="@(_ReferencedStaticInitializers)" />
</ItemGroup>
</Target>

<Target Name="LinkLolStaticInitializers" BeforeTargets="Link" DependsOnTargets="GatherLolStaticInitializers"
Condition="'@(LolStaticInitializers)'!=''">
<ItemGroup>
<Link>
<AdditionalOptions>%(Link.AdditionalOptions) @(LolStaticInitializers-&gt;'$(ExportSymbolLinkerFlag)%(Identity)', ' ')</AdditionalOptions>
</Link>
</ItemGroup>
</Target>

</Project>

+ 8
- 0
build/msbuild/rules.props Bestand weergeven

@@ -10,6 +10,14 @@
<BinDir>$([MSBuild]::MakeRelative("$(ProjectDir)","$(SolutionDir)"))binaries\</BinDir>
<OutDir>$(BinDir)$(Platform.ToLower())-$(PlatformToolset.ToLower())-$(Configuration.ToLower())\</OutDir>
<IntDir>$(OutDir)obj\$(ProjectName)\</IntDir>
<ObjectExt Condition="'$(ObjectExt)'==''">.obj</ObjectExt>
</PropertyGroup>

<!-- The linker flag to export a symbol and force it to be pulled from a static
- library even if it is not referenced in the code.
-->
<PropertyGroup>
<ExportSymbolLinkerFlag Condition="'$(ExportSymbolLinkerFlag)'==''">/EXPORT:</ExportSymbolLinkerFlag>
</PropertyGroup>

<ItemDefinitionGroup>


Laden…
Annuleren
Opslaan