Skip to content

Commit 40b4225

Browse files
authored
Add build for lfortran (#98)
* Build lfortran
1 parent f269be7 commit 40b4225

File tree

3 files changed

+81
-0
lines changed

3 files changed

+81
-0
lines changed

.github/workflows/build.yml

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ jobs:
2323
- vast
2424
- mads
2525
- bloaty
26+
- lfortran
2627
steps:
2728
- name: Docker Setup Buildx
2829
uses: docker/setup-buildx-action@v2

Dockerfile.lfortran

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
FROM ubuntu:20.04
2+
3+
ARG DEBIAN_FRONTEND=noninteractive
4+
RUN apt update -y -q && apt upgrade -y -q && apt update -y -q && \
5+
apt install -y -q \
6+
bison \
7+
build-essential \
8+
cmake \
9+
curl \
10+
git \
11+
libzstd-dev \
12+
llvm-12-dev \
13+
ninja-build \
14+
patchelf \
15+
python-is-python3 \
16+
python3 \
17+
re2c \
18+
unzip \
19+
xz-utils \
20+
zlib1g-dev
21+
22+
RUN mkdir -p /root
23+
COPY lfortran /root/
24+
COPY common.sh /root/
25+
26+
WORKDIR /root

lfortran/build.sh

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/bin/bash
2+
3+
set -euo pipefail
4+
source common.sh
5+
6+
VERSION="${1}"
7+
LAST_REVISION="${3-}"
8+
9+
URL="https://github.com/lfortran/lfortran.git"
10+
if [[ "${VERSION}" == trunk ]]; then
11+
VERSION=trunk-$(date +%Y%m%d)
12+
BRANCH=main
13+
REMOTE=heads/main
14+
else
15+
BRANCH=v"${VERSION}"
16+
REMOTE=tags/${BRANCH}
17+
fi
18+
19+
FULLNAME=lfortran-${VERSION}
20+
OUTPUT=$2/${FULLNAME}.tar.xz
21+
REVISION=$(get_remote_revision "${URL}" "${REMOTE}")
22+
23+
initialise "${REVISION}" "${OUTPUT}" "${LAST_REVISION}"
24+
25+
git clone "${URL}" --depth=1 "--branch=${BRANCH}"
26+
27+
OUTPUT=$(realpath "${OUTPUT}")
28+
DEST=$(realpath prefix)
29+
SOURCE=$(realpath lfortran)
30+
31+
mkdir build
32+
cmake \
33+
-GNinja \
34+
-DCMAKE_BUILD_TYPE=Release \
35+
-DCMAKE_CXX_FLAGS_RELEASE="-Wall -Wextra -O3 -funroll-loops -DNDEBUG" \
36+
-DWITH_LLVM=yes \
37+
-DLFORTRAN_BUILD_ALL=yes \
38+
-DWITH_STACKTRACE=no \
39+
-DWITH_RUNTIME_STACKTRACE=yes \
40+
-DCMAKE_INSTALL_PREFIX="${DEST}" \
41+
-DCMAKE_INSTALL_LIBDIR=share/lfortran/lib \
42+
-Bbuild \
43+
-S"${SOURCE}"
44+
ninja -C build
45+
ninja -C build install
46+
47+
mkdir "${DEST}/lib"
48+
49+
# Copy all shared object dependencies into the release directory to create a hermetic build, per
50+
# Compiler Explorer requirements. Update rpath for these objects to $ORIGIN.
51+
cp $(ldd "${DEST}/bin/lfortran" | grep -E '=> /' | grep -Ev 'lib(pthread|c|dl|rt).so' | awk '{print $3}') "${DEST}/lib"
52+
patchelf --set-rpath '$ORIGIN/../lib' "${DEST}/bin/lfortran"
53+
54+
complete "${DEST}" "${FULLNAME}" "${OUTPUT}"

0 commit comments

Comments
 (0)