Index: include/lld/ReaderWriter/ELFTargets.h =================================================================== --- include/lld/ReaderWriter/ELFTargets.h +++ include/lld/ReaderWriter/ELFTargets.h @@ -15,22 +15,13 @@ namespace lld { namespace elf { -#define LLVM_TARGET(TargetName) \ - class TargetName##LinkingContext : public ELFLinkingContext { \ - public: \ - static std::unique_ptr create(llvm::Triple); \ - }; - -// FIXME: #include "llvm/Config/Targets.def" -LLVM_TARGET(AArch64) -LLVM_TARGET(ARM) -LLVM_TARGET(Hexagon) -LLVM_TARGET(Mips) -LLVM_TARGET(X86) -LLVM_TARGET(Example) -LLVM_TARGET(X86_64) - -#undef LLVM_TARGET +std::unique_ptr createAArch64LinkingContext(llvm::Triple); +std::unique_ptr createARMLinkingContext(llvm::Triple); +std::unique_ptr createExampleLinkingContext(llvm::Triple); +std::unique_ptr createHexagonLinkingContext(llvm::Triple); +std::unique_ptr createMipsLinkingContext(llvm::Triple); +std::unique_ptr createX86LinkingContext(llvm::Triple); +std::unique_ptr createX86_64LinkingContext(llvm::Triple); } // end namespace elf } // end namespace lld Index: lib/Driver/GnuLdDriver.cpp =================================================================== --- lib/Driver/GnuLdDriver.cpp +++ lib/Driver/GnuLdDriver.cpp @@ -350,17 +350,13 @@ std::unique_ptr GnuLdDriver::createELFLinkingContext(llvm::Triple triple) { std::unique_ptr p; - // FIXME: #include "llvm/Config/Targets.def" -#define LLVM_TARGET(targetName) \ - if ((p = elf::targetName##LinkingContext::create(triple))) return p; - LLVM_TARGET(AArch64) - LLVM_TARGET(ARM) - LLVM_TARGET(Hexagon) - LLVM_TARGET(Mips) - LLVM_TARGET(X86) - LLVM_TARGET(Example) - LLVM_TARGET(X86_64) -#undef LLVM_TARGET + if ((p = elf::createAArch64LinkingContext(triple))) return p; + if ((p = elf::createARMLinkingContext(triple))) return p; + if ((p = elf::createExampleLinkingContext(triple))) return p; + if ((p = elf::createHexagonLinkingContext(triple))) return p; + if ((p = elf::createMipsLinkingContext(triple))) return p; + if ((p = elf::createX86LinkingContext(triple))) return p; + if ((p = elf::createX86_64LinkingContext(triple))) return p; return nullptr; } Index: lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.cpp =================================================================== --- lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.cpp +++ lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.cpp @@ -10,12 +10,13 @@ #include "AArch64LinkingContext.h" #include "AArch64RelocationPass.h" #include "AArch64TargetHandler.h" +#include "lld/ReaderWriter/ELFTargets.h" using namespace lld; using namespace lld::elf; std::unique_ptr -AArch64LinkingContext::create(llvm::Triple triple) { +elf::createAArch64LinkingContext(llvm::Triple triple) { if (triple.getArch() == llvm::Triple::aarch64) return llvm::make_unique(triple); return nullptr; Index: lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp =================================================================== --- lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp +++ lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp @@ -15,7 +15,7 @@ namespace elf { std::unique_ptr -ARMLinkingContext::create(llvm::Triple triple) { +createARMLinkingContext(llvm::Triple triple) { if (triple.getArch() == llvm::Triple::arm) return llvm::make_unique(triple); return nullptr; Index: lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp =================================================================== --- lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp +++ lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp @@ -9,12 +9,13 @@ #include "HexagonLinkingContext.h" #include "HexagonTargetHandler.h" +#include "lld/ReaderWriter/ELFTargets.h" using namespace lld; using namespace lld::elf; std::unique_ptr -HexagonLinkingContext::create(llvm::Triple triple) { +elf::createHexagonLinkingContext(llvm::Triple triple) { if (triple.getArch() == llvm::Triple::hexagon) return llvm::make_unique(triple); return nullptr; Index: lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp =================================================================== --- lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp +++ lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp @@ -12,12 +12,13 @@ #include "MipsLinkingContext.h" #include "MipsRelocationPass.h" #include "MipsTargetHandler.h" +#include "lld/ReaderWriter/ELFTargets.h" using namespace lld; using namespace lld::elf; std::unique_ptr -MipsLinkingContext::create(llvm::Triple triple) { +elf::createMipsLinkingContext(llvm::Triple triple) { if (triple.getArch() == llvm::Triple::mipsel || triple.getArch() == llvm::Triple::mips64el) return llvm::make_unique(triple); Index: lib/ReaderWriter/ELF/X86/X86LinkingContext.cpp =================================================================== --- lib/ReaderWriter/ELF/X86/X86LinkingContext.cpp +++ lib/ReaderWriter/ELF/X86/X86LinkingContext.cpp @@ -10,6 +10,7 @@ #include "X86LinkingContext.h" #include "X86TargetHandler.h" #include "lld/Core/LLVM.h" +#include "lld/ReaderWriter/ELFTargets.h" #include "llvm/ADT/StringSwitch.h" #include "llvm/Support/ErrorOr.h" @@ -17,7 +18,7 @@ using namespace lld::elf; std::unique_ptr -X86LinkingContext::create(llvm::Triple triple) { +elf::createX86LinkingContext(llvm::Triple triple) { if (triple.getArch() == llvm::Triple::x86) return llvm::make_unique(triple); return nullptr; Index: lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleLinkingContext.cpp =================================================================== --- lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleLinkingContext.cpp +++ lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleLinkingContext.cpp @@ -9,12 +9,13 @@ #include "ExampleLinkingContext.h" #include "ExampleTargetHandler.h" +#include "lld/ReaderWriter/ELFTargets.h" using namespace lld; using namespace elf; std::unique_ptr -ExampleLinkingContext::create(llvm::Triple triple) { +elf::createExampleLinkingContext(llvm::Triple triple) { if (triple.getVendorName() == "example") return llvm::make_unique(triple); return nullptr; Index: lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp =================================================================== --- lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp +++ lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp @@ -7,6 +7,7 @@ // //===----------------------------------------------------------------------===// +#include "lld/ReaderWriter/ELFTargets.h" #include "X86_64LinkingContext.h" #include "X86_64RelocationPass.h" #include "X86_64TargetHandler.h" @@ -30,7 +31,7 @@ } std::unique_ptr -X86_64LinkingContext::create(llvm::Triple triple) { +elf::createX86_64LinkingContext(llvm::Triple triple) { if (triple.getArch() == llvm::Triple::x86_64) return llvm::make_unique(triple); return nullptr;