================ @@ -9,20 +9,145 @@ #include "Haiku.h" #include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/Compilation.h" #include "llvm/Support/Path.h" using namespace clang::driver; +using namespace clang::driver::tools; using namespace clang::driver::toolchains; using namespace clang; using namespace llvm::opt; +void haiku::Linker::ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const { + const toolchains::Haiku &ToolChain = + static_cast<const toolchains::Haiku &>(getToolChain()); + const Driver &D = ToolChain.getDriver(); + const llvm::Triple::ArchType Arch = ToolChain.getArch(); + const bool Static = Args.hasArg(options::OPT_static); + const bool Shared = Args.hasArg(options::OPT_shared); + ArgStringList CmdArgs; + + // Silence warning for "clang -g foo.o -o foo" + Args.ClaimAllArgs(options::OPT_g_Group); + // and "clang -emit-llvm foo.o -o foo" + Args.ClaimAllArgs(options::OPT_emit_llvm); + // and for "clang -w foo.o -o foo". Other warning options are already + // handled somewhere else. + Args.ClaimAllArgs(options::OPT_w); + + // Silence warning for "clang -pie foo.o -o foo" + Args.ClaimAllArgs(options::OPT_pie); + + if (!D.SysRoot.empty()) + CmdArgs.push_back(Args.MakeArgString("--sysroot=" + D.SysRoot)); + + CmdArgs.push_back("--eh-frame-hdr"); + if (Static) { + CmdArgs.push_back("-Bstatic"); + } else { + if (Args.hasArg(options::OPT_rdynamic)) + CmdArgs.push_back("-export-dynamic"); + if (Shared) + CmdArgs.push_back("-shared"); + CmdArgs.push_back("--enable-new-dtags"); + } + + CmdArgs.push_back("-shared"); + + if (!Shared) + CmdArgs.push_back("--no-undefined"); + + if (Arch == llvm::Triple::riscv64) + CmdArgs.push_back("-X"); + + if (Output.isFilename()) { + CmdArgs.push_back("-o"); + CmdArgs.push_back(Output.getFilename()); + } else { + assert(Output.isNothing() && "Invalid output."); ---------------- MaskRay wrote:
This can be moved before `Output.isFilename()` https://github.com/llvm/llvm-project/pull/66038 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits