High performance build system for Windows, OSX and Linux. Supporting caching, network distribution and more.

Overview

FASTBuild

FASTBuild is a build system for Windows, OSX and Linux, supporting distributed compilation and object caching. It is used by many game developers, from small independent teams to some of the largest studios in the world.

FASTBuild's focus is on fast compile times in both full build and local iteration scenarios.

A large variety of compilers and target architectures are supported. More details, including hosted documentation and Binary downloads can be found here: http://fastbuild.org

Branch policy

Patches will only be accepted into the "dev" branch.

Branch Purpose
main Stable branch containing snapshot of latest release
dev Development branch for integration of pull requests

Contribution Guidelines

Improvements and bug fixes are gladly accepted. FASTBuild has been improved immensely by the contributions of many users. To help facilitate ease of integration, please:

Constrain pull requests to individual changes where possible - Simple changes are more easily integrated and tested. Pull requests with many changes, where there are issues with one change in particular, will delay the integration of all changes. Pull requests that change or add large amounts of functionality are harder to test and will take much longer to integrate, increasing the likelyhood of conflicts.

Avoid refactoring and formatting changes mixed with functional changes - Behavior altering changes (fixes, enhancements and new features) mixed with style changes or refactoring cleanup make changes more difficult to integrate. Please consider splitting these changes so they can more easily be individually integrated.

Update and extend tests if appropriate - There are a large set of unit and functional tests. Please update or add new tests if appropriate.

Update documentation if appropriate - For changes in behaviour, or addition of new features, please update the documentation.

Adhere to the coding style - Please keep variable/function naming, whitespace style and indentation (4 space tabs) consistent. Consistency helps keep the code maintainable.

Comments
  • Referencing external (non-FASTBuild generated VS projects) in new VSProjectExternal function

    Referencing external (non-FASTBuild generated VS projects) in new VSProjectExternal function

    Hi,

    in our team which is gladly adopting FASTBuild via the VS-generated projects more and more we also often use non-VC++ projects our VS Installation, augmented with third party extensions understands (for example Python, WiX toolset to name only two).

    If we want to have those in the same solution as the one generated by FASTBuild, the ~~VCXProject~~ new VSProjectExternal function needs to be able to reference external, existing projects without overwriting them. This pull request adds exactly this enhancement.

    To use it, ~~the correct project GUID, as well as~~ the correct project type GUID (necessary for VS to correctly load those projects from the generated solution) ~~have~~ has to be specified, ~~and nothing more but the external flag~~ as in the example below:

    -VCXProject( 'ExtProject-vsproj' )
    +VSProjectExternal( 'ExtProject-vsproj' )
    {
    -    .ProjectIsExternal = true
    -    .ProjectOutput     = 'Setup\Source\ExtProject\ExtProject.wixproj'
    +    .ExternalProjectPath     = 'Setup\Source\ExtProject\ExtProject.wixproj'
    -    .ProjectGuid       = '{32aa1ad4-da90-48b6-8d09-84bc693734d2}'
        .ProjectTypeGuid   = '{930c7802-8a8c-48f9-8165-68863bccd9dd}'       // set the correct WiX Toolset project type GUID
    }
    
    • ~~ProjectOutput~~ ExternalProjectPath matches the actual project file just ~~as in the case of generated (the default .ProjectIsExternal = false) projects~~ which has to exist;

    ~~- ProjectGuid becomes mandatory and should match the actual project GUID of the referenced Project (should - because FASTBuild will not check the match, but the resulted solution will be inconsistent and VS will not be too happy loading it);~~

    • ProjectTypeGuid should actually be provided ~~unless the Project is of the type VC++ which FASTBuild already knows internally~~.

    Best regards, Lucian

    Enhancement 
    opened by lucianm 35
  • Any change to any bff file causes a full rebuild

    Any change to any bff file causes a full rebuild

    I guess this is by design, but I was wondering what the reasoning is behind the design decision to store the "timestamp of last built" and the dependencies found for each node into the serialized depgraph, instead of in a different file. If kept in a different file, I think you would no longer be in the situation that any .bff file change always causes a rebuild of everything

    Enhancement 
    opened by lucasmeijer 25
  • .CachePath is overridden by FASTBUILD_CACHE_PATH env var

    .CachePath is overridden by FASTBUILD_CACHE_PATH env var

    We're in the process of upgrading from FastBuild 0.93 to 0.96, and I'm running into a strange issue, which I haven't debugged or profiled yet, but maybe someone else will have seen it and can save me some time.

    I have 72 hardware threads on this machine. Normally an entire FastBuild All with around 7000 object files takes ~2 minutes and change.

    Object : 3595 73 0 73 73 1h:28m 19.713s

    Here, I sat and watched it idle at about 1% cpu usage for a minute and a half...

    I deleted fbuild.cache and tried again, same behavior.

    I'll try to report more as I investigate (and have time to investigate)...

    Bug 
    opened by missmah 24
  • WIP : Appveyor + SonarQube

    WIP : Appveyor + SonarQube

    I finally managed to get compilation (https://ci.appveyor.com/project/jairbubbles/fastbuild) and analysis (https://sonarqube.com/overview?id=fastbuild) working.

    I also put badges on the readme to look modern and cool ;-)

    A few notes:

    • Clang was failing and I didn't spend time to investigate. It's only x86 / x64 for now.
    • Pull request with fast analysis should be working now. See here for more infos http://docs.sonarqube.org/display/PLUG/GitHub+Plugin
    • Switching SDKs is not convenient and I had to update main bff. On a different project I had the issue too and I ended up creating a fbuild_vs2012.bff which was not very pretty. What would be great is to be able to switch between sub scripts that only change SDK, includes, libs and compiler files. These sub scripts could be shared between projects for people who are starting with FB.
    • PowerShell is a pain in the ass. There are a lot of weird things and I didn't find a simple tutorial so it was a lot of back and forth.
    • AppVeyor is really great. You have a full windows image so you can do everything you want.

    You need to setup some en var in the AppVeyor settings :

    # This assumes that the 2 following variables are defined:
    # - SONAR_HOST_URL => should point to the public URL of the SQ server (e.g. : https://sonarqube.com)
    # - SONAR_TOKEN    => token of a user who has the "Execute Analysis" permission on the SQ server
    # - GITHUB_TOKEN    => token for commenting pull requests in GitHub
    

    Closes #150

    Enhancement 
    opened by jairbubbles 24
  • .lib Node built with lib.exe mistakenly being detected as Exe node instead of Library node

    .lib Node built with lib.exe mistakenly being detected as Exe node instead of Library node

    We're working from the FastBuild for UE4 wiki (https://github.com/fastbuild/fastbuild/wiki/fastbuild-for-Unreal-Engine-4), which we've modified a bit, but are still struggling to make work properly. We're with a branch of UE4 4.12.5.

    We're getting this error:

    29>  BFF file 'D:\dev\UE4\UnrealEngine\Engine\Intermediate\Build\fbuild.bff' has changed (reparsing will occur).
    29>  D:\dev\UE4\UnrealEngine\Engine\Intermediate\Build\fbuild.bff(23,1): FASTBuild Error #1005 - DLL() - Unsupported node type in 'Libraries'. (Node: 'D:\dev\UE4\UnrealEngine\Engine\Intermediate\Build\Win64\UE4Editor\Development\UE4Editor-UnrealEd.lib', Type: 'Exe')
    29>  DLL('DLL-2')
    

    And here's the related excerpt from the fbuild.bff file:

    DLL('DLL-1')
    {
        .Linker                 = '$VSBasePath$/bin/amd64/lib.exe' 
        .LinkerOutput         =  'D:\dev\UE4\UnrealEngine\Engine\Intermediate\Build\Win64\UE4Editor\Development\UE4Editor-UnrealEd.lib' 
        .Libraries         = 'D:\dev\UE4\UnrealEngine\Engine\Intermediate\Build\Win64\UE4Editor\Development\UE4Editor-UnrealEd.lib.response' 
        .LinkerOptions       = ' /NOLOGO /errorReport:prompt /MACHINE:x64 /SUBSYSTEM:WINDOWS /DEF /NAME:"UE4Editor-UnrealEd.dll" /LIBPATH:"ThirdParty/Ogg/libogg-1.2.2/lib/Win64/VS2015" /LIBPATH:"ThirdParty/Vorbis/libvorbis-1.3.2/Lib/win64/VS2015/" /LIBPATH:"ThirdParty/Vorbis/libvorbis-1.3.2/Lib/win64/VS2015/" /LIBPATH:"ThirdParty/Windows/DirectX/Lib/x64" /LIBPATH:"ThirdParty/HACD/HACD_1.0/lib/Win64/VS2015/" /LIBPATH:"ThirdParty/VHACD/lib/Win64/VS2015/" /LIBPATH:"ThirdParty/FBX/2016.1.1/lib/vs2015/x64/release/" /LIBPATH:"ThirdParty/FreeType2/FreeType2-2.6/Lib/Win64/VS2015" /LIBPATH:"ThirdParty/PhysX/PhysX-3.3/lib/Win64/VS2015" /LIBPATH:"ThirdParty/PhysX/APEX-1.3/lib/Win64/VS2015" /LIBPATH:"../Binaries/ThirdParty/libsndfile/Win64" /NODEFAULTLIB:"LIBCMT" /NODEFAULTLIB:"LIBCPMT" /NODEFAULTLIB:"LIBCMTD" /NODEFAULTLIB:"LIBCPMTD" /NODEFAULTLIB:"MSVCRTD" /NODEFAULTLIB:"MSVCPRTD" /NODEFAULTLIB:"LIBC" /NODEFAULTLIB:"LIBCP" /NODEFAULTLIB:"LIBCD" /NODEFAULTLIB:"LIBCPD" @"%1" /OUT:"%2"'
    }
    DLL('DLL-2')
    {
        .Linker                 = '$VSBasePath$/bin/amd64/link.exe' 
        .LinkerOutput         =  'D:\dev\UE4\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Engine.dll' 
        .Libraries         = { 'DLL-1' } 
        .LinkerOptions       = ' /MANIFEST:NO /NOLOGO /DEBUG /errorReport:prompt /MACHINE:x64 /SUBSYSTEM:WINDOWS /FIXED:No /NXCOMPAT /STACK:5000000 /DELAY:UNLOAD /DLL /PDBALTPATH:%_PDB% /OPT:NOREF /OPT:NOICF /INCREMENTAL:NO /ignore:4199 /ignore:4099 /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"PhysX3PROFILE_x64.dll" /DELAYLOAD:"PhysX3CookingPROFILE_x64.dll" /DELAYLOAD:"PhysX3CommonPROFILE_x64.dll" /DELAYLOAD:"nvToolsExt64_1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"APEXFrameworkPROFILE_x64.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"libogg_64.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"libvorbis_64.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"libvorbisfile_64.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /DELAYLOAD:"vulkan-1.dll" /LIBPATH:"ThirdParty/PhysX/PhysX-3.3/lib/Win64/VS2015" /LIBPATH:"ThirdParty/PhysX/APEX-1.3/lib/Win64/VS2015" /LIBPATH:"D:\dev\UE4\UnrealEngine\Engine\Source\ThirdParty\Box2D\Box2D_v2.3.1\build\vs2015\bin\x64\Release" /LIBPATH:"ThirdParty/Ogg/libogg-1.2.2/lib/Win64/VS2015" /LIBPATH:"ThirdParty/Vorbis/libvorbis-1.3.2/Lib/win64/VS2015/" /LIBPATH:"ThirdParty/Vorbis/libvorbis-1.3.2/Lib/win64/VS2015/" /LIBPATH:"ThirdParty/libOpus/opus-1.1/win32/VS2012/x64/Release/" /LIBPATH:"ThirdParty/DirectShow/DirectShow-1.0.0/Lib/Win64/vs2015/" /NODEFAULTLIB:"LIBCMT" /NODEFAULTLIB:"LIBCPMT" /NODEFAULTLIB:"LIBCMTD" /NODEFAULTLIB:"LIBCPMTD" /NODEFAULTLIB:"MSVCRTD" /NODEFAULTLIB:"MSVCPRTD" /NODEFAULTLIB:"LIBC" /NODEFAULTLIB:"LIBCP" /NODEFAULTLIB:"LIBCD" /NODEFAULTLIB:"LIBCPD" @"D:\dev\UE4\UnrealEngine\Engine\Intermediate\Build\Win64\UE4Editor\Development\UE4Editor-Engine.dll.response" /OUT:"%2" /IMPLIB:"D:\dev\UE4\UnrealEngine\Engine\Intermediate\Build\Win64\UE4Editor\Development\UE4Editor-Engine.lib" /PDB:"D:\dev\UE4\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Engine.pdb" /ignore:4078 %1'
    }
    

    Is there a better way to go about this? It seems like a DLL node should be able to use a .lib/Library as a dependency. Unfortunately, to make DLL('DLL-1') into a proper Library Node (e.g. Library('LIB-1')) looks like it would expect a compiler, and to actually compile the object files in the same FastBuild step as executing the librarian...

    Also, it seems to only not like .lib files within the DLL Node construct because it uses lib.exe instead of link.exe + /DLL... It almost seems like it should work if not for whatever code is doing that heuristic/regex check?

    Question 
    opened by missmah 24
  • "D8049: command line is too long to fit in debug record" when building UE4

    I am building UE4 using the article from the wiki here. Sometimes when using remote workers the build fails with the following error:

    cl: Command line error D8049 : cannot execute 'C:\tmp[...]\c1xx.dll': command line is too long to fit in debug record

    I have observed the following:

    • it happens only when cl.exe process is spawned on remote workers, when the file is compiled on the same machine where the build was initiated it's ok
    • it happens when the arguments count sent to cl.exe exceeds around 20k characters
    • when I execute CreateProcess in my own test aplication with the same compilation command it fails with the same error (which is very odd, because as I write above, it works fine from Fastbuild)
    • using a response file doesn't help

    I'm attaching the command I used to reproduce it in my test application. It's actually saved from Process.cpp (fullArgs parameter) in Fastbuild.

    I'm on Win7, using VS2015 professional.

    Command.txt

    Bug Resolved In Next Version 
    opened by arturmazurek 23
  • Command line too long

    Command line too long

    Note that this issue is similar to #87 but not the same.

    Setup:

    • on windows
    • version 0.99 or 1.00
    • custom emscripten target (compiles+links perfectly on mac/linux)
    • emcc as compiler (emcc.bat)
    • emcc as linker (emcc.bat)
    • emcc as librarian (emcc.bat)
    • CompilerFamily is set to clang
    • LibrarianType is set to ar (also tried msvc)
    • LinkerType doesn't have a clang option... (I tried msvc and the others)

    The issue:

    6> Lib: C:\dev\project\build\bin\bullet2\web-emcc-dev\bullet2.bc
    c:\emsdk\upstream\emscripten\emcc.bat -o ........... +16239 characters of args
    6> The command line is too long.
    6> Failed to build Library. Error: 1 (0x01) Target: 'C:\dev\project\build\bin\bullet2\web-emcc-dev\bullet2.bc'
    FBuild: Error: BUILD FAILED: lib-bullet2-web-emcc-dev
    Time: 0.048s
    

    This is the librarian step of a Library node. The issue here is (seemingly) coming from this error, which would make some sense since 1. it's a bat file 2. it's way more than 8192 characters 3. fastbuild is not (and can't) autodetect the need for a response file.

    https://support.microsoft.com/en-us/help/830473/command-prompt-cmd-exe-command-line-string-limitation

    Details: emscripten builds via emcc.bat, which simply calls emcc.py which does all the work. It forwards the args as is. emcc.py handles the use of response files, but there is no way for me to tell fastbuild to use them. It seems that the assumptions in fastbuild are quite limiting here. The assumption about the max length of a command line, as well as the assumption about which linkers can use response files.

    It seems like the one solution proposed in #87 would be perfect for these situations (m_ForceUseResponseFile). e.g

    LibrarianForceUseResponseFiles LinkerForceUseResponseFiles CompilerForceUseResponseFiles

    I personally don't feel that hardcoding more assumptions (like emcc.bat and emcc) would be ideal, since this will come up time and time again for any compiler/linker/librarian that is not hardcoded.

    Regardless this is a blocking issue, since I can't compile emscripten builds on windows with fastbuild, due to the missing use of a response file. I'd love to be able to be explicit and make that behaviour well defined, rather than the tool trying to guess :) p.s I expected forcing a LibrarianType to do something, but the behaviour was the same.

    Thanks for the great tool as always, @ffulin

    Enhancement 
    opened by ruby0x1 21
  • New function Export()

    New function Export()

    Export( .var ) is the counter part of Using( .var ). It will update the previous definition of .var in the first ancestor scope declaring it. If a previous declaration of .var is not found the parent scope will be used to declare a new .var.

    This addition allows the following idiom :

    .Defines = { '_DEBUG', 'SOMETHING=1' }
    .CompilerOptions = ''
    
    #if __WINDOWS__
    ForEach( .name in .Defines )
    {
       .CompilerOptions + ' /D "$name$"'
       Export( .CompilerOptions )
    }
    #endif
    
    #if __LINUX__
    ForEach( .name in .Defines )
    {
       .CompilerOptions + ' -D$name$'
       Export( .CompilerOptions )
    }
    #endif
    
    Print( "$CompilerOptions$" ) ; windows : ' /D "_DEBUG" /D "SOMETHING=1"'
                                 ; linux   : ' /D_DEBUG -DSOMETHING=1'
    
    opened by poppolopoppo 21
  • Empty array type and concatenation error

    Empty array type and concatenation error

    I came across an error with this snippet :

    .UntypedArray = {}
    .Struct = []
    .ArrayOfStructs = { .Struct }
    .UntypedArray + .ArrayOfStructs
    

    Which generates : fbuild.bff(4,10): FASTBuild Error #1034 - Operation not supported: 'ArrayOfStrings' + 'ArrayOfStructs'.

    Empty arrays seem to be typed by default as arrays of string when declared with {}, which later causes a typing error when I try to concatenate it with an array of structs.

    Enhancement Resolved In Next Version 
    opened by poppolopoppo 20
  • Unexpected Shared Network Cache Misses

    Unexpected Shared Network Cache Misses

    Hi @ffulin,

    I've hit an unexpected (to me) case with the cache. We've been using cache via SMB3 with a UNC Network Path for quite some time, with > 50 nodes. The nodes are able to store and retrieve cache entries successfully.

    But, what I unfortunately haven't tested for quite some time was whether the cache entries are actually being shared between nodes (vs. each node storing and retrieving it's own exclusive copy).

    I assumed the entries were being shared, and I know that at some point (far in the past) I did verify that it worked and entries were properly shared; but, I have direct evidence of multiple cases tonight where it is not occurring at the moment.

    1. If I build from C:\dev and then build again from D:\dev, I just verified the cache entries to be exclusive.

    2. If I build from two different machines, even if both machines use D:\dev, it seems that the entries are also exclusive.

    This is with v0.99 with some modifications (but none having to do with the cache).

    This is also with the LightCache enabled.

    Is this behavior expected? Was there a point in the recent releases when the behavior of the cache with respect to this may have been changed?

    Question 
    opened by missmah 19
  • (New Feature) A GUI for FASTBuild

    (New Feature) A GUI for FASTBuild

    Hi,

    Thanks for making such an amazing tool.

    I'm recently writing a GUI program for FASTBuild, namely FASTBuilder. As our team is migrating from IncrediBuild to FASTBuild, a GUI program is in need. I started by looking into the existing tool FASTBuild Monitor. Although it's totally functional (and a great start), it hasn't been maintained for months and doesn't support Visual Studio 2017. Also, only a few people in our team are Visual Studio users (others are designers and artists), so we prefer a standalone tool that everyone can use. I tried to make use of its source code, but (with all due respect) the code is quite messy and lacking maintainability. Finally I decide to start a new project.

    The log interface between FASTBuild and the Monitor is really well-designed (thanks to @yass007 and @liamkf), and I guess for now it's the best way for an external program to communicate with FASTBuild, so I reused this protocol. I've implemented the build monitor, the worker monitor and a simple settings interface. For the worker monitor part, as you've mentioned there will be a console mode(#229) in the next release and maybe a service mode in the future, I've used some tricky Windows API to manipulate it for now. The GUI is totally non-invasive, so it can work with fbuild.exe and fbuildworker.exe (only tested on v0.93) directly.

    A screenshot: Screenshot

    The latest version is v0.93.1. It's still buggy and I'm keeping improving it. I've also included an fbuildworker.exe in the most recent release, I checked the licence terms and seems it's legal. Also I'd like to ask if you have any problem with the name (FASTBuilder), I can change it if it makes you uncomfortable 😊. Another question is, can I use an icon derived from FASTBuild's as the icon of this GUI program? Because this could make it looks more uniformly.

    As for the future, I hope there could be a better interface to communicate between FASTBuild, Worker and the GUI. I'd like to know your thoughts on this.

    Enhancement Question 
    opened by hillin 19
  • Fix empty array type mismatch bug

    Fix empty array type mismatch bug

    Description:

    This PR fixes issue #904 Prior to this PR when recursively concatenating structs, concatenating to empty arrays contained within a struct would improperly fail due to a type mismatch for the concatenation operation. This PR fixes this issue and adds a pair of test cases to check for.

    Checklist:

    The pull request:

    • [x] Is created against the Dev branch
    • [x] Is self-contained
    • [ ] Compiles on Windows, OSX and Linux
    • [ ] Has accompanying tests
    • [ ] Passes existing tests
    • [x] Keeps Windows, OSX and Linux at parity
    • [ ] Follows the code style
    • [ ] Includes documentation
    Bug 
    opened by cmaves 0
  • Using FastBuild with Makefile

    Using FastBuild with Makefile

    I have started using FastBuild for distributed building of my projects. I have created a demo project that that has a directory dir and inside that directory I have these files: main.cpp, header.h, header.cpp, Makefile, fbuild.bff.

    Makefile contains the following code: output: main.o h1.o g++ main.o h1.o -o output

    main.o: main.cpp g++ -c main.cpp

    h1.o: h1.cpp h1.h g++ -c h1.cpp

    clean: rm *.o output

    What I want to do is that I want to go into the directory and run FBuild.exe in the command prompt. I want FastBuild to then follow the configurations written into the Makefile and execute accordingly. How should I configure fbuild.bff in that case?

    Question 
    opened by mikejack07 1
  • Compiling Linux Kernel using FastBuild

    Compiling Linux Kernel using FastBuild

    Hi, I have a a project that is somewhat similar to Linux source code. It has a MakeFile that handles the configuration and compilation part similar to Linux source code. I want to use FastBuild to distribute the build of my project and hence first trying to compile Linux source code using FastBuild. My fbuild.bff file looks like this:

    Exec('lin') { .ExecExecutable = 'C:\Users\Mkj\linux-5.19.8' .ExecOutput='C:\Users\Mkj\LinC\libr.o' .ExecArguments= '-C lin' }

    Alias('all'){ .Targets={ 'lin' } }

    However, there is an error on running FBuild.exe, which says:

    C:\Users\Mkj>FBuild.exe BFF file 'C:\Users\Mkj\fbuild.bff' has changed (reparsing will occur). 2> Run: C:\Users\Mkj\LinC\libr.o 2> Failed to spawn process for 'C:\Users\Mkj\LinC\libr.o' FBuild: Error: BUILD FAILED: all Time: 0.007s

    All file locations are set correctly and FastBuild works perfectly fine for demo projects that I have built to have an experience of how things work in FastBuild.

    Can anyone help me out by guiding me on how to just compile Linux source code by using the Linux built-in make file in FastBuild? Thanks.

    Question 
    opened by mikejack07 1
  • Occasionally compile error occurs on Mac

    Occasionally compile error occurs on Mac

    FBuild sometimes fails to compile cpp files because of syntax error. It happens when the file is compiled on remote machine. image The code in error info is different from the source: image "2" turns into "<U+0012>" for some reason. Is the problem already known or fixed? The fbuild version is v1.05

    Question 
    opened by rhetty 2
  • FastBuild For Unreal Engine Error

    FastBuild For Unreal Engine Error

    I try to use FastBuild with Visual Studio 2019 to build Unreal Engine from Source,but after i update the Compiler the error occur:

    uilding UnrealEditor and ShaderCompileWorker... 1>Using Visual Studio 2019 14.29.30146 toolchain (C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133) and Windows 10.0.18362.0 SDK (C:\Program Files (x86)\Windows Kits\10). 1>Determining max actions to execute in parallel (8 physical cores, 8 logical cores) 1> Executing up to 8 processes, one per physical core 1>Building 82 actions with 8 processes... 1>UnrealBuildTool : error : Unhandled exception: System.ArgumentException: An item with the same key has already been added. Key: UnrealBuildTool.LinkedAction 1> at System.Collections.Generic.Dictionary2.TryInsert(TKey key, TValue value, InsertionBehavior behavior) 1> at System.Collections.Generic.Dictionary2.Add(TKey key, TValue value) 1> at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](List1 source, Func2 keySelector, Func2 elementSelector, IEqualityComparer1 comparer) 1> at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable1 source, Func2 keySelector, Func2 elementSelector, IEqualityComparer1 comparer) 1> at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable1 source, Func2 keySelector, Func2 elementSelector) 1> at UnrealBuildTool.ParallelExecutor.ExecuteActions(List1 InputActions) in D:\UnrealEngine\Engine\Source\Programs\UnrealBuildTool\Executors\ParallelExecutor.cs:line 183 1> at UnrealBuildTool.FASTBuild.ExecuteActions(List1 Actions) in D:\UnrealEngine\Engine\Source\Programs\UnrealBuildTool\Executors\Experimental\FASTBuild.cs:line 455 1> at UnrealBuildTool.ActionGraph.ExecuteActions(BuildConfiguration BuildConfiguration, List1 ActionsToExecute, List1 TargetDescriptors) in D:\UnrealEngine\Engine\Source\Programs\UnrealBuildTool\System\ActionGraph.cs:line 370 1> at UnrealBuildTool.BuildMode.Build(TargetMakefile[] Makefiles, List1 TargetDescriptors, BuildConfiguration BuildConfiguration, BuildOptions Options, FileReference WriteOutdatedActionsFile) in D:\UnrealEngine\Engine\Source\Programs\UnrealBuildTool\Modes\BuildMode.cs:line 611 1> at UnrealBuildTool.BuildMode.Build(List`1 TargetDescriptors, BuildConfiguration BuildConfiguration, ISourceFileWorkingSet WorkingSet, BuildOptions Options, FileReference WriteOutdatedActionsFile, Boolean bSkipPreBuildTargets) in D:\UnrealEngine\Engine\Source\Programs\UnrealBuildTool\Modes\BuildMode.cs:line 282 1> at UnrealBuildTool.BuildMode.Execute(CommandLineArguments Arguments) in D:\UnrealEngine\Engine\Source\Programs\UnrealBuildTool\Modes\BuildMode.cs:line 237 1> at UnrealBuildTool.UnrealBuildTool.Main(String[] ArgumentsArray) in D:\UnrealEngine\Engine\Source\Programs\UnrealBuildTool\UnrealBuildTool.cs:line 612 1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\Microsoft.MakeFile.Targets(45,5): error MSB3073:

    I don`t know how this happened and i hope someone who has this problem can help me

    Question 
    opened by ActiveXSturcture 6
  • Check size of an array?

    Check size of an array?

    Hello, I'm looking for some help. There doesn't seem to be a way to check if an array is empty or to get the size of an array.

    Currently, the only way seems to be to use a ForEach and assign a bool or increment an int, however, this would clearly be pretty inefficient. I did a bit of digging around the code but wasn't able to find anything for this.

    Enhancement Question 
    opened by ZeroErrors 1
Releases(v1.07)
UnhookMe is an universal Windows API resolver & unhooker addressing problem of invoking unmonitored system calls from within of your Red Teams malware

UnhookMe - Dynamically unhooking imports resolver In the era of intrusive AVs and EDRs that introduce hot-patches to the running processes for their e

Mariusz B. 301 Sep 16, 2022
A collection of multiple types of lists used during pentesting, collected in one place. List types include usernames, passwords, combos, wordlist and may more..

Access list is a collection of multiple types of lists used during pentesting, collected in one place, created by Undercode This list include a collec

UNDERCODE UTILITIES 8 Sep 17, 2022
An intrusive C++17 implementation of a Red-Black-Tree, a Weight Balanced Tree, a Dynamic Segment Tree and much more!

This is Ygg (short for Yggdrasil), a C++17 implementation of several intrusive data structures: several balanced binary search trees: a red-black Tree

Lukas Barth 95 Sep 6, 2022
A collection of libraries, data structures, and more that I have created to make coding in C less painful.

ctools A collection of libraries, data structures, and more that I have created to make coding in C less painful. Data structures There are many data

null 3 Nov 27, 2021
100daysofDSA - Explore about arrays, linked lists, stacks & queues, graphs, and more to master the foundations of data structures & algorithms!

Explore about arrays, linked lists, stacks & queues, graphs, and more to master the foundations of data structures & algorithms!

null 25 Sep 1, 2022
heuristically and dynamically sample (more) uniformly from large decision trees of unknown shape

PROBLEM STATEMENT When writing a randomized generator for some file format in a general-purpose programming language, we can view the resulting progra

John Regehr 4 Feb 15, 2022
COBS framing with implicit run-length-encoding, optimized for data containing statistically a bit more 0 and FF bytes in a row, as data often carry 16, 32 or 64 bit numbers with small values.

TCOBS Table of Contents About The project TCOBS Specification TCOBS code Getting Started 4.1. Prerequisites 4.2. Installation 4.3. Usage in Go 4.3.1.

Thomas Höhenleitner 15 Sep 11, 2022
📝 Performant plain text editor for iOS with syntax highlighting, line numbers, invisible characters and much more.

?? Welcome to Runestone - a performant plain text editor for iOS with code editing features Runestone uses GitHub's Tree-sitter to parse code to a syn

Simon Støvring 1.9k Sep 16, 2022
data structures which I've tried to implement in C++, much more incoming 👨‍💻

This repository contains some data structures which I've tried to implement, much more incoming ??‍?? I'm definitely not a C++ expert, so the code is

Wiktor Zając 2 Dec 21, 2021
This is a beginner-friendly project aiming to build a problem-set on different data structures and algorithms in different programming languages.

DSAready Overview This is a beginner-friendly project that aims to create a problem-set for various Data Structures and Algorithms. Being a programmer

Riddhi Jain 13 Aug 17, 2022
Memgraph is a streaming graph application platform that helps you wrangle your streaming data, build sophisticated models that you can query in real-time, and develop graph applications.

Memgraph is a streaming graph application platform that helps you wrangle your streaming data, build sophisticated models that you can query in real-time, and develop graph applications.

Memgraph 548 Sep 22, 2022
A simple and easy-to-use library to build pipelines in C

A simple and easy-to-use library to build pipelines in C

Ray 11 Feb 22, 2022
Build a tree-sitter dynamic module

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! I should clarify that this module is NOT a standalone tree-sitter module. It is supo

Yuan Fu 4 Sep 8, 2022
A C++ data container replicating std::queue functionality but with better performance.

A data container replicating std::queue functionality but with better performance than standard library containers in a queue context. C++98/03/11/14/etc-compatible.

Matt Bentley 21 Aug 16, 2022
A C++ data container replicating std::stack functionality but with better performance than standard library containers in a stack context.

plf::stack A data container replicating std::stack functionality but with better performance than standard library containers in a stack context. C++9

Matt Bentley 47 Sep 11, 2022
Like neofetch, but much faster because written in c. Only Linux.

fastfetch fastfetch is a neofetch like tool for fetching system information and displaying them in a pretty way. It is written in c to achieve much be

Linus Dierheimer 338 Sep 18, 2022
Cross-platform STL-styled and STL-compatible library with implementing containers, ranges, iterators, type traits and other tools; actors system; type-safe config interface.

Yato A small repository where I'm gatherting useful snippets and abstractions for C++ development. Yato includes 3 main modules: multidimensional cont

Alexey 9 Jul 22, 2022
Advanced keylogger written in C++ , works on all windows versions use it at your own risk !

About Keylogger Keyloggers or keystroke loggers are software programs or hardware devices that track the activities (keys pressed) of a keyboard. Key

anas 171 Sep 10, 2022