github.com/tinygo-org/tinygo@v0.31.3-0.20240404173401-90b0bf646c27/builder/lld.cpp (about) 1 //go:build byollvm 2 3 // This file provides C wrappers for liblld. 4 5 #include <lld/Common/Driver.h> 6 #include <llvm/Support/Parallel.h> 7 8 LLD_HAS_DRIVER(coff) 9 LLD_HAS_DRIVER(elf) 10 LLD_HAS_DRIVER(mingw) 11 LLD_HAS_DRIVER(macho) 12 LLD_HAS_DRIVER(wasm) 13 14 static void configure() { 15 #if _WIN64 16 // This is a hack to work around a hang in the LLD linker on Windows, with 17 // -DLLVM_ENABLE_THREADS=ON. It has a similar effect as the -threads=1 18 // linker flag, but with support for the COFF linker. 19 llvm::parallel::strategy = llvm::hardware_concurrency(1); 20 #endif 21 } 22 23 extern "C" { 24 25 bool tinygo_link(int argc, char **argv) { 26 configure(); 27 std::vector<const char*> args(argv, argv + argc); 28 lld::Result r = lld::lldMain(args, llvm::outs(), llvm::errs(), LLD_ALL_DRIVERS); 29 return !r.retCode; 30 } 31 32 } // external "C"