Mark this package as supported only on 64 bit architectures, as the build fails for 32 bit targets. Maybe this can be fixed in the future
79 lines
2.4 KiB
Nix
79 lines
2.4 KiB
Nix
{ lib
|
|
, gccStdenv
|
|
, fetchFromGitHub
|
|
, cmake
|
|
, simdExtensions ? null
|
|
}:
|
|
|
|
with rec {
|
|
# SIMD instruction sets to compile for. If none are specified by the user,
|
|
# an appropriate one is selected based on the detected host system
|
|
isas = with gccStdenv.hostPlatform;
|
|
if simdExtensions != null then lib.toList simdExtensions
|
|
else if avx2Support then [ "AVX2" ]
|
|
else if sse4_1Support then [ "SSE41" ]
|
|
else if isx86_64 then [ "SSE2" ]
|
|
else if isAarch64 then [ "NEON" ]
|
|
else [ "NONE" ];
|
|
|
|
archFlags = lib.optionals gccStdenv.hostPlatform.isAarch64 [ "-DARCH=aarch64" ];
|
|
|
|
# CMake Build flags for the selected ISAs. For a list of flags, see
|
|
# https://github.com/ARM-software/astc-encoder/blob/main/Docs/Building.md
|
|
isaFlags = map ( isa: "-DISA_${isa}=ON" ) isas;
|
|
|
|
# The suffix of the binary to link as 'astcenc'
|
|
mainBinary = builtins.replaceStrings
|
|
[ "AVX2" "SSE41" "SSE2" "NEON" "NONE" ]
|
|
[ "avx2" "sse4.1" "sse2" "neon" "none" ]
|
|
( builtins.head isas );
|
|
};
|
|
|
|
gccStdenv.mkDerivation rec {
|
|
pname = "astc-encoder";
|
|
version = "3.6";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "ARM-software";
|
|
repo = "astc-encoder";
|
|
rev = version;
|
|
sha256 = "sha256-TzVO2xQOuE87h8j4UwkpnAaFwkvy5dZge8zDNR/mVf0=";
|
|
};
|
|
|
|
nativeBuildInputs = [ cmake ];
|
|
|
|
cmakeFlags = isaFlags ++ archFlags ++ [
|
|
"-DCMAKE_BUILD_TYPE=Release"
|
|
];
|
|
|
|
# Set a fixed build year to display within help output (otherwise, it would be 1980)
|
|
postPatch = ''
|
|
substituteInPlace Source/cmake_core.cmake \
|
|
--replace 'string(TIMESTAMP astcencoder_YEAR "%Y")' 'set(astcencoder_YEAR "2022")'
|
|
'';
|
|
|
|
# Link binaries into environment and provide 'astcenc' link
|
|
postInstall = ''
|
|
mv $out/astcenc $out/bin
|
|
ln -s $out/bin/astcenc-${mainBinary} $out/bin/astcenc
|
|
'';
|
|
|
|
meta = with lib; {
|
|
homepage = "https://github.com/ARM-software/astc-encoder";
|
|
description = "An encoder for the ASTC texture compression format";
|
|
longDescription = ''
|
|
The Adaptive Scalable Texture Compression (ASTC) format is
|
|
widely supported by mobile and desktop graphics hardware and
|
|
provides better quality at a given bitrate compared to ETC2.
|
|
|
|
This program supports both compression and decompression in LDR
|
|
and HDR mode and can read various image formats. Run `astcenc
|
|
-help` to see all the options.
|
|
'';
|
|
platforms = platforms.unix;
|
|
license = licenses.asl20;
|
|
maintainers = with maintainers; [ dasisdormax ];
|
|
broken = !gccStdenv.is64bit;
|
|
};
|
|
}
|