blob: c28aeab36b9ac5a83065658e4027fc2e64acca17 [file] [log] [blame]
// 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