From d6f2566ca9670f67419f6bfaa8dc078073be32d0 Mon Sep 17 00:00:00 2001 From: Alexis Praga Date: Sun, 9 Feb 2025 19:10:07 +0100 Subject: [PATCH 1/3] safestringlib: init at 1.2.0-unstable-2024-10-21 To fix compilation issues in bwa-mem2, an update of this library is required. Latest, unstable version compiles more easily than the last stable release. --- pkgs/by-name/sa/safestringlib/package.nix | 78 +++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 pkgs/by-name/sa/safestringlib/package.nix diff --git a/pkgs/by-name/sa/safestringlib/package.nix b/pkgs/by-name/sa/safestringlib/package.nix new file mode 100644 index 000000000000..ac049eb4a97c --- /dev/null +++ b/pkgs/by-name/sa/safestringlib/package.nix @@ -0,0 +1,78 @@ +{ + lib, + stdenv, + cmake, + fetchFromGitHub, + fetchpatch, +}: + +stdenv.mkDerivation { + pname = "safestringlib"; + # Latest release is 1.2.0 and has compilation issues + version = "1.2.0-unstable-2024-10-21"; + + src = fetchFromGitHub { + owner = "intel"; + repo = "safestringlib"; + rev = "e99c03cfafdce5311c4dbf1fd3f916ccc6e300be"; + hash = "sha256-d+6YDtMtdaS2eW0eIfuwzdQRiExsoexL3fKj7C2zENM="; + }; + + outputs = [ + "out" + ]; + + nativeBuildInputs = [ cmake ]; + + cmakeFlags = [ + (lib.cmakeBool "BUILD_UNITTESTS" true) + ]; + + patches = [ + # https://github.com/intel/safestringlib/issues/74 + (fetchpatch { + name = "darwin-fix"; + url = "https://github.com/intel/safestringlib/pull/75/commits/3ff9c6234be7dd4ee1dd5cdc2ccbb2c7541adfec.patch"; + hash = "sha256-4HS7XyKPQSmKczaMCi1s6NxgTNzRZXTds2CXBTbpuAM="; + }) + ]; + + # see https://github.com/bwa-mem2/bwa-mem2/issues/93 + # Skip wmemset too + postPatch = lib.optionalString stdenv.hostPlatform.isDarwin '' + sed -i 's/memset_s/memset8_s/g' include/safe_mem_lib.h + sed -i 's/memset_s/memset8_s/g' safeclib/memset16_s.c + sed -i 's/memset_s/memset8_s/g' safeclib/memset32_s.c + sed -i 's/memset_s/memset8_s/g' safeclib/memset_s.c + sed -i 's/memset_s/memset8_s/g' safeclib/wmemset_s.c + sed -i 's/ memset_s/ memset8_s/g' unittests/*.c + sed -i 's/ wmemset_s/ wmemset8_s/g' unittests/*.c + ''; + + checkPhase = '' + runHook preCheck + cd unittests + ./safestring_test + runHook postCheck + ''; + doCheck = true; + + installPhase = '' + runHook preInstall + + mkdir -p $out/lib + cp ../libsafestring_static.a $out/lib/libsafestring.a + mkdir -p $out/ + cp -r ../../include $out/ + + runHook postInstall + ''; + + meta = { + homepage = "https://github.com/intel/safestringlib"; + description = "Safer replacements for C library functions that prevent serious security vulnerabilities"; + license = lib.licenses.mit; + platforms = lib.platforms.unix; + maintainers = with lib.maintainers; [ apraga ]; + }; +} From 5bfb437d33886bc82f74a6af40c83e1b65da3bdb Mon Sep 17 00:00:00 2001 From: Alexis Praga Date: Sun, 9 Feb 2025 19:43:31 +0100 Subject: [PATCH 2/3] bwa-mem2: add apraga as maintainer --- pkgs/by-name/bw/bwa-mem2/package.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/by-name/bw/bwa-mem2/package.nix b/pkgs/by-name/bw/bwa-mem2/package.nix index ad1bc23399cd..f0f6cb7c0b8f 100644 --- a/pkgs/by-name/bw/bwa-mem2/package.nix +++ b/pkgs/by-name/bw/bwa-mem2/package.nix @@ -67,6 +67,6 @@ stdenv.mkDerivation (finalAttrs: { homepage = "https://github.com/bwa-mem2/bwa-mem2/"; changelog = "https://github.com/bwa-mem2/bwa-mem2/blob/${finalAttrs.src.rev}/NEWS.md"; platforms = platforms.x86_64; - maintainers = with maintainers; [ alxsimon ]; + maintainers = with maintainers; [ apraga ]; }; }) From 6fc6d7e8ed57bd9df9390846b6e0c38e7e5c6fc8 Mon Sep 17 00:00:00 2001 From: Alexis Praga Date: Sun, 9 Feb 2025 19:43:31 +0100 Subject: [PATCH 3/3] bwa-mem2: fix compilation isssue On latest unstable, there are several implicit function declaration. in safestrlib, which was not a seperate package but simply a submodule. It is now a separate package (see previous commit) and using latest unstable for this libary fixes the issue. --- pkgs/by-name/bw/bwa-mem2/no-submodule.patch | 42 +++++++++++++++++ pkgs/by-name/bw/bwa-mem2/package.nix | 52 +++++++++++++++------ 2 files changed, 79 insertions(+), 15 deletions(-) create mode 100644 pkgs/by-name/bw/bwa-mem2/no-submodule.patch diff --git a/pkgs/by-name/bw/bwa-mem2/no-submodule.patch b/pkgs/by-name/bw/bwa-mem2/no-submodule.patch new file mode 100644 index 000000000000..07785cb89edc --- /dev/null +++ b/pkgs/by-name/bw/bwa-mem2/no-submodule.patch @@ -0,0 +1,42 @@ +diff --git a/Makefile b/Makefile +index 359585f..13ec279 100644 +--- a/Makefile ++++ b/Makefile +@@ -49,7 +49,6 @@ OBJS= src/fastmap.o src/bwtindex.o src/utils.o src/memcpy_bwamem.o src/kthread. + src/FMI_search.o src/read_index_ele.o src/bwamem_pair.o src/kswv.o src/bwa.o \ + src/bwamem_extra.o src/kopen.o + BWA_LIB= libbwa.a +-SAFE_STR_LIB= ext/safestringlib/libsafestring.a + + ifeq ($(arch),sse41) + ifeq ($(CXX), icpc) +@@ -101,16 +100,6 @@ CXXFLAGS+= -g -O3 -fpermissive $(ARCH_FLAGS) #-Wall ##-xSSE2 + all:$(EXE) + + multi: +- rm -f src/*.o $(BWA_LIB); cd ext/safestringlib/ && $(MAKE) clean; +- $(MAKE) arch=sse41 EXE=bwa-mem2.sse41 CXX=$(CXX) all +- rm -f src/*.o $(BWA_LIB); cd ext/safestringlib/ && $(MAKE) clean; +- $(MAKE) arch=sse42 EXE=bwa-mem2.sse42 CXX=$(CXX) all +- rm -f src/*.o $(BWA_LIB); cd ext/safestringlib/ && $(MAKE) clean; +- $(MAKE) arch=avx EXE=bwa-mem2.avx CXX=$(CXX) all +- rm -f src/*.o $(BWA_LIB); cd ext/safestringlib/ && $(MAKE) clean; +- $(MAKE) arch=avx2 EXE=bwa-mem2.avx2 CXX=$(CXX) all +- rm -f src/*.o $(BWA_LIB); cd ext/safestringlib/ && $(MAKE) clean; +- $(MAKE) arch=avx512 EXE=bwa-mem2.avx512bw CXX=$(CXX) all + $(CXX) -Wall -O3 src/runsimd.cpp -Iext/safestringlib/include -Lext/safestringlib/ -lsafestring $(STATIC_GCC) -o bwa-mem2 + + +@@ -120,12 +109,8 @@ $(EXE):$(BWA_LIB) $(SAFE_STR_LIB) src/main.o + $(BWA_LIB):$(OBJS) + ar rcs $(BWA_LIB) $(OBJS) + +-$(SAFE_STR_LIB): +- cd ext/safestringlib/ && $(MAKE) clean && $(MAKE) CC=$(CC) directories libsafestring.a +- + clean: + rm -fr src/*.o $(BWA_LIB) $(EXE) bwa-mem2.sse41 bwa-mem2.sse42 bwa-mem2.avx bwa-mem2.avx2 bwa-mem2.avx512bw +- cd ext/safestringlib/ && $(MAKE) clean + + depend: + (LC_ALL=C; export LC_ALL; makedepend -Y -- $(CXXFLAGS) $(CPPFLAGS) -I. -- src/*.cpp) diff --git a/pkgs/by-name/bw/bwa-mem2/package.nix b/pkgs/by-name/bw/bwa-mem2/package.nix index f0f6cb7c0b8f..97e902dbb562 100644 --- a/pkgs/by-name/bw/bwa-mem2/package.nix +++ b/pkgs/by-name/bw/bwa-mem2/package.nix @@ -2,6 +2,7 @@ lib, stdenv, fetchFromGitHub, + safestringlib, zlib, }: @@ -13,21 +14,11 @@ stdenv.mkDerivation (finalAttrs: { owner = "bwa-mem2"; repo = "bwa-mem2"; rev = "cf4306a47dac35e7e79a9e75398a35f33900cfd0"; - fetchSubmodules = true; - hash = "sha256-1AYSn7nBrDwbX7oSrdEoa1d3t6xzwKnA0S87Y/XeXJg="; + hash = "sha256-hY8nLRFWt0GAElhDIcYdUX6cJrzOE3NlYRQr0tC3on4="; }; buildInputs = [ zlib ]; - # see https://github.com/bwa-mem2/bwa-mem2/issues/93 - postPatch = lib.optionalString stdenv.hostPlatform.isDarwin '' - sed -i 's/memset_s/memset8_s/g' ext/safestringlib/include/safe_mem_lib.h - sed -i 's/memset_s/memset8_s/g' ext/safestringlib/safeclib/memset16_s.c - sed -i 's/memset_s/memset8_s/g' ext/safestringlib/safeclib/memset32_s.c - sed -i 's/memset_s/memset8_s/g' ext/safestringlib/safeclib/memset_s.c - sed -i 's/memset_s/memset8_s/g' ext/safestringlib/safeclib/wmemset_s.c - ''; - buildFlags = [ ( if stdenv.hostPlatform.sse4_2Support then @@ -43,14 +34,45 @@ stdenv.mkDerivation (finalAttrs: { ) ]; - env = lib.optionalAttrs stdenv.hostPlatform.isDarwin { - NIX_CFLAGS_COMPILE = toString [ + patches = [ + ./no-submodule.patch + ]; + + # Also, patch the tests + postPatch = + # Force path to static link, otherwise, it fails at runtime to + # find the shared library + '' + substituteInPlace Makefile \ + --replace-fail "-Iext/safestringlib/include" "-I${safestringlib}/include" \ + --replace-fail "-Lext/safestringlib" "-L${safestringlib}/lib" + '' + # Make test compile by changing the compiler and path to library + # Remove xeonbsw test that fails to compile due to missing _rdsc + # also, not portable + + '' + substituteInPlace test/Makefile \ + --replace-fail "icpc" "g++" \ + --replace-fail "../ext/safestringlib/libsafestring.a" \ + "${safestringlib}/lib/libsafestring.a" \ + --replace-fail \ + "fmi_test smem2_test bwt_seed_strategy_test sa2ref_test xeonbsw" \ + "fmi_test smem2_test bwt_seed_strategy_test sa2ref_test" + ''; + + env.NIX_CFLAGS_COMPILE = toString ( + lib.optionals stdenv.hostPlatform.isDarwin [ "-Wno-error=register" "-Wno-error=implicit-function-declaration" - ]; - }; + ] + ); + + nativeBuildInputs = [ + safestringlib + ]; enableParallelBuilding = true; + installPhase = '' runHook preInstall