Skip to content

Commit fd38736

Browse files
committed
[llvm][tapi-diff] Transition diff-tool to be more general purpose
This is the first of transition tapi-diff to be readtapi. This tool will eventually replace functionality for Xcode's `xcrun tapi stubify` and `xcrun tapi archive`. This patch updates the tool name and is a minor refactor for the driver to handle more options. Reviewed By: zixuw Differential Revision: https://reviews.llvm.org/D153045 (cherry picked from commit 5656d79)
1 parent 86c31e4 commit fd38736

25 files changed

+110
-94
lines changed

llvm/test/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ set(LLVM_TEST_DEPENDS
133133
llvm-strip
134134
llvm-symbolizer
135135
llvm-tblgen
136-
llvm-tapi-diff
136+
llvm-readtapi
137137
llvm-tli-checker
138138
llvm-undname
139139
llvm-windres

llvm/test/lit.cfg.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ def get_asan_rtlib():
167167
'llvm-pdbutil', 'llvm-profdata', 'llvm-profgen', 'llvm-ranlib', 'llvm-rc', 'llvm-readelf',
168168
'llvm-readobj', 'llvm-remark-size-diff', 'llvm-rtdyld', 'llvm-sim',
169169
'llvm-size', 'llvm-split', 'llvm-stress', 'llvm-strings', 'llvm-strip',
170-
'llvm-tblgen', 'llvm-tapi-diff', 'llvm-undname', 'llvm-windres',
170+
'llvm-tblgen', 'llvm-readtapi', 'llvm-undname', 'llvm-windres',
171171
'llvm-c-test', 'llvm-cxxfilt', 'llvm-xray', 'yaml2obj', 'obj2yaml',
172172
'yaml-bench', 'verify-uselistorder', 'bugpoint', 'llc', 'llvm-symbolizer',
173173
'opt', 'sancov', 'sanstats', 'llvm-remarkutil'])

llvm/test/tools/llvm-tapi-diff/incorrect-format.test renamed to llvm/test/tools/llvm-readtapi/compare-incorrect-format.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
; RUN: mkdir -p %t
22
; RUN: yaml2obj %S/Inputs/macho.yaml -o %t/macho.dylib
3-
; RUN: not llvm-tapi-diff %S/Inputs/v4A.tbd %t/macho.dylib 2>&1 | FileCheck %s
3+
; RUN: not llvm-readtapi --compare %S/Inputs/v4A.tbd %t/macho.dylib 2>&1 | FileCheck %s
44

55
; CHECK: error: {{.*}}macho.dylib' unsupported file format
66
; CHECK-NOT: error:

llvm/test/tools/llvm-tapi-diff/same-num-inlines.test renamed to llvm/test/tools/llvm-readtapi/compare-inlines.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: not llvm-tapi-diff %S/Inputs/v4B.tbd %S/Inputs/v4E.tbd 2>&1 | FileCheck %s
1+
; RUN: not llvm-readtapi --compare %S/Inputs/v4B.tbd %S/Inputs/v4E.tbd 2>&1 | FileCheck %s
22

33
; CHECK:< {{.*}}/Inputs/v4B.tbd
44
; CHECK:> {{.*}}/Inputs/v4E.tbd

llvm/test/tools/llvm-tapi-diff/left-single-inline.test renamed to llvm/test/tools/llvm-readtapi/compare-left-single-inline.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: not llvm-tapi-diff %S/Inputs/v4A.tbd %S/Inputs/v4B.tbd 2>&1 | FileCheck %s
1+
; RUN: not llvm-readtapi --compare %S/Inputs/v4A.tbd %S/Inputs/v4B.tbd 2>&1 | FileCheck %s
22

33
; CHECK:< {{.*}}/Inputs/v4A.tbd
44
; CHECK:> {{.*}}/Inputs/v4B.tbd
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
; RUN: llvm-readtapi --compare %S/Inputs/v4A.tbd %S/Inputs/v4A.tbd 2>&1 | FileCheck %s --allow-empty
2+
3+
; CHECK-NOT: error:
4+
; CHECK-NOT: warning:

