mirror of
https://github.com/compiler-explorer/compiler-explorer.git
synced 2025-12-27 07:04:04 -05:00
Add support for Solidity (#3507)
* feat(compilers): Solidity support MVP * don't concat userOptions in optionsForFilter * fixes after review * Update etc/config/solidity.defaults.properties Co-authored-by: Rubén Rincón Blanco <ruben@rinconblanco.es> Co-authored-by: Rubén Rincón Blanco <ruben@rinconblanco.es>
This commit is contained in:
178
etc/config/solidity.amazon.properties
Normal file
178
etc/config/solidity.amazon.properties
Normal file
@@ -0,0 +1,178 @@
|
||||
compilers=&solc
|
||||
defaultCompiler=solc0813
|
||||
|
||||
group.solc.compilers=solc036:solc040:solc041:solc042:solc043:solc044:solc045:solc046:solc047:solc048:solc049:solc0410:solc0411:solc0412:solc0413:solc0414:solc0415:solc0416:solc0417:solc0418:solc0419:solc0420:solc0421:solc0422:solc0423:solc0424:solc0425:solc0426:solc050:solc051:solc052:solc053:solc054:solc055:solc056:solc057:solc058:solc059:solc0510:solc0511:solc0512:solc0513:solc0514:solc0515:solc0516:solc0517:solc060:solc061:solc062:solc063:solc064:solc065:solc066:solc067:solc068:solc069:solc0610:solc0611:solc0612:solc070:solc071:solc072:solc073:solc074:solc075:solc076:solc080:solc081:solc082:solc083:solc084:solc085:solc086:solc087:solc088:solc089:solc0810:solc0811:solc0812:solc0813
|
||||
group.solc.compilerType=solidity
|
||||
group.solc.supportsBinary=false
|
||||
group.solc.instructionSet=evm
|
||||
compiler.solc036.exe=/opt/compiler-explorer/solc-0.3.6/solc
|
||||
compiler.solc036.semver=0.3.6
|
||||
compiler.solc040.exe=/opt/compiler-explorer/solc-0.4.0/solc
|
||||
compiler.solc040.semver=0.4.0
|
||||
compiler.solc041.exe=/opt/compiler-explorer/solc-0.4.1/solc
|
||||
compiler.solc041.semver=0.4.1
|
||||
compiler.solc042.exe=/opt/compiler-explorer/solc-0.4.2/solc
|
||||
compiler.solc042.semver=0.4.2
|
||||
compiler.solc043.exe=/opt/compiler-explorer/solc-0.4.3/solc
|
||||
compiler.solc043.semver=0.4.3
|
||||
compiler.solc044.exe=/opt/compiler-explorer/solc-0.4.4/solc
|
||||
compiler.solc044.semver=0.4.4
|
||||
compiler.solc045.exe=/opt/compiler-explorer/solc-0.4.5/solc
|
||||
compiler.solc045.semver=0.4.5
|
||||
compiler.solc046.exe=/opt/compiler-explorer/solc-0.4.6/solc
|
||||
compiler.solc046.semver=0.4.6
|
||||
compiler.solc047.exe=/opt/compiler-explorer/solc-0.4.7/solc
|
||||
compiler.solc047.semver=0.4.7
|
||||
compiler.solc048.exe=/opt/compiler-explorer/solc-0.4.8/solc
|
||||
compiler.solc048.semver=0.4.8
|
||||
compiler.solc049.exe=/opt/compiler-explorer/solc-0.4.9/solc
|
||||
compiler.solc049.semver=0.4.9
|
||||
compiler.solc0410.exe=/opt/compiler-explorer/solc-0.4.10/solc
|
||||
compiler.solc0410.semver=0.4.10
|
||||
compiler.solc0411.exe=/opt/compiler-explorer/solc-0.4.11/solc
|
||||
compiler.solc0411.semver=0.4.11
|
||||
compiler.solc0412.exe=/opt/compiler-explorer/solc-0.4.12/solc
|
||||
compiler.solc0412.semver=0.4.12
|
||||
compiler.solc0413.exe=/opt/compiler-explorer/solc-0.4.13/solc
|
||||
compiler.solc0413.semver=0.4.13
|
||||
compiler.solc0414.exe=/opt/compiler-explorer/solc-0.4.14/solc
|
||||
compiler.solc0414.semver=0.4.14
|
||||
compiler.solc0415.exe=/opt/compiler-explorer/solc-0.4.15/solc
|
||||
compiler.solc0415.semver=0.4.15
|
||||
compiler.solc0416.exe=/opt/compiler-explorer/solc-0.4.16/solc
|
||||
compiler.solc0416.semver=0.4.16
|
||||
compiler.solc0417.exe=/opt/compiler-explorer/solc-0.4.17/solc
|
||||
compiler.solc0417.semver=0.4.17
|
||||
compiler.solc0418.exe=/opt/compiler-explorer/solc-0.4.18/solc
|
||||
compiler.solc0418.semver=0.4.18
|
||||
compiler.solc0419.exe=/opt/compiler-explorer/solc-0.4.19/solc
|
||||
compiler.solc0419.semver=0.4.19
|
||||
compiler.solc0420.exe=/opt/compiler-explorer/solc-0.4.20/solc
|
||||
compiler.solc0420.semver=0.4.20
|
||||
compiler.solc0421.exe=/opt/compiler-explorer/solc-0.4.21/solc
|
||||
compiler.solc0421.semver=0.4.21
|
||||
compiler.solc0422.exe=/opt/compiler-explorer/solc-0.4.22/solc
|
||||
compiler.solc0422.semver=0.4.22
|
||||
compiler.solc0423.exe=/opt/compiler-explorer/solc-0.4.23/solc
|
||||
compiler.solc0423.semver=0.4.23
|
||||
compiler.solc0424.exe=/opt/compiler-explorer/solc-0.4.24/solc
|
||||
compiler.solc0424.semver=0.4.24
|
||||
compiler.solc0425.exe=/opt/compiler-explorer/solc-0.4.25/solc
|
||||
compiler.solc0425.semver=0.4.25
|
||||
compiler.solc0426.exe=/opt/compiler-explorer/solc-0.4.26/solc
|
||||
compiler.solc0426.semver=0.4.26
|
||||
compiler.solc050.exe=/opt/compiler-explorer/solc-0.5.0/solc
|
||||
compiler.solc050.semver=0.5.0
|
||||
compiler.solc051.exe=/opt/compiler-explorer/solc-0.5.1/solc
|
||||
compiler.solc051.semver=0.5.1
|
||||
compiler.solc052.exe=/opt/compiler-explorer/solc-0.5.2/solc
|
||||
compiler.solc052.semver=0.5.2
|
||||
compiler.solc053.exe=/opt/compiler-explorer/solc-0.5.3/solc
|
||||
compiler.solc053.semver=0.5.3
|
||||
compiler.solc054.exe=/opt/compiler-explorer/solc-0.5.4/solc
|
||||
compiler.solc054.semver=0.5.4
|
||||
compiler.solc055.exe=/opt/compiler-explorer/solc-0.5.5/solc
|
||||
compiler.solc055.semver=0.5.5
|
||||
compiler.solc056.exe=/opt/compiler-explorer/solc-0.5.6/solc
|
||||
compiler.solc056.semver=0.5.6
|
||||
compiler.solc057.exe=/opt/compiler-explorer/solc-0.5.7/solc
|
||||
compiler.solc057.semver=0.5.7
|
||||
compiler.solc058.exe=/opt/compiler-explorer/solc-0.5.8/solc
|
||||
compiler.solc058.semver=0.5.8
|
||||
compiler.solc059.exe=/opt/compiler-explorer/solc-0.5.9/solc
|
||||
compiler.solc059.semver=0.5.9
|
||||
compiler.solc0510.exe=/opt/compiler-explorer/solc-0.5.10/solc
|
||||
compiler.solc0510.semver=0.5.10
|
||||
compiler.solc0511.exe=/opt/compiler-explorer/solc-0.5.11/solc
|
||||
compiler.solc0511.semver=0.5.11
|
||||
compiler.solc0512.exe=/opt/compiler-explorer/solc-0.5.12/solc
|
||||
compiler.solc0512.semver=0.5.12
|
||||
compiler.solc0513.exe=/opt/compiler-explorer/solc-0.5.13/solc
|
||||
compiler.solc0513.semver=0.5.13
|
||||
compiler.solc0514.exe=/opt/compiler-explorer/solc-0.5.14/solc
|
||||
compiler.solc0514.semver=0.5.14
|
||||
compiler.solc0515.exe=/opt/compiler-explorer/solc-0.5.15/solc
|
||||
compiler.solc0515.semver=0.5.15
|
||||
compiler.solc0516.exe=/opt/compiler-explorer/solc-0.5.16/solc
|
||||
compiler.solc0516.semver=0.5.16
|
||||
compiler.solc0517.exe=/opt/compiler-explorer/solc-0.5.17/solc
|
||||
compiler.solc0517.semver=0.5.17
|
||||
compiler.solc060.exe=/opt/compiler-explorer/solc-0.6.0/solc
|
||||
compiler.solc060.semver=0.6.0
|
||||
compiler.solc061.exe=/opt/compiler-explorer/solc-0.6.1/solc
|
||||
compiler.solc061.semver=0.6.1
|
||||
compiler.solc062.exe=/opt/compiler-explorer/solc-0.6.2/solc
|
||||
compiler.solc062.semver=0.6.2
|
||||
compiler.solc063.exe=/opt/compiler-explorer/solc-0.6.3/solc
|
||||
compiler.solc063.semver=0.6.3
|
||||
compiler.solc064.exe=/opt/compiler-explorer/solc-0.6.4/solc
|
||||
compiler.solc064.semver=0.6.4
|
||||
compiler.solc065.exe=/opt/compiler-explorer/solc-0.6.5/solc
|
||||
compiler.solc065.semver=0.6.5
|
||||
compiler.solc066.exe=/opt/compiler-explorer/solc-0.6.6/solc
|
||||
compiler.solc066.semver=0.6.6
|
||||
compiler.solc067.exe=/opt/compiler-explorer/solc-0.6.7/solc
|
||||
compiler.solc067.semver=0.6.7
|
||||
compiler.solc068.exe=/opt/compiler-explorer/solc-0.6.8/solc
|
||||
compiler.solc068.semver=0.6.8
|
||||
compiler.solc069.exe=/opt/compiler-explorer/solc-0.6.9/solc
|
||||
compiler.solc069.semver=0.6.9
|
||||
compiler.solc0610.exe=/opt/compiler-explorer/solc-0.6.10/solc
|
||||
compiler.solc0610.semver=0.6.10
|
||||
compiler.solc0611.exe=/opt/compiler-explorer/solc-0.6.11/solc
|
||||
compiler.solc0611.semver=0.6.11
|
||||
compiler.solc0612.exe=/opt/compiler-explorer/solc-0.6.12/solc
|
||||
compiler.solc0612.semver=0.6.12
|
||||
compiler.solc070.exe=/opt/compiler-explorer/solc-0.7.0/solc
|
||||
compiler.solc070.semver=0.7.0
|
||||
compiler.solc071.exe=/opt/compiler-explorer/solc-0.7.1/solc
|
||||
compiler.solc071.semver=0.7.1
|
||||
compiler.solc072.exe=/opt/compiler-explorer/solc-0.7.2/solc
|
||||
compiler.solc072.semver=0.7.2
|
||||
compiler.solc073.exe=/opt/compiler-explorer/solc-0.7.3/solc
|
||||
compiler.solc073.semver=0.7.3
|
||||
compiler.solc074.exe=/opt/compiler-explorer/solc-0.7.4/solc
|
||||
compiler.solc074.semver=0.7.4
|
||||
compiler.solc075.exe=/opt/compiler-explorer/solc-0.7.5/solc
|
||||
compiler.solc075.semver=0.7.5
|
||||
compiler.solc076.exe=/opt/compiler-explorer/solc-0.7.6/solc
|
||||
compiler.solc076.semver=0.7.6
|
||||
compiler.solc080.exe=/opt/compiler-explorer/solc-0.8.0/solc
|
||||
compiler.solc080.semver=0.8.0
|
||||
compiler.solc081.exe=/opt/compiler-explorer/solc-0.8.1/solc
|
||||
compiler.solc081.semver=0.8.1
|
||||
compiler.solc082.exe=/opt/compiler-explorer/solc-0.8.2/solc
|
||||
compiler.solc082.semver=0.8.2
|
||||
compiler.solc083.exe=/opt/compiler-explorer/solc-0.8.3/solc
|
||||
compiler.solc083.semver=0.8.3
|
||||
compiler.solc084.exe=/opt/compiler-explorer/solc-0.8.4/solc
|
||||
compiler.solc084.semver=0.8.4
|
||||
compiler.solc085.exe=/opt/compiler-explorer/solc-0.8.5/solc
|
||||
compiler.solc085.semver=0.8.5
|
||||
compiler.solc086.exe=/opt/compiler-explorer/solc-0.8.6/solc
|
||||
compiler.solc086.semver=0.8.6
|
||||
compiler.solc087.exe=/opt/compiler-explorer/solc-0.8.7/solc
|
||||
compiler.solc087.semver=0.8.7
|
||||
compiler.solc088.exe=/opt/compiler-explorer/solc-0.8.8/solc
|
||||
compiler.solc088.semver=0.8.8
|
||||
compiler.solc089.exe=/opt/compiler-explorer/solc-0.8.9/solc
|
||||
compiler.solc089.semver=0.8.9
|
||||
compiler.solc0810.exe=/opt/compiler-explorer/solc-0.8.10/solc
|
||||
compiler.solc0810.semver=0.8.10
|
||||
compiler.solc0811.exe=/opt/compiler-explorer/solc-0.8.11/solc
|
||||
compiler.solc0811.semver=0.8.11
|
||||
compiler.solc0812.exe=/opt/compiler-explorer/solc-0.8.12/solc
|
||||
compiler.solc0812.semver=0.8.12
|
||||
compiler.solc0813.exe=/opt/compiler-explorer/solc-0.8.13/solc
|
||||
compiler.solc0813.semver=0.8.13
|
||||
|
||||
#################################
|
||||
#################################
|
||||
# Installed libs (See c++.amazon.properties for a scheme of libs group)
|
||||
libs=
|
||||
|
||||
#################################
|
||||
#################################
|
||||
# Installed tools
|
||||
|
||||
tools=
|
||||
12
etc/config/solidity.defaults.properties
Normal file
12
etc/config/solidity.defaults.properties
Normal file
@@ -0,0 +1,12 @@
|
||||
compilers=/usr/bin/solc
|
||||
compilerType=solidity
|
||||
supportsBinary=false
|
||||
instructionSet=evm
|
||||
|
||||
isSemVer=true
|
||||
baseName=solc
|
||||
|
||||
#################################
|
||||
#################################
|
||||
# Installed libs (See c++.amazon.properties for a scheme of libs group)
|
||||
libs=
|
||||
8
examples/solidity/default.sol
Normal file
8
examples/solidity/default.sol
Normal file
@@ -0,0 +1,8 @@
|
||||
// SPDX-License-Identifier: UNLICENSED
|
||||
pragma solidity >=0.4.0;
|
||||
|
||||
contract Square {
|
||||
function square(uint32 num) public pure returns (uint32) {
|
||||
return num * num;
|
||||
}
|
||||
}
|
||||
@@ -71,6 +71,7 @@ export { RustcCgGCCCompiler } from './rustc-cg-gcc';
|
||||
export { MrustcCompiler } from './mrustc';
|
||||
export { ScalaCompiler } from './scala';
|
||||
export { SdccCompiler } from './sdcc';
|
||||
export { SolidityCompiler } from './solidity';
|
||||
export { SPIRVCompiler } from './spirv';
|
||||
export { SwiftCompiler } from './swift';
|
||||
export { TenDRACompiler } from './tendra';
|
||||
|
||||
97
lib/compilers/solidity.js
Normal file
97
lib/compilers/solidity.js
Normal file
@@ -0,0 +1,97 @@
|
||||
// Copyright (c) 2022, Compiler Explorer Authors
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright notice,
|
||||
// this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above copyright
|
||||
// notice, this list of conditions and the following disclaimer in the
|
||||
// documentation and/or other materials provided with the distribution.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
// POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
import path from 'path';
|
||||
|
||||
import _ from 'underscore';
|
||||
|
||||
import { BaseCompiler } from '../base-compiler';
|
||||
|
||||
import { ClangParser } from './argument-parsers';
|
||||
|
||||
export class SolidityCompiler extends BaseCompiler {
|
||||
static get key() { return 'solidity'; }
|
||||
|
||||
getSharedLibraryPathsAsArguments() {
|
||||
return [];
|
||||
}
|
||||
|
||||
getArgumentParser() {
|
||||
return ClangParser;
|
||||
}
|
||||
|
||||
optionsForFilter(filters, outputFilename, userOptions) {
|
||||
return [
|
||||
'--combined-json', 'asm', // We use it instead of `--asm-json` to have compacted json
|
||||
'-o', 'contracts',
|
||||
];
|
||||
}
|
||||
|
||||
isCfgCompiler(/*compilerVersion*/) {
|
||||
return false;
|
||||
}
|
||||
|
||||
getOutputFilename(dirPath) {
|
||||
return path.join(dirPath, 'contracts/combined.json');
|
||||
}
|
||||
|
||||
processAsm(result) {
|
||||
// Handle "error" documents.
|
||||
if (!result.asm.includes('\n') && result.asm[0] === '<') {
|
||||
return {asm: [{text: result.asm}]};
|
||||
}
|
||||
|
||||
return {
|
||||
asm: Object.entries(JSON.parse(result.asm).contracts)
|
||||
.sort(([_name1, data1], [_name2, data2]) =>
|
||||
data1.asm['.code'][0].begin - data2.asm['.code'][0].begin,
|
||||
)
|
||||
.map(([name, data]) => {
|
||||
const processOpcodes = (opcodes, indent) => opcodes
|
||||
.map(opcode =>
|
||||
`${opcode.name}${opcode.value !== undefined ? ` ${opcode.value}` : ''}`,
|
||||
)
|
||||
.map(opcode =>
|
||||
(indent || '') + (opcode.startsWith('tag') ? opcode : `\t${opcode}`),
|
||||
);
|
||||
|
||||
return [
|
||||
`// ${_.last(name.split(':'))}`,
|
||||
'.code',
|
||||
processOpcodes(data.asm['.code']),
|
||||
'.data',
|
||||
Object.entries(data.asm['.data']).map(([id, {'.code': code}]) => [
|
||||
`\t${id}:`,
|
||||
'\t\t.code',
|
||||
processOpcodes(code, '\t\t'),
|
||||
]),
|
||||
'\n',
|
||||
];
|
||||
})
|
||||
.flat(Infinity)
|
||||
.slice(0, -1)
|
||||
.map(line => ({text: line})),
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -290,6 +290,12 @@ export const languages = {
|
||||
extensions: ['.ts', '.d.ts'],
|
||||
alias: [],
|
||||
},
|
||||
solidity: {
|
||||
name: 'Solidity',
|
||||
monaco: 'sol',
|
||||
extensions: ['.sol'],
|
||||
alias: [],
|
||||
},
|
||||
};
|
||||
|
||||
_.each(languages, (lang, key) => {
|
||||
|
||||
@@ -47,7 +47,8 @@ const webjackJsHack = '.v6.';
|
||||
const plugins = [
|
||||
new MonacoEditorWebpackPlugin({
|
||||
languages: ['cpp', 'go', 'pascal', 'python', 'rust', 'swift', 'java',
|
||||
'kotlin', 'scala', 'ruby', 'csharp', 'fsharp', 'vb', 'dart', 'typescript'],
|
||||
'kotlin', 'scala', 'ruby', 'csharp', 'fsharp', 'vb', 'dart',
|
||||
'typescript', 'solidity'],
|
||||
filename: isDev ? '[name].worker.js' : `[name]${webjackJsHack}worker.[contenthash].js`,
|
||||
}),
|
||||
new ProvidePlugin({
|
||||
|
||||
Reference in New Issue
Block a user