Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion Sharpmake.Generators/FastBuild/Bff.Util.cs
Original file line number Diff line number Diff line change
Expand Up @@ -859,9 +859,16 @@ internal static void WriteCustomBuildStepAsGenericExecutable(string projectRoot,
return relativePath;
});

Strings inputFiles = new();
inputFiles.Add(relativeBuildStep.KeyInput);
foreach (string inputFile in relativeBuildStep.AdditionalInputs)
{
inputFiles.Add(inputFile);
}

using (bffGenerator.Declare("fastBuildPreBuildName", relativeBuildStep.Description))
using (bffGenerator.Declare("fastBuildPrebuildExeFile", relativeBuildStep.Executable))
using (bffGenerator.Declare("fastBuildPreBuildInputFiles", FBuildFormatSingleListItem(relativeBuildStep.KeyInput)))
using (bffGenerator.Declare("fastBuildPreBuildInputFiles", FBuildFormatList(inputFiles.ToList(), 26)))
using (bffGenerator.Declare("fastBuildPreBuildOutputFile", relativeBuildStep.Output))
using (bffGenerator.Declare("fastBuildPreBuildArguments", string.IsNullOrWhiteSpace(relativeBuildStep.ExecutableArguments) ? FileGeneratorUtilities.RemoveLineTag : relativeBuildStep.ExecutableArguments))
// This is normally the project directory.
Expand Down
1 change: 0 additions & 1 deletion Sharpmake/Project.Configuration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2360,7 +2360,6 @@ public enum ProjectFilter
public string OutputItemType = "";

/// <summary>
/// Not supported by FASTBuild.
/// Additional files that will cause a re-run of this custom build step can be be specified here.
/// </summary>
public Strings AdditionalInputs = new Strings();
Expand Down
9 changes: 7 additions & 2 deletions samples/CustomBuildStep/CustomBuildStep.sharpmake.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public CustomBuildStepProject()
SourceRootPath = @"[project.SharpmakeCsPath]\codebase";
SourceFilesExtensions.Add(".bat");

// need to add it explicitly since it's gonna be generated it doesn't exist yet
// need to add generated files explicitly since they don't exist yet
SourceFiles.Add(@"[project.SourceRootPath]\main.cpp");
SourceFiles.Add(@"[project.SourceRootPath]\secondaryfile.cpp");

Expand All @@ -33,6 +33,7 @@ public CustomBuildStepProject()
[Configure]
public void ConfigureAll(Configuration conf, Target target)
{
// A simple custom build step that generates main.cpp via a .bat file
conf.CustomFileBuildSteps.Add(
new Configuration.CustomFileBuildStep
{
Expand All @@ -41,13 +42,17 @@ public void ConfigureAll(Configuration conf, Target target)
Description = $"Generate main.cpp",
Executable = "generatemain.bat"
});
// Demonstrates a custom file build step that has two inputs and one output
conf.CustomFileBuildSteps.Add(
new Configuration.CustomFileBuildStep
{
KeyInput = "generatesecondaryfile.bat",
Output = "secondaryfile.cpp",
Description = $"Generate secondaryfile.cpp",
Executable = "generatesecondaryfile.bat"
Executable = "generatesecondaryfile.bat",
ExecutableArguments = "../codebase/concatenate_file1.in ../codebase/concatenate_file2.in",
AdditionalInputs = { "[project.SourceRootPath]\\concatenate_file1.in", "[project.SourceRootPath]\\concatenate_file2.in" }

});

conf.ProjectFileName = "[project.Name]_[target.DevEnv]_[target.Platform]";
Expand Down
6 changes: 6 additions & 0 deletions samples/CustomBuildStep/codebase/concatenate_file1.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#include <stdio.h>

const char *GetFile1Content()
{
return "This is the content of file 1.\n";
}
10 changes: 10 additions & 0 deletions samples/CustomBuildStep/codebase/concatenate_file2.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const char *GetFile2Content()
{
return "This is the content of file 2.\n";
}

void PrintSecondaryFileContent()
{
printf("%s", GetFile1Content());
printf("%s", GetFile2Content());
}
27 changes: 15 additions & 12 deletions samples/CustomBuildStep/codebase/generatesecondaryfile.bat
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
@echo off
setlocal

set OUTPUT=%~dp0secondaryfile.cpp
echo Generating %OUTPUT%

:: Note: ^ is used to escape < and >
> "%OUTPUT%" echo #include ^<stdio.h^>
>>"%OUTPUT%" echo void PrintSecondaryFileContent()
>>"%OUTPUT%" echo {
>>"%OUTPUT%" echo printf("This is secondary file\n");
>>"%OUTPUT%" echo }

echo Done
goto :eof
if "%~2"=="" goto :usage

set OUTPUT=%~dp0\secondaryfile.cpp

echo Concatenating "%~f1" + "%~f2" into "%OUTPUT%"
>"%OUTPUT%" type "%~f1"
>>"%OUTPUT%" type "%~f2"

echo Done.
goto :eof

:usage
echo Usage: %~n0 file1.cpp file2.cpp
echo Concatenates file1.cpp and file2.cpp into %~dp0concatenated.cpp
exit /b 1