From: Nico Weber Date: Tue, 18 Dec 2018 13:52:21 +0000 (+0000) Subject: [gn build] Add build files for llvm-ar, llvm-nm, llvm-objdump, llvm-readelf X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cbe186ea7356a1b185890ed9248fdacc450d4327;p=llvm [gn build] Add build files for llvm-ar, llvm-nm, llvm-objdump, llvm-readelf Also add build files for deps DebugInfo/Symbolize, ToolDrivers/dll-tool. Also add gn/build/libs/xar (needed by llvm-objdump). Also delete an incorrect part of the symlink description in //BUILD.gn (it used to be true before I made the symlink step write a stamp file; now it's no longer true). These are all binaries needed by check-lld that need symlinks. Differential Revision: https://reviews.llvm.org/D55743 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@349486 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/utils/gn/build/libs/xar/BUILD.gn b/utils/gn/build/libs/xar/BUILD.gn new file mode 100644 index 00000000000..0c30abf5d73 --- /dev/null +++ b/utils/gn/build/libs/xar/BUILD.gn @@ -0,0 +1,12 @@ +import("//llvm/utils/gn/build/libs/xar/enable.gni") + +config("xar_config") { + visibility = [ ":xar" ] + libs = [ "xar" ] +} + +group("xar") { + if (llvm_enable_libxar) { + public_configs = [ ":xar_config" ] + } +} diff --git a/utils/gn/build/libs/xar/enable.gni b/utils/gn/build/libs/xar/enable.gni new file mode 100644 index 00000000000..c394a7efbd1 --- /dev/null +++ b/utils/gn/build/libs/xar/enable.gni @@ -0,0 +1,3 @@ +declare_args() { + llvm_enable_libxar = host_os == "mac" +} diff --git a/utils/gn/secondary/BUILD.gn b/utils/gn/secondary/BUILD.gn index 0858f552863..c93ea7800ff 100644 --- a/utils/gn/secondary/BUILD.gn +++ b/utils/gn/secondary/BUILD.gn @@ -2,10 +2,14 @@ group("default") { deps = [ ":lld", "//llvm/tools/llc", + "//llvm/tools/llvm-ar:symlinks", "//llvm/tools/llvm-as", "//llvm/tools/llvm-dis", "//llvm/tools/llvm-dwarfdump", "//llvm/tools/llvm-mc", + "//llvm/tools/llvm-nm:symlinks", + "//llvm/tools/llvm-objdump:symlinks", + "//llvm/tools/llvm-readobj:symlinks", "//llvm/tools/llvm-undname", "//llvm/tools/obj2yaml", "//llvm/tools/opt", @@ -36,14 +40,33 @@ group("default") { # executable. This has the effect that `ninja lld` builds lld and then creates # symlinks (via this target), while `ninja bin/lld` only builds lld and doesn't # update symlinks (in particular, on Windows it doesn't copy the new lld to its -# new locations); also `ninja lld-link` will build lld and copy it (on Windows) -# to lld-link, but it won't copy it to ld.lld. +# new locations). # That seems simpler, more explicit, and good enough. group("lld") { deps = [ "//lld/tools/lld:symlinks", ] } +group("llvm-ar") { + deps = [ + "//llvm/tools/llvm-ar:symlinks", + ] +} +group("llvm-nm") { + deps = [ + "//llvm/tools/llvm-nm:symlinks", + ] +} +group("llvm-objdump") { + deps = [ + "//llvm/tools/llvm-objdump:symlinks", + ] +} +group("llvm-readobj") { + deps = [ + "//llvm/tools/llvm-readobj:symlinks", + ] +} # A pool called "console" in the root BUILD.gn is magic and represents ninja's # built-in console pool. (Requires a GN with `gn --version` >= 552353.) diff --git a/utils/gn/secondary/llvm/include/llvm/Config/BUILD.gn b/utils/gn/secondary/llvm/include/llvm/Config/BUILD.gn index fe86961788d..08924e36dab 100644 --- a/utils/gn/secondary/llvm/include/llvm/Config/BUILD.gn +++ b/utils/gn/secondary/llvm/include/llvm/Config/BUILD.gn @@ -3,6 +3,7 @@ import("//llvm/triples.gni") import("//llvm/utils/gn/build/buildflags.gni") import("//llvm/utils/gn/build/libs/pthread/enable.gni") import("//llvm/utils/gn/build/libs/terminfo/enable.gni") +import("//llvm/utils/gn/build/libs/xar/enable.gni") import("//llvm/utils/gn/build/libs/xml/enable.gni") import("//llvm/utils/gn/build/libs/zlib/enable.gni") import("//llvm/version.gni") @@ -182,7 +183,6 @@ action("config") { "HAVE_MACH_MACH_H=1", "HAVE_MALLOC_MALLOC_H=1", "HAVE_MALLOC_ZONE_STATISTICS=1", - "HAVE_LIBXAR=1", "HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC=1", ] } else { @@ -195,7 +195,6 @@ action("config") { "HAVE_MALLOC_H=1", "HAVE_MALLOC_MALLOC_H=", "HAVE_MALLOC_ZONE_STATISTICS=", - "HAVE_LIBXAR=", "HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC=", ] } @@ -293,6 +292,12 @@ action("config") { args += [ "LTDL_SHLIB_EXT=.dll" ] } + if (llvm_enable_libxar) { + args += [ "HAVE_LIBXAR=1" ] + } else { + args += [ "HAVE_LIBXAR=" ] + } + if (llvm_enable_terminfo) { args += [ "HAVE_TERMINFO=1" ] } else { diff --git a/utils/gn/secondary/llvm/lib/DebugInfo/Symbolize/BUILD.gn b/utils/gn/secondary/llvm/lib/DebugInfo/Symbolize/BUILD.gn new file mode 100644 index 00000000000..ecd59c31153 --- /dev/null +++ b/utils/gn/secondary/llvm/lib/DebugInfo/Symbolize/BUILD.gn @@ -0,0 +1,16 @@ +static_library("Symbolize") { + output_name = "LLVMSymbolize" + deps = [ + "//llvm/include/llvm/Config:config", + "//llvm/lib/DebugInfo/DWARF", + "//llvm/lib/DebugInfo/PDB", + "//llvm/lib/Demangle", + "//llvm/lib/Object", + "//llvm/lib/Support", + ] + sources = [ + "DIPrinter.cpp", + "SymbolizableObjectFile.cpp", + "Symbolize.cpp", + ] +} diff --git a/utils/gn/secondary/llvm/lib/ToolDrivers/llvm-dlltool/BUILD.gn b/utils/gn/secondary/llvm/lib/ToolDrivers/llvm-dlltool/BUILD.gn new file mode 100644 index 00000000000..b5d5a61c06a --- /dev/null +++ b/utils/gn/secondary/llvm/lib/ToolDrivers/llvm-dlltool/BUILD.gn @@ -0,0 +1,19 @@ +import("//llvm/utils/TableGen/tablegen.gni") + +tablegen("Options") { + visibility = [ ":DlltoolDriver" ] + args = [ "-gen-opt-parser-defs" ] +} + +static_library("DlltoolDriver") { + output_name = "LLVMDlltoolDriver" + deps = [ + ":Options", + "//llvm/lib/Object", + "//llvm/lib/Option", + "//llvm/lib/Support", + ] + sources = [ + "DlltoolDriver.cpp", + ] +} diff --git a/utils/gn/secondary/llvm/tools/binutils_symlinks.gni b/utils/gn/secondary/llvm/tools/binutils_symlinks.gni new file mode 100644 index 00000000000..3149775b1de --- /dev/null +++ b/utils/gn/secondary/llvm/tools/binutils_symlinks.gni @@ -0,0 +1,5 @@ +declare_args() { + # If set, creates symlinks for nm, objdump, readelf in the build + # directory. + llvm_install_binutils_symlinks = false +} diff --git a/utils/gn/secondary/llvm/tools/llvm-ar/BUILD.gn b/utils/gn/secondary/llvm/tools/llvm-ar/BUILD.gn new file mode 100644 index 00000000000..969fbed688c --- /dev/null +++ b/utils/gn/secondary/llvm/tools/llvm-ar/BUILD.gn @@ -0,0 +1,46 @@ +import("//llvm/tools/binutils_symlinks.gni") +import("//llvm/utils/gn/build/symlink_or_copy.gni") + +symlinks = [ + "llvm-dlltool", + "llvm-lib", + "llvm-ranlib", +] +if (llvm_install_binutils_symlinks) { + symlinks += [ + "ar", + "dlltool", + "ranlib", + ] +} +foreach(target, symlinks) { + symlink_or_copy(target) { + deps = [ + ":llvm-ar", + ] + source = "llvm-ar" + output = "$root_out_dir/bin/$target" + } +} + +# //:llvm-ar depends on this symlink target, see comment in //BUILD.gn. +group("symlinks") { + deps = [] + foreach(target, symlinks) { + deps += [ ":$target" ] + } +} + +executable("llvm-ar") { + deps = [ + "//llvm/lib/IR", + "//llvm/lib/Object", + "//llvm/lib/Support", + "//llvm/lib/Target:TargetsToBuild", + "//llvm/lib/ToolDrivers/llvm-dlltool:DlltoolDriver", + "//llvm/lib/ToolDrivers/llvm-lib:LibDriver", + ] + sources = [ + "llvm-ar.cpp", + ] +} diff --git a/utils/gn/secondary/llvm/tools/llvm-nm/BUILD.gn b/utils/gn/secondary/llvm/tools/llvm-nm/BUILD.gn new file mode 100644 index 00000000000..b433ef60247 --- /dev/null +++ b/utils/gn/secondary/llvm/tools/llvm-nm/BUILD.gn @@ -0,0 +1,37 @@ +import("//llvm/tools/binutils_symlinks.gni") +import("//llvm/utils/gn/build/symlink_or_copy.gni") + +if (llvm_install_binutils_symlinks) { + symlink_or_copy("nm") { + deps = [ + ":llvm-nm", + ] + source = "llvm-nm" + output = "$root_out_dir/bin/nm" + } +} + +# //:llvm-nm depends on this symlink target, see comment in //BUILD.gn. +group("symlinks") { + if (llvm_install_binutils_symlinks) { + deps = [ + ":nm", + ] + } +} + +executable("llvm-nm") { + deps = [ + "//llvm/lib/Bitcode/Reader", + "//llvm/lib/Demangle", + "//llvm/lib/IR", + "//llvm/lib/Object", + "//llvm/lib/Support", + "//llvm/lib/Target:AllTargetsAsmParsers", + "//llvm/lib/Target:AllTargetsDescs", + "//llvm/lib/Target:AllTargetsInfos", + ] + sources = [ + "llvm-nm.cpp", + ] +} diff --git a/utils/gn/secondary/llvm/tools/llvm-objdump/BUILD.gn b/utils/gn/secondary/llvm/tools/llvm-objdump/BUILD.gn new file mode 100644 index 00000000000..e8ee2e760c7 --- /dev/null +++ b/utils/gn/secondary/llvm/tools/llvm-objdump/BUILD.gn @@ -0,0 +1,48 @@ +import("//llvm/tools/binutils_symlinks.gni") +import("//llvm/utils/gn/build/symlink_or_copy.gni") + +if (llvm_install_binutils_symlinks) { + symlink_or_copy("objdump") { + deps = [ + ":llvm-objdump", + ] + source = "llvm-objdump" + output = "$root_out_dir/bin/objdump" + } +} + +# //:llvm-nm depends on this symlink target, see comment in //BUILD.gn. +group("symlinks") { + if (llvm_install_binutils_symlinks) { + deps = [ + ":objdump", + ] + } +} + +executable("llvm-objdump") { + deps = [ + "//llvm/include/llvm/Config:config", + "//llvm/lib/CodeGen", + "//llvm/lib/DebugInfo/DWARF", + "//llvm/lib/DebugInfo/PDB", + "//llvm/lib/DebugInfo/Symbolize", + "//llvm/lib/Demangle", + "//llvm/lib/MC", + "//llvm/lib/MC/MCDisassembler", + "//llvm/lib/Object", + "//llvm/lib/Support", + "//llvm/lib/Target:AllTargetsAsmPrinters", + "//llvm/lib/Target:AllTargetsDescs", + "//llvm/lib/Target:AllTargetsDisassemblers", + "//llvm/lib/Target:AllTargetsInfos", + "//llvm/utils/gn/build/libs/xar", + ] + sources = [ + "COFFDump.cpp", + "ELFDump.cpp", + "MachODump.cpp", + "WasmDump.cpp", + "llvm-objdump.cpp", + ] +} diff --git a/utils/gn/secondary/llvm/tools/llvm-readobj/BUILD.gn b/utils/gn/secondary/llvm/tools/llvm-readobj/BUILD.gn new file mode 100644 index 00000000000..501d809d809 --- /dev/null +++ b/utils/gn/secondary/llvm/tools/llvm-readobj/BUILD.gn @@ -0,0 +1,49 @@ +import("//llvm/tools/binutils_symlinks.gni") +import("//llvm/utils/gn/build/symlink_or_copy.gni") + +symlinks = [ "llvm-readelf" ] +if (llvm_install_binutils_symlinks) { + symlinks += [ "readelf" ] +} +foreach(target, symlinks) { + symlink_or_copy(target) { + deps = [ + ":llvm-readobj", + ] + source = "llvm-readobj" + output = "$root_out_dir/bin/$target" + } +} + +# //:llvm-readobj depends on this symlink target, see comment in //BUILD.gn. +group("symlinks") { + deps = [] + foreach(target, symlinks) { + deps += [ ":$target" ] + } +} + +executable("llvm-readobj") { + deps = [ + "//llvm/lib/BinaryFormat", + "//llvm/lib/DebugInfo/CodeView", + "//llvm/lib/DebugInfo/DWARF", + "//llvm/lib/DebugInfo/MSF", + "//llvm/lib/DebugInfo/PDB", + "//llvm/lib/Object", + "//llvm/lib/Support", + ] + sources = [ + "ARMWinEHPrinter.cpp", + "COFFDumper.cpp", + "COFFImportDumper.cpp", + "ELFDumper.cpp", + "Error.cpp", + "MachODumper.cpp", + "ObjDumper.cpp", + "WasmDumper.cpp", + "Win64EHDumper.cpp", + "WindowsResourceDumper.cpp", + "llvm-readobj.cpp", + ] +}