rust_jsc 0.1.2

Low-level bindings to JavaScriptCore
# Use an Ubuntu base image
FROM ubuntu:22.04 as builder

# Set the working directory
WORKDIR /usr/src/app

# Install software-properties-common to add PPAs
RUN apt-get update && apt-get install -y software-properties-common

RUN apt-get install -y \
    cmake \
    ninja-build

RUN apt-get install -y \
    libicu-dev \
    libc-dev \
    g++-11 \
    make \
    python2 \
    libatomic1 \
    libstdc++-11-dev \
    ruby \
    bison \
    flex \
    perl \
    file \
    && update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100 \
    && update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100

# Set environment variable for C++ compiler
ENV CXX /usr/bin/g++

# Clone the WebKit repository
COPY ./WebKit ./WebKit

# Set the working directory to the WebKit directory
WORKDIR /usr/src/app/WebKit

# Ensure the build-webkit script is executable
RUN chmod +x Tools/Scripts/build-webkit

# Check Perl availability, version, and script shebang line
# RUN perl -v && head -n 1 Tools/Scripts/build-webkit

# Build JavaScriptCore only as a static library
RUN Tools/Scripts/build-webkit --jsc-only --cmakeargs="-DENABLE_STATIC_JSC=ON -DUSE_THIN_ARCHIVES=OFF"

# Move back to the main working directory
WORKDIR /usr/src/app

# Extract static libraries from JavaScriptCore
RUN mkdir libs && \
    cp /usr/src/app/WebKit/WebKitBuild/JSCOnly/Release/lib/*.a libs/

# RUN apt-get install -y libc6-dev

# Combine all static libraries into one
# RUN cd libs && \
#     ar -x /usr/lib/gcc/x86_64-linux-gnu/11/libstdc++.a && \
#     ar -x /usr/lib/x86_64-linux-gnu/libicui18n.a && \
#     ar -x /usr/lib/x86_64-linux-gnu/libmvec.a && \
#     ar -x /usr/lib/x86_64-linux-gnu/libdl.a && \
#     ar -x /usr/lib/x86_64-linux-gnu/libicuuc.a && \
#     ar -x /usr/lib/x86_64-linux-gnu/libicudata.a && \
#     ar -x /usr/lib/gcc/x86_64-linux-gnu/11/libatomic.a && \
#     ar -x libJavaScriptCore.a && \
#     ar -x libWTF.a && \
#     ar -x libbmalloc.a && \
#     ar -rcs ../librustjsc.a *.o && ranlib ../librustjsc.a

# Clean up object files
# RUN rm -rf libs

FROM scratch

# COPY --from=builder /usr/src/app/librustjsc.a /
COPY --from=builder /usr/src/app/libs/libJavaScriptCore.a /
COPY --from=builder /usr/src/app/libs/libWTF.a /
COPY --from=builder /usr/src/app/libs/libbmalloc.a /
COPY --from=builder /usr/lib/gcc/x86_64-linux-gnu/11/libstdc++.a /
# COPY --from=builder /usr/lib/x86_64-linux-gnu/libmvec.a /
COPY --from=builder /usr/lib/x86_64-linux-gnu/libdl.a /
COPY --from=builder /usr/lib/x86_64-linux-gnu/libicui18n.a /
COPY --from=builder /usr/lib/x86_64-linux-gnu/libicuuc.a /
COPY --from=builder /usr/lib/x86_64-linux-gnu/libicudata.a /
COPY --from=builder /usr/lib/gcc/x86_64-linux-gnu/11/libatomic.a /