Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 13 additions & 14 deletions src/bebe/templates/compiler/clang.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
{# Import this file and call build() in the build stage, copy() in the runtime stage. #}

{% macro build(params) %}
{% set clean_version = params.compiler.version.split('/') | last | replace('llvmorg-', '') %}
# Clone and build LLVM/Clang from source
RUN git clone --depth 1 --branch {{ params.compiler.version }} https://github.com/llvm/llvm-project.git /tmp/llvm-project
WORKDIR /tmp/llvm-project/build
Expand All @@ -13,33 +14,31 @@ RUN cmake ../llvm \
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_INCLUDE_BENCHMARKS=OFF \
-DCMAKE_INSTALL_PREFIX=/opt/clang-{{ params.compiler.version }} \
-DCMAKE_INSTALL_RPATH="/opt/clang-{{ params.compiler.version }}/lib" \
-DCMAKE_INSTALL_PREFIX=/opt/clang-{{ clean_version }} \
-DCMAKE_INSTALL_RPATH="/opt/clang-{{ clean_version }}/lib" \
-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=ON \
-G "Ninja" && \
cmake --build . --target install -j"$(nproc)" && \
if [ -d /opt/clang-{{ params.compiler.version }}/include/x86_64-unknown-linux-gnu/c++/v1 ]; then \
cp -a /opt/clang-{{ params.compiler.version }}/include/x86_64-unknown-linux-gnu/c++/v1/* /opt/clang-{{ params.compiler.version }}/include/c++/v1/ || true; \
if [ -d /opt/clang-{{ clean_version }}/include/x86_64-unknown-linux-gnu/c++/v1 ]; then \
cp -a /opt/clang-{{ clean_version }}/include/x86_64-unknown-linux-gnu/c++/v1/* /opt/clang-{{ clean_version }}/include/c++/v1/ || true; \
fi
WORKDIR /
RUN rm -rf /tmp/llvm-project
{% endmacro %}

{% macro copy(params) %}
{% set clean_version = params.compiler.version.split('/') | last | replace('llvmorg-', '') %}
{% set major_version = clean_version.split('.')[0] %}
# Copy the compiled Clang compiler from the build stage
COPY --from=compiler_stage /opt/clang-{{ params.compiler.version }} /opt/clang-{{ params.compiler.version }}
COPY --from=compiler_stage /opt/clang-{{ clean_version }} /opt/clang-{{ clean_version }}

ENV CC=/opt/clang-{{ params.compiler.version }}/bin/clang
ENV CXX=/opt/clang-{{ params.compiler.version }}/bin/clang++
ENV CC=/opt/clang-{{ clean_version }}/bin/clang
ENV CXX=/opt/clang-{{ clean_version }}/bin/clang++

{% set version_parts = params.compiler.version.split('-') %}
{% if version_parts|length > 1 %}
{% set major_version = version_parts[1].split('.')[0] %}
RUN ln -sf /opt/clang-{{ params.compiler.version }}/bin/clang /usr/bin/clang-{{ major_version }} && \
ln -sf /opt/clang-{{ params.compiler.version }}/bin/clang++ /usr/bin/clang++-{{ major_version }} && \
RUN ln -sf /opt/clang-{{ clean_version }}/bin/clang /usr/bin/clang-{{ major_version }} && \
ln -sf /opt/clang-{{ clean_version }}/bin/clang++ /usr/bin/clang++-{{ major_version }} && \
update-alternatives --install /usr/bin/clang clang /usr/bin/clang-{{ major_version }} 100 \
--slave /usr/bin/clang++ clang++ /usr/bin/clang++-{{ major_version }}
{% endif %}

ENV PATH=/opt/clang-{{ params.compiler.version }}/bin:$PATH
ENV PATH=/opt/clang-{{ clean_version }}/bin:$PATH
{% endmacro %}
21 changes: 10 additions & 11 deletions src/bebe/templates/compiler/gcc.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,35 +2,34 @@
{# Import this file and call build() in the build stage, copy() in the runtime stage. #}

{% macro build(params) %}
{% set clean_version = params.compiler.version.split('/') | last | replace('gcc-', '') %}
# Clone and build GCC from source
# The version config acts as the branch/tag to checkout
RUN git clone --depth 1 --branch {{ params.compiler.version }} https://github.com/gcc-mirror/gcc.git /tmp/gcc
WORKDIR /tmp/gcc
RUN ./contrib/download_prerequisites && \
mkdir build
WORKDIR /tmp/gcc/build
RUN ../configure --enable-languages=c,c++ --disable-multilib --prefix=/opt/gcc-{{ params.compiler.version }} && \
RUN ../configure --enable-languages=c,c++ --disable-multilib --prefix=/opt/gcc-{{ clean_version }} && \
make -j"$(nproc)" && \
make install-strip
WORKDIR /
RUN rm -rf /tmp/gcc
{% endmacro %}

{% macro copy(params) %}
{% set clean_version = params.compiler.version.split('/') | last | replace('gcc-', '') %}
{% set major_version = clean_version.split('.')[0] %}
# Copy the compiled GCC compiler from the build stage
COPY --from=compiler_stage /opt/gcc-{{ params.compiler.version }} /opt/gcc-{{ params.compiler.version }}
COPY --from=compiler_stage /opt/gcc-{{ clean_version }} /opt/gcc-{{ clean_version }}

ENV CC=/opt/gcc-{{ params.compiler.version }}/bin/gcc
ENV CXX=/opt/gcc-{{ params.compiler.version }}/bin/g++
ENV CC=/opt/gcc-{{ clean_version }}/bin/gcc
ENV CXX=/opt/gcc-{{ clean_version }}/bin/g++

{% set version_parts = params.compiler.version.split('-') %}
{% if version_parts|length > 1 %}
{% set major_version = version_parts[1].split('.')[0] %}
RUN ln -sf /opt/gcc-{{ params.compiler.version }}/bin/gcc /usr/bin/gcc-{{ major_version }} && \
ln -sf /opt/gcc-{{ params.compiler.version }}/bin/g++ /usr/bin/g++-{{ major_version }} && \
RUN ln -sf /opt/gcc-{{ clean_version }}/bin/gcc /usr/bin/gcc-{{ major_version }} && \
ln -sf /opt/gcc-{{ clean_version }}/bin/g++ /usr/bin/g++-{{ major_version }} && \
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-{{ major_version }} 100 \
--slave /usr/bin/g++ g++ /usr/bin/g++-{{ major_version }}
{% endif %}

ENV PATH=/opt/gcc-{{ params.compiler.version }}/bin:$PATH
ENV PATH=/opt/gcc-{{ clean_version }}/bin:$PATH
{% endmacro %}
Loading