// 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 = '/c echo %1 > %2' // 'rc "%2" "%1"' // NOTE: output must come first // 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$' ] //------------------------------------------------------------------------------