124 lines
4.1 KiB
Docker
124 lines
4.1 KiB
Docker
FROM alpine:edge AS builder
|
|
|
|
# Update databases
|
|
RUN echo "https://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories && \
|
|
apk update --no-cache
|
|
|
|
# Download base dependencies
|
|
RUN apk add --no-cache \
|
|
git \
|
|
make \
|
|
cmake \
|
|
build-base \
|
|
linux-headers \
|
|
boost-dev \
|
|
eigen-dev \
|
|
gawk \
|
|
py3-pip \
|
|
py3-setuptools \
|
|
py3-wheel \
|
|
py3-gpep517 \
|
|
py3-build \
|
|
ghc \
|
|
stack \
|
|
cython \
|
|
py3-yaml \
|
|
py3-simplejson \
|
|
py3-intervaltree \
|
|
libunwind-dev
|
|
|
|
# Install yosys
|
|
RUN apk add --no-cache yosys
|
|
|
|
WORKDIR /home/root/aur-install
|
|
|
|
# Install prjxray librairies
|
|
RUN git clone https://github.com/supersurviveur/prjxray.git --depth 1 && \
|
|
cd prjxray && \
|
|
git submodule update --init --depth 1 && \
|
|
# include fasm2frames in python package
|
|
mv utils/fasm2frames.py prjxray/ && \
|
|
sed -E 's/(fasm2frames=)utils/\1prjxray/' -i setup.py && \
|
|
cmake -B build \
|
|
-S "." \
|
|
-DCMAKE_BUILD_TYPE=None \
|
|
-DCMAKE_INSTALL_PREFIX='/usr' \
|
|
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
|
-Wno-dev && \
|
|
cmake --build build -j$(nproc) && \
|
|
python -m build --wheel --no-isolation --skip-dependency-check && \
|
|
python -m installer dist/*.whl && \
|
|
python -m build third_party/fasm --wheel --no-isolation --skip-dependency-check && \
|
|
python -m installer third_party/fasm/dist/*.whl
|
|
|
|
# prjxray dependency not available on apk
|
|
RUN pip install textx --break-system-packages
|
|
|
|
# Install the zynq7 prjxray database
|
|
RUN git clone https://github.com/f4pga/prjxray-db.git --depth 1 && \
|
|
cd prjxray-db && \
|
|
install -dm 755 /usr/share/xray/database && \
|
|
cp -r zynq7 /usr/share/xray/database/ && \
|
|
# Delete the xc7z020 chip since we don't need it for the xc7z010 chip
|
|
rm /usr/share/xray/database/zynq7/xc7z020 -rf
|
|
|
|
# Install nextpnr-himbaechel
|
|
RUN git clone https://github.com/YosysHQ/nextpnr --depth 1 && \
|
|
cd nextpnr && \
|
|
git submodule update --remote --init --depth 1 himbaechel/uarch/xilinx/meta && \
|
|
cmake -S "." -B build \
|
|
-DARCH=himbaechel \
|
|
-DHIMBAECHEL_UARCH=xilinx \
|
|
-DHIMBAECHEL_XILINX_DEVICES="xc7z010" \
|
|
-DHIMBAECHEL_PRJXRAY_DB="/usr/share/xray/database" \
|
|
-DBUILD_PYTHON=OFF \
|
|
-DBUILD_GUI=OFF \
|
|
-DCMAKE_BUILD_TYPE=None \
|
|
-DCMAKE_INSTALL_PREFIX=/usr \
|
|
-DUSE_OPENMP=ON && \
|
|
make -C build -j$(nproc)
|
|
|
|
# Install sv2v
|
|
RUN git clone https://github.com/zachjs/sv2v --depth 1 && \
|
|
cd sv2v && \
|
|
make -j$(nproc)
|
|
|
|
COPY copy_bin_deps.sh /usr/bin/
|
|
RUN chmod +x /usr/bin/copy_bin_deps.sh
|
|
|
|
# Copy all binaries and their dependencies in a /dependencies dir which will be copied in the final image
|
|
RUN mkdir -p /dependencies
|
|
|
|
RUN copy_bin_deps.sh /usr/bin/yosys
|
|
RUN copy_bin_deps.sh /home/root/aur-install/nextpnr/build/nextpnr-himbaechel
|
|
RUN copy_bin_deps.sh /home/root/aur-install/prjxray/build/tools/xc7frames2bit
|
|
RUN copy_bin_deps.sh /home/root/aur-install/sv2v/bin/sv2v
|
|
RUN cp /usr/bin/fasm2frames /dependencies/usr/bin/
|
|
|
|
# Final image
|
|
FROM alpine:edge
|
|
|
|
# Install dependencies available in apk
|
|
RUN echo "https://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories && \
|
|
apk update --no-cache && \
|
|
apk add --no-cache abc py3-yaml py3-simplejson py3-intervaltree py3-arpeggio openfpgaloader
|
|
|
|
# Get dependencies back
|
|
COPY --from=builder /dependencies /
|
|
|
|
# Some files are needed in addition to libs files
|
|
COPY --from=builder /usr/share/yosys /usr/share/yosys
|
|
# Chip databases
|
|
COPY --from=builder /home/root/aur-install/nextpnr/build/share /usr/share/nextpnr
|
|
COPY --from=builder /usr/share/xray/database/zynq7 /usr/share/xray/database/zynq7
|
|
|
|
# These 3 python dependencies were built in the previous image
|
|
# COPY --from=builder /usr/lib/python3.14/site-packages/prjxray /usr/lib/python3.14/site-packages/prjxray
|
|
# COPY --from=builder /usr/lib/python3.14/site-packages/fasm /usr/lib/python3.14/site-packages/fasm
|
|
# COPY --from=builder /usr/lib/python3.14/site-packages/textx /usr/lib/python3.14/site-packages/textx
|
|
COPY --from=builder /usr/lib/python3.14/site-packages /usr/lib/python3.14/site-packages/
|
|
|
|
WORKDIR /root/code
|
|
|
|
CMD ["/bin/bash -c \"$@\""]
|