mirror of
https://github.com/perstarkse/minne.git
synced 2026-07-02 02:51:44 +02:00
fix: skip CI for release build since release action runs checks and naming
This commit is contained in:
@@ -0,0 +1,249 @@
|
||||
# Portable release archives for cargo-dist-compatible GitHub Releases layout.
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
platform ? (if stdenv.isLinux then "linux" else if stdenv.isDarwin then "darwin" else "windows"),
|
||||
patchelf ? null,
|
||||
xz,
|
||||
unzip ? null,
|
||||
zip ? null,
|
||||
minne-pkg ? null,
|
||||
minne-pkg-windows ? null,
|
||||
onnxruntime ? null,
|
||||
ortArchiveWindows ? null,
|
||||
libglvnd ? null,
|
||||
fontconfig,
|
||||
freetype,
|
||||
openssl,
|
||||
zlib,
|
||||
bzip2,
|
||||
libpng,
|
||||
brotli,
|
||||
expat,
|
||||
gcc ? null,
|
||||
glibc ? null,
|
||||
minneVersion,
|
||||
targetTriple,
|
||||
srcRoot,
|
||||
}:
|
||||
let
|
||||
archiveName = "main-${targetTriple}";
|
||||
binaries = ["main" "server" "worker"];
|
||||
|
||||
copyBinary = ''
|
||||
if [ -f "${minne-pkg}/bin/.$b-wrapped" ]; then
|
||||
cp "${minne-pkg}/bin/.$b-wrapped" "$exe"
|
||||
elif [ -f "${minne-pkg}/bin/$b" ]; then
|
||||
cp "${minne-pkg}/bin/$b" "$exe"
|
||||
else
|
||||
echo "missing binary: $b" >&2
|
||||
exit 1
|
||||
fi
|
||||
'';
|
||||
|
||||
copyDocs = ''
|
||||
cp ${srcRoot}/README.md ${srcRoot}/LICENSE ${srcRoot}/CHANGELOG.md "$root/"
|
||||
'';
|
||||
|
||||
mkLinux =
|
||||
let
|
||||
isAarch64 = lib.hasSuffix "aarch64-unknown-linux-gnu" targetTriple;
|
||||
dynamicLinker =
|
||||
if isAarch64
|
||||
then "ld-linux-aarch64.so.1"
|
||||
else "ld-linux-x86-64.so.2";
|
||||
|
||||
copySharedLibs = pkg: ''
|
||||
if [ -d "${pkg}/lib" ]; then
|
||||
find -L "${pkg}/lib" -maxdepth 1 \( -name '*.so' -o -name '*.so.*' \) -exec cp -L {} "$root/lib/" \;
|
||||
fi
|
||||
'';
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
pname = "main";
|
||||
version = minneVersion;
|
||||
|
||||
nativeBuildInputs = [patchelf xz];
|
||||
|
||||
dontUnpack = true;
|
||||
dontStrip = true;
|
||||
dontPatchELF = true;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
root="$TMPDIR/root/${archiveName}"
|
||||
mkdir -p "$root/lib"
|
||||
|
||||
for b in ${lib.concatStringsSep " " binaries}; do
|
||||
exe="$root/.$b-bin"
|
||||
${copyBinary}
|
||||
chmod u+w "$exe"
|
||||
patchelf --set-interpreter 'lib/${dynamicLinker}' "$exe"
|
||||
patchelf --set-rpath '$ORIGIN/lib' "$exe"
|
||||
printf '%s\n' \
|
||||
'#!/bin/sh' \
|
||||
'set -eu' \
|
||||
'DIR="$(CDPATH= cd "$(dirname "$0")" && pwd)"' \
|
||||
'export LD_LIBRARY_PATH="$DIR/lib"' \
|
||||
'export ORT_DYLIB_PATH="$DIR/lib/libonnxruntime.so"' \
|
||||
'exec "$DIR/.'"$b"'-bin" "$@"' \
|
||||
> "$root/$b"
|
||||
chmod +x "$root/$b"
|
||||
done
|
||||
|
||||
cp -L ${onnxruntime}/lib/libonnxruntime.so* "$root/lib/"
|
||||
${copySharedLibs libglvnd}
|
||||
${copySharedLibs fontconfig.lib}
|
||||
${copySharedLibs freetype}
|
||||
${copySharedLibs openssl.out}
|
||||
${copySharedLibs zlib}
|
||||
${copySharedLibs bzip2}
|
||||
${copySharedLibs libpng}
|
||||
${copySharedLibs brotli}
|
||||
${copySharedLibs expat}
|
||||
${copySharedLibs gcc.cc.lib}
|
||||
|
||||
# Bundle glibc so binaries run on older distros (e.g. Ubuntu 22.04).
|
||||
cp -L ${glibc}/lib/${dynamicLinker} "$root/lib/"
|
||||
for lib in libc.so.6 libm.so.6 libpthread.so.0 libdl.so.2 librt.so.1 libresolv.so.2; do
|
||||
if [ -f "${glibc}/lib/$lib" ]; then
|
||||
cp -L "${glibc}/lib/$lib" "$root/lib/"
|
||||
fi
|
||||
done
|
||||
|
||||
${copyDocs}
|
||||
|
||||
mkdir -p "$out"
|
||||
tar -cJf "$out/${archiveName}.tar.xz" -C "$TMPDIR/root" "${archiveName}"
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Minne release archive for ${targetTriple}";
|
||||
platforms = lib.platforms.linux;
|
||||
};
|
||||
};
|
||||
|
||||
mkDarwin =
|
||||
let
|
||||
copyDylibs = pkg: ''
|
||||
if [ -d "${pkg}/lib" ]; then
|
||||
find -L "${pkg}/lib" -maxdepth 1 \( -name '*.dylib' -o -name '*.so' \) -exec cp -L {} "$root/lib/" \;
|
||||
fi
|
||||
'';
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
pname = "main";
|
||||
version = minneVersion;
|
||||
|
||||
nativeBuildInputs = [xz];
|
||||
|
||||
dontUnpack = true;
|
||||
dontStrip = true;
|
||||
dontFixDarwinDylibs = true;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
root="$TMPDIR/root/${archiveName}"
|
||||
mkdir -p "$root/lib"
|
||||
|
||||
for b in ${lib.concatStringsSep " " binaries}; do
|
||||
exe="$root/.$b-bin"
|
||||
${copyBinary}
|
||||
chmod +x "$exe"
|
||||
printf '%s\n' \
|
||||
'#!/bin/sh' \
|
||||
'set -eu' \
|
||||
'DIR="$(CDPATH= cd "$(dirname "$0")" && pwd)"' \
|
||||
'export DYLD_LIBRARY_PATH="$DIR/lib''${DYLD_LIBRARY_PATH:+:$DYLD_LIBRARY_PATH}"' \
|
||||
'exec "$DIR/.'"$b"'-bin" "$@"' \
|
||||
> "$root/$b"
|
||||
chmod +x "$root/$b"
|
||||
done
|
||||
|
||||
cp -L ${onnxruntime}/lib/libonnxruntime*.dylib "$root/lib/" 2>/dev/null || true
|
||||
if [ ! -f "$root/lib/libonnxruntime.dylib" ]; then
|
||||
ort="$(find -L "$root/lib" -maxdepth 1 -name 'libonnxruntime*.dylib' | head -n1)"
|
||||
if [ -n "$ort" ]; then
|
||||
cp -L "$ort" "$root/lib/libonnxruntime.dylib"
|
||||
else
|
||||
echo "missing libonnxruntime.dylib" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
${copyDylibs fontconfig.lib}
|
||||
${copyDylibs freetype}
|
||||
${copyDylibs openssl.out}
|
||||
${copyDylibs zlib}
|
||||
${copyDylibs bzip2}
|
||||
${copyDylibs libpng}
|
||||
${copyDylibs brotli}
|
||||
${copyDylibs expat}
|
||||
|
||||
${copyDocs}
|
||||
|
||||
mkdir -p "$out"
|
||||
tar -cJf "$out/${archiveName}.tar.xz" -C "$TMPDIR/root" "${archiveName}"
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Minne release archive for ${targetTriple}";
|
||||
platforms = lib.platforms.darwin;
|
||||
};
|
||||
};
|
||||
|
||||
mkWindows = stdenv.mkDerivation {
|
||||
pname = "main";
|
||||
version = minneVersion;
|
||||
|
||||
nativeBuildInputs = [unzip zip];
|
||||
|
||||
dontUnpack = true;
|
||||
dontStrip = true;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
root="$TMPDIR/root"
|
||||
mkdir -p "$root/lib"
|
||||
|
||||
for b in ${lib.concatStringsSep " " binaries}; do
|
||||
if [ ! -f "${minne-pkg-windows}/bin/$b.exe" ]; then
|
||||
echo "missing binary: $b.exe" >&2
|
||||
exit 1
|
||||
fi
|
||||
cp "${minne-pkg-windows}/bin/$b.exe" "$root/$b.exe"
|
||||
done
|
||||
|
||||
unzip -q ${ortArchiveWindows} -d "$TMPDIR/ort"
|
||||
dll="$(find "$TMPDIR/ort" -name onnxruntime.dll -print -quit)"
|
||||
if [ -z "$dll" ]; then
|
||||
echo "missing onnxruntime.dll in ORT archive" >&2
|
||||
exit 1
|
||||
fi
|
||||
cp "$dll" "$root/lib/onnxruntime.dll"
|
||||
|
||||
${copyDocs}
|
||||
|
||||
mkdir -p "$out"
|
||||
(cd "$root" && zip -qr "$out/${archiveName}.zip" .)
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Minne release archive for ${targetTriple}";
|
||||
platforms = [ "x86_64-linux" ];
|
||||
};
|
||||
};
|
||||
in
|
||||
if platform == "linux" then mkLinux
|
||||
else if platform == "darwin" then mkDarwin
|
||||
else if platform == "windows" then mkWindows
|
||||
else throw "minne-release: unknown platform ${platform}"
|
||||
@@ -0,0 +1,171 @@
|
||||
# Offline MSVC CRT + Windows SDK for cross-compiling to x86_64-pc-windows-msvc.
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
xwin,
|
||||
cacert,
|
||||
writeText,
|
||||
writeShellScript,
|
||||
}:
|
||||
let
|
||||
cmakeOverride = writeText "override.cmake" ''
|
||||
# macOS paths usually start with /Users/*. Unfortunately, clang-cl interprets
|
||||
# paths starting with /U as macro undefines, so we need to put a -- before the
|
||||
# input file path to force it to be treated as a path.
|
||||
string(REPLACE "-c <SOURCE>" "-c -- <SOURCE>" CMAKE_C_COMPILE_OBJECT "''${CMAKE_C_COMPILE_OBJECT}")
|
||||
string(REPLACE "-c <SOURCE>" "-c -- <SOURCE>" CMAKE_CXX_COMPILE_OBJECT "''${CMAKE_CXX_COMPILE_OBJECT}")
|
||||
string(REPLACE "/D" "-D" CMAKE_RC_FLAGS "''${CMAKE_RC_FLAGS_INIT}")
|
||||
string(REPLACE "/D" "-D" CMAKE_RC_FLAGS_DEBUG "''${CMAKE_RC_FLAGS_DEBUG_INIT}")
|
||||
if(NOT CMAKE_HOST_WIN32)
|
||||
set(CMAKE_NINJA_CMCLDEPS_RC 0)
|
||||
endif()
|
||||
'';
|
||||
|
||||
cmakeToolchain = writeText "x86_64-pc-windows-msvc-toolchain.cmake" ''
|
||||
set(CMAKE_SYSTEM_NAME Windows)
|
||||
set(CMAKE_SYSTEM_PROCESSOR AMD64)
|
||||
set(CMAKE_C_COMPILER clang-cl CACHE FILEPATH "")
|
||||
set(CMAKE_CXX_COMPILER clang-cl CACHE FILEPATH "")
|
||||
set(CMAKE_AR llvm-lib)
|
||||
set(CMAKE_LINKER lld-link CACHE FILEPATH "")
|
||||
set(CMAKE_MSVC_RUNTIME_LIBRARY CACHE STRING "MultiThreadedDLL")
|
||||
|
||||
# Paths relative to this file (cmake/clang-cl/) so the FOD output stays store-path-free.
|
||||
set(_XWIN_ROOT "''${CMAKE_CURRENT_LIST_DIR}/../..")
|
||||
set(_CRT "''${_XWIN_ROOT}/xwin/crt")
|
||||
set(_SDK "''${_XWIN_ROOT}/xwin/sdk")
|
||||
|
||||
set(COMPILE_FLAGS
|
||||
--target=x86_64-pc-windows-msvc
|
||||
-Wno-unused-command-line-argument
|
||||
-fuse-ld=lld-link
|
||||
/imsvc ''${_CRT}/include
|
||||
/imsvc ''${_SDK}/include/ucrt
|
||||
/imsvc ''${_SDK}/include/um
|
||||
/imsvc ''${_SDK}/include/shared
|
||||
/imsvc ''${_SDK}/include/winrt)
|
||||
set(LINK_FLAGS
|
||||
/manifest:no
|
||||
-libpath:"''${_CRT}/lib/x86_64"
|
||||
-libpath:"''${_SDK}/lib/um/x86_64"
|
||||
-libpath:"''${_SDK}/lib/ucrt/x86_64")
|
||||
string(REPLACE ";" " " COMPILE_FLAGS "''${COMPILE_FLAGS}")
|
||||
set(_CMAKE_C_FLAGS_INITIAL "''${CMAKE_C_FLAGS}" CACHE STRING "")
|
||||
set(CMAKE_C_FLAGS "''${_CMAKE_C_FLAGS_INITIAL} ''${COMPILE_FLAGS}" CACHE STRING "" FORCE)
|
||||
set(_CMAKE_CXX_FLAGS_INITIAL "''${CMAKE_CXX_FLAGS}" CACHE STRING "")
|
||||
set(CMAKE_CXX_FLAGS "''${_CMAKE_CXX_FLAGS_INITIAL} ''${COMPILE_FLAGS} /EHsc" CACHE STRING "" FORCE)
|
||||
string(REPLACE ";" " " LINK_FLAGS "''${LINK_FLAGS}")
|
||||
set(_CMAKE_EXE_LINKER_FLAGS_INITIAL "''${CMAKE_EXE_LINKER_FLAGS}" CACHE STRING "")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "''${_CMAKE_EXE_LINKER_FLAGS_INITIAL} ''${LINK_FLAGS}" CACHE STRING "" FORCE)
|
||||
set(_CMAKE_MODULE_LINKER_FLAGS_INITIAL "''${CMAKE_MODULE_LINKER_FLAGS}" CACHE STRING "")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS "''${_CMAKE_MODULE_LINKER_FLAGS_INITIAL} ''${LINK_FLAGS}" CACHE STRING "" FORCE)
|
||||
set(_CMAKE_SHARED_LINKER_FLAGS_INITIAL "''${CMAKE_SHARED_LINKER_FLAGS}" CACHE STRING "")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "''${_CMAKE_SHARED_LINKER_FLAGS_INITIAL} ''${LINK_FLAGS}" CACHE STRING "" FORCE)
|
||||
set(CMAKE_C_STANDARD_LIBRARIES "" CACHE STRING "" FORCE)
|
||||
set(CMAKE_CXX_STANDARD_LIBRARIES "" CACHE STRING "" FORCE)
|
||||
set(CMAKE_TRY_COMPILE_CONFIGURATION Release)
|
||||
set(CMAKE_USER_MAKE_RULES_OVERRIDE "''${CMAKE_CURRENT_LIST_DIR}/override.cmake")
|
||||
'';
|
||||
|
||||
clangClWrapper = writeShellScript "clang-cl-msvc-link-wrapper" ''
|
||||
# Route mozangle DLL link invocations (clang-cl + /LD + .obj) to lld-link.
|
||||
set -euo pipefail
|
||||
|
||||
real_clang_cl="''${REAL_CLANG_CL:-clang-cl}"
|
||||
real_lld_link="''${REAL_LLD_LINK:-lld-link}"
|
||||
|
||||
objs=()
|
||||
libs=()
|
||||
fe=""
|
||||
def=""
|
||||
has_ld=false
|
||||
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
*.obj|*.o) objs+=("$arg") ;;
|
||||
*.lib) libs+=("$arg") ;;
|
||||
/LD|/Ld) has_ld=true ;;
|
||||
/Fe*) fe="''${arg#/Fe}" ;;
|
||||
/DEF:*) def="$arg" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ "$has_ld" == true && ''${#objs[@]} -gt 0 ]]; then
|
||||
lld_args=()
|
||||
for o in "''${objs[@]}"; do
|
||||
lld_args+=("$o")
|
||||
done
|
||||
for l in "''${libs[@]}"; do
|
||||
lld_args+=("$l")
|
||||
done
|
||||
lld_args+=("/DLL")
|
||||
if [[ -n "$fe" ]]; then
|
||||
lld_args+=("/OUT:$fe")
|
||||
fi
|
||||
if [[ -n "$def" ]]; then
|
||||
lld_args+=("$def")
|
||||
fi
|
||||
exec "$real_lld_link" "''${lld_args[@]}"
|
||||
fi
|
||||
|
||||
exec "$real_clang_cl" "$@"
|
||||
'';
|
||||
in
|
||||
{
|
||||
inherit clangClWrapper;
|
||||
|
||||
xwinCargoCache = stdenv.mkDerivation {
|
||||
pname = "cargo-xwin-cache";
|
||||
version = "17.2";
|
||||
|
||||
nativeBuildInputs = [xwin cacert];
|
||||
|
||||
preferLocalBuild = true;
|
||||
allowSubstitutes = false;
|
||||
outputHashMode = "recursive";
|
||||
outputHashAlgo = "sha256";
|
||||
outputHash = "sha256-eYRtNXLttjlC1l+9mMoeXjmGwSC86hhY3on1IN4dym8=";
|
||||
|
||||
buildCommand = ''
|
||||
set -eo pipefail
|
||||
export XWIN_ACCEPT_LICENSE=true
|
||||
export SSL_CERT_FILE="${cacert}/etc/ssl/certs/ca-certificates.crt"
|
||||
export SSL_CERT_DIR="${cacert}/etc/ssl/certs"
|
||||
export NIX_SSL_CERT_FILE="${cacert}/etc/ssl/certs/ca-certificates.crt"
|
||||
|
||||
dl="$TMPDIR/xwin-dl"
|
||||
splat="$TMPDIR/splat"
|
||||
mkdir -p "$dl" "$splat"
|
||||
|
||||
${xwin}/bin/xwin \
|
||||
--manifest-version 17 \
|
||||
--arch x86_64 \
|
||||
--cache-dir "$dl" \
|
||||
download
|
||||
${xwin}/bin/xwin \
|
||||
--manifest-version 17 \
|
||||
--arch x86_64 \
|
||||
--cache-dir "$dl" \
|
||||
unpack
|
||||
${xwin}/bin/xwin \
|
||||
--manifest-version 17 \
|
||||
--arch x86_64 \
|
||||
--cache-dir "$dl" \
|
||||
splat --output "$splat"
|
||||
|
||||
mkdir -p "$out/xwin" "$out/cmake/clang-cl"
|
||||
cp -a "$splat"/. "$out/xwin/"
|
||||
echo -n "x86_64" > "$out/xwin/DONE"
|
||||
|
||||
cp ${cmakeToolchain} "$out/cmake/clang-cl/x86_64-pc-windows-msvc-toolchain.cmake"
|
||||
cp ${cmakeOverride} "$out/cmake/clang-cl/override.cmake"
|
||||
|
||||
# lld-link expects Dbghelp.lib; xwin ships dbghelp.lib (case-sensitive FS).
|
||||
for dir in "$out/xwin/crt/lib/x86_64" "$out/xwin/sdk/lib/um/x86_64"; do
|
||||
if [ -f "$dir/dbghelp.lib" ] && [ ! -e "$dir/Dbghelp.lib" ]; then
|
||||
ln -sf dbghelp.lib "$dir/Dbghelp.lib"
|
||||
fi
|
||||
done
|
||||
'';
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user