Seems to be fully statically built now.
Some checks failed
Dropshell Test / Build_and_Test (push) Failing after 1m15s
Some checks failed
Dropshell Test / Build_and_Test (push) Failing after 1m15s
This commit is contained in:
parent
08794e6480
commit
1b35f74bfe
@ -1,6 +1,15 @@
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
project(dropshell VERSION 1.0.0 LANGUAGES CXX)
|
||||
|
||||
# Force static linking globally
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
|
||||
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared libraries" FORCE)
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE OFF)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static")
|
||||
set(ZLIB_USE_STATIC_LIBS "ON")
|
||||
|
||||
set(CMAKE_CXX_STANDARD 23)
|
||||
set(CMAKE_C_STANDARD 23)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
@ -89,7 +98,8 @@ FetchContent_Declare(
|
||||
GIT_TAG v2.1.5
|
||||
)
|
||||
FetchContent_MakeAvailable(libassert)
|
||||
include(FetchContent)
|
||||
|
||||
# Add cpptrace
|
||||
FetchContent_Declare(
|
||||
cpptrace
|
||||
GIT_REPOSITORY https://github.com/jeremy-rifkin/cpptrace.git
|
||||
@ -97,14 +107,6 @@ FetchContent_Declare(
|
||||
)
|
||||
FetchContent_MakeAvailable(cpptrace)
|
||||
|
||||
# Add cpp-httplib
|
||||
FetchContent_Declare(
|
||||
cpp-httplib
|
||||
GIT_REPOSITORY https://github.com/yhirose/cpp-httplib.git
|
||||
GIT_TAG v0.14.1
|
||||
)
|
||||
FetchContent_MakeAvailable(cpp-httplib)
|
||||
|
||||
# Add nlohmann/json
|
||||
FetchContent_Declare(
|
||||
nlohmann_json
|
||||
@ -113,25 +115,16 @@ FetchContent_Declare(
|
||||
)
|
||||
FetchContent_MakeAvailable(nlohmann_json)
|
||||
|
||||
# Find zlib
|
||||
find_package(ZLIB REQUIRED)
|
||||
|
||||
# Force static linking for zlib
|
||||
set(ZLIB_USE_STATIC_LIBS TRUE)
|
||||
set(ZLIB_LIBRARIES z)
|
||||
|
||||
# Link libraries
|
||||
target_link_libraries(dropshell PRIVATE
|
||||
libassert::assert
|
||||
cpptrace::cpptrace
|
||||
httplib::httplib
|
||||
nlohmann_json::nlohmann_json
|
||||
${ZLIB_LIBRARIES}
|
||||
)
|
||||
|
||||
# Set static linking flags
|
||||
set_target_properties(dropshell PROPERTIES
|
||||
LINK_FLAGS "-static-libstdc++ -static-libgcc -Wl,-Bstatic -lz -Wl,-Bdynamic"
|
||||
LINK_FLAGS "-static"
|
||||
)
|
||||
|
||||
# Install targets
|
||||
|
34
source/Dockerfile
Normal file
34
source/Dockerfile
Normal file
@ -0,0 +1,34 @@
|
||||
FROM alpine:latest
|
||||
|
||||
# Install build dependencies
|
||||
RUN apk add --no-cache \
|
||||
build-base \
|
||||
cmake \
|
||||
git \
|
||||
musl-dev \
|
||||
curl \
|
||||
bash \
|
||||
musl \
|
||||
g++ \
|
||||
ninja \
|
||||
linux-headers
|
||||
|
||||
# Set working directory
|
||||
WORKDIR /build
|
||||
|
||||
# Copy source files
|
||||
COPY . .
|
||||
|
||||
# Configure and build
|
||||
RUN mkdir -p build_static
|
||||
|
||||
RUN cmake -G Ninja -B build_static -DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_COMPILER=gcc \
|
||||
-DCMAKE_CXX_COMPILER=g++ \
|
||||
-DCMAKE_EXE_LINKER_FLAGS="-static" \
|
||||
-DCMAKE_FIND_LIBRARY_SUFFIXES=".a" \
|
||||
-DBUILD_SHARED_LIBS=OFF
|
||||
|
||||
RUN cmake --build build_static
|
||||
|
||||
# The resulting binary will be in build_static/dropshell
|
@ -1,20 +0,0 @@
|
||||
FROM alpine AS compiler
|
||||
|
||||
ARG VERSION=0.13.0
|
||||
ARG OPTIONS=-Doptimize=ReleaseSafe
|
||||
|
||||
RUN apk update && apk add curl tar xz
|
||||
|
||||
# zig-linux-aarch64-0.10.1.tar.xz
|
||||
# ziglang.org/download/<ver>/zig-linux-<architecture>-<ver>.tar.xz
|
||||
|
||||
RUN curl https://ziglang.org/download/$VERSION/zig-linux-$(uname -m)-$VERSION.tar.xz -O && \
|
||||
tar -xf *.tar.xz && \
|
||||
mv zig-linux-$(uname -m)-$VERSION /compiler
|
||||
|
||||
WORKDIR /build
|
||||
COPY . /build
|
||||
RUN /compiler/zig build $OPTIONS
|
||||
|
||||
FROM scratch AS output
|
||||
COPY --from=compiler /build/zig-out/bin /bin
|
@ -1,41 +0,0 @@
|
||||
const std = @import("std");
|
||||
|
||||
pub fn build(b: *std.Build) void {
|
||||
const target = b.standardTargetOptions(.{});
|
||||
const optimize = b.standardOptimizeOption(.{});
|
||||
|
||||
const exe = b.addExecutable(.{
|
||||
.name = "dropshell",
|
||||
.target = target,
|
||||
.optimize = optimize,
|
||||
.root_source_file = .{ .cwd_relative = "src/main.cpp" },
|
||||
});
|
||||
|
||||
// Link with C++ standard library
|
||||
exe.linkLibCpp();
|
||||
|
||||
// Add include directories if needed
|
||||
exe.addIncludePath(.{ .cwd_relative = "include" });
|
||||
|
||||
b.installArtifact(exe);
|
||||
|
||||
const run_cmd = b.addRunArtifact(exe);
|
||||
run_cmd.step.dependOn(b.getInstallStep());
|
||||
|
||||
if (b.args) |args| {
|
||||
run_cmd.addArgs(args);
|
||||
}
|
||||
|
||||
const run_step = b.step("run", "Run the app");
|
||||
run_step.dependOn(&run_cmd.step);
|
||||
|
||||
const unit_tests = b.addTest(.{
|
||||
.root_source_file = .{ .cwd_relative = "src/main.cpp" },
|
||||
.target = target,
|
||||
.optimize = optimize,
|
||||
});
|
||||
|
||||
const run_unit_tests = b.addRunArtifact(unit_tests);
|
||||
const test_step = b.step("test", "Run unit tests");
|
||||
test_step.dependOn(&run_unit_tests.step);
|
||||
}
|
11
source/build_static.sh
Executable file
11
source/build_static.sh
Executable file
@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Build the Docker image
|
||||
docker build -t dropshell-static-builder .
|
||||
|
||||
# Create a container and copy the binary
|
||||
docker create --name temp-container dropshell-static-builder
|
||||
docker cp temp-container:/build/build_static/dropshell ./output/dropshell-static
|
||||
docker rm temp-container
|
||||
|
||||
echo "Static binary has been created as 'output/dropshell-static'"
|
@ -1,24 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# build amd64 and arm64 versions of dropshell, to:
|
||||
# build/dropshell.amd64
|
||||
# build/dropshell.arm64
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
OUTPUT_DIR="$SCRIPT_DIR/output"
|
||||
DOCKERFILE="$SCRIPT_DIR/Dockerfile.multiarch"
|
||||
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
|
||||
options="-Doptimize=ReleaseSafe -Dtarget=x86_64-linux-musl"
|
||||
docker build \
|
||||
--platform "linux/amd64" \
|
||||
--build-arg "OPTIONS=$options" \
|
||||
-f Dockerfile.multiarch \
|
||||
-t dropshell-build .
|
||||
|
||||
|
||||
echo "Builds complete:"
|
||||
ls -lh "$OUTPUT_DIR"/dropshell.*
|
Loading…
x
Reference in New Issue
Block a user