diff --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp index bfd35aef72b58..9b67db9fa55cf 100644 --- a/lld/MachO/Driver.cpp +++ b/lld/MachO/Driver.cpp @@ -291,6 +291,7 @@ struct DeferredFile { }; using DeferredFiles = std::vector; +#if LLVM_ENABLE_THREADS class SerialBackgroundQueue { std::deque> queue; std::thread *running; @@ -359,7 +360,6 @@ void multiThreadedPageInBackground(DeferredFiles &deferred) { (void)t; } }; -#if LLVM_ENABLE_THREADS { // Create scope for waiting for the taskGroup std::atomic_size_t index = 0; llvm::parallel::TaskGroup taskGroup; @@ -373,7 +373,6 @@ void multiThreadedPageInBackground(DeferredFiles &deferred) { } }); } -#endif #ifndef NDEBUG auto dt = high_resolution_clock::now() - t0; if (Process::GetEnv("LLD_MULTI_THREAD_PAGE")) @@ -390,6 +389,7 @@ static void multiThreadedPageIn(const DeferredFiles &deferred) { multiThreadedPageInBackground(files); }); } +#endif static InputFile *processFile(std::optional buffer, DeferredFiles *archiveContents, StringRef path, @@ -1430,6 +1430,7 @@ static void createFiles(const InputArgList &args) { } } +#if LLVM_ENABLE_THREADS if (config->readWorkers) { multiThreadedPageIn(deferredFiles); @@ -1447,6 +1448,7 @@ static void createFiles(const InputArgList &args) { for (auto *archive : archives) archive->addLazySymbols(); } +#endif } static void gatherInputSections() { @@ -1834,6 +1836,7 @@ bool link(ArrayRef argsArr, llvm::raw_ostream &stdoutOS, } if (auto *arg = args.getLastArg(OPT_read_workers)) { +#if LLVM_ENABLE_THREADS StringRef v(arg->getValue()); unsigned workers = 0; if (!llvm::to_integer(v, workers, 0)) @@ -1841,6 +1844,10 @@ bool link(ArrayRef argsArr, llvm::raw_ostream &stdoutOS, ": expected a non-negative integer, but got '" + arg->getValue() + "'"); config->readWorkers = workers; +#else + error(arg->getSpelling() + + ": option unavailable because lld was not built with thread support"); +#endif } if (auto *arg = args.getLastArg(OPT_threads_eq)) { StringRef v(arg->getValue()); diff --git a/lld/test/CMakeLists.txt b/lld/test/CMakeLists.txt index abc8ea75da180..1bd3ad7e1765b 100644 --- a/lld/test/CMakeLists.txt +++ b/lld/test/CMakeLists.txt @@ -1,5 +1,6 @@ llvm_canonicalize_cmake_booleans( ENABLE_BACKTRACES + LLVM_ENABLE_THREADS LLVM_ENABLE_ZLIB LLVM_ENABLE_ZSTD LLVM_ENABLE_LIBXML2 diff --git a/lld/test/MachO/read-workers-no-thread-support.s b/lld/test/MachO/read-workers-no-thread-support.s new file mode 100644 index 0000000000000..16256be42af73 --- /dev/null +++ b/lld/test/MachO/read-workers-no-thread-support.s @@ -0,0 +1,10 @@ +# REQUIRES: x86 && !thread_support +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t.o + +# RUN: not %lld --read-workers=1 %t.o -o /dev/null + +# CHECK: error: --read-workers=: option unavailable because lld was built without thread support + +.globl _main +_main: + ret diff --git a/lld/test/MachO/read-workers.s b/lld/test/MachO/read-workers.s index 6f0ea4d894408..4d2f88c2a757c 100644 --- a/lld/test/MachO/read-workers.s +++ b/lld/test/MachO/read-workers.s @@ -1,4 +1,4 @@ -# REQUIRES: x86 +# REQUIRES: x86 && thread_support # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t.o ## A non-negative integer is allowed. diff --git a/lld/test/lit.cfg.py b/lld/test/lit.cfg.py index 336945729954e..39c3d0aa36bfb 100644 --- a/lld/test/lit.cfg.py +++ b/lld/test/lit.cfg.py @@ -182,3 +182,6 @@ # ELF tests expect the default target for ld.lld to be ELF. if config.ld_lld_default_mingw: config.excludes.append("ELF") + +if config.enable_threads: + config.available_features.add("thread_support") diff --git a/lld/test/lit.site.cfg.py.in b/lld/test/lit.site.cfg.py.in index bb99976005543..703d3b1fd5337 100644 --- a/lld/test/lit.site.cfg.py.in +++ b/lld/test/lit.site.cfg.py.in @@ -26,6 +26,7 @@ config.ld_lld_default_mingw = @LLD_DEFAULT_LD_LLD_IS_MINGW@ config.build_examples = @LLVM_BUILD_EXAMPLES@ config.has_plugins = @LLVM_ENABLE_PLUGINS@ config.linked_bye_extension = @LLVM_BYE_LINK_INTO_TOOLS@ +config.enable_threads = @LLVM_ENABLE_THREADS@ import lit.llvm lit.llvm.initialize(lit_config, config)