| // Copyright 2020 The IREE Authors | |
| // | |
| // Licensed under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| #include "compiler/plugins/target/LLVMCPU/LinkerTool.h" | |
| namespace mlir::iree_compiler::IREE::HAL { | |
| // TODO(benvanik): add other platforms: | |
| // createMacLinkerTool using ld64.lld | |
| std::unique_ptr<LinkerTool> | |
| createAndroidLinkerTool(const llvm::Triple &targetTriple, | |
| LLVMTargetOptions &targetOptions); | |
| std::unique_ptr<LinkerTool> | |
| createEmbeddedLinkerTool(const llvm::Triple &targetTriple, | |
| LLVMTargetOptions &targetOptions); | |
| std::unique_ptr<LinkerTool> | |
| createUnixLinkerTool(const llvm::Triple &targetTriple, | |
| LLVMTargetOptions &targetOptions); | |
| std::unique_ptr<LinkerTool> | |
| createWasmLinkerTool(const llvm::Triple &targetTriple, | |
| LLVMTargetOptions &targetOptions); | |
| std::unique_ptr<LinkerTool> | |
| createWindowsLinkerTool(const llvm::Triple &targetTriple, | |
| LLVMTargetOptions &targetOptions); | |
| // static | |
| std::unique_ptr<LinkerTool> | |
| LinkerTool::getForTarget(const llvm::Triple &targetTriple, | |
| LLVMTargetOptions &targetOptions) { | |
| if (targetOptions.target.getLinkEmbedded()) { | |
| return createEmbeddedLinkerTool(targetTriple, targetOptions); | |
| } else if (targetTriple.isAndroid()) { | |
| return createAndroidLinkerTool(targetTriple, targetOptions); | |
| } else if (targetTriple.isOSWindows() || | |
| targetTriple.isWindowsMSVCEnvironment()) { | |
| return createWindowsLinkerTool(targetTriple, targetOptions); | |
| } else if (targetTriple.isWasm()) { | |
| return createWasmLinkerTool(targetTriple, targetOptions); | |
| } | |
| return createUnixLinkerTool(targetTriple, targetOptions); | |
| } | |
| } // namespace mlir::iree_compiler::IREE::HAL |