Dan Čermák
6d9bcb301f
OBS-URL: https://build.opensuse.org/package/show/devel:BCI:Tumbleweed/gcc-14-image?expand=0&rev=13
105 lines
3.4 KiB
Markdown
105 lines
3.4 KiB
Markdown
# openSUSE Tumbleweed BCI GNU Compiler Collection Container Image (GCC)
|
|
![Redistributable](https://img.shields.io/badge/Redistributable-Yes-green)
|
|
|
|
|
|
# Description
|
|
The GNU Compiler Collection (GCC) is an optimizing compiler for various
|
|
architectures and operating systems. It is the default compiler in the GNU
|
|
project and most Linux distributions, including SUSE Linux Enterprise and
|
|
openSUSE.
|
|
|
|
|
|
## Usage
|
|
|
|
### Compile an application with a `Dockerfile`
|
|
|
|
Normally, you'd want to compile an application and distribute it as part of a
|
|
custom container image. To do this, create a `Dockerfile` similar to the one
|
|
below. The `Dockerfile` uses this image to build a custom container image,
|
|
copies the sources to a working directory, and compiles the application:
|
|
|
|
```Dockerfile
|
|
FROM registry.opensuse.org/opensuse/bci/gcc:14
|
|
WORKDIR /src/
|
|
COPY . /src/
|
|
RUN gcc main.c src1.c src2.c
|
|
CMD ["./a.out"]
|
|
```
|
|
|
|
It is also possible to compile a static binary with gcc as part of a multistage
|
|
build:
|
|
|
|
```Dockerfile
|
|
FROM registry.opensuse.org/opensuse/bci/gcc:14 as builder
|
|
WORKDIR /src/
|
|
COPY . /src/
|
|
RUN gcc -o app main.c src1.c src2.c
|
|
|
|
FROM registry.suse.com/bci/bci-micro:latest
|
|
WORKDIR /build/
|
|
COPY --from=builder /src/app /build/
|
|
CMD ["/build/app"]
|
|
```
|
|
|
|
Note that you must build a static binary to deploy it into bci-micro; otherwise
|
|
shared libraries might be missing. You cannot deploy such an app into a
|
|
`scratch` image, as it is not possible to statically link glibc.
|
|
|
|
|
|
### Available build systems
|
|
|
|
The container image comes with `make` by default. Other build systems and
|
|
related utilities are available in the repository, and they can be installed
|
|
using `zypper`. This includes the following:
|
|
- `meson`
|
|
- `cmake`
|
|
- `ninja`
|
|
- `autoconf` & `automake`
|
|
|
|
|
|
### Available compiler frontends
|
|
|
|
The GNU Compiler Collections supports a wide range of frontends. The container
|
|
image ships the C and C++ frontends available as `gcc` and `g++`
|
|
respectively. The following additional frontends can be installed from the
|
|
repository:
|
|
- `gcc14-fortran` for Fortran support
|
|
- `gcc14-ada` for the Ada frontend (GNAT)
|
|
- `gcc14-go` for the Go frontend
|
|
- `gcc14-objc` and `gcc14-obj-c++` for the Objective C and Objective C++
|
|
- `gcc14-d` for the frontend to the D Language
|
|
- `gcc14-m2` for the Modula 2 compiler frontend
|
|
- `gcc14-rust` for the GNU Rust compiler
|
|
|
|
|
|
### Using the container image interactively
|
|
|
|
You can use the image to create ephemeral containers that execute only gcc. This
|
|
can be useful in situations, where building a full container image is not
|
|
practical. One way to do this is to mount the working directory of an
|
|
application into the launched container and compile the application there:
|
|
|
|
```bash
|
|
podman run --rm -it -v $(pwd):/src/:Z registry.opensuse.org/opensuse/bci/gcc:14 \
|
|
gcc -o /src/app.out /src/*.c
|
|
```
|
|
or by invoking `make`
|
|
```bash
|
|
podman run --rm -it -v $(pwd):/src/:Z --workdir /src/ \
|
|
registry.opensuse.org/opensuse/bci/gcc:14 \
|
|
make
|
|
```
|
|
|
|
Note that the binary built using this approach are unlikely to work on a local
|
|
machine. They only work on operating systems that are binary-compatible to
|
|
.
|
|
|
|
## Licensing
|
|
`SPDX-License-Identifier: MIT`
|
|
|
|
The build recipe and this documentation is licensed as MIT.
|
|
The container itself contains various software components under various open source licenses listed in the associated
|
|
Software Bill of Materials (SBOM).
|
|
|
|
This image is based on [openSUSE Tumbleweed](https://get.opensuse.org/tumbleweed/).
|