Go to file
Matt Godbolt 76381e3502 Road map 2017-01-16 16:59:49 -06:00
.idea IDEA churn 2017-01-07 09:32:40 -06:00
c-preload Bump up timeouts etc 2017-01-09 08:16:17 -06:00
d Another year, another copyright update 2017-01-02 10:14:46 -06:00
etc Banner fixes 2017-01-15 16:29:05 -06:00
examples Merge branch 'master' into msvc-spike 2016-10-03 18:03:52 -05:00
lib Banner fixes 2017-01-15 16:29:05 -06:00
rust Add rust demangling - #213 2016-12-23 10:02:03 -06:00
static New RESTful API 2017-01-14 23:24:31 -06:00
static-old Another year, another copyright update 2017-01-02 10:14:46 -06:00
test Correctly identify PROC and ENDP even when a comment is on the same line. Fixes #235 2017-01-12 17:32:54 -06:00
.bowerrc First move towards rewrite 2016-08-18 23:23:22 -05:00
.gdb_history 6.1 rc2 2016-04-25 12:53:38 -05:00
.gitignore New most prioritary properties files : `*.local.properties` used for local instances of compiler explorer. 2016-10-27 18:34:02 +02:00
.jshintrc Add IDEA files. 2014-11-26 08:24:40 -06:00
.travis.yml Added support for node 6 2016-08-17 14:58:22 -07:00
LICENSE Another year, another copyright update 2017-01-02 10:14:46 -06:00
Makefile gdc fixups in makefile 2017-01-07 08:48:54 -06:00
README.md Road map 2017-01-16 16:59:49 -06:00
Roadmap.md Road map 2017-01-16 16:59:49 -06:00
app.build.js Only serve items from out/dist on demand; use @import in CSS instead of lots of includes; configure r.js to optimize CSS too 2016-09-30 08:09:29 -05:00
app.js Fix remote compilers 2017-01-15 15:55:16 -06:00
bower.json s/gcc-explorer/compiler-explorer/g 2017-01-02 10:11:29 -06:00
package.json New RESTful API 2017-01-14 23:24:31 -06:00

README.md

Build Status Codewake

Compiler Explorer

Compiler Explorer is an interactive compiler. The left-hand pane shows editable C/C++/Rust/Go/D 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 (the Golden Layout library is used for this).

Try out one of the demo sites: C++, Rust, D or Go.

Developing or running a local instance

Compiler Explorer is written in node.js.

Assuming you have npm and 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/

The Makefile will automatically install all the third party libraries needed to run; using npm to install server-side components and bower to install all the client-facing libraries.

If you want to point it at your own GCC or similar binaries, either edit the etc/config/compiler-explorer.defaults.properties or else make a new one with the name compiler-explorer.local.properties. *.local.properties files have the highest priority when loading properties.

The config system leaves a lot to be desired, I'm working on porting CCS to javascript and then something more rational can be used.

Feel free to raise an issue on github or email me directly for more help.

There's now a Road map that gives a little insight into future plans for Compiler Explorer.

Credits

Compiler Explorer is maintained by Matt Godbolt. Multiple compiler and difference view was implemented by Gabriel Devillers.

RESTful API

There's a simple restful API that can be used to do compiles to asm and to list compilers. In general all handlers live in /api/* endpoints, and will accept JSON or text in POSTs, and will return text responses or JSON responses depending on the request's Accept header.

At a later date there may be some form of rate-limiting: currently requests will be queued and dealt with exactly like interactive requests on the main site. Authentication might be required at some point in the future (for the main Compiler Explorer site anyway).

The following endpoints are defined:

GET /api/compilers - return a list of compilers

Returns a list of compilers. In text form, there's a simple formatting of the ID of the compiler and its description. In JSON, all the information is returned as an array of compilers, with the id key being the primary identifier of each compiler.

POST /api/<compiler-id>/compiler - perform a compilation

To specify a compilation request as a JSON document, post it as the appropriate type and send an object of the form: {'source': 'source to compile', 'options': 'compiler flags', 'filters': {'filter': true}}. The filters are an JSON object with true/false. If not supplied, defaults are used. If supplied, the filters are used as-is.

A text compilation request has the source as the body of the post, and uses query parameters to pass the options and filters. Filters are supplied as a comma-separated string. Use the query parameter filters=XX to set the filters directly, else addFilters=XX to add a filter to defaults, or removeFilters to remove from defaults. Compiler parameters should be passed as options=-O2 and default to empty.

Filters include binary, labels, intel, comments and directives and correspond to the UI buttons on the HTML version.

The text request is designed for simplicity for command-line clients like curl:

$ curl 'https://gcc.godbolt.org/api/compiler/g63/compile?options=-Wall' --data-binary 'int foo() { return 1; }'
# Compilation provided by Compiler Explorer at gcc.godbolt.org
foo():
        push    rbp
        mov     rbp, rsp
        mov     eax, 1
        pop     rbp
        ret

If JSON is present in the request's Accept header, the compilation results are of the form:

{
    code: 0 if successful, else compiler return code,
    stdout: [ { text: "Output", 
                (optional) tag: {line: source line, text: "parsed error for that line"} } ],
    stderr: (as above),
    asm: [ { text: "assembly text", source: source line number or null if none } ]
}