forked from OSchip/llvm-project
[ms] [llvm-ml] Add support for INCLUDE environment variable
Also adds support for the ML.exe command-line flag /X, which ignores the INCLUDE environment variable.
This relands commit c43f413b01
using lit's cross-platform `env` support.
Differential Revision: https://reviews.llvm.org/D103989
This commit is contained in:
parent
1b21e9c1fa
commit
4b5317e937
|
@ -0,0 +1,20 @@
|
||||||
|
; RUN: env INCLUDE=%S llvm-ml -filetype=s %s /Fo - | FileCheck %s
|
||||||
|
|
||||||
|
include included.inc
|
||||||
|
|
||||||
|
.code
|
||||||
|
|
||||||
|
t1:
|
||||||
|
mov eax, Const
|
||||||
|
|
||||||
|
; CHECK-LABEL: t1:
|
||||||
|
; CHECK-NEXT: mov eax, 8
|
||||||
|
|
||||||
|
t2:
|
||||||
|
push_pop ebx
|
||||||
|
|
||||||
|
; CHECK-LABEL: t2:
|
||||||
|
; CHECK-NEXT: push ebx
|
||||||
|
; CHECK-NEXT: pop ebx
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,16 @@
|
||||||
|
; RUN: not llvm-ml -filetype=s %s /Fo - 2>&1 | FileCheck %s --implicit-check-not=error:
|
||||||
|
; RUN: env INCLUDE=%S not llvm-ml -filetype=s %s /X /Fo - 2>&1 | FileCheck %s --implicit-check-not=error:
|
||||||
|
|
||||||
|
; CHECK: :[[# @LINE + 1]]:9: error: Could not find include file 'included.inc'
|
||||||
|
include included.inc
|
||||||
|
|
||||||
|
.code
|
||||||
|
|
||||||
|
t1:
|
||||||
|
mov eax, Const
|
||||||
|
|
||||||
|
t2:
|
||||||
|
; CHECK: :[[# @LINE + 1]]:1: error: invalid instruction mnemonic 'push_pop'
|
||||||
|
push_pop ebx
|
||||||
|
|
||||||
|
end
|
|
@ -73,6 +73,8 @@ def assembly_file : MLJoinedOrSeparate<"Ta">,
|
||||||
def error_on_warning : MLFlag<"WX">, Alias<fatal_warnings>;
|
def error_on_warning : MLFlag<"WX">, Alias<fatal_warnings>;
|
||||||
def parse_only : MLFlag<"Zs">, HelpText<"Run a syntax-check only">,
|
def parse_only : MLFlag<"Zs">, HelpText<"Run a syntax-check only">,
|
||||||
Alias<filetype>, AliasArgs<["null"]>;
|
Alias<filetype>, AliasArgs<["null"]>;
|
||||||
|
def ignore_include_envvar : MLFlag<"X">,
|
||||||
|
HelpText<"Ignore the INCLUDE environment variable">;
|
||||||
|
|
||||||
def tiny_model_support : UnsupportedFlag<"AT">, HelpText<"">;
|
def tiny_model_support : UnsupportedFlag<"AT">, HelpText<"">;
|
||||||
def alternate_linker : UnsupportedJoined<"Bl">, HelpText<"">;
|
def alternate_linker : UnsupportedJoined<"Bl">, HelpText<"">;
|
||||||
|
@ -105,7 +107,6 @@ def listing_title : UnsupportedSeparate<"St">, HelpText<"">;
|
||||||
def listing_false_conditionals : UnsupportedFlag<"Sx">, HelpText<"">;
|
def listing_false_conditionals : UnsupportedFlag<"Sx">, HelpText<"">;
|
||||||
def extra_warnings : UnsupportedFlag<"w">, HelpText<"">;
|
def extra_warnings : UnsupportedFlag<"w">, HelpText<"">;
|
||||||
def warning_level : UnsupportedJoined<"W">, HelpText<"">;
|
def warning_level : UnsupportedJoined<"W">, HelpText<"">;
|
||||||
def ignore_include_envvar : UnsupportedFlag<"X">, HelpText<"">;
|
|
||||||
def line_number_info : UnsupportedFlag<"Zd">, HelpText<"">;
|
def line_number_info : UnsupportedFlag<"Zd">, HelpText<"">;
|
||||||
def export_all_symbols : UnsupportedFlag<"Zf">, HelpText<"">;
|
def export_all_symbols : UnsupportedFlag<"Zf">, HelpText<"">;
|
||||||
def codeview_info : UnsupportedFlag<"Zi">, HelpText<"">;
|
def codeview_info : UnsupportedFlag<"Zi">, HelpText<"">;
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include "llvm/Support/InitLLVM.h"
|
#include "llvm/Support/InitLLVM.h"
|
||||||
#include "llvm/Support/MemoryBuffer.h"
|
#include "llvm/Support/MemoryBuffer.h"
|
||||||
#include "llvm/Support/Path.h"
|
#include "llvm/Support/Path.h"
|
||||||
|
#include "llvm/Support/Process.h"
|
||||||
#include "llvm/Support/SourceMgr.h"
|
#include "llvm/Support/SourceMgr.h"
|
||||||
#include "llvm/Support/TargetRegistry.h"
|
#include "llvm/Support/TargetRegistry.h"
|
||||||
#include "llvm/Support/TargetSelect.h"
|
#include "llvm/Support/TargetSelect.h"
|
||||||
|
@ -263,8 +264,21 @@ int main(int Argc, char **Argv) {
|
||||||
SrcMgr.AddNewSourceBuffer(std::move(*BufferPtr), SMLoc());
|
SrcMgr.AddNewSourceBuffer(std::move(*BufferPtr), SMLoc());
|
||||||
|
|
||||||
// Record the location of the include directories so that the lexer can find
|
// Record the location of the include directories so that the lexer can find
|
||||||
// it later.
|
// included files later.
|
||||||
SrcMgr.setIncludeDirs(InputArgs.getAllArgValues(OPT_include_path));
|
std::vector<std::string> IncludeDirs =
|
||||||
|
InputArgs.getAllArgValues(OPT_include_path);
|
||||||
|
if (!InputArgs.hasArg(OPT_ignore_include_envvar)) {
|
||||||
|
if (llvm::Optional<std::string> IncludeEnvVar =
|
||||||
|
llvm::sys::Process::GetEnv("INCLUDE")) {
|
||||||
|
SmallVector<StringRef, 8> Dirs;
|
||||||
|
StringRef(*IncludeEnvVar)
|
||||||
|
.split(Dirs, ";", /*MaxSplit=*/-1, /*KeepEmpty=*/false);
|
||||||
|
IncludeDirs.reserve(IncludeDirs.size() + Dirs.size());
|
||||||
|
for (StringRef Dir : Dirs)
|
||||||
|
IncludeDirs.push_back(Dir.str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SrcMgr.setIncludeDirs(IncludeDirs);
|
||||||
|
|
||||||
std::unique_ptr<MCRegisterInfo> MRI(TheTarget->createMCRegInfo(TripleName));
|
std::unique_ptr<MCRegisterInfo> MRI(TheTarget->createMCRegInfo(TripleName));
|
||||||
assert(MRI && "Unable to create target register info!");
|
assert(MRI && "Unable to create target register info!");
|
||||||
|
|
Loading…
Reference in New Issue