forked from sonic-net/DASH
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile.p4c-bmv2
More file actions
136 lines (115 loc) · 3.57 KB
/
Copy pathDockerfile.p4c-bmv2
File metadata and controls
136 lines (115 loc) · 3.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# This Dockerfile builds an image used to compile P4 programs for the bmv2 backend only
# It's based on public p4lang/p4c docker but strips out uneeded backends.
# See https://docs.docker.com/develop/develop-images/multistage-build/
# FROM p4lang/p4c:latest as p4lang-p4c
# :latest on 2022-08-19:
FROM p4lang/p4c@sha256:39a2eb7374f94b899ef75f5ad9fb0bad170ef7697adf2d54ac10286488ad4490 as p4lang-p4c
LABEL maintainer="SONIC-DASH Community"
LABEL description="DASH p4c-bmv2 compiler, minimal"
# Configure make to run as many parallel jobs as cores available
ARG available_processors
ARG MAKEFLAGS=-j$available_processors
ARG CC=gcc
ARG CXX=g++
# Set TZ to avoid interactive installer
ENV TZ=America/Los_Angeles
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ENV GIT_SSL_NO_VERIFY=true
# Just copy minimal p4c bins & libs for bm2 backends
# ~632 MB vs. 971MB for unmodifed p4lang/p4c:stable
FROM amd64/ubuntu:20.04
# Need python for "p4c" wrapper & gcc for the C preprocessor
RUN apt update && apt install -y python3 gcc
COPY --from=p4lang-p4c /usr/local/lib/* /usr/local/lib/
COPY --from=p4lang-p4c \
/usr/lib/x86_64-linux-gnu/libboost_*so* \
/usr/lib/x86_64-linux-gnu/libgc*so* \
/usr/lib/x86_64-linux-gnu/libisl*so* \
/usr/lib/x86_64-linux-gnu/libmpc*so* \
/usr/lib/x86_64-linux-gnu/libmpfr*so* \
/usr/lib/x86_64-linux-gnu/
COPY --from=p4lang-p4c /usr/lib/gcc/x86_64-linux-gnu /usr/lib/gcc/x86_64-linux-gnu/
COPY --from=p4lang-p4c /usr/bin/cpp /usr/bin/
COPY --from=p4lang-p4c /usr/local/share/p4c/ /usr/local/share/p4c/
WORKDIR /usr/local/bin
COPY --from=p4lang-p4c \
/usr/local/bin/p4c \
/usr/local/bin/p4c-bm2-ss \
/usr/local/bin/
ARG user
ARG uid
ARG group
ARG guid
ARG hostname
ENV BUILD_HOSTNAME $hostname
ENV USER $user
RUN groupadd -f -r -g $guid $group
RUN useradd $user -l -u $uid -g $guid -d /var/$user -m -s /bin/bash
CMD bash
# # Alternate approach - selective remove backends etc.
# # ~ 726 MB vs 971MG for p4lang/p4c:stable
# FROM p4lang/p4c:stable as p4lang-p4c
# LABEL maintainer="SONIC-DASH Community"
# LABEL description="DASH p4c-bmv2 compiler, minimal"
# # Configure make to run as many parallel jobs as cores available
# ARG available_processors
# ARG MAKEFLAGS=-j$available_processors
# ARG CC=gcc
# ARG CXX=g++
# # Set TZ to avoid interactive installer
# ENV TZ=America/Los_Angeles
# RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# ENV GIT_SSL_NO_VERIFY=true
# # Delete unneeded backends
# WORKDIR /usr/local/bin
# RUN rm \
# UTscapy \
# bm_CLI \
# bm_nanomsg_events \
# bm_p4dbg \
# ccache \
# coverage \
# coverage-2.7 \
# coverage-3.5 \
# coverage2 \
# coverage3 \
# cygdb \
# cython \
# cythonize \
# easy_install \
# grpc_cpp_plugin \
# grpc_csharp_plugin \
# grpc_node_plugin \
# grpc_objective_c_plugin \
# grpc_php_plugin \
# grpc_python_plugin \
# grpc_ruby_plugin \
# nanocat \
# p4c-dpdk \
# p4c-ebpf \
# p4c-graphs \
# p4c-ubpf \
# p4test \
# pi_convert_p4info \
# pi_gen_fe_defines \
# pi_gen_native_json \
# protoc \
# psa_switch \
# psa_switch_CLI \
# ptf \
# scapy \
# simple_switch \
# simple_switch_CLI \
# simple_switch_grpc \
# sysrepo-plugind \
# sysrepocfg \
# sysrepoctl \
# sysrepod \
# thrift \
# wheel \
# yanglint \
# yangre
# # Copy everything from p4lang-p4c as one layer to avoid the deleted files above
# FROM scratch
# COPY --from=p4lang-p4c / /
# CMD bash