Don’t add --crate-type to rust compiler options when explicitly specified by user (#8191)

Resolves #8186.
This commit is contained in:
narpfel
2025-10-13 21:16:01 +02:00
committed by GitHub
parent 71bb4446a0
commit 685f68450a
3 changed files with 45 additions and 3 deletions

View File

@@ -1,5 +1,6 @@
compilers=rustc compilers=rustc
supportsBinary=true supportsBinary=true
supportsBinaryObject=true
compilerType=rust compilerType=rust
demangler=c++filt demangler=c++filt
demanglerArgs=--format=rust demanglerArgs=--format=rust

View File

@@ -271,19 +271,22 @@ export class RustCompiler extends BaseCompiler {
let options = ['-C', 'debuginfo=2', '-o', this.filename(outputFilename)]; let options = ['-C', 'debuginfo=2', '-o', this.filename(outputFilename)];
const userRequestedEmit = _.any(unwrap(userOptions), opt => opt.includes('--emit')); const userRequestedEmit = _.any(unwrap(userOptions), opt => opt.includes('--emit'));
const userRequestedCrateType = _.any(unwrap(userOptions), opt => opt.includes('--crate-type'));
const setCrateType = (options, type) =>
userRequestedCrateType ? options : options.concat(['--crate-type', type]);
if (filters.binary) { if (filters.binary) {
options = options.concat(['--crate-type', 'bin']); options = setCrateType(options, 'bin');
if (this.amd64linker) { if (this.amd64linker) {
options = options.concat(`-Clinker=${this.amd64linker}`); options = options.concat(`-Clinker=${this.amd64linker}`);
} }
} else if (filters.binaryObject) { } else if (filters.binaryObject) {
options = options.concat(['--crate-type', 'lib']); options = setCrateType(options, 'lib');
} else { } else {
if (!userRequestedEmit) { if (!userRequestedEmit) {
options = options.concat('--emit', 'asm'); options = options.concat('--emit', 'asm');
} }
if (filters.intel) options = options.concat('-Cllvm-args=--x86-asm-syntax=intel'); if (filters.intel) options = options.concat('-Cllvm-args=--x86-asm-syntax=intel');
options = options.concat(['--crate-type', 'rlib']); options = setCrateType(options, 'rlib');
} }
return options; return options;
} }

View File

@@ -746,6 +746,44 @@ describe('Target hints', () => {
}); });
}); });
describe('Rust options', () => {
let ce: CompilationEnvironment;
const executingCompilerInfo = makeFakeCompilerInfo({
remote: {
target: '',
path: '',
cmakePath: '',
basePath: '/',
},
semver: 'nightly',
lang: 'rust',
ldPath: [],
libPath: [],
supportsExecute: true,
supportsBinary: true,
options: '',
});
beforeAll(() => {
ce = makeCompilationEnvironment({
languages,
});
props.initialize(path.resolve('./test/test-properties/rust'), ['local']);
});
afterAll(() => {
props.reset();
});
it('does not pass `--crate-type` when specified by user', () => {
const compiler = new RustCompiler(executingCompilerInfo, ce);
const options = compiler.optionsForFilter({}, 'output.o', ['--crate-type=bin']);
expect(options).not.toContain('--crate-type');
const optionsTwoArgs = compiler.optionsForFilter({}, 'output.o', ['--crate-type', 'bin']);
expect(optionsTwoArgs).not.toContain('--crate-type');
});
});
describe('Rust overrides', () => { describe('Rust overrides', () => {
let ce: CompilationEnvironment; let ce: CompilationEnvironment;
const executingCompilerInfo = makeFakeCompilerInfo({ const executingCompilerInfo = makeFakeCompilerInfo({