llvm/test/tools/llvm-tapi-diff/mismatched-number-of-inlines.test renamed to llvm/test/tools/llvm-readtapi/compare-mismatched-inlines.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: not llvm-tapi-diff %S/Inputs/v4B.tbd %S/Inputs/v4D.tbd 2>&1 | FileCheck %s
1+
; RUN: not llvm-readtapi --compare %S/Inputs/v4B.tbd %S/Inputs/v4D.tbd 2>&1 | FileCheck %s
22

33
; CHECK:< {{.*}}/Inputs/v4B.tbd
44
; CHECK:> {{.*}}/Inputs/v4D.tbd
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
; RUN: not llvm-readtapi --compare %S/Inputs/v4A.tbd %S/Inputs/v4.tbd 2>&1 | FileCheck -DMSG=%errc_ENOENT %s
2+
3+
; CHECK: error: {{.*}}v4.tbd' [[MSG]]

llvm/test/tools/llvm-tapi-diff/multiple-inlines.test renamed to llvm/test/tools/llvm-readtapi/compare-multiple-inlines.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: not llvm-tapi-diff %S/Inputs/v4A.tbd %S/Inputs/v4D.tbd 2>&1 | FileCheck %s
1+
; RUN: not llvm-readtapi --compare %S/Inputs/v4A.tbd %S/Inputs/v4D.tbd 2>&1 | FileCheck %s
22

33
; CHECK:< {{.*}}/Inputs/v4A.tbd
44
; CHECK:> {{.*}}/Inputs/v4D.tbd

llvm/test/tools/llvm-tapi-diff/no-inlines.test renamed to llvm/test/tools/llvm-readtapi/compare-no-inlines.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: not llvm-tapi-diff %S/Inputs/v4A.tbd %S/Inputs/v4C.tbd 2>&1 | FileCheck %s
1+
; RUN: not llvm-readtapi --compare %S/Inputs/v4A.tbd %S/Inputs/v4C.tbd 2>&1 | FileCheck %s
22

33
; CHECK:< {{.*}}/Inputs/v4A.tbd
44
; CHECK:> {{.*}}/Inputs/v4C.tbd

llvm/test/tools/llvm-tapi-diff/right-single-inlines.test renamed to llvm/test/tools/llvm-readtapi/compare-right-single-inline.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: not llvm-tapi-diff %S/Inputs/v4B.tbd %S/Inputs/v4C.tbd 2>&1 | FileCheck %s
1+
; RUN: not llvm-readtapi --compare %S/Inputs/v4B.tbd %S/Inputs/v4C.tbd 2>&1 | FileCheck %s
22

33
; CHECK:< {{.*}}/Inputs/v4B.tbd
44
; CHECK:> {{.*}}/Inputs/v4C.tbd

llvm/test/tools/llvm-tapi-diff/v5.test renamed to llvm/test/tools/llvm-readtapi/compare-v5.test

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
; RUN: rm -rf %t
22
; RUN: split-file %s %t
3-
; RUN: llvm-tapi-diff %t/Simple_v5.tbd %t/Simple_v5.tbd 2>&1 | FileCheck %s --allow-empty
4-
; RUN: llvm-tapi-diff %t/Simple_v5.tbd %t/Simple_v4.tbd 2>&1 | FileCheck %s --allow-empty
3+
; RUN: llvm-readtapi --compare %t/Simple_v5.tbd %t/Simple_v5.tbd 2>&1 | FileCheck %s --allow-empty
4+
; RUN: llvm-readtapi --compare %t/Simple_v5.tbd %t/Simple_v4.tbd 2>&1 | FileCheck %s --allow-empty
55

66
; CHECK-NOT: error:
77
; CHECK-NOT: warning:

llvm/test/tools/llvm-tapi-diff/matching-tbd.test

Lines changed: 0 additions & 4 deletions
This file was deleted.

llvm/test/tools/llvm-tapi-diff/misspelled-tbd.test

Lines changed: 0 additions & 3 deletions
This file was deleted.

llvm/tools/llvm-tapi-diff/CMakeLists.txt renamed to llvm/tools/llvm-readtapi/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ set(LLVM_LINK_COMPONENTS
44
TextAPI
55
)
66

7-
add_llvm_tool(llvm-tapi-diff
8-
llvm-tapi-diff.cpp
7+
add_llvm_tool(llvm-readtapi
8+
llvm-readtapi.cpp
99
DiffEngine.cpp
1010
)
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
//===-- llvm-readtapi.cpp - tapi file reader and manipulator -----*- C++-*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
//
9+
// This file defines the command-line driver for llvm-readtapi.
10+
//
11+
//===----------------------------------------------------------------------===//
12+
#include "DiffEngine.h"
13+
#include "llvm/Object/TapiUniversal.h"
14+
#include "llvm/Support/CommandLine.h"
15+
#include "llvm/Support/Error.h"
16+
#include "llvm/Support/InitLLVM.h"
17+
#include "llvm/Support/MemoryBuffer.h"
18+
#include "llvm/Support/WithColor.h"
19+
#include "llvm/Support/raw_ostream.h"
20+
#include <cstdlib>
21+
22+
using namespace llvm;
23+
using namespace MachO;
24+
using namespace object;
25+
26+
namespace {
27+
cl::OptionCategory TapiCat("llvm-readtapi options");
28+
cl::OptionCategory CompareCat("llvm-readtapi --compare options");
29+
30+
cl::opt<std::string> InputFileName(cl::Positional, cl::desc("<tapi file>"),
31+
cl::Required, cl::cat(TapiCat));
32+
cl::opt<std::string> CompareInputFileName(cl::Positional,
33+
cl::desc("<comparison file>"),
34+
cl::Required, cl::cat(CompareCat));
35+
enum OutputKind {
36+
Compare,
37+
};
38+
39+
cl::opt<OutputKind>
40+
Output(cl::desc("choose command action:"),
41+
cl::values(clEnumValN(Compare, "compare",
42+
"compare tapi file for library differences")),
43+
cl::init(OutputKind::Compare), cl::cat(TapiCat));
44+
} // anonymous namespace
45+
46+
Expected<std::unique_ptr<Binary>> convertFileToBinary(std::string &Filename) {
47+
ErrorOr<std::unique_ptr<MemoryBuffer>> BufferOrErr =
48+
MemoryBuffer::getFileOrSTDIN(Filename);
49+
if (BufferOrErr.getError())
50+
return errorCodeToError(BufferOrErr.getError());
51+
return createBinary(BufferOrErr.get()->getMemBufferRef());
52+
}
53+
54+
int main(int Argc, char **Argv) {
55+
InitLLVM X(Argc, Argv);
56+
cl::HideUnrelatedOptions(TapiCat);
57+
cl::ParseCommandLineOptions(Argc, Argv,
58+
"TAPI File Reader and Manipulator Tool");
59+
60+
if (Output == OutputKind::Compare) {
61+
if (InputFileName.empty() || CompareInputFileName.empty()) {
62+
cl::PrintHelpMessage();
63+
return EXIT_FAILURE;
64+
}
65+
66+
ExitOnError ExitOnErr("error: '" + InputFileName + "' ",
67+
/*DefaultErrorExitCode=*/2);
68+
auto BinLHS = ExitOnErr(convertFileToBinary(InputFileName));
69+
70+
TapiUniversal *FileLHS = dyn_cast<TapiUniversal>(BinLHS.get());
71+
if (!FileLHS) {
72+
ExitOnErr(createStringError(std::errc::executable_format_error,
73+
"unsupported file format"));
74+
}
75+
76+
ExitOnErr.setBanner("error: '" + CompareInputFileName + "' ");
77+
auto BinRHS = ExitOnErr(convertFileToBinary(CompareInputFileName));
78+
79+
TapiUniversal *FileRHS = dyn_cast<TapiUniversal>(BinRHS.get());
80+
if (!FileRHS) {
81+
ExitOnErr(createStringError(std::errc::executable_format_error,
82+
"unsupported file format"));
83+
}
84+
85+
raw_ostream &OS = outs();
86+
return DiffEngine(FileLHS, FileRHS).compareFiles(OS);
87+
}
88+
89+
return 0;
90+
}

llvm/tools/llvm-tapi-diff/llvm-tapi-diff.cpp

Lines changed: 0 additions & 74 deletions
This file was deleted.

0 commit comments

Comments
 (0)