Compile open source project for Torizon docker container

Hi,
I need to compile open-ocpp GitHub - c-jimenez/open-ocpp: Open Source C++ implementation of the OCPP 1.6 protocol
project for for Torizon docker container to use it’s artifacts (.h files and .so files).
Then I have to use those artifacts to develop application in that docker container to use those libraries. What is the way of doing so.

I shall need to use large open source projects in my current work. I am facing problem of compiling those using torizon cross tool chain (amr64) but manually I can run those from inside torizon container.

Please suggest best practices for this case.

Hi, I’m the Toradex AI Assistant. The Toradex Support team will follow up with you shortly!

Did you like my answer?

:+1: :-1:


To compile the open-ocpp project for a Torizon Docker container and use its artifacts (.h files and .so files), you can follow these steps:

1. Set Up Your Development Environment

Ensure you have the necessary tools and environment set up for cross-compilation. This includes Docker, the Torizon IDE Extension, and the appropriate cross-toolchain SDK container.

2. Create a Dockerfile for Cross-Compilation

Create a Dockerfile that uses the Torizon cross-toolchain SDK container to compile the open-ocpp project. Here’s an example Dockerfile:

# Use the Torizon cross-toolchain SDK container
FROM torizon/debian-cross-toolchain-arm64:2-bullseye AS build

# Install necessary dependencies for building open-ocpp
RUN apt-get update && apt-get install -y \
    git \
    cmake \
    build-essential \
    libssl-dev

# Clone the open-ocpp repository
RUN git clone https://github.com/c-jimenez/open-ocpp.git /open-ocpp

# Create a build directory and compile the project
WORKDIR /open-ocpp
RUN mkdir build && cd build && \
    cmake .. && \
    make

# Create a new stage to copy the compiled artifacts
FROM debian:bullseye-slim

# Copy the compiled artifacts from the build stage
COPY --from=build /open-ocpp/build/libopenocpp.so /usr/local/lib/
COPY --from=build /open-ocpp/include /usr/local/include

# Set the environment variables for the shared library
ENV LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

# Install any runtime dependencies
RUN apt-get update && apt-get install -y \
    libssl1.1

# Set the entrypoint to a shell for testing purposes
ENTRYPOINT ["/bin/bash"]

3. Build the Docker Image

Build the Docker image using the Dockerfile:

docker build -t open-ocpp-torizon .

4. Run the Docker Container

Run the Docker container to test the compiled artifacts:

docker run -it open-ocpp-torizon

5. Develop Your Application

Now that you have the compiled artifacts in the container, you can develop your application using these libraries. Create a new Dockerfile for your application that uses the compiled artifacts:

# Use the base Torizon Debian container
FROM torizon/debian:2-bullseye

# Copy the compiled artifacts from the open-ocpp image
COPY --from=open-ocpp-torizon /usr/local/lib/libopenocpp.so /usr/local/lib/
COPY --from=open-ocpp-torizon /usr/local/include /usr/local/include

# Install any additional dependencies for your application
RUN apt-get update && apt-get install -y \
    libssl1.1 \
    build-essential

# Copy your application source code
COPY ./my-app /my-app

# Build your application
WORKDIR /my-app
RUN make

# Set the entrypoint to your application
ENTRYPOINT ["./my-app"]

6. Build and Run Your Application Container

Build and run your application container:

docker build -t my-app-torizon .
docker run -it my-app-torizon

Best Practices

  • Use Multi-Stage Builds: This helps in separating the build environment from the runtime environment, reducing the final image size.
  • Cross-Compilation: Use the Torizon cross-toolchain SDK containers to compile your code for the target architecture.
  • Dependency Management: Ensure all necessary dependencies are installed in the build stage and only runtime dependencies are included in the final image.
  • Testing: Test your compiled artifacts and application thoroughly in the container environment to ensure compatibility.

By following these steps and best practices, you should be able to compile and use large open-source projects like open-ocpp in Torizon Docker containers effectively.

Please, also check if these links can help you solve your problem:

External libraries with Torizon visual studio extension.

Greetings @khaled.hassan,

First of all, could you start by describing the steps you’ve done so far, as well as what exact compiling problems you are facing.

Best Regards,
Jeremias

HI Jeremias,

I could compile it finally changing CMake file.
But now facing issues of setting environment variable in docker container.

Please see the following regarding setting environment variables in a container: Set environment variables | Docker Docs

Best Regards,
Jeremias