mirror of
https://github.com/compiler-explorer/compiler-explorer.git
synced 2025-12-27 10:33:59 -05:00
Update to add compilers easier
This commit is contained in:
@@ -184,6 +184,84 @@ normally; commercial compilers marked `non-free` in the YAML won't work without
|
|||||||
|
|
||||||
If your compiler fits the existing patterns it should be straightforward. Anything more complex: contact the CE authors.
|
If your compiler fits the existing patterns it should be straightforward. Anything more complex: contact the CE authors.
|
||||||
|
|
||||||
|
## Adding a patched GCC or Clang compiler
|
||||||
|
|
||||||
|
Compiler Explorer hosts experimental branches of GCC and Clang that implement proposed C++ features. This requires
|
||||||
|
PRs to four repositories: the builder repo, compiler-workflows, infra, and this repo.
|
||||||
|
|
||||||
|
### 1. Configure the builder
|
||||||
|
|
||||||
|
Add a case block to `build/build.sh` in [clang-builder](https://github.com/compiler-explorer/clang-builder) or
|
||||||
|
[gcc-builder](https://github.com/compiler-explorer/gcc-builder).
|
||||||
|
|
||||||
|
#### Clang
|
||||||
|
|
||||||
|
[Example commit](https://github.com/compiler-explorer/clang-builder/commit/826e1e93f0dff5d83a9ac98df33b39cfbcfbf718):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
p3334-trunk)
|
||||||
|
BRANCH=p3334-cross-static
|
||||||
|
URL=https://github.com/tal-yac/llvm-project
|
||||||
|
VERSION=p3334-trunk-$(date +%Y%m%d)
|
||||||
|
;;
|
||||||
|
```
|
||||||
|
|
||||||
|
#### GCC
|
||||||
|
|
||||||
|
```bash
|
||||||
|
elif echo "${VERSION}" | grep 'lock3-contracts'; then
|
||||||
|
VERSION=lock3-contracts-trunk-$(date +%Y%m%d)
|
||||||
|
URL=https://github.com/lock3/gcc.git
|
||||||
|
BRANCH=contracts
|
||||||
|
MAJOR=13
|
||||||
|
MAJOR_MINOR=13-trunk
|
||||||
|
LANGUAGES=c,c++
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Configure CI workflow
|
||||||
|
|
||||||
|
Add to [compiler-workflows](https://github.com/compiler-explorer/compiler-workflows)' `compilers.yaml` ([example](https://github.com/compiler-explorer/compiler-workflows/commit/688f0008a5f12fb976842926fd9d64d279685dd1)):
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- { image: clang, name: clang_p3334, args: p3334-trunk }
|
||||||
|
```
|
||||||
|
|
||||||
|
The `args` value must match the case label (or `if` check) in `build.sh`. Run `make build-yamls` to generate the workflow file.
|
||||||
|
|
||||||
|
### 3. Configure installation
|
||||||
|
|
||||||
|
Add to the nightly targets in [infra](https://github.com/compiler-explorer/infra)'s `bin/yaml/cpp.yaml` ([example](https://github.com/compiler-explorer/infra/commit/022371a55584fe6be4b7c24ad8e74078711c9567)):
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
nightly:
|
||||||
|
if: nightly
|
||||||
|
clang:
|
||||||
|
type: nightly
|
||||||
|
check_exe: bin/clang++ --version
|
||||||
|
targets:
|
||||||
|
- trunk
|
||||||
|
- assertions-trunk
|
||||||
|
- p3334-trunk # <-- add a line like this in the appropriate place
|
||||||
|
- p3367-trunk
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Configure Compiler Explorer
|
||||||
|
|
||||||
|
In `etc/config/c++.amazon.properties` ([example](https://github.com/compiler-explorer/compiler-explorer/commit/6f9cfdef90159ba20f61a807b4e113c6324b5b17)):
|
||||||
|
|
||||||
|
```ini
|
||||||
|
# Add to group compiler list
|
||||||
|
group.clangx86trunk.compilers=clang_trunk:clang_assertions_trunk:clang_p3334:...
|
||||||
|
|
||||||
|
# Configure the compiler
|
||||||
|
compiler.clang_p3334.exe=/opt/compiler-explorer/clang-p3334-trunk/bin/clang++
|
||||||
|
compiler.clang_p3334.semver=(experimental P3334)
|
||||||
|
compiler.clang_p3334.notification=Experimental cross static; see <a href="https://github.com/tal-yac/llvm-project/tree/p3334-cross-static" target="_blank" rel="noopener noreferrer">P3334<sup><small class="fas fa-external-link-alt opens-new-window" title="Opens in a new window"></small></sup></a>
|
||||||
|
```
|
||||||
|
|
||||||
|
The `notification` field creates a tooltip linking to documentation. For GCC compilers, also add `demangler`,
|
||||||
|
`objdumper`, and `isNightly=true` properties, as necessary (check some of the other compilers around for inspiration).
|
||||||
|
|
||||||
## Putting it all together
|
## Putting it all together
|
||||||
|
|
||||||
Hopefully that's enough to get an idea. The ideal case of a GCC-like compiler should be a pull request to add a couple
|
Hopefully that's enough to get an idea. The ideal case of a GCC-like compiler should be a pull request to add a couple
|
||||||
|
|||||||
Reference in New Issue
Block a user