GithubHelp home page GithubHelp logo

guoyu07 / compiler-explorer Goto Github PK

View Code? Open in Web Editor NEW

This project forked from compiler-explorer/compiler-explorer

0.0 0.0 0.0 4.49 MB

Run compilers interactively from your web browser and interact with the assembly

Home Page: https://gcc.godbolt.org/

License: BSD 2-Clause "Simplified" License

Makefile 0.81% JavaScript 61.86% Shell 0.32% C 0.71% D 0.34% Batchfile 0.42% Python 0.91% Haskell 0.05% Rust 0.24% HTML 3.63% CSS 2.27% Assembly 28.40% C++ 0.01% Go 0.03% Swift 0.01%

compiler-explorer's Introduction

Build Status Codewake

Compiler Explorer

Compiler Explorer is an interactive compiler. The left-hand pane shows editable C/C++/Rust/Go/D/Haskell/Swift 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). There is also an ispc compiler for a C variant with extensions for SPMD.

Try out one of the demo sites: C++, Rust, D, Go, Haskell, Swif, ispc.

You can support this this project on Patreon.

Developing or running a local instance

Compiler Explorer is written in node.js.

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 node v8 installed, either on the path or at NODE_PATH (an environment variable or make parameter).

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, Rubén Rincón and Simon Brand. Multiple compiler and difference view initially implemented by Gabriel Devillers, while working for Kalray. Clang optview output by Jared Wyles.

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/<compiler-id>/compile - 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': {userOptions': 'compiler flags', 'compilerOptions':{}, 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. The compilerOptions is used to pass extra arguments to the back end, and is probably not useful for most REST users.

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:

Optional values are marked with a '**'

{
  "code": 0 if successful, else compiler return code,
  "stdout": [
            {
              "text": Output,
              ** "tag": {
                          "line": Source line,
                          "text": Parsed error for that line
                 }
            },
            ...
  ],
  "stderr": (format is similar to that of stdout),
  "asm": [
         {
           "text": Assembly text,
           "source": {file: null for user input, else path, line: number} or null if none
         },
         ...
  ],
  "okToCache": true if output could be locally cached else false,
  ** "optOutput" : {
                     "displayString" : String displayed in output,
                     "Pass" : [ Missed | Passed | Analysis ] (Specifies the type of optimisation output),
                     "Name" : Name of the output (mostly represents the reason for the output),
                     "DebugLoc" : {
                        "File": Name of file,
                        "Line": Line number,
                        "Column": Column number in line
                     },
                     "Function": Name of function for which optimisation output is provided,
                     "Args": Array of objects representing the arguments that the optimiser used when trying to optimise
     }
}

compiler-explorer's People

Contributors

9il avatar adamnemecek avatar amilajack avatar amonakov avatar andrewpardoe avatar androm3da avatar auselen avatar cppchedy avatar cvrxx avatar dnadlinger avatar emlai avatar filcab avatar hanickadot avatar ibuclaw avatar jaredadobe avatar jaredwy avatar johanengelen avatar jsheard avatar leandros avatar lefticus avatar lilianmoraru avatar malcolmr avatar mattgodbolt avatar olajep avatar peterbourgon avatar rubenrbs avatar som1lse avatar suchmoleculeswow avatar tartanllama avatar wanders avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.