Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions .github/workflows/build_libtestoptimization.yml
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,11 @@ jobs:
cp -rf ./native/* external/internal/civisibility/native/
- name: Build and run linux-arm64
run: |
docker buildx build --platform linux/arm64 --build-arg GOARCH=arm64 --build-arg FILE_NAME=linux-arm64-libtestoptimization -t libtestoptimization-builder:arm64 -f ./Dockerfile ../../.. --load
docker run --rm -v ./output:/libtestoptimization libtestoptimization-builder:arm64
docker buildx build --platform linux/arm64 --build-arg GOARCH=arm64 --build-arg FILE_NAME=linux-arm64-libtestoptimization -t libtestoptimization-builder-static:arm64 -f ./Dockerfile-static ../../.. --load
docker run --rm -v ./output:/libtestoptimization libtestoptimization-builder-static:arm64

docker buildx build --platform linux/arm64 --build-arg GOARCH=arm64 --build-arg FILE_NAME=linux-arm64-libtestoptimization -t libtestoptimization-builder-dynamic:arm64 -f ./Dockerfile-dynamic ../../.. --load
docker run --rm -v ./output:/libtestoptimization libtestoptimization-builder-dynamic:arm64
working-directory: external/internal/civisibility/native
- name: Upload artifact
uses: actions/upload-artifact@v4
Expand Down Expand Up @@ -130,8 +133,11 @@ jobs:
cp -rf ./native/* external/internal/civisibility/native/
- name: Build and run linux-amd64
run: |
docker build --platform linux/amd64 --build-arg GOARCH=amd64 --build-arg FILE_NAME=linux-x64-libtestoptimization -t libtestoptimization-builder:amd64 -f ./Dockerfile ../../..
docker run --rm -v ./output:/libtestoptimization libtestoptimization-builder:amd64
docker build --platform linux/amd64 --build-arg GOARCH=amd64 --build-arg FILE_NAME=linux-x64-libtestoptimization -t libtestoptimization-builder-static:amd64 -f ./Dockerfile-static ../../..
docker run --rm -v ./output:/libtestoptimization libtestoptimization-builder-static:amd64

docker build --platform linux/amd64 --build-arg GOARCH=amd64 --build-arg FILE_NAME=linux-x64-libtestoptimization -t libtestoptimization-builder-dynamic:amd64 -f ./Dockerfile-dynamic ../../..
docker run --rm -v ./output:/libtestoptimization libtestoptimization-builder-dynamic:amd64
working-directory: external/internal/civisibility/native
- name: Build and run android-arm64
run: |
Expand Down
2 changes: 1 addition & 1 deletion build/Dockerfile-android
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Stage 1: Build the static library
FROM golang:1 AS builder
FROM golang:1-bullseye AS builder

# Install dependencies
RUN apt-get update && apt search openjdk && apt-get install -y gcc musl-tools build-essential devscripts openjdk-17-jdk
Expand Down
12 changes: 3 additions & 9 deletions build/Dockerfile → build/Dockerfile-dynamic
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Stage 1: Build the static library
FROM golang:1.24.1-bookworm AS builder
FROM golang:1-bullseye AS builder

# Install dependencies
RUN apt-get update && apt-get install -y gcc binutils
Expand All @@ -23,8 +23,6 @@ COPY . .
WORKDIR /app/internal/civisibility/native

# Build the library
RUN go build -tags civisibility_native -buildmode=c-archive -ldflags="-s -w" -gcflags="all=-l" -o ./output/static/libtestoptimization.a *.go
RUN strip --strip-unneeded ./output/static/libtestoptimization.a
RUN go build -tags civisibility_native -buildmode=c-shared -ldflags="-s -w" -gcflags="all=-l" -o ./output/dynamic/libtestoptimization.so *.go
RUN strip --strip-unneeded ./output/dynamic/libtestoptimization.so

Expand All @@ -41,19 +39,15 @@ RUN apk add --no-cache zip
RUN mkdir -p /output

# Copy the static library and header from the builder stage
COPY --from=builder /app/internal/civisibility/native/output/static/libtestoptimization.a /output/static/libtestoptimization.a
COPY --from=builder /app/internal/civisibility/native/output/static/libtestoptimization.h /output/static/libtestoptimization.h
COPY --from=builder /app/internal/civisibility/native/output/dynamic/libtestoptimization.so /output/dynamic/libtestoptimization.so
COPY --from=builder /app/internal/civisibility/native/output/dynamic/libtestoptimization.h /output/dynamic/libtestoptimization.h

# Compress both files into zip archives
RUN cd /output/static && zip -j -9 ../${FILE_NAME}-static.zip *.*
RUN cd /output/dynamic && zip -j -9 ../${FILE_NAME}-dynamic.zip *.*
# Create a SHA256 checksum file for the archive
RUN sha256sum /output/${FILE_NAME}-static.zip > /output/${FILE_NAME}-static.zip.sha256sum
RUN sha256sum /output/${FILE_NAME}-dynamic.zip > /output/${FILE_NAME}-dynamic.zip.sha256sum

RUN rm -r /output/static /output/dynamic
RUN rm -r /output/dynamic

# Command to run when the container starts
ENTRYPOINT ["sh", "-c", "ls /output && cp /output/*.* /libtestoptimization && echo 'Static library copied.'"]
ENTRYPOINT ["sh", "-c", "ls /output && cp /output/*.* /libtestoptimization && echo 'Dynamic library copied.'"]
79 changes: 79 additions & 0 deletions build/Dockerfile-static
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# Stage 1: Build the static library using musl (Alpine)
FROM golang:1-alpine AS builder

# Install dependencies for the static build with musl and cgo
RUN apk add --no-cache gcc musl-dev build-base

# Allow changing the architecture during the build if needed
ARG GOARCH=amd64
# Option to link libresolv explicitly for arm64, set to "true" or "false" at build time.
ARG LINK_LIBRESOLV=false

# Configure environment variables for compilation
ENV CGO_ENABLED=1 \
GOOS=linux \
GOARCH=$GOARCH \
# Default CC for amd64 (para arm64 se cambiará más abajo)
CC="gcc -static" \
CGO_CFLAGS="-O2 -s -DNDEBUG -fdata-sections -ffunction-sections" \
CGO_LDFLAGS="-static -s -Wl,--gc-sections"

# Set working directory
WORKDIR /app

# Copy all code to the container
COPY . .

# Change to the directory where the code to compile is located
WORKDIR /app/internal/civisibility/native

# Conditional compilation based on architecture and linking option
RUN if [ "$GOARCH" = "arm64" ]; then \
echo "Compilando para arm64 usando musl-gcc -static"; \
export CC="musl-gcc -static"; \
if [ "$LINK_LIBRESOLV" = "true" ]; then \
EXTRA="-lresolv"; \
else \
EXTRA=""; \
fi; \
echo "Flags extra del linker: $EXTRA"; \
go build -tags "civisibility_native netgo" -buildmode=c-archive \
-ldflags="-extldflags '-static $EXTRA' -s -w" \
-o ./output/static/libtestoptimization.a *.go; \
else \
echo "Compilando para amd64"; \
go build -tags "civisibility_native netgo" -buildmode=c-archive \
-ldflags="-extldflags '-static' -s -w" \
-o ./output/static/libtestoptimization.a *.go; \
fi

# Optimizar la librería eliminando símbolos innecesarios
RUN strip --strip-unneeded ./output/static/libtestoptimization.a

# Stage 2: Package the library
FROM alpine:latest

# Rename the final file using build args
ARG FILE_NAME=libtestoptimization

# Install zip to compress the files
RUN apk add --no-cache zip

# Create the output directory
RUN mkdir -p /output/static

# Copy the library and header from the builder stage
COPY --from=builder /app/internal/civisibility/native/output/static/libtestoptimization.a /output/static/libtestoptimization.a
COPY --from=builder /app/internal/civisibility/native/output/static/libtestoptimization.h /output/static/libtestoptimization.h

# Compress the library and header in a zip archive
RUN cd /output/static && zip -j -9 ../${FILE_NAME}-static.zip *.*

# Create a SHA256 checksum file for the zip to verify integrity
RUN sha256sum /output/${FILE_NAME}-static.zip > /output/${FILE_NAME}-static.zip.sha256sum

# Clean up intermediate files
RUN rm -r /output/static

# When the container starts, list the content and copy the files to a destination directory
ENTRYPOINT ["sh", "-c", "ls /output && cp /output/*.* /libtestoptimization && echo 'Static library copied.'"]
Loading