about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/libraries/x264
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/x264')
-rw-r--r--nixpkgs/pkgs/development/libraries/x264/default.nix66
-rw-r--r--nixpkgs/pkgs/development/libraries/x264/disable-arm-neon-default.patch13
2 files changed, 79 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/x264/default.nix b/nixpkgs/pkgs/development/libraries/x264/default.nix
new file mode 100644
index 000000000000..f857b2a0b89e
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/x264/default.nix
@@ -0,0 +1,66 @@
+{ stdenv
+, lib
+, fetchFromGitLab
+, fetchpatch
+, nasm
+, enableShared ? !stdenv.hostPlatform.isStatic
+}:
+
+stdenv.mkDerivation rec {
+  pname = "x264";
+  version = "unstable-2021-06-13";
+
+  src = fetchFromGitLab {
+    domain = "code.videolan.org";
+    owner = "videolan";
+    repo = pname;
+    rev = "5db6aa6cab1b146e07b60cc1736a01f21da01154";
+    sha256 = "0swyrkz6nvajivxvrr08py0jrfcsjvpxw78xm1k5gd9xbdrxvknh";
+  };
+
+  # Upstream ./configure greps for (-mcpu|-march|-mfpu) in CFLAGS, which in nix
+  # is put in the cc wrapper anyway.
+  patches = [
+    ./disable-arm-neon-default.patch
+    (fetchpatch {
+      # https://code.videolan.org/videolan/x264/-/merge_requests/114
+      name = "fix-parallelism.patch";
+      url = "https://code.videolan.org/videolan/x264/-/commit/e067ab0b530395f90b578f6d05ab0a225e2efdf9.patch";
+      hash = "sha256-16h2IUCRjYlKI2RXYq8QyXukAdfoQxyBKsK/nI6vhRI=";
+    })
+  ];
+
+  postPatch = ''
+    patchShebangs .
+  ''
+  # Darwin uses `llvm-strip`, which results in a crash at runtime in assembly-based routines when `-x` is specified.
+  + lib.optionalString stdenv.isDarwin ''
+    substituteInPlace Makefile --replace '$(if $(STRIP), $(STRIP) -x $@)' '$(if $(STRIP), $(STRIP) -S $@)'
+  '';
+
+  enableParallelBuilding = true;
+
+  outputs = [ "out" "lib" "dev" ];
+
+  preConfigure = lib.optionalString stdenv.hostPlatform.isx86 ''
+    # `AS' is set to the binutils assembler, but we need nasm
+    unset AS
+  '' + lib.optionalString stdenv.hostPlatform.isAarch ''
+    export AS=$CC
+  '';
+
+  configureFlags = lib.optional enableShared "--enable-shared"
+    ++ lib.optional (!stdenv.isi686) "--enable-pic"
+    ++ lib.optional (stdenv.buildPlatform != stdenv.hostPlatform) "--cross-prefix=${stdenv.cc.targetPrefix}";
+
+  nativeBuildInputs = lib.optional stdenv.hostPlatform.isx86 nasm;
+
+  meta = with lib; {
+    description = "Library for encoding H264/AVC video streams";
+    mainProgram = "x264";
+    homepage = "http://www.videolan.org/developers/x264.html";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix ++ platforms.windows;
+    maintainers = with maintainers; [ tadeokondrak ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/x264/disable-arm-neon-default.patch b/nixpkgs/pkgs/development/libraries/x264/disable-arm-neon-default.patch
new file mode 100644
index 000000000000..6971944abb4f
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/x264/disable-arm-neon-default.patch
@@ -0,0 +1,13 @@
+diff -Naur x264-snapshot-20190517-2245-stable-orig/configure x264-snapshot-20190517-2245-stable/configure
+--- x264-snapshot-20190517-2245-stable-orig/configure	2020-01-03 19:51:03.041037657 -0500
++++ x264-snapshot-20190517-2245-stable/configure	2020-01-03 19:52:15.075034609 -0500
+@@ -930,9 +930,6 @@
+ fi
+ 
+ if [ $asm = auto -a $ARCH = ARM ] ; then
+-    # set flags so neon is built by default
+-    [ $compiler == CL ] || echo $CFLAGS | grep -Eq '(-mcpu|-march|-mfpu)' || CFLAGS="$CFLAGS -mcpu=cortex-a8 -mfpu=neon"
+-
+     cc_check '' '' '__asm__("add r0, r1, r2");' && define HAVE_ARM_INLINE_ASM
+     if [ $compiler = CL ] && cpp_check '' '' 'defined(_M_ARM) && _M_ARM >= 7' ; then
+         define HAVE_ARMV6