blob: d695de6f07ba385591b9afcca5b0c2c1daabc0aa [file] [log] [blame] [view] [raw]
[![Build Status](https://travis-ci.org/mattgodbolt/compiler-explorer.svg?branch=master)](https://travis-ci.org/mattgodbolt/compiler-explorer)
[![codecov](https://codecov.io/gh/mattgodbolt/compiler-explorer/branch/master/graph/badge.svg)](https://codecov.io/gh/mattgodbolt/compiler-explorer)
![Compiler Explorer](docs/logo.svg)
Compiler Explorer
------------
**Compiler Explorer** is an interactive compiler. The left-hand pane shows
editable C, C++, Rust, Go, D, Haskell, Swift, Pascal (and some more!) code.
The right, the assembly output of having compiled the code with a given
compiler and settings. Multiple compilers are supported, and the UI layout
is configurable (thanks to [GoldenLayout](https://www.golden-layout.com/)).
There is also an ispc compiler _[?](https://ispc.github.io/)_ for a C variant
with extensions for SPMD.
Try out at [godbolt.org](https://godbolt.org)
You can support [this project on Patreon](https://patreon.com/mattgodbolt).
**Compiler Explorer** follows a [Code of Conduct](CODE_OF_CONDUCT.md) which
aims to foster an open and welcoming environment.
**Compiler Explorer** was started in 2012 to serve my needs at [my previous employer](https://drw.com) to show how
C++ constructs translated to assembly code. It started out as a `tmux` session with `vi` running in one
pane and `watch gcc -S foo.cc -o -` running in the other.
Since then, it has become a public website serving around 140,000 compilations per day.
##### Contact us
For general discussion, please join the
[cpplang](https://cpplang.now.sh/) slack channel `#compiler_explorer` or
[the public mailing list](https://groups.google.com/forum/#!forum/compiler-explorer-discussion)
If you are interested in developing, or want to see the discussions between
existing developers, feel free to join the [cpplang](https://cpplang.now.sh/)
slack channel `#ce_implementation` or
[the development mailing list](https://groups.google.com/forum/#!forum/compiler-explorer-development)
Feel free to raise an issue on
[github](https://github.com/mattgodbolt/compiler-explorer/issues) or
[email Matt directly](mailto:matt@godbolt.org) for more help.
### Developing
**Compiler Explorer** is written in [Node.js](https://nodejs.org/).
Assuming you have a compatible version of `node` installed, simply running
`make` ought to get you up and running with an Explorer running on port 10240
on your local machine: http://localhost:10240/.
Currently **Compiler Explorer**
[requires the latest LTS](CONTRIBUTING.md#node-version) `node` version
(_v10_) installed, either on the path or at `NODE_DIR`
(an environment variable or `make` parameter).
Running with `make EXTRA_ARGS='--language LANG'` will allow you to load
`LANG` exclusively, where `LANG` is one for the language ids/aliases defined
in `lib/languages.js`. The `Makefile` will automatically install all the
third party libraries needed to run; using `npm` to install server-side and
client side components.
Some languages need extra tools to demangle them, e.g. `rust`, `d`, or `haskell`.
Such tools are kept separately in the
[tools repo](https://github.com/mattgodbolt/compiler-explorer-tools).
The config system leaves a lot to be desired. Work has been done on porting
[CCS](https://github.com/hellige/ccs-cpp) to Javascript and then something
more rational can be used.
A [Road map](Roadmap.md) is available which gives a little insight into
the future plans for **Compiler Explorer**.
### Running a local instance
If you want to point it at your own GCC or similar binaries, either edit the
`etc/config/LANG.defaults.properties` or else make a new one with
the name `LANG.local.properties`, substituting `LANG` as needed.
`*.local.properties` files have the highest priority when loading properties.
When running in a corporate setting the URL shortening service can be replaced
by an internal one if the default storage driver isn't appropriate for your
environment. To do this, add a new module in `lib/shortener-myservice.js` and
set the `urlShortenService` variable in configuration. This module should
export a single function, see the [tinyurl module](lib/shortener-tinyurl.js)
for an example.
### RESTful API
There's a simple restful API that can be used to do compiles to asm and to
list compilers.
You can find the API documentation [here](docs/API.md).
### Credits
**Compiler Explorer** is maintained by the awesome people listed in the
[AUTHORS](AUTHORS.md) file.
We would like to thank the contributors listed in the
[CONTRIBUTORS](CONTRIBUTORS.md) file, who have helped shape **Compiler Explorer**.
We would also like to specially thank these people for their contributions to
**Compiler Explorer**:
- [Gabriel Devillers](https://github.com/voxelf)
(_while working for [Kalray](http://www.kalrayinc.com/)_)
- [Johan Engelen](https://github.com/JohanEngelen)
- [Joshua Sheard](https://github.com/jsheard)
- [Marc Poulhiรจs](https://github.com/dkm)
- [Andrew Pardoe](https://github.com/AndrewPardoe)
We would like to thank [JetBrains](https://www.jetbrains.com/) for their support
and for donating licenses to their excellent products to develop **Compiler Explorer**.
![JetBrains](docs/jetbrains.svg)