Sharpmake.FunctionalTests/NoAllFastBuildProjectFunctionalTest/NoAllFastBuildProjectFunctionalTest.sharpmake.cs (150 lines of code) (raw):
// Copyright (c) 2020-2021 Ubisoft Entertainment
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System.IO;
using Sharpmake;
using Sharpmake.Generators.FastBuild;
namespace SharpmakeGen.FunctionalTests
{
public static class DefaultTarget
{
public static Target Get()
{
return new Target(
Platform.win64,
DevEnv.vs2019,
Optimization.Debug | Optimization.Release
);
}
}
public abstract class CommonProject : Project
{
public CommonProject()
: base(typeof(Target))
{
RootPath = @"[project.SharpmakeCsPath]";
SourceRootPath = @"[project.RootPath]\codebase\[project.Name]";
AddTargets(DefaultTarget.Get());
}
[Configure]
public virtual void ConfigureAll(Configuration conf, Target target)
{
conf.IsFastBuild = true;
conf.ProjectFileName = "[project.Name]_[target.DevEnv]_[target.Platform]";
conf.ProjectPath = @"[project.SharpmakeCsPath]\projects";
conf.IntermediatePath = @"[conf.ProjectPath]\build\[conf.Name]\[project.Name]";
conf.TargetPath = @"[conf.ProjectPath]\output\[conf.Name]";
conf.TargetLibraryPath = "[conf.IntermediatePath]";
conf.IncludePaths.Add("[project.SourceRootPath]");
}
}
public abstract class CommonLibProject : CommonProject
{
public override void ConfigureAll(Configuration conf, Target target)
{
base.ConfigureAll(conf, target);
conf.Output = Configuration.OutputType.Lib;
}
}
public abstract class CommonExeProject : CommonProject
{
public override void ConfigureAll(Configuration conf, Target target)
{
base.ConfigureAll(conf, target);
conf.Output = Configuration.OutputType.Exe;
// workaround necessity of rc.exe
conf.Options.Add(Options.Vc.Linker.EmbedManifest.No);
}
}
[Generate]
public class LibA : CommonLibProject
{
public LibA() { }
}
[Generate]
public class LibB : CommonLibProject
{
public LibB() { }
public override void ConfigureAll(Configuration conf, Target target)
{
base.ConfigureAll(conf, target);
conf.AddPrivateDependency<LibA>(target);
}
}
[Generate]
public class LibC : CommonLibProject
{
public LibC() { }
public override void ConfigureAll(Configuration conf, Target target)
{
base.ConfigureAll(conf, target);
conf.AddPrivateDependency<LibA>(target);
}
}
[Generate]
public class TestsA : CommonExeProject
{
public TestsA() { }
public override void ConfigureAll(Configuration conf, Target target)
{
base.ConfigureAll(conf, target);
conf.AddPrivateDependency<LibA>(target);
}
}
[Generate]
public class TestsB : CommonExeProject
{
public TestsB() { }
public override void ConfigureAll(Configuration conf, Target target)
{
base.ConfigureAll(conf, target);
conf.AddPrivateDependency<LibB>(target);
}
}
[Generate]
public class TestsC : CommonExeProject
{
public TestsC() { }
public override void ConfigureAll(Configuration conf, Target target)
{
base.ConfigureAll(conf, target);
conf.AddPrivateDependency<LibC>(target);
}
}
[Generate]
public class MainProject : CommonExeProject
{
public MainProject() { }
public override void ConfigureAll(Configuration conf, Target target)
{
base.ConfigureAll(conf, target);
conf.AddPrivateDependency<LibB>(target);
conf.AddPrivateDependency<LibC>(target);
}
}
[Generate]
public class NoAllFastBuildProjectFunctionalTestSolution : Solution
{
public NoAllFastBuildProjectFunctionalTestSolution()
: base(typeof(Target))
{
Name = "NoAllFastBuildProjectFunctionalTest";
GenerateFastBuildAllProject = false;
AddTargets(DefaultTarget.Get());
}
[Configure]
public void ConfigureAll(Configuration conf, Target target)
{
conf.SolutionFileName = "[solution.Name]";
conf.SolutionPath = @"[solution.SharpmakeCsPath]\projects";
conf.Name = "[target.ProjectConfigurationName]_FastBuild";
conf.PlatformName = "[target.Platform]";
conf.AddProject<MainProject>(target);
conf.AddProject<TestsA>(target);
conf.AddProject<TestsB>(target);
conf.AddProject<TestsC>(target);
}
[Main]
public static void SharpmakeMain(Arguments arguments)
{
FileInfo fileInfo = Util.GetCurrentSharpmakeFileInfo();
string sharpmakeRootDirectory = Util.SimplifyPath(Path.Combine(fileInfo.DirectoryName, "..", ".."));
FastBuildSettings.FastBuildMakeCommand = Path.Combine(sharpmakeRootDirectory, @"tools\FastBuild\Windows-x64\FBuild.exe");
FastBuildSettings.FastBuildWait = true;
FastBuildSettings.WriteAllConfigsSection = true;
KitsRootPaths.SetUseKitsRootForDevEnv(DevEnv.vs2019, KitsRootEnum.KitsRoot10, Options.Vc.General.WindowsTargetPlatformVersion.v10_0_19041_0);
Bff.UnityResolver = new Bff.FragmentUnityResolver();
arguments.Generate<NoAllFastBuildProjectFunctionalTestSolution>();
}
}
}