| // 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 |