Using Solang on the command line¶
The Solang compiler is run on the command line. The solidity source file names are provided as command line arguments; the output is an optimized wasm or bpf file which is ready for deployment on a chain, and an abi file.
The following targets are supported right now: Parity Substrate, Solana Ethereum ewasm, and Sawtooth Sabre.
Usage¶
Usage:
solang [OPTIONS]… [SOLIDITY SOURCE FILE]…
This means that the command line is solang
followed by any options described below,
followed by one or more solidity source filenames.
Options:
- -v, --verbose
- Make the output more verbose. The compiler tell you what contracts have been found in the source, and what files are generated. Without this option Solang will be silent if there are no errors or warnings.
- --target target
- This takes one argument, which can either be
ewasm
,sabre
,solana
, orsubstrate
. The default is substrate. - --doc
- Generate documentation for the given Solidity files as a single html page. This uses the
doccomment tags. The result is saved in
soldoc.html
. See Tags for further information. - -o, --output directory
- This option takes one argument, which is the directory where output should be saved. The default is the current directory.
- -O optimization level
- This takes one argument, which can either be
none
,less
,default
, oraggressive
. These correspond to llvm optimization levels. - --importpath directory
- When resolving
import
directives, search this directory. By defaultimport
will only search the current directory. This option can be specified multiple times and the directories will be searched in the order specified. - --help, -h
- This displays a short description of all the options
- --standard-json
This option causes Solang to emulate the behaviour of Solidity standard json output. No output files are written, all the output will be in json on stdout.
This feature is used by Hyperledger Burrow’s deploy tool.
- --emit phase
This option is can be used for debugging Solang itself. This is used to output early phases of compilation.
Phase:
- ast
- Output Abstract Syntax Tree, the parsed and resolved input
- cfg
- Output control flow graph.
- llvm-ir
- Output llvm IR as text.
- llvm-bc
- Output llvm bitcode as binary file.
- object
- Output wasm object file; this is the contract before final linking.
- --no-constant-folding
- Disable the Constant Folding Pass codegen optimization
- --no-strength-reduce
- Disable the Strength Reduction Pass codegen optimization
- --no-dead-storage
- Disable the Dead Storage pass optimization
- --no-vector-to-slice
- Disable the Vector to Slice Pass optimization
Running Solang from docker image¶
First pull the last Solang image from docker hub:
docker pull hyperledgerlabs/solang
And if you are using podman:
podman image pull hyperlederlabs/solang
Now you can run Solang like so:
docker run --rm -it hyperledgerlabs/solang --version
Or podman:
podman container run --rm -it hyperledgerlabs/solang --version
If you want to compile some solidity files, the source file needs to be
available inside the container. You can do this via the -v command line.
In this example /local/path
should be replaced with the absolute path
to your solidity files:
docker run --rm -it -v /local/path:/sources hyperledgerlabs/solang -o /sources /sources/flipper.sol
On podman you might need to add :Z
to your volume argument if SELinux is used, like on Fedora. Also, podman allows relative paths:
podman container run --rm -it -v .:/sources:Z hyperledgerlabs/solang -o /sources /sources/flipper.sol
On Windows, you need to specify absolute paths:
docker run --rm -it -v C:\Users\User:/sources hyperledgerlabs/solang -o /sources /sources/flipper.sol