Files
Juliet/External/SDK/Clang/Windows/Clang.bff
Patedam 9510951aee Final port to fastbuild.
Support update of game.dll separately
Made some alias and stuff
still remains the shader compiler to add to the solution.
Solution is also generated by fbuild (nice)
2026-01-08 16:26:01 -05:00

211 lines
9.8 KiB
Plaintext

// Clang 19.x.x
//------------------------------------------------------------------------------
//
// Detect Clang
//
// We search in the following locations, in order of preference:
// 1) Vendorized in External (side by side with this bff)
// 2) Part of a Visual Studio installation (Program Files)
// 3) Default install location
//
#include "../../CPP/CPPHelper.bff"
#if file_exists( "19.1.5/bin/clang-cl.exe" )
// Vendorized
.Clang19_BasePath = '$_CURRENT_BFF_DIR_$/19.1.5'
.Clang19_Version = '19.1.5'
#else
#if file_exists( "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/LLVM/x64/bin/clang-cl.exe" )
// Installed with VS2022
.Clang19_BasePath = 'C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/LLVM/x64'
.Clang19_Version = '19.x.x'
#else
#if file_exists( "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/LLVM/x64/bin/clang-cl.exe" )
// Installed with VS2022
.Clang19_BasePath = 'C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/LLVM/x64'
.Clang19_Version = '19.x.x'
#else
#if file_exists( "C:/Program Files/LLVM/bin/clang-cl.exe" )
// Default Install
.Clang19_BasePath = 'C:/Program Files/LLVM'
.Clang19_Version = '19.x.x'
#else
//
// Failed
//
Print( '----------------------------------------------------------------------' )
Print( '- Unable to auto-detect Clang - please specify installation manually -' )
Print( '----------------------------------------------------------------------' )
.Clang19_BasePath = .Set_Path_Here // <-- Set path here
.Clang19_Version = .Set_Version_Here // <-- Set version here
#endif
#endif
#endif
#endif
// Print details of used version. TODO:C Move to Clang.bff
Print( 'Using Clang $Clang19_Version$ from $Clang19_BasePath$' )
// Compiler
//------------------------------------------------------------------------------
Compiler( 'Compiler-Clang19' )
{
.Root = '$Clang19_BasePath$'
.ExtraFiles = {
'$Root$/bin/concrt140.dll'
'$Root$/bin/msvcp140.dll'
'$Root$/bin/vcruntime140.dll'
'$Root$/bin/vcruntime140_1.dll'
}
.Executable = '$Root$\bin\clang-cl.exe'
// Allow tests to activate some experimental behavior
#if ENABLE_RELATIVE_PATHS
.UseRelativePaths_Experimental = true
#endif
#if ENABLE_SOURCE_MAPPING
.SourceMapping_Experimental = '/fastbuild-test-mapping'
#endif
}
// Compiler
//------------------------------------------------------------------------------
Compiler( 'Compiler-Clang19-NonCL' )
{
.Root = '$Clang19_BasePath$'
.ExtraFiles = {
'$Root$/bin/msvcp140.dll'
'$Root$/bin/vcruntime140.dll'
}
.Executable = '$Root$\bin\clang.exe'
// Allow tests to activate some experimental behavior
#if ENABLE_RELATIVE_PATHS
.UseRelativePaths_Experimental = true
#endif
#if ENABLE_SOURCE_MAPPING
.SourceMapping_Experimental = '/fastbuild-test-mapping'
#endif
}
// ToolChain
//------------------------------------------------------------------------------
.ToolChain_Clang_Windows_Common =
[
// Clang for Windows relies on the VS being present:
// - crt headers
// - crt libs/dlls
Using( .ToolChain_VS_Windows_X64 )
.Platform = 'x64Clang'
// Librarian
.Librarian = '$Clang19_BasePath$\bin\llvm-ar.exe'
.LibrarianOptions = 'rc "%2" "%1"' // NOTE: output must come first
// = '/c echo %1 > %2' // Debug options
// Linker
.Linker = '$Clang19_BasePath$\bin\lld-link.exe'
.LinkerOptions = '/NODEFAULTLIB /WX /NOLOGO /INCREMENTAL:NO /OUT:"%2" "%1" /DEBUG'
+ .VSLibPaths
// Compiler Warnings
.CommonCompilerWarningOptions // Enable warnings
= ' -Wall -Wextra -Weverything' // All warnings
+ ' -Werror -Wfatal-errors' // Warnings as fatal errors
// Warnings that are not useful
+ ' -Wno-#pragma-messages' // warning : %s [-W#pragma-messages]
+ ' -Wno-c++98-compat-pedantic' // variadic macros are incompatible with C++98
+ ' -Wno-exit-time-destructors' // declaration requires an exit-time destructor
+ ' -Wno-global-constructors' // declaration requires a global destructor
+ ' -Wno-invalid-offsetof' // we get the offset of members in non-POD types
+ ' -Wno-missing-prototypes' // no previous prototype for function '%s'
+ ' -Wno-missing-variable-declarations' // no previous extern declaration for non-static variable '%s'
+ ' -Wno-gnu-line-marker' // Clang complains about directives its own preprocessor generated
+ ' -Wno-switch-enum' // Allow the use of "default" labels (we keep -Wswitch to ensure all cases are handled)
+ ' -Wno-switch-default' // Don't require default: when all cases are already handled
+ .CPPCompilerWarningOptions
// Warnings that fire but might be best to be fixed
+ ' -Wno-anon-enum-enum-conversion' // conversions between unrelated anonymous enums
+ ' -Wno-cast-function-type-strict' // converts to incompatible function type
+ ' -Wno-cast-qual' // cast from 'const %s *' to '%s *' drops const qualifier
+ ' -Wno-deprecated-copy-dtor' // definition of implicit copy constructor for '%s' is deprecated because it has a user-declared destructor
+ ' -Wno-missing-noreturn' // function '%s' could be declared with attribute 'noreturn'
+ ' -Wno-old-style-cast' // use of old-style cast
+ ' -Wno-unsafe-buffer-usage' // unsafe pointer arithmetic
// File Extensions
.LibExtension = '.a'
.ExeExtension = '.exe'
]
// ToolChain
//------------------------------------------------------------------------------
.ToolChain_Clang_Windows =
[
Using( .ToolChain_Clang_Windows_Common )
// Compiler Options
.Compiler = 'Compiler-Clang19'
.CommonCompilerOptions = ' -c' // Compile only
+ ' /Z7' // Include debug info
// Include paths
+ ' -I"./"'
+ .VSIncludePaths_ClangCl
// x64
+ ' -m64'
+ ' --target=x86_64-windows-msvc'
// No RTTI
+ ' /GR-'
// No Exceptions
+ ' /EHs-c-'
// Warnings
+ .CommonCompilerWarningOptions
.CompilerOptions = ' /TP -o"%2" "%1" $CommonCompilerOptions$'
+ .CPPVersion
.CompilerOptionsC = ' /TC -o"%2" "%1" $CommonCompilerOptions$'
.PCHOptions = ' /TP $CommonCompilerOptions$ "%1" /Fo"%3" /Fp"%2" /Yc"PrecompiledHeader.h"'
+ .CPPVersion
]
// ToolChain
//------------------------------------------------------------------------------
.ToolChain_ClangNonCL_Windows =
[
Using( .ToolChain_Clang_Windows_Common )
// Compiler Options
.Compiler = 'Compiler-Clang19-NonCL'
.CommonCompilerOptions = ' -c' // Compile only
+ ' -g' // Include debug info
// Include paths
+ ' "-I./"'
// x64
+ ' -m64'
+ ' --target=x86_64-windows-msvc'
// No RTTI
+ ' -fno-rtti'
// No Exceptions
+ ' -fno-exceptions'
// Warnings
+ .CommonCompilerWarningOptions
.CompilerOptions = ' -x c++ -o"%2" "%1" $CommonCompilerOptions$'
+ .CPPVersion
.CompilerOptionsC = ' -x c -o"%2" "%1" $CommonCompilerOptions$'
]
//------------------------------------------------------------------------------