diff --git a/.github/workflows/CommentResponder.yml b/.github/workflows/CommentResponder.yml index 2052f237029d0..2cc37b9226a99 100644 --- a/.github/workflows/CommentResponder.yml +++ b/.github/workflows/CommentResponder.yml @@ -1,28 +1,14 @@ name: CommentResponder on: - status: - # check_suite: - # types: - # - completed issue_comment: types: - created - # Runs too many times - # ( - # github.event_name == 'check_suite' && - # github.event.check_suite.conclusion == 'success' - # ) || - jobs: comment: runs-on: ubuntu-latest name: bioconda-bot comment if: >- - ( - github.event_name == 'status' && - github.event.state == 'success' - ) || ( github.event_name == 'issue_comment' && github.event.issue.pull_request && diff --git a/build-fail-blacklist b/build-fail-blacklist index 3ec878a35f7ef..a176375749eff 100644 --- a/build-fail-blacklist +++ b/build-fail-blacklist @@ -179,7 +179,6 @@ recipes/gemma recipes/roary recipes/deltabs recipes/gottcha -recipes/pepnovo recipes/ea-utils recipes/nextgenmap recipes/igor_vdj diff --git a/recipes/abnumber/meta.yaml b/recipes/abnumber/meta.yaml index e151ff0389261..8a82abd0beb63 100644 --- a/recipes/abnumber/meta.yaml +++ b/recipes/abnumber/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "0.3.8" %} # Remember to update sha256 below +{% set version = "0.4.1" %} # Remember to update sha256 below package: name: abnumber @@ -6,7 +6,7 @@ package: source: url: https://github.com/prihoda/abnumber/archive/v{{ version }}.tar.gz - sha256: '9d811615800d479bb2ddd54996f1255806bd9ebc140407a54a0bc1790f9a8cee' + sha256: '240c7ccc1f85607ffdd0109f19761ab0488a059ae15e3ccd6066ef36c192a047' build: noarch: python diff --git a/recipes/abpoa/meta.yaml b/recipes/abpoa/meta.yaml index ad3e2d163205c..069ecd8444e2e 100644 --- a/recipes/abpoa/meta.yaml +++ b/recipes/abpoa/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "1.5.2" %} +{% set version = "1.5.3" %} {% set name = "abPOA" %} package: @@ -7,7 +7,7 @@ package: source: url: https://github.com/yangao07/{{ name }}/releases/download/v{{ version }}/{{ name }}-v{{ version }}.tar.gz - sha256: 706f0ca0110f4974ae7b93157db560bb9beda4273d8c883fa6a03ccb19958149 + sha256: bb97de2dbdec014f2fb24beb0c85fa0b2073f717f3b68639e1edd89239729e6c build: number: 0 diff --git a/recipes/afpdb/meta.yaml b/recipes/afpdb/meta.yaml index 30f636007b76a..0bfcfd3e0e7e6 100644 --- a/recipes/afpdb/meta.yaml +++ b/recipes/afpdb/meta.yaml @@ -1,5 +1,5 @@ {% set name = "afpdb" %} -{% set version = "0.2.1" %} +{% set version = "0.2.2" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: 7e67c728a25c9ac565c79fa2615b0fd84ecbf9d661b1f575a863156e169fcf10 + sha256: fbdc60785aba0177a3766f952df8bc848aa03adcc0693506cc9f1f3601449e98 build: number: 0 diff --git a/recipes/agat/meta.yaml b/recipes/agat/meta.yaml index a91fde31f4758..758b5d692e261 100755 --- a/recipes/agat/meta.yaml +++ b/recipes/agat/meta.yaml @@ -1,6 +1,6 @@ {% set name = "AGAT" %} -{% set version = "1.4.0" %} -{% set sha256 = "d5e30db44b5d05ed51c606a823894c01c85c1ed85580148ad5473cb2f2b2ac77" %} +{% set version = "1.4.1" %} +{% set sha256 = "28dcdbcaac90164fbb75afdc41d34e3c997fbf0f46b0633e0ac653b3c6d2e409" %} package: name: "{{ name|lower }}" diff --git a/recipes/agfusion/meta.yaml b/recipes/agfusion/meta.yaml index 8aa1ba254810a..e75269053c624 100644 --- a/recipes/agfusion/meta.yaml +++ b/recipes/agfusion/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "1.4.1" %} -{% set sha256 = "fd04591d764deeff69978f9d495c3baf854ccfba27366aa0ae4859ad85ca2c60" %} +{% set version = "1.4.3" %} +{% set sha256 = "0fdace7fad64713173cac049af3783bdb3db406d5a6dafd4cc0c1948d0724c8f" %} package: name: agfusion diff --git a/recipes/alignoth/meta.yaml b/recipes/alignoth/meta.yaml index 70647c20c246d..cc6001b85a7db 100644 --- a/recipes/alignoth/meta.yaml +++ b/recipes/alignoth/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "0.12.1" %} +{% set version = "0.13.0" %} package: name: alignoth @@ -14,7 +14,7 @@ build: source: url: https://github.com/alignoth/alignoth/archive/v{{ version }}.tar.gz - sha256: 9bbff76754c3f183b63047f44995e72a356b0628aee3638addbf6eb15e9a4813 + sha256: a955e762d3593ac572424dbe775f1c554bb5ab10f391fb643c7d613cca416cc4 requirements: build: diff --git a/recipes/ampliconsuite/meta.yaml b/recipes/ampliconsuite/meta.yaml index 5916971d38193..b037d25c280b4 100644 --- a/recipes/ampliconsuite/meta.yaml +++ b/recipes/ampliconsuite/meta.yaml @@ -1,22 +1,22 @@ {% set name="ampliconsuite" %} -{% set AS_version="1.3.3" %} +{% set AS_version="1.3.4" %} {% set AA_version="1.4.r2" %} -{% set AC_version="1.2.0" %} +{% set AC_version="1.2.1" %} package: name: {{ name }} version: {{ AS_version }} source: - # the sha256 sum is generated by doing + # the sha256 sum is generated by running the following on the release .tar.gz from Github. # $ wget -O- [URL] | shasum -a 256 - url: https://github.com/AmpliconSuite/AmpliconSuite-pipeline/archive/v{{ AS_version }}.tar.gz - sha256: c29f159cb641068b5c38529eeb49a975d63b3369407603cf30f3d8cf49a380d5 + sha256: 58f2b74eac0116e0830bceea66a854071e2a205b6f5b8e57ce61a0e358434a61 - url: https://github.com/AmpliconSuite/AmpliconArchitect/archive/v{{ AA_version }}.tar.gz sha256: 987390d7a32a6c118e6c7fea5c7a5aba2db1b3e64fc3ece5f68f50c7cabf01fa folder: ampliconarchitectlib - url: https://github.com/AmpliconSuite/AmpliconClassifier/archive/v{{ AC_version }}.tar.gz - sha256: 85052324376756ca3558325dce45635276af3f41dd292601f673abaf9990790a + sha256: 5cd6b9f4e2239631b8f11adda99d8858c29de64cf6f1c7a38121946db06803c9 build: noarch: python diff --git a/recipes/apscale/meta.yaml b/recipes/apscale/meta.yaml index d94036e9d34ce..e91738cdd3c3a 100644 --- a/recipes/apscale/meta.yaml +++ b/recipes/apscale/meta.yaml @@ -1,5 +1,5 @@ {% set name = "apscale" %} -{% set version = "2.0.2" %} +{% set version = "2.0.3" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/apscale-{{ version }}.tar.gz - sha256: 13d32ad87c1cf2d161bd577421e848006de8bcbb831aab15e5ecd3a5b6fc4563 + sha256: 52cf592e1446c958b781e5a134a2945989b33008805f46a071c97d073d330f00 build: entry_points: diff --git a/recipes/architeuthis/meta.yaml b/recipes/architeuthis/meta.yaml index 44e0523a764f2..4b437bd62bb10 100644 --- a/recipes/architeuthis/meta.yaml +++ b/recipes/architeuthis/meta.yaml @@ -1,5 +1,5 @@ {% set name = "architeuthis" %} -{% set version = "0.3.0" %} +{% set version = "0.3.1" %} package: name: {{ name|lower }} @@ -7,10 +7,10 @@ package: source: url: https://github.com/cdiener/{{ name }}/archive/{{ version }}.tar.gz - sha256: 63aba50c66188202debc822d0ded57d2398f5e4e9d8535f83a2c5e982bb4999f + sha256: 11b0e09785f23e479f3de55e12dfbe788c938a497a64c7293d8c4ce41d57ef2b build: - number: 1 + number: 0 script: - go build -v -ldflags "-w -s -X 'main.version={{ version }}'" -o $PREFIX/bin/architeuthis run_exports: diff --git a/recipes/bactopia-py/meta.yaml b/recipes/bactopia-py/meta.yaml index c41a907cbdf07..f9de466d197cd 100644 --- a/recipes/bactopia-py/meta.yaml +++ b/recipes/bactopia-py/meta.yaml @@ -1,5 +1,5 @@ {% set name = "bactopia-py" %} -{% set version = "1.1.1" %} +{% set version = "1.2.1" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/bactopia/bactopia-{{ version }}.tar.gz - sha256: a7e450658ca609d8fd93bc1beb343aa3fea76ac0cee06842f407cdc4d85299fa + sha256: bd375fcea02e5ea20c55f822a7173e70c89d30098585f4b3205bb85a94f821c1 build: noarch: python @@ -29,6 +29,7 @@ requirements: - pyyaml - requests - rich-click >=1.6.0 + - tqdm test: imports: @@ -42,6 +43,8 @@ test: - bactopia-prepare --help - bactopia-search --help - bactopia-summary --help + - bactopia-atb-formatter --help + - bactopia-atb-downloader --help requires: - pip diff --git a/recipes/bactopia-qc/meta.yaml b/recipes/bactopia-qc/meta.yaml index c353c88a8c8f5..8d3df3e550414 100644 --- a/recipes/bactopia-qc/meta.yaml +++ b/recipes/bactopia-qc/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "1.0.2" %} +{% set version = "1.0.3" %} package: name: bactopia-qc @@ -7,10 +7,12 @@ package: build: number: 0 noarch: generic + run_exports: + - {{ pin_subpackage('bactopia-qc', max_pin='x.x') }} source: url: https://github.com/bactopia/bactopia-qc/archive/v{{version}}.tar.gz - sha256: e30768ecd3f46d84d36d2db8c931db83b350e988822eeb3594db4031e015c7e1 + sha256: f1c07ee9aadd35cc9689070f236617afdc39f28210313675794e21a74f098244 requirements: run: @@ -27,7 +29,7 @@ requirements: - pigz - porechop >=0.2.4 - python >=3.7,<3.11 - - rasusa >=0.7.1 + - rasusa >=1 - rename - sed diff --git a/recipes/bactopia-teton/meta.yaml b/recipes/bactopia-teton/meta.yaml index d1b1ab3117925..1232947ff15cf 100644 --- a/recipes/bactopia-teton/meta.yaml +++ b/recipes/bactopia-teton/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "1.0.4" %} +{% set version = "1.1.1" %} package: name: bactopia-teton @@ -12,7 +12,7 @@ build: source: url: https://github.com/bactopia/bactopia-teton/archive/v{{version}}.tar.gz - sha256: 648b476bcf15bc177df1a814d782d318ee6b78a38e2ccb8268c569cbd1576504 + sha256: c62d0f74d5d4f48573af055424368de4ec4f88b744c7e3d451f818838f3b2da1 requirements: run: @@ -28,12 +28,14 @@ requirements: - pigz - python >=3.6,<3.11 - sed + - sizemeup >=1.2.3 - sra-human-scrubber >=2.2 test: commands: - "bactopia-teton" - "kraken-bracken-summary.py --help" + - "teton-prepare.py --help" about: home: https://bactopia.github.io/ diff --git a/recipes/bactopia/meta.yaml b/recipes/bactopia/meta.yaml index 55a6a219c4b5d..f4e2686493bf6 100644 --- a/recipes/bactopia/meta.yaml +++ b/recipes/bactopia/meta.yaml @@ -1,23 +1,23 @@ {% set name = "bactopia" %} -{% set version = "3.0.1" %} +{% set version = "3.1.0" %} package: name: {{ name }} version: {{ version }} build: - number: 1 + number: 0 noarch: generic run_exports: - {{ pin_subpackage(name, max_pin='x.x') }} source: url: https://github.com/bactopia/bactopia/archive/v{{version}}.tar.gz - sha256: f3f152294555c05ec37c20041385034b02a79a709d7801b07d2115f50115fa4a + sha256: a8134a5de2aa2e3d8131188420dadc034c5dcf4559c5c752148a103ddc47f463 requirements: run: - - bactopia-py 1.0.9 + - bactopia-py 1.1.1 - conda >=22.11.0 - coreutils - mamba >=1.1.0 diff --git a/recipes/baltic/meta.yaml b/recipes/baltic/meta.yaml index 1838b30e463fb..724178253314a 100644 --- a/recipes/baltic/meta.yaml +++ b/recipes/baltic/meta.yaml @@ -1,5 +1,5 @@ {% set name = "baltic" %} -{% set version = "0.2.2" %} +{% set version = "0.3.0" %} package: name: "{{ name|lower }}" @@ -7,21 +7,23 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: 095045aeb0f86f7668df5d7f163ab9fec30e59a564fc77c06b5cb756027a1e79 + sha256: d7fd92d0a40840f15826416e5aaaa3b9e40db07df99f9d4add2eeaf683ae385d build: number: 0 - script: python -m pip install --no-deps --ignore-installed . + script: {{ PYTHON }} -m pip install --no-deps --no-build-isolation --no-cache-dir . -vvv noarch: python + run_exports: + - {{ pin_subpackage('baltic', max_pin="x.x") }} requirements: host: - pip - - python + - python >=3.5 run: - matplotlib-base >=2.0.0 - numpy >=1.16 - - python + - python >=3.5 test: imports: @@ -29,7 +31,8 @@ test: about: home: "https://github.com/evogytis/baltic" - license: GPL-3.0 + license: GPL-3.0-or-later license_family: GPL3 license_file: LICENSE - summary: "Lightweight package for analyzing, manipulating and visualizing annotated phylogenetic trees" + summary: "Lightweight package for analyzing, manipulating and visualizing annotated phylogenetic trees." + dev_url: "https://github.com/evogytis/baltic" diff --git a/recipes/bambamc/build.sh b/recipes/bambamc/build.sh index e0ae564e50a1c..19c2086ceb10f 100644 --- a/recipes/bambamc/build.sh +++ b/recipes/bambamc/build.sh @@ -1,7 +1,12 @@ #!/usr/bin/env bash +set -xe + +# use newer config.guess and config.sub that support osx arm64 +cp ${RECIPE_DIR}/config.* . + export C_INCLUDE_PATH=${PREFIX}/include export LIBRARY_PATH=${PREFIX}/lib ./configure --prefix=${PREFIX} -make +make -j ${CPU_COUNT} make install diff --git a/recipes/bambamc/config.guess b/recipes/bambamc/config.guess new file mode 100644 index 0000000000000..1972fda8eb05d --- /dev/null +++ b/recipes/bambamc/config.guess @@ -0,0 +1,1700 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2021 Free Software Foundation, Inc. + +timestamp='2021-01-25' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. +# +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess +# +# Please send patches to . + + +me=$(echo "$0" | sed -e 's,.*/,,') + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2021 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +tmp= +# shellcheck disable=SC2172 +trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 + +set_cc_for_build() { + # prevent multiple calls if $tmp is already set + test "$tmp" && return 0 + : "${TMPDIR=/tmp}" + # shellcheck disable=SC2039 + { tmp=$( (umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null) && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } + dummy=$tmp/dummy + case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in + ,,) echo "int x;" > "$dummy.c" + for driver in cc gcc c89 c99 ; do + if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then + CC_FOR_BUILD="$driver" + break + fi + done + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; + esac +} + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if test -f /.attbin/uname ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=$( (uname -m) 2>/dev/null) || UNAME_MACHINE=unknown +UNAME_RELEASE=$( (uname -r) 2>/dev/null) || UNAME_RELEASE=unknown +UNAME_SYSTEM=$( (uname -s) 2>/dev/null) || UNAME_SYSTEM=unknown +UNAME_VERSION=$( (uname -v) 2>/dev/null) || UNAME_VERSION=unknown + +case "$UNAME_SYSTEM" in +Linux|GNU|GNU/*) + LIBC=unknown + + set_cc_for_build + cat <<-EOF > "$dummy.c" + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #elif defined(__GLIBC__) + LIBC=gnu + #else + #include + /* First heuristic to detect musl libc. */ + #ifdef __DEFINED_va_list + LIBC=musl + #endif + #endif + EOF + eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g')" + + # Second heuristic to detect musl libc. + if [ "$LIBC" = unknown ] && + command -v ldd >/dev/null && + ldd --version 2>&1 | grep -q ^musl; then + LIBC=musl + fi + + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + if [ "$LIBC" = unknown ]; then + LIBC=gnu + fi + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + UNAME_MACHINE_ARCH=$( (uname -p 2>/dev/null || \ + /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ + /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ + echo unknown)) + case "$UNAME_MACHINE_ARCH" in + aarch64eb) machine=aarch64_be-unknown ;; + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + earmv*) + arch=$(echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,') + endian=$(echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p') + machine="${arch}${endian}"-unknown + ;; + *) machine="$UNAME_MACHINE_ARCH"-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently (or will in the future) and ABI. + case "$UNAME_MACHINE_ARCH" in + earm*) + os=netbsdelf + ;; + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # Determine ABI tags. + case "$UNAME_MACHINE_ARCH" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=$(echo "$UNAME_MACHINE_ARCH" | sed -e "$expr") + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "$UNAME_VERSION" in + Debian*) + release='-gnu' + ;; + *) + release=$(echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2) + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "$machine-${os}${release}${abi-}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=$(arch | sed 's/Bitrig.//') + echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=$(arch | sed 's/OpenBSD.//') + echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" + exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=$(arch | sed 's/^.*BSD\.//') + echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" + exit ;; + *:MidnightBSD:*:*) + echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" + exit ;; + *:ekkoBSD:*:*) + echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" + exit ;; + *:SolidBSD:*:*) + echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" + exit ;; + *:OS108:*:*) + echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE" + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd"$UNAME_RELEASE" + exit ;; + *:MirBSD:*:*) + echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" + exit ;; + *:Sortix:*:*) + echo "$UNAME_MACHINE"-unknown-sortix + exit ;; + *:Twizzler:*:*) + echo "$UNAME_MACHINE"-unknown-twizzler + exit ;; + *:Redox:*:*) + echo "$UNAME_MACHINE"-unknown-redox + exit ;; + mips:OSF1:*.*) + echo mips-dec-osf1 + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $3}') + ;; + *5.*) + UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $4}') + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=$(/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1) + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE=alpha ;; + "EV4.5 (21064)") + UNAME_MACHINE=alpha ;; + "LCA4 (21066/21068)") + UNAME_MACHINE=alpha ;; + "EV5 (21164)") + UNAME_MACHINE=alphaev5 ;; + "EV5.6 (21164A)") + UNAME_MACHINE=alphaev56 ;; + "EV5.6 (21164PC)") + UNAME_MACHINE=alphapca56 ;; + "EV5.7 (21164PC)") + UNAME_MACHINE=alphapca57 ;; + "EV6 (21264)") + UNAME_MACHINE=alphaev6 ;; + "EV6.7 (21264A)") + UNAME_MACHINE=alphaev67 ;; + "EV6.8CB (21264C)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8AL (21264B)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8CX (21264D)") + UNAME_MACHINE=alphaev68 ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE=alphaev69 ;; + "EV7 (21364)") + UNAME_MACHINE=alphaev7 ;; + "EV7.9 (21364A)") + UNAME_MACHINE=alphaev79 ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo "$UNAME_MACHINE"-dec-osf"$(echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)" + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo "$UNAME_MACHINE"-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo "$UNAME_MACHINE"-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix"$UNAME_RELEASE" + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "$( (/bin/universe) 2>/dev/null)" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case $(/usr/bin/uname -p) in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo "$UNAME_MACHINE"-ibm-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux"$UNAME_RELEASE" + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + set_cc_for_build + SUN_ARCH=i386 + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH=x86_64 + fi + fi + echo "$SUN_ARCH"-pc-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" + exit ;; + sun4*:SunOS:*:*) + case "$(/usr/bin/arch -k)" in + Series*|S4*) + UNAME_RELEASE=$(uname -v) + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/')" + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos"$UNAME_RELEASE" + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=$( (sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null) + test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 + case "$(/bin/arch)" in + sun3) + echo m68k-sun-sunos"$UNAME_RELEASE" + ;; + sun4) + echo sparc-sun-sunos"$UNAME_RELEASE" + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos"$UNAME_RELEASE" + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint"$UNAME_RELEASE" + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint"$UNAME_RELEASE" + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint"$UNAME_RELEASE" + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten"$UNAME_RELEASE" + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten"$UNAME_RELEASE" + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix"$UNAME_RELEASE" + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix"$UNAME_RELEASE" + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix"$UNAME_RELEASE" + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && + dummyarg=$(echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p') && + SYSTEM_NAME=$("$dummy" "$dummyarg") && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos"$UNAME_RELEASE" + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=$(/usr/bin/uname -p) + if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 + then + if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ + test "$TARGET_BINARY_INTERFACE"x = x + then + echo m88k-dg-dgux"$UNAME_RELEASE" + else + echo m88k-dg-dguxbcs"$UNAME_RELEASE" + fi + else + echo i586-dg-dgux"$UNAME_RELEASE" + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/g')" + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'$(uname -s)'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if test -x /usr/bin/oslevel ; then + IBM_REV=$(/usr/bin/oslevel) + else + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + fi + echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=$(/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }') + if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if test -x /usr/bin/lslpp ; then + IBM_REV=$(/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/) + else + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + fi + echo "$IBM_ARCH"-ibm-aix"$IBM_REV" + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//') + case "$UNAME_MACHINE" in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if test -x /usr/bin/getconf; then + sc_cpu_version=$(/usr/bin/getconf SC_CPU_VERSION 2>/dev/null) + sc_kernel_bits=$(/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null) + case "$sc_cpu_version" in + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "$sc_kernel_bits" in + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 + esac ;; + esac + fi + if test "$HP_ARCH" = ""; then + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=$("$dummy") + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if test "$HP_ARCH" = hppa2.0w + then + set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH=hppa2.0w + else + HP_ARCH=hppa64 + fi + fi + echo "$HP_ARCH"-hp-hpux"$HPUX_REV" + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//') + echo ia64-hp-hpux"$HPUX_REV" + exit ;; + 3050*:HI-UX:*:*) + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if test -x /usr/sbin/sysversion ; then + echo "$UNAME_MACHINE"-unknown-osf1mk + else + echo "$UNAME_MACHINE"-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=$(uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz) + FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///') + FUJITSU_REL=$(echo "$UNAME_RELEASE" | sed -e 's/ /_/') + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///') + FUJITSU_REL=$(echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/') + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi"$UNAME_RELEASE" + exit ;; + *:BSD/OS:*:*) + echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" + exit ;; + arm:FreeBSD:*:*) + UNAME_PROCESSOR=$(uname -p) + set_cc_for_build + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabi + else + echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabihf + fi + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=$(/usr/bin/uname -p) + case "$UNAME_PROCESSOR" in + amd64) + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; + esac + echo "$UNAME_PROCESSOR"-unknown-freebsd"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')" + exit ;; + i*:CYGWIN*:*) + echo "$UNAME_MACHINE"-pc-cygwin + exit ;; + *:MINGW64*:*) + echo "$UNAME_MACHINE"-pc-mingw64 + exit ;; + *:MINGW*:*) + echo "$UNAME_MACHINE"-pc-mingw32 + exit ;; + *:MSYS*:*) + echo "$UNAME_MACHINE"-pc-msys + exit ;; + i*:PW*:*) + echo "$UNAME_MACHINE"-pc-pw32 + exit ;; + *:Interix*:*) + case "$UNAME_MACHINE" in + x86) + echo i586-pc-interix"$UNAME_RELEASE" + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix"$UNAME_RELEASE" + exit ;; + IA64) + echo ia64-unknown-interix"$UNAME_RELEASE" + exit ;; + esac ;; + i*:UWIN*:*) + echo "$UNAME_MACHINE"-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-pc-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" + exit ;; + *:GNU:*:*) + # the GNU system + echo "$(echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,')-unknown-$LIBC$(echo "$UNAME_RELEASE"|sed -e 's,/.*$,,')" + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo "$UNAME_MACHINE-unknown-$(echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]")$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')-$LIBC" + exit ;; + *:Minix:*:*) + echo "$UNAME_MACHINE"-unknown-minix + exit ;; + aarch64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + alpha:Linux:*:*) + case $(sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null) in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + arm*:Linux:*:*) + set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi + else + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + cris:Linux:*:*) + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" + exit ;; + crisv32:Linux:*:*) + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" + exit ;; + e2k:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + frv:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + hexagon:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + i*86:Linux:*:*) + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" + exit ;; + ia64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + k1om:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + m32r*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + m68*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + set_cc_for_build + IS_GLIBC=0 + test x"${LIBC}" = xgnu && IS_GLIBC=1 + sed 's/^ //' << EOF > "$dummy.c" + #undef CPU + #undef mips + #undef mipsel + #undef mips64 + #undef mips64el + #if ${IS_GLIBC} && defined(_ABI64) + LIBCABI=gnuabi64 + #else + #if ${IS_GLIBC} && defined(_ABIN32) + LIBCABI=gnuabin32 + #else + LIBCABI=${LIBC} + #endif + #endif + + #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa64r6 + #else + #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa32r6 + #else + #if defined(__mips64) + CPU=mips64 + #else + CPU=mips + #endif + #endif + #endif + + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + MIPS_ENDIAN=el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + MIPS_ENDIAN= + #else + MIPS_ENDIAN= + #endif + #endif +EOF + eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI')" + test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } + ;; + mips64el:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + openrisc*:Linux:*:*) + echo or1k-unknown-linux-"$LIBC" + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-"$LIBC" + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-"$LIBC" + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case $(grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2) in + PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; + PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; + *) echo hppa-unknown-linux-"$LIBC" ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-"$LIBC" + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-"$LIBC" + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-"$LIBC" + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-"$LIBC" + exit ;; + riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" + exit ;; + sh64*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + sh*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + tile*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + vax:Linux:*:*) + echo "$UNAME_MACHINE"-dec-linux-"$LIBC" + exit ;; + x86_64:Linux:*:*) + set_cc_for_build + LIBCABI=$LIBC + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_X32 >/dev/null + then + LIBCABI="$LIBC"x32 + fi + fi + echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI" + exit ;; + xtensa*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo "$UNAME_MACHINE"-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo "$UNAME_MACHINE"-unknown-stop + exit ;; + i*86:atheos:*:*) + echo "$UNAME_MACHINE"-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo "$UNAME_MACHINE"-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos"$UNAME_RELEASE" + exit ;; + i*86:*DOS:*:*) + echo "$UNAME_MACHINE"-pc-msdosdjgpp + exit ;; + i*86:*:4.*:*) + UNAME_REL=$(echo "$UNAME_RELEASE" | sed 's/\/MP$//') + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" + else + echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case $(/bin/uname -X | grep "^Machine") in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}" + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=$(sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=$( (/bin/uname -X|grep Release|sed -e 's/.*= //')) + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" + else + echo "$UNAME_MACHINE"-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configure will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos"$UNAME_RELEASE" + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos"$UNAME_RELEASE" + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos"$UNAME_RELEASE" + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos"$UNAME_RELEASE" + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv"$UNAME_RELEASE" + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=$( (uname -p) 2>/dev/null) + echo "$UNAME_MACHINE"-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo "$UNAME_MACHINE"-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux"$UNAME_RELEASE" + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if test -d /usr/nec; then + echo mips-nec-sysv"$UNAME_RELEASE" + else + echo mips-unknown-sysv"$UNAME_RELEASE" + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux"$UNAME_RELEASE" + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux"$UNAME_RELEASE" + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux"$UNAME_RELEASE" + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux"$UNAME_RELEASE" + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux"$UNAME_RELEASE" + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux"$UNAME_RELEASE" + exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux"$UNAME_RELEASE" + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody"$UNAME_RELEASE" + exit ;; + *:Rhapsody:*:*) + echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" + exit ;; + arm64:Darwin:*:*) + echo aarch64-apple-darwin"$UNAME_RELEASE" + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=$(uname -p) + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + if command -v xcode-select > /dev/null 2> /dev/null && \ + ! xcode-select --print-path > /dev/null 2> /dev/null ; then + # Avoid executing cc if there is no toolchain installed as + # cc will be a stub that puts up a graphical alert + # prompting the user to install developer tools. + CC_FOR_BUILD=no_compiler_found + else + set_cc_for_build + fi + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # uname -m returns i386 or x86_64 + UNAME_PROCESSOR=$UNAME_MACHINE + fi + echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=$(uname -p) + if test "$UNAME_PROCESSOR" = x86; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-*:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSR-*:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSV-*:NONSTOP_KERNEL:*:*) + echo nsv-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSX-*:NONSTOP_KERNEL:*:*) + echo nsx-tandem-nsk"$UNAME_RELEASE" + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + # shellcheck disable=SC2154 + if test "$cputype" = 386; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo "$UNAME_MACHINE"-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux"$UNAME_RELEASE" + exit ;; + *:DragonFly:*:*) + echo "$UNAME_MACHINE"-unknown-dragonfly"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')" + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=$( (uname -p) 2>/dev/null) + case "$UNAME_MACHINE" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo "$UNAME_MACHINE"-pc-skyos"$(echo "$UNAME_RELEASE" | sed -e 's/ .*$//')" + exit ;; + i*86:rdos:*:*) + echo "$UNAME_MACHINE"-pc-rdos + exit ;; + *:AROS:*:*) + echo "$UNAME_MACHINE"-unknown-aros + exit ;; + x86_64:VMkernel:*:*) + echo "$UNAME_MACHINE"-unknown-esx + exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit ;; + *:Unleashed:*:*) + echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE" + exit ;; +esac + +# No uname command or uname output not recognized. +set_cc_for_build +cat > "$dummy.c" < +#include +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#include +#if defined(_SIZE_T_) || defined(SIGLOST) +#include +#endif +#endif +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=$( (hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null); + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); +#endif + +#if defined (vax) +#if !defined (ultrix) +#include +#if defined (BSD) +#if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +#else +#if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#endif +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#else +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname un; + uname (&un); + printf ("vax-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname *un; + uname (&un); + printf ("mips-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("mips-dec-ultrix\n"); exit (0); +#endif +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=$($dummy) && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. +test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } + +echo "$0: unable to guess system type" >&2 + +case "$UNAME_MACHINE:$UNAME_SYSTEM" in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&2 <&2 </dev/null || echo unknown) +uname -r = $( (uname -r) 2>/dev/null || echo unknown) +uname -s = $( (uname -s) 2>/dev/null || echo unknown) +uname -v = $( (uname -v) 2>/dev/null || echo unknown) + +/usr/bin/uname -p = $( (/usr/bin/uname -p) 2>/dev/null) +/bin/uname -X = $( (/bin/uname -X) 2>/dev/null) + +hostinfo = $( (hostinfo) 2>/dev/null) +/bin/universe = $( (/bin/universe) 2>/dev/null) +/usr/bin/arch -k = $( (/usr/bin/arch -k) 2>/dev/null) +/bin/arch = $( (/bin/arch) 2>/dev/null) +/usr/bin/oslevel = $( (/usr/bin/oslevel) 2>/dev/null) +/usr/convex/getsysinfo = $( (/usr/convex/getsysinfo) 2>/dev/null) + +UNAME_MACHINE = "$UNAME_MACHINE" +UNAME_RELEASE = "$UNAME_RELEASE" +UNAME_SYSTEM = "$UNAME_SYSTEM" +UNAME_VERSION = "$UNAME_VERSION" +EOF +fi + +exit 1 + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/recipes/bambamc/config.sub b/recipes/bambamc/config.sub new file mode 100644 index 0000000000000..38f3d037a785f --- /dev/null +++ b/recipes/bambamc/config.sub @@ -0,0 +1,1885 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2021 Free Software Foundation, Inc. + +# shellcheck disable=SC2006,SC2268 # see below for rationale + +timestamp='2021-10-27' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches to . +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +# The "shellcheck disable" line above the timestamp inhibits complaints +# about features and limitations of the classic Bourne shell that were +# superseded or lifted in POSIX. However, this script identifies a wide +# variety of pre-POSIX systems that do not have POSIX shells at all, and +# even some reasonably current systems (Solaris 10 as case-in-point) still +# have a pre-POSIX /bin/sh. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS + +Canonicalize a configuration name. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2021 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo "$1" + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Split fields of configuration type +# shellcheck disable=SC2162 +saved_IFS=$IFS +IFS="-" read field1 field2 field3 field4 <&2 + exit 1 + ;; + *-*-*-*) + basic_machine=$field1-$field2 + basic_os=$field3-$field4 + ;; + *-*-*) + # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two + # parts + maybe_os=$field2-$field3 + case $maybe_os in + nto-qnx* | linux-* | uclinux-uclibc* \ + | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ + | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ + | storm-chaos* | os2-emx* | rtmk-nova*) + basic_machine=$field1 + basic_os=$maybe_os + ;; + android-linux) + basic_machine=$field1-unknown + basic_os=linux-android + ;; + *) + basic_machine=$field1-$field2 + basic_os=$field3 + ;; + esac + ;; + *-*) + # A lone config we happen to match not fitting any pattern + case $field1-$field2 in + decstation-3100) + basic_machine=mips-dec + basic_os= + ;; + *-*) + # Second component is usually, but not always the OS + case $field2 in + # Prevent following clause from handling this valid os + sun*os*) + basic_machine=$field1 + basic_os=$field2 + ;; + zephyr*) + basic_machine=$field1-unknown + basic_os=$field2 + ;; + # Manufacturers + dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ + | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ + | unicom* | ibm* | next | hp | isi* | apollo | altos* \ + | convergent* | ncr* | news | 32* | 3600* | 3100* \ + | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ + | ultra | tti* | harris | dolphin | highlevel | gould \ + | cbm | ns | masscomp | apple | axis | knuth | cray \ + | microblaze* | sim | cisco \ + | oki | wec | wrs | winbond) + basic_machine=$field1-$field2 + basic_os= + ;; + *) + basic_machine=$field1 + basic_os=$field2 + ;; + esac + ;; + esac + ;; + *) + # Convert single-component short-hands not valid as part of + # multi-component configurations. + case $field1 in + 386bsd) + basic_machine=i386-pc + basic_os=bsd + ;; + a29khif) + basic_machine=a29k-amd + basic_os=udi + ;; + adobe68k) + basic_machine=m68010-adobe + basic_os=scout + ;; + alliant) + basic_machine=fx80-alliant + basic_os= + ;; + altos | altos3068) + basic_machine=m68k-altos + basic_os= + ;; + am29k) + basic_machine=a29k-none + basic_os=bsd + ;; + amdahl) + basic_machine=580-amdahl + basic_os=sysv + ;; + amiga) + basic_machine=m68k-unknown + basic_os= + ;; + amigaos | amigados) + basic_machine=m68k-unknown + basic_os=amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + basic_os=sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + basic_os=sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + basic_os=bsd + ;; + aros) + basic_machine=i386-pc + basic_os=aros + ;; + aux) + basic_machine=m68k-apple + basic_os=aux + ;; + balance) + basic_machine=ns32k-sequent + basic_os=dynix + ;; + blackfin) + basic_machine=bfin-unknown + basic_os=linux + ;; + cegcc) + basic_machine=arm-unknown + basic_os=cegcc + ;; + convex-c1) + basic_machine=c1-convex + basic_os=bsd + ;; + convex-c2) + basic_machine=c2-convex + basic_os=bsd + ;; + convex-c32) + basic_machine=c32-convex + basic_os=bsd + ;; + convex-c34) + basic_machine=c34-convex + basic_os=bsd + ;; + convex-c38) + basic_machine=c38-convex + basic_os=bsd + ;; + cray) + basic_machine=j90-cray + basic_os=unicos + ;; + crds | unos) + basic_machine=m68k-crds + basic_os= + ;; + da30) + basic_machine=m68k-da30 + basic_os= + ;; + decstation | pmax | pmin | dec3100 | decstatn) + basic_machine=mips-dec + basic_os= + ;; + delta88) + basic_machine=m88k-motorola + basic_os=sysv3 + ;; + dicos) + basic_machine=i686-pc + basic_os=dicos + ;; + djgpp) + basic_machine=i586-pc + basic_os=msdosdjgpp + ;; + ebmon29k) + basic_machine=a29k-amd + basic_os=ebmon + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + basic_os=ose + ;; + gmicro) + basic_machine=tron-gmicro + basic_os=sysv + ;; + go32) + basic_machine=i386-pc + basic_os=go32 + ;; + h8300hms) + basic_machine=h8300-hitachi + basic_os=hms + ;; + h8300xray) + basic_machine=h8300-hitachi + basic_os=xray + ;; + h8500hms) + basic_machine=h8500-hitachi + basic_os=hms + ;; + harris) + basic_machine=m88k-harris + basic_os=sysv3 + ;; + hp300 | hp300hpux) + basic_machine=m68k-hp + basic_os=hpux + ;; + hp300bsd) + basic_machine=m68k-hp + basic_os=bsd + ;; + hppaosf) + basic_machine=hppa1.1-hp + basic_os=osf + ;; + hppro) + basic_machine=hppa1.1-hp + basic_os=proelf + ;; + i386mach) + basic_machine=i386-mach + basic_os=mach + ;; + isi68 | isi) + basic_machine=m68k-isi + basic_os=sysv + ;; + m68knommu) + basic_machine=m68k-unknown + basic_os=linux + ;; + magnum | m3230) + basic_machine=mips-mips + basic_os=sysv + ;; + merlin) + basic_machine=ns32k-utek + basic_os=sysv + ;; + mingw64) + basic_machine=x86_64-pc + basic_os=mingw64 + ;; + mingw32) + basic_machine=i686-pc + basic_os=mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + basic_os=mingw32ce + ;; + monitor) + basic_machine=m68k-rom68k + basic_os=coff + ;; + morphos) + basic_machine=powerpc-unknown + basic_os=morphos + ;; + moxiebox) + basic_machine=moxie-unknown + basic_os=moxiebox + ;; + msdos) + basic_machine=i386-pc + basic_os=msdos + ;; + msys) + basic_machine=i686-pc + basic_os=msys + ;; + mvs) + basic_machine=i370-ibm + basic_os=mvs + ;; + nacl) + basic_machine=le32-unknown + basic_os=nacl + ;; + ncr3000) + basic_machine=i486-ncr + basic_os=sysv4 + ;; + netbsd386) + basic_machine=i386-pc + basic_os=netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + basic_os=linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + basic_os=newsos + ;; + news1000) + basic_machine=m68030-sony + basic_os=newsos + ;; + necv70) + basic_machine=v70-nec + basic_os=sysv + ;; + nh3000) + basic_machine=m68k-harris + basic_os=cxux + ;; + nh[45]000) + basic_machine=m88k-harris + basic_os=cxux + ;; + nindy960) + basic_machine=i960-intel + basic_os=nindy + ;; + mon960) + basic_machine=i960-intel + basic_os=mon960 + ;; + nonstopux) + basic_machine=mips-compaq + basic_os=nonstopux + ;; + os400) + basic_machine=powerpc-ibm + basic_os=os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + basic_os=ose + ;; + os68k) + basic_machine=m68k-none + basic_os=os68k + ;; + paragon) + basic_machine=i860-intel + basic_os=osf + ;; + parisc) + basic_machine=hppa-unknown + basic_os=linux + ;; + psp) + basic_machine=mipsallegrexel-sony + basic_os=psp + ;; + pw32) + basic_machine=i586-unknown + basic_os=pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + basic_os=rdos + ;; + rdos32) + basic_machine=i386-pc + basic_os=rdos + ;; + rom68k) + basic_machine=m68k-rom68k + basic_os=coff + ;; + sa29200) + basic_machine=a29k-amd + basic_os=udi + ;; + sei) + basic_machine=mips-sei + basic_os=seiux + ;; + sequent) + basic_machine=i386-sequent + basic_os= + ;; + sps7) + basic_machine=m68k-bull + basic_os=sysv2 + ;; + st2000) + basic_machine=m68k-tandem + basic_os= + ;; + stratus) + basic_machine=i860-stratus + basic_os=sysv4 + ;; + sun2) + basic_machine=m68000-sun + basic_os= + ;; + sun2os3) + basic_machine=m68000-sun + basic_os=sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + basic_os=sunos4 + ;; + sun3) + basic_machine=m68k-sun + basic_os= + ;; + sun3os3) + basic_machine=m68k-sun + basic_os=sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + basic_os=sunos4 + ;; + sun4) + basic_machine=sparc-sun + basic_os= + ;; + sun4os3) + basic_machine=sparc-sun + basic_os=sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + basic_os=sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + basic_os=solaris2 + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + basic_os= + ;; + sv1) + basic_machine=sv1-cray + basic_os=unicos + ;; + symmetry) + basic_machine=i386-sequent + basic_os=dynix + ;; + t3e) + basic_machine=alphaev5-cray + basic_os=unicos + ;; + t90) + basic_machine=t90-cray + basic_os=unicos + ;; + toad1) + basic_machine=pdp10-xkl + basic_os=tops20 + ;; + tpf) + basic_machine=s390x-ibm + basic_os=tpf + ;; + udi29k) + basic_machine=a29k-amd + basic_os=udi + ;; + ultra3) + basic_machine=a29k-nyu + basic_os=sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + basic_os=none + ;; + vaxv) + basic_machine=vax-dec + basic_os=sysv + ;; + vms) + basic_machine=vax-dec + basic_os=vms + ;; + vsta) + basic_machine=i386-pc + basic_os=vsta + ;; + vxworks960) + basic_machine=i960-wrs + basic_os=vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + basic_os=vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + basic_os=vxworks + ;; + xbox) + basic_machine=i686-pc + basic_os=mingw32 + ;; + ymp) + basic_machine=ymp-cray + basic_os=unicos + ;; + *) + basic_machine=$1 + basic_os= + ;; + esac + ;; +esac + +# Decode 1-component or ad-hoc basic machines +case $basic_machine in + # Here we handle the default manufacturer of certain CPU types. It is in + # some cases the only manufacturer, in others, it is the most popular. + w89k) + cpu=hppa1.1 + vendor=winbond + ;; + op50n) + cpu=hppa1.1 + vendor=oki + ;; + op60c) + cpu=hppa1.1 + vendor=oki + ;; + ibm*) + cpu=i370 + vendor=ibm + ;; + orion105) + cpu=clipper + vendor=highlevel + ;; + mac | mpw | mac-mpw) + cpu=m68k + vendor=apple + ;; + pmac | pmac-mpw) + cpu=powerpc + vendor=apple + ;; + + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + cpu=m68000 + vendor=att + ;; + 3b*) + cpu=we32k + vendor=att + ;; + bluegene*) + cpu=powerpc + vendor=ibm + basic_os=cnk + ;; + decsystem10* | dec10*) + cpu=pdp10 + vendor=dec + basic_os=tops10 + ;; + decsystem20* | dec20*) + cpu=pdp10 + vendor=dec + basic_os=tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + cpu=m68k + vendor=motorola + ;; + dpx2*) + cpu=m68k + vendor=bull + basic_os=sysv3 + ;; + encore | umax | mmax) + cpu=ns32k + vendor=encore + ;; + elxsi) + cpu=elxsi + vendor=elxsi + basic_os=${basic_os:-bsd} + ;; + fx2800) + cpu=i860 + vendor=alliant + ;; + genix) + cpu=ns32k + vendor=ns + ;; + h3050r* | hiux*) + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + cpu=m68000 + vendor=hp + ;; + hp9k3[2-9][0-9]) + cpu=m68k + vendor=hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + cpu=hppa1.1 + vendor=hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + i*86v32) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv32 + ;; + i*86v4*) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv4 + ;; + i*86v) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv + ;; + i*86sol2) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=solaris2 + ;; + j90 | j90-cray) + cpu=j90 + vendor=cray + basic_os=${basic_os:-unicos} + ;; + iris | iris4d) + cpu=mips + vendor=sgi + case $basic_os in + irix*) + ;; + *) + basic_os=irix4 + ;; + esac + ;; + miniframe) + cpu=m68000 + vendor=convergent + ;; + *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) + cpu=m68k + vendor=atari + basic_os=mint + ;; + news-3600 | risc-news) + cpu=mips + vendor=sony + basic_os=newsos + ;; + next | m*-next) + cpu=m68k + vendor=next + case $basic_os in + openstep*) + ;; + nextstep*) + ;; + ns2*) + basic_os=nextstep2 + ;; + *) + basic_os=nextstep3 + ;; + esac + ;; + np1) + cpu=np1 + vendor=gould + ;; + op50n-* | op60c-*) + cpu=hppa1.1 + vendor=oki + basic_os=proelf + ;; + pa-hitachi) + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 + ;; + pbd) + cpu=sparc + vendor=tti + ;; + pbb) + cpu=m68k + vendor=tti + ;; + pc532) + cpu=ns32k + vendor=pc532 + ;; + pn) + cpu=pn + vendor=gould + ;; + power) + cpu=power + vendor=ibm + ;; + ps2) + cpu=i386 + vendor=ibm + ;; + rm[46]00) + cpu=mips + vendor=siemens + ;; + rtpc | rtpc-*) + cpu=romp + vendor=ibm + ;; + sde) + cpu=mipsisa32 + vendor=sde + basic_os=${basic_os:-elf} + ;; + simso-wrs) + cpu=sparclite + vendor=wrs + basic_os=vxworks + ;; + tower | tower-32) + cpu=m68k + vendor=ncr + ;; + vpp*|vx|vx-*) + cpu=f301 + vendor=fujitsu + ;; + w65) + cpu=w65 + vendor=wdc + ;; + w89k-*) + cpu=hppa1.1 + vendor=winbond + basic_os=proelf + ;; + none) + cpu=none + vendor=none + ;; + leon|leon[3-9]) + cpu=sparc + vendor=$basic_machine + ;; + leon-*|leon[3-9]-*) + cpu=sparc + vendor=`echo "$basic_machine" | sed 's/-.*//'` + ;; + + *-*) + # shellcheck disable=SC2162 + saved_IFS=$IFS + IFS="-" read cpu vendor <&2 + exit 1 + ;; + esac + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $vendor in + digital*) + vendor=dec + ;; + commodore*) + vendor=cbm + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if test x$basic_os != x +then + +# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just +# set os. +case $basic_os in + gnu/linux*) + kernel=linux + os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` + ;; + os2-emx) + kernel=os2 + os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` + ;; + nto-qnx*) + kernel=nto + os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` + ;; + *-*) + # shellcheck disable=SC2162 + saved_IFS=$IFS + IFS="-" read kernel os <&2 + exit 1 + ;; +esac + +# As a final step for OS-related things, validate the OS-kernel combination +# (given a valid OS), if there is a kernel. +case $kernel-$os in + linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ + | linux-musl* | linux-relibc* | linux-uclibc* ) + ;; + uclinux-uclibc* ) + ;; + -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) + # These are just libc implementations, not actual OSes, and thus + # require a kernel. + echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 + exit 1 + ;; + kfreebsd*-gnu* | kopensolaris*-gnu*) + ;; + vxworks-simlinux | vxworks-simwindows | vxworks-spe) + ;; + nto-qnx*) + ;; + os2-emx) + ;; + *-eabi* | *-gnueabi*) + ;; + -*) + # Blank kernel with real OS is always fine. + ;; + *-*) + echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 + exit 1 + ;; +esac + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +case $vendor in + unknown) + case $cpu-$os in + *-riscix*) + vendor=acorn + ;; + *-sunos*) + vendor=sun + ;; + *-cnk* | *-aix*) + vendor=ibm + ;; + *-beos*) + vendor=be + ;; + *-hpux*) + vendor=hp + ;; + *-mpeix*) + vendor=hp + ;; + *-hiux*) + vendor=hitachi + ;; + *-unos*) + vendor=crds + ;; + *-dgux*) + vendor=dg + ;; + *-luna*) + vendor=omron + ;; + *-genix*) + vendor=ns + ;; + *-clix*) + vendor=intergraph + ;; + *-mvs* | *-opened*) + vendor=ibm + ;; + *-os400*) + vendor=ibm + ;; + s390-* | s390x-*) + vendor=ibm + ;; + *-ptx*) + vendor=sequent + ;; + *-tpf*) + vendor=ibm + ;; + *-vxsim* | *-vxworks* | *-windiss*) + vendor=wrs + ;; + *-aux*) + vendor=apple + ;; + *-hms*) + vendor=hitachi + ;; + *-mpw* | *-macos*) + vendor=apple + ;; + *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) + vendor=atari + ;; + *-vos*) + vendor=stratus + ;; + esac + ;; +esac + +echo "$cpu-$vendor-${kernel:+$kernel-}$os" +exit + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/recipes/bambamc/meta.yaml b/recipes/bambamc/meta.yaml index 333d2989bd85e..113f9b83fe42e 100644 --- a/recipes/bambamc/meta.yaml +++ b/recipes/bambamc/meta.yaml @@ -7,7 +7,9 @@ source: md5: 4de1f030fab1de54387f68e4fbd2cd35 build: - number: 7 + number: 8 + run_exports: + - {{ pin_subpackage('bambamc', max_pin="x.x.x") }} requirements: build: @@ -31,3 +33,8 @@ about: license: GPLv3 license_file: COPYING summary: lightweight C implementation of name collating BAM file input and BAM file output + +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 diff --git a/recipes/bbmap/meta.yaml b/recipes/bbmap/meta.yaml index 8a860966e3e3a..a69855905a211 100644 --- a/recipes/bbmap/meta.yaml +++ b/recipes/bbmap/meta.yaml @@ -1,6 +1,6 @@ {% set name = "BBMap" %} -{% set version = "39.08" %} -{% set sha256 = "7250e170aabc6702fb5ea2724e9f9af03bb7085bef8b006a92309e44c3f32f22" %} +{% set version = "39.10" %} +{% set sha256 = "996aff05765ba5e64547f8a34c56da396ce7b18db96ffe7f1076f2d2f49c6148" %} package: name: {{ name|lower }} diff --git a/recipes/biobb_structure_checking/meta.yaml b/recipes/biobb_structure_checking/meta.yaml index 56a00c5124d72..5e13c55af3867 100644 --- a/recipes/biobb_structure_checking/meta.yaml +++ b/recipes/biobb_structure_checking/meta.yaml @@ -1,5 +1,5 @@ {% set name = "biobb_structure_checking" %} -{% set version = "3.13.4" %} +{% set version = "3.13.5" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: d819819d13c7ad219411b70b043555dcd65d5535f696a1121db562646931f445 + sha256: 4ba074da556a7aecac215f2020a04274c05f155413ed467177b9c9f31a53d4d0 build: number: 0 diff --git a/recipes/bioconda-utils/meta.yaml b/recipes/bioconda-utils/meta.yaml index 49d272da820fb..c8a92fc0b1c12 100644 --- a/recipes/bioconda-utils/meta.yaml +++ b/recipes/bioconda-utils/meta.yaml @@ -1,6 +1,6 @@ {% set name = "bioconda-utils" %} -{% set version = "3.3.1" %} -{% set sha256 = "db6b99456a334b958ba61fcfc6e717e5f22848342f99fecb1f6f2b0113165054" %} +{% set version = "3.3.2" %} +{% set sha256 = "6c6dcac689a2fb0f8142546aa9021bfd620fe484e724e4844a2d2e55c337747c" %} package: name: {{ name }} @@ -21,7 +21,7 @@ build: requirements: host: - - python + - python <3.12 - pip run: - conda-forge-pinning 2024.06.01.05.54.15 diff --git a/recipes/blast-legacy/2.2.26/fix-osx-build.patch b/recipes/blast-legacy/2.2.26/fix-osx-build.patch index a297ebd103209..0edf78005c26c 100644 --- a/recipes/blast-legacy/2.2.26/fix-osx-build.patch +++ b/recipes/blast-legacy/2.2.26/fix-osx-build.patch @@ -44,12 +44,12 @@ +++ ncbi/corelib/ncbimisc.c 2021-05-21 18:20:54.000000000 -0700 @@ -1266,7 +1266,7 @@ if (len < 1) return NULL; - + rsult = (Nlm_CharPtr) MemNew (len + 3); - if (rsult == NULL) return; + if (rsult == NULL) return NULL; tmp = rsult; - + for (i = 0; /* local [i] != NULL */ i < numitems; i++) { --- ncbi/make/makedis.csh.orig 2021-05-25 19:09:16.000000000 -0700 +++ ncbi/make/makedis.csh 2021-05-25 19:32:11.000000000 -0700 @@ -75,18 +75,92 @@ @@ -300,7 +299,7 @@ echo platform is $platform uname -a - + -set NCBI_DOT_MK = ncbi/platform/${platform}.ncbi.mk +set NCBI_DOT_MK = platform/${platform}.ncbi.mk - + if (! -r "$NCBI_DOT_MK") then goto BADPLATFORM @@ -323,7 +322,7 @@ echo "Enabling assert()." endif - + -cd ncbi/build +cd build ln -s ../make/*.unx . ln -s ../make/ln-if-absent . mv makeall.unx makefile +--- ncbi/corelib/ncbimain.c.orig 2002-07-09 09:20:17 ++++ ncbi/corelib/ncbimain.c 2024-09-18 14:28:01 +@@ -75,7 +75,7 @@ + * setups argc and argv + * + *****************************************************************************/ +-#ifdef OS_MSWIN ++#if defined OS_MSWIN || defined OS_UNIX_DARWIN + int + #endif + main(int argc, char *argv[]) +--- ncbi/tools/kappa.c.orig 2012-04-30 06:45:01 ++++ ncbi/tools/kappa.c 2024-09-18 14:58:32 +@@ -2197,7 +2197,7 @@ + /** + * Callbacks used by Blast_RedoOneMatch and + * Blast_RedoOneMatchSmithWaterman */ +-static const Blast_RedoAlignCallbacks ++static const Blast_RedoAlignCallbacks * + redo_align_callbacks = { + Kappa_CalcLambda, + Kappa_SequenceGetRange, +--- ncbi/tools/ncbisort.c.orig 2006-05-10 14:47:17 ++++ ncbi/tools/ncbisort.c 2024-09-18 14:40:01 +@@ -689,7 +689,7 @@ + of the fraction. Strings not of this form are considered to be zero. */ + static Int4 SORTFracCompare(register UcharPtr a, register UcharPtr b) + { +- register tmpa = UCHAR(*a), tmpb = UCHAR(*b); ++ register int tmpa = UCHAR(*a), tmpb = UCHAR(*b); + + if (tmpa == '.' && tmpb == '.') { + do +--- ncbi/tools/pattern1.c.orig 2006-08-04 15:11:17 ++++ ncbi/tools/pattern1.c 2024-09-18 14:42:18 +@@ -741,7 +741,7 @@ + + /*Do a word-by-word bit-wise or of a and b and put the result in + result; return 1 if there are any non-zero words*/ +-static and(Int4 *result, Int4 *a, Int4 *b, patternSearchItems *patternSearch) ++static Int4 and(Int4 *result, Int4 *a, Int4 *b, patternSearchItems *patternSearch) + { + Int4 i; /*index over words*/ + Int4 returnValue = 0; +--- ncbi/api/asn2ff4.c.orig 2001-10-02 10:13:15 ++++ ncbi/api/asn2ff4.c 2024-09-18 14:36:13 +@@ -1344,7 +1344,7 @@ + * Compare two ImpFeats by name and location + * returns 1 for matching features otherwise returns 0 + ******************************************************************************/ +-static CmpImpFeat (ImpFeatPtr f1, ImpFeatPtr f2) ++static int CmpImpFeat (ImpFeatPtr f1, ImpFeatPtr f2) + { + if (f1 == NULL && f2) + return 0; +--- ncbi/api/asn2ff2.c.orig 2024-09-18 22:02:18 ++++ ncbi/api/asn2ff2.c 2024-09-18 22:36:29 +@@ -220,6 +220,7 @@ + #include + #include + #include ++#include + + + NLM_EXTERN Int2 GetGenDate PROTO ((Asn2ffJobPtr ajp, GBEntryPtr gbp, CharPtr buffer)); +@@ -1355,7 +1356,7 @@ + return newstring; + } + +-static ChoicePID(SeqIdPtr sid) ++static bool ChoicePID(SeqIdPtr sid) + { + + DbtagPtr db; diff --git a/recipes/blast-legacy/2.2.26/meta.yaml b/recipes/blast-legacy/2.2.26/meta.yaml index 1138152050e28..be2f140d0a9a9 100644 --- a/recipes/blast-legacy/2.2.26/meta.yaml +++ b/recipes/blast-legacy/2.2.26/meta.yaml @@ -10,7 +10,9 @@ source: patches: - fix-osx-build.patch # [osx] build: - number: 3 + number: 4 + run_exports: + - {{ pin_subpackage('blast-legacy', max_pin='x.x') }} test: commands: diff --git a/recipes/blaze2/meta.yaml b/recipes/blaze2/meta.yaml index 329bd464af823..098c5e8149ec3 100644 --- a/recipes/blaze2/meta.yaml +++ b/recipes/blaze2/meta.yaml @@ -1,5 +1,5 @@ {% set name = "BLAZE2" %} -{% set version = "2.4.0" %} +{% set version = "2.5.0" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://github.com/shimlab/BLAZE/archive/refs/tags/v{{ version }}.tar.gz - sha256: b4487873d1f4ae389feed54aa7d862ff3addc458c387d6fd0e3c9550c0a2037d + sha256: f47175997742562add1deb9524e468b6709e40c92f74165a1a0fe1897b2919fc build: number: 0 diff --git a/recipes/breseq/build.sh b/recipes/breseq/build.sh index f1db83897d20e..86eed127a90af 100644 --- a/recipes/breseq/build.sh +++ b/recipes/breseq/build.sh @@ -1,5 +1,16 @@ #!/bin/bash + set -eux -./configure --prefix=$PREFIX -make -j ${CPU_COUNT} + +export INCLUDES="-I${PREFIX}/include" +export LIBPATH="-L${PREFIX}/lib" +export LDFLAGS="${LDFLAGS} -L${PREFIX}/lib" +export M4="${BUILD_PREFIX}/bin/m4" + +autoreconf -if +./configure --prefix="${PREFIX}" \ + CXX="${CXX}" \ + CXXFLAGS="${CXXFLAGS} -O3 -I${PREFIX}/include" \ + LDFLAGS="${LDFLAGS}" +make -j "${CPU_COUNT}" make install diff --git a/recipes/breseq/meta.yaml b/recipes/breseq/meta.yaml index 16e27485c1fd7..bc10a5dbbd9ac 100644 --- a/recipes/breseq/meta.yaml +++ b/recipes/breseq/meta.yaml @@ -9,19 +9,20 @@ source: sha256: "39b35e246ecd2b497c82a99765ca4d78a0400bc4a7518b7506b140229ccc0247" build: - number: 1 + number: 2 run_exports: - {{ pin_subpackage('breseq', max_pin="x.x") }} requirements: build: - make - - {{ compiler("c") }} - {{ compiler("cxx") }} + - autoconf + - automake + - libtool host: - zlib run: - - zlib - r-base - r-cairo - bowtie2 >=2.0.0,!=2.0.3,!=2.0.4,!=2.3.1 @@ -36,11 +37,17 @@ about: license: GPL-2.0-or-later license_family: GPL license_file: COPYING - summary: A computational pipeline for finding mutations relative to a reference sequence in short-read DNA re-sequencing - data. + summary: "A computational pipeline for finding mutations relative to a reference sequence in short-read DNA re-sequencing + data." doc_url: "https://barricklab.org/twiki/pub/Lab/ToolsBacterialGenomeResequencing/documentation/" + dev_url: https://github.com/barricklab/breseq extra: additional-platforms: - linux-aarch64 - osx-arm64 + identifiers: + - biotools:breseq + - biotools:breseq_bam2aln + - biotools:breseq_bam2cov + - usegalaxy-eu:breseq diff --git a/recipes/busco_phylogenomics/meta.yaml b/recipes/busco_phylogenomics/meta.yaml new file mode 100644 index 0000000000000..ed1764337ae39 --- /dev/null +++ b/recipes/busco_phylogenomics/meta.yaml @@ -0,0 +1,46 @@ +{% set name = "busco_phylogenomics" %} +{% set version = "20240919" %} + +package: + name: {{ name|lower }} + version: {{ version }} + +source: + url: https://github.com/jamiemcg/{{ name }}/archive/refs/tags/{{ version }}.tar.gz + sha256: 989cfb137cc06e0014daa4475e9b6bd070bd3ea77baed8fd6f26562ee84b9f5b + +build: + number: 0 + noarch: python + script: bash conda_build_package.sh + entry_points: + - BUSCO_phylogenomics = BUSCO_phylogenomics.BUSCO_phylogenomics:main + - count_buscos = BUSCO_phylogenomics.count_buscos:main + run_exports: + - {{ pin_subpackage('busco_phylogenomics', max_pin=None) }} + +requirements: + build: + - python >=3.8 + run: + - python >=3.8 + - biopython + - muscle >=5.1 + - iqtree + - fasttree + - trimal +test: + commands: + - BUSCO_phylogenomics.py -h + - count_buscos.py -h + +about: + home: https://github.com/jamiemcg/BUSCO_phylogenomics + license: MIT + license_file: LICENSE + license_family: MIT + summary: 'Utility script to construct species phylogenies using BUSCO proteins.' + +extra: + maintainers: + - jamiemcg diff --git a/recipes/bwa-aln-interactive/meta.yaml b/recipes/bwa-aln-interactive/meta.yaml index ac90752afdf90..14d6175ede952 100644 --- a/recipes/bwa-aln-interactive/meta.yaml +++ b/recipes/bwa-aln-interactive/meta.yaml @@ -1,5 +1,5 @@ {% set version = "0.7.18" %} -{% set sha256 = "66645908adeeaa288177fd87f1878f83d6547dd37cdf999aff5b5ce9a9437c81" %} +{% set sha256 = "9a1baef6d08da234a96466a1023dae53154fe0b2358f9ff7ad5307e63f4e89ba" %} package: @@ -7,11 +7,11 @@ package: version: {{ version }} source: - url: https://github.com/fulcrumgenomics/bwa-aln-interactive/archive/refs/tags/v{{ version }}.tar.gz + url: https://github.com/fulcrumgenomics/bwa-aln-interactive/archive/refs/tags/v0.7.18-r1243-1.tar.gz sha256: {{ sha256 }} build: - number: 0 + number: 1 run_exports: - {{ pin_subpackage("bwa-aln-interactive", max_pin="x.x") }} @@ -24,7 +24,7 @@ requirements: test: commands: - - bwa-aln-interactive 2>&1 | grep "index sequences in the" + - bwa-aln-interactive 2>&1 | grep "This fork of bwa supports interactive \`bwa aln\`" about: home: https://github.com/fulcrumgenomics/bwa-aln-interactive diff --git a/recipes/catfasta2phyml/meta.yaml b/recipes/catfasta2phyml/meta.yaml index 0127661fa44c0..44d06ac51bcaf 100644 --- a/recipes/catfasta2phyml/meta.yaml +++ b/recipes/catfasta2phyml/meta.yaml @@ -1,14 +1,16 @@ package: name: catfasta2phyml - version: "1.2.0" + version: "1.2.1" source: - url: https://github.com/nylander/catfasta2phyml/archive/refs/tags/v.1.2.0.tar.gz - sha256: f4ea5aef5aa21d15d84436262f06b79a004b7017ab7a433019fe903aec995fdb + url: https://github.com/nylander/catfasta2phyml/archive/refs/tags/v1.2.1.tar.gz + sha256: 2647985192b05df49e10bfce64d6843fe7916b0395199dfd2ac4f80910c5a91f build: number: 0 noarch: generic + run_exports: + - {{ pin_subpackage('catfasta2phyml', max_pin="x") }} requirements: run: diff --git a/recipes/checkm-genome/meta.yaml b/recipes/checkm-genome/meta.yaml index fd74a342a3ec5..1a7aeba1e7066 100644 --- a/recipes/checkm-genome/meta.yaml +++ b/recipes/checkm-genome/meta.yaml @@ -11,7 +11,7 @@ source: sha256: {{ sha256 }} build: - number: 0 + number: 1 noarch: python script: "{{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir -vvv" run_exports: @@ -22,7 +22,7 @@ requirements: - python >=3.6 - pip run: - - python >=3.6 + - python >=3.6, <3.12 - numpy >=1.21.3 - scipy >=1.7.3 - matplotlib-base >=3.5.1 diff --git a/recipes/civicpy/meta.yaml b/recipes/civicpy/meta.yaml index d4efb9149751d..77239de90f9bc 100644 --- a/recipes/civicpy/meta.yaml +++ b/recipes/civicpy/meta.yaml @@ -1,5 +1,5 @@ {% set name = "civicpy" %} -{% set version = "3.1.0" %} +{% set version = "3.1.2" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: 1e9d5a36dff490c5a806cfc152c5f998ba13a54e409cb72eff392dc2ada14537 + sha256: c702723367fec4c7cefbac86def0ef64749f12bda120300e43e6540387ce1a7b build: number: 0 diff --git a/recipes/clinker-py/meta.yaml b/recipes/clinker-py/meta.yaml index 20abe45bf5912..88ceab35216f8 100644 --- a/recipes/clinker-py/meta.yaml +++ b/recipes/clinker-py/meta.yaml @@ -1,5 +1,5 @@ {% set name = "clinker" %} -{% set version = "0.0.29" %} +{% set version = "0.0.30" %} package: name: {{ name }}-py @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz - sha256: cca735b27da29fc676517d5578c771d05dd2be4f00ea25221747088185bd860d + sha256: 42901ab26945d436ff462528579f7354abe2bb1df7910d6bf16669a57fcfb1ff build: number: 0 diff --git a/recipes/clusty/meta.yaml b/recipes/clusty/meta.yaml index 07c17e3c10851..280747e80a52c 100644 --- a/recipes/clusty/meta.yaml +++ b/recipes/clusty/meta.yaml @@ -1,11 +1,11 @@ -{% set version = "1.0.0" %} +{% set version = "1.1.1" %} package: name: clusty version: {{ version }} build: - number: 1 + number: 0 run_exports: - {{ pin_subpackage('clusty', max_pin='x.x.x') }} diff --git a/recipes/consensify/build.sh b/recipes/consensify/build.sh new file mode 100755 index 0000000000000..1bded391fb320 --- /dev/null +++ b/recipes/consensify/build.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +set -xe + +## compile +${CXX} -c consensify_c.cpp -I./ ${CXXFLAGS} + +## link +${CXX} consensify_c.o -o consensify_c -lz ${LDFLAGS} + +## install +mkdir -p $PREFIX/bin +cp consensify_c ${PREFIX}/bin/consensify_c diff --git a/recipes/consensify/meta.yaml b/recipes/consensify/meta.yaml new file mode 100644 index 0000000000000..be77f31b16102 --- /dev/null +++ b/recipes/consensify/meta.yaml @@ -0,0 +1,41 @@ +{% set version = "2.4.0" %} + +package: + name: consensify + version: {{ version }} + +source: + url: https://github.com/jlapaijmans/Consensify/archive/refs/tags/{{ version }}.tar.gz + sha256: 2b88cda2c6ad44b6fd749d86485d3f16418b189b9c8ff4d20dd19640792dac1e + +build: + number: 1 + run_exports: + - {{ pin_subpackage('consensify', max_pin="x") }} + +requirements: + build: + - {{ compiler('cxx') }} + host: + - zlib + run: + - zlib + +test: + commands: + - consensify_c -h + +about: + home: https://github.com/jlapaijmans/Consensify + license: GPL-3.0-or-later + license_family: GPL + license_file: LICENCE.txt + dev_url: https://github.com/jlapaijmans/Consensify + doc_url: https://github.com/jlapaijmans/Consensify + summary: A method for generating a consensus pseudohaploid genome sequence + about: Consensify is a method for generating a consensus pseudohaploid genome sequence with greatly reduced error rates compared to standard pseudohaploidisation. The method is described in full and tested in the associated publication (Barlow et al. (2020), Genes 11:50, doi 10.3390/genes11010050). + +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 diff --git a/recipes/cpstools/meta.yaml b/recipes/cpstools/meta.yaml index f8dbea9224cbb..2eab62cea01ae 100644 --- a/recipes/cpstools/meta.yaml +++ b/recipes/cpstools/meta.yaml @@ -1,6 +1,6 @@ {% set name = "cpstools" %} -{% set version = "1.0.13" %} -{% set sha256 = "767f5739416f290726ed459bf82969b453ffd2c04aa9171e5dc7c842a8d6b81e" %} +{% set version = "2.0.2" %} +{% set sha256 = "7be13651918b295af3f11288208b41b7c511ccb0c8b65b09150c0bf687f1e0bc" %} package: name: {{ name|lower }} @@ -21,13 +21,14 @@ build: requirements: host: - - python >=3.10 + - python >=3.9 - poetry-core - pip run: - - python >=3.10.0 + - python >=3.9 - biopython >=1.84.0 - numpy >=1.26.4 + - tqdm >=4.66.5 test: imports: diff --git a/recipes/cutadapt/meta.yaml b/recipes/cutadapt/meta.yaml index b68dacf543faa..e315f6276d73b 100644 --- a/recipes/cutadapt/meta.yaml +++ b/recipes/cutadapt/meta.yaml @@ -9,7 +9,7 @@ source: sha256: da3b45775b07334d2e2580a7b154d19ea7e872f0da813bb1ac2a4da712bfc223 build: - number: 1 + number: 2 script: "{{ PYTHON }} -m pip install . --no-deps --no-build-isolation -vvv" skip: True # [py < 38] run_exports: @@ -26,7 +26,7 @@ requirements: run: - python - xopen >=1.6.0 - - dnaio >=1.2.0 + - dnaio >=1.2.2 test: imports: diff --git a/recipes/d4tools/meta.yaml b/recipes/d4tools/meta.yaml index 54a4335bead4b..185f9b3671124 100644 --- a/recipes/d4tools/meta.yaml +++ b/recipes/d4tools/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "0.3.10" %} +{% set version = "0.3.11" %} package: name: d4tools @@ -6,10 +6,10 @@ package: source: url: https://github.com/38/d4-format/archive/refs/tags/v{{ version }}.tar.gz - sha256: d3fbe8f063ed1f89148ae0333abc1d5b955f499fc429254f83af464012678d33 + sha256: 376e61c93cfe2efc15f5e74b75214e065e278146555e67b8769818bf49594726 build: - number: 1 + number: 0 run_exports: - {{ pin_subpackage('d4tools', max_pin="x.x") }} diff --git a/recipes/dajin2/meta.yaml b/recipes/dajin2/meta.yaml index 6428524d57fb4..3567fa738173f 100644 --- a/recipes/dajin2/meta.yaml +++ b/recipes/dajin2/meta.yaml @@ -1,5 +1,5 @@ {% set name = "DAJIN2" %} -{% set version = "0.5.4" %} +{% set version = "0.5.5" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/dajin2-{{ version }}.tar.gz - sha256: c90d026e219c93bd7211d00fabd4e8e5ee0c145e9fc5f0b4ddbd6a72281abe35 + sha256: c0260f99ad631b505b0f0fa010ce7b3ef2f081bcb371ed452bd886dd34592ac1 build: entry_points: diff --git a/recipes/dbghaplo/build.sh b/recipes/dbghaplo/build.sh new file mode 100644 index 0000000000000..17d5db214e9a0 --- /dev/null +++ b/recipes/dbghaplo/build.sh @@ -0,0 +1,10 @@ +#!/bin/bash -euo + +# Add workaround for SSH-based Git connections from Rust/cargo. See https://github.com/rust-lang/cargo/issues/2078 for details. +# We set CARGO_HOME because we don't pass on HOME to conda-build, thus rendering the default "${HOME}/.cargo" defunct. +export CARGO_NET_GIT_FETCH_WITH_CLI=true CARGO_HOME="$(pwd)/.cargo" + +# build statically linked binary with Rust +cargo-bundle-licenses --format yaml --output THIRDPARTY.yml +RUST_BACKTRACE=1 cargo install --verbose --locked --no-track --root $PREFIX --path . +cp scripts/* $PREFIX/bin diff --git a/recipes/dbghaplo/meta.yaml b/recipes/dbghaplo/meta.yaml new file mode 100644 index 0000000000000..f14ef02373001 --- /dev/null +++ b/recipes/dbghaplo/meta.yaml @@ -0,0 +1,47 @@ +{% set version="0.0.2" %} + +package: + name: dbghaplo + version: {{ version }} + +source: + url: https://github.com/bluenote-1577/dbghaplo/archive/v{{ version }}.tar.gz + sha256: e7e2741afb0c7f12718ec969815d3c8f18ce7ba66517e21c6fcfb3fe4262780b + +build: + number: 0 + run_exports: + - {{ pin_subpackage('dbghaplo', max_pin="x.x") }} + +requirements: + build: + - {{ compiler("cxx") }} + - {{ compiler('rust') }} + - cargo-bundle-licenses + - make + - cmake >=3.12 + run: + - python + - samtools + - minimap2 + - lofreq >=2.1.5 + - tabix + - pysam >=0.16 + +test: + commands: + - dbghaplo -h + - run_dbghaplo_pipeline -h + - haplotag_bam -h + +about: + home: https://github.com/bluenote-1577/dbghaplo + license: MIT + license_file: + - LICENSE + - THIRDPARTY.yml + summary: Haplotyping small sequences from heterogeneous long-read sequencing samples with a SNP-encoded positional de Bruijn Graph. + +extra: + recipe-maintainers: + - bluenote-1577 diff --git a/recipes/delly/meta.yaml b/recipes/delly/meta.yaml index 7f4a5eb376046..7928647fac015 100644 --- a/recipes/delly/meta.yaml +++ b/recipes/delly/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "1.2.8" %} -{% set sha256 = "f7f67b6c01d3840376a4da89b9157cacea77eda2b078a4aa6502403b3fd8dffd" %} +{% set version = "1.3.1" %} +{% set sha256 = "914a29c301556746031586c5880e70ad7f31bd7899cc4e47b23ee4d5426761ae" %} package: name: delly diff --git a/recipes/derna/build.sh b/recipes/derna/build.sh index a56e54179f0d9..7898ddc35f18f 100644 --- a/recipes/derna/build.sh +++ b/recipes/derna/build.sh @@ -1,4 +1,6 @@ -#! /bin/sh +#!/bin/bash + +set -xe export C_INCLUDE_PATH=${PREFIX}/include export LIBRARY_PATH=${PREFIX}/lib @@ -6,6 +8,6 @@ export LIBRARY_PATH=${PREFIX}/lib mkdir build cd build cmake .. -make +make -j ${CPU_COUNT} mkdir -p $PREFIX/bin cp derna $PREFIX/bin diff --git a/recipes/derna/meta.yaml b/recipes/derna/meta.yaml index 1ea6fe69b1979..ffafda5a12a70 100644 --- a/recipes/derna/meta.yaml +++ b/recipes/derna/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "1.0.2" %} +{% set version = "1.0.3" %} package: name: derna @@ -6,10 +6,12 @@ package: source: url: https://github.com/elkebir-group/derna/archive/refs/tags/v{{ version }}.tar.gz - sha256: 29e6bd6588a3e6d4d48fc2d08ff69a5eddeccbe281c3f802d2052c4c1945230a + sha256: d7e2fdbe733d03f9e617ea325a43283c0e4e298780253cf2e7da7ad07d3aafc5 build: number: 1 + run_exports: + - {{ pin_subpackage('derna', max_pin="x") }} requirements: build: @@ -17,9 +19,6 @@ requirements: - {{ compiler('cxx') }} - make - cmake - host: - run: - test: commands: @@ -28,5 +27,12 @@ test: about: home: https://github.com/elkebir-group/derna license: BSD-3-Clause + license_family: BSD license_file: LICENSE - summary: "RNA sequence design for a target protein sequence" + summary: "RNA sequence design for a target protein sequence." + dev_url: https://github.com/elkebir-group/derna + +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 diff --git a/recipes/dfast_qc/build.sh b/recipes/dfast_qc/build.sh index 1a99a07fb5e4b..73a9d9b560a5d 100755 --- a/recipes/dfast_qc/build.sh +++ b/recipes/dfast_qc/build.sh @@ -19,7 +19,7 @@ cp -Rv ./* ${APPROOT}/ # cd ${PREFIX}/bin ln -s ${APPROOT}/dfast_qc ${PREFIX}/bin/ ln -s ${APPROOT}/dqc_admin_tools.py ${PREFIX}/bin/ -ln -s ${APPROOT}/initial_setup.sh ${PREFIX}/bin/dqc_initial_setup.sh +ln -s ${APPROOT}/dqc_initial_setup.sh ${PREFIX}/bin/ ln -s ${APPROOT}/dqc_ref_manager.py ${PREFIX}/bin/ ln -s ${APPROOT}/dqc_multi ${PREFIX}/bin/ diff --git a/recipes/dfast_qc/meta.yaml b/recipes/dfast_qc/meta.yaml index e9867cd503264..37f9b57bd3975 100644 --- a/recipes/dfast_qc/meta.yaml +++ b/recipes/dfast_qc/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "1.0.4" %} +{% set version = "1.0.5" %} package: name: dfast_qc @@ -12,7 +12,7 @@ build: source: url: https://github.com/nigyta/dfast_qc/archive/{{ version }}.tar.gz - sha256: 3e501924c6f75d95a9528b026f2e40eec54147b5190dcf5d549f38fb57ba92ab + sha256: 7a4bb1139268c5bcfcc0a94a653cb0b7e8cbb9c0e9fb89dbde8ab6fa2b84162f requirements: diff --git a/recipes/dicey/build.sh b/recipes/dicey/build.sh index 54987ee3ba11a..38a203670614e 100644 --- a/recipes/dicey/build.sh +++ b/recipes/dicey/build.sh @@ -1,5 +1,3 @@ -#!/bin/sh +#!/bin/bash -make all CXX=$CXX CXXFLAGS="-D__STDC_FORMAT_MACROS -I${SRC_DIR}/src/sdslLite/include -L${SRC_DIR}/src/sdslLite/lib -I${PREFIX}/include -L${PREFIX}/lib -Isrc/jlib/ -std=c++14" -mkdir -p $PREFIX/bin -cp src/dicey $PREFIX/bin +CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS -I${SRC_DIR}/src/sdslLite/include -L${SRC_DIR}/src/sdslLite/lib -I${PREFIX}/include -L${PREFIX}/lib -Isrc/jlib/ -std=c++17" make -j${CPU_COUNT} CXX="${CXX}" prefix="${PREFIX}" install diff --git a/recipes/dicey/build_failure.linux-64.yaml b/recipes/dicey/build_failure.linux-64.yaml deleted file mode 100644 index 7a7c7fc2685d4..0000000000000 --- a/recipes/dicey/build_failure.linux-64.yaml +++ /dev/null @@ -1,104 +0,0 @@ -recipe_sha: c8389fa92d55fba29aa3e922321084ba770fc8c234a709c8b440b779fa5268d0 # The hash of the recipe's meta.yaml at which this recipe failed to build. -skiplist: true # Set to true to skiplist this recipe so that it will be ignored as long as its latest commit is the one given above. -log: |- - Sample programs can be found in the examples-directory. - A program 'example.cpp' can be compiled with the command: - g -std=c14 -D__STDC_FORMAT_MACROS -I$SRC_DIR/src/sdslLite/include -L$SRC_DIR/src/sdslLite/lib -I$PREFIX/include -L$PREFIX/lib -Isrc/jlib/ -std=c14 -O3 -DNDEBUG -msse4.2 -Wall -Wextra -pedantic -ffast-math -funroll-loops -D__extern_always_inline="extern __always_inline" \ - -I$SRC_DIR/src/sdslLite/include -L$SRC_DIR/src/sdslLite/lib \ - example.cpp -ldivsufsort -ldivsufsort64 - - Tests in the test-directory - A cheat sheet in the extras/cheatsheet-directory. - Have fun! - $BUILD_PREFIX/bin/x86_64-conda-linux-gnu-c -D__STDC_FORMAT_MACROS -I$SRC_DIR/src/sdslLite/include -L$SRC_DIR/src/sdslLite/lib -I$PREFIX/include -L$PREFIX/lib -Isrc/jlib/ -std=c14 src/dicey.cpp -o src/dicey -Wl,-O2 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,--disable-new-dtags -Wl,--gc-sections -Wl,--allow-shlib-undefined -Wl,-rpath,$PREFIX/lib -Wl,-rpath-link,$PREFIX/lib -L$PREFIX/lib -L$SRC_DIR/src/htslib/ -L$SRC_DIR/src/htslib//lib -L$SRC_DIR/src/sdslLite//lib -lboost_iostreams -lboost_filesystem -lboost_system -lboost_program_options -lboost_date_time -ldl -lpthread -lhts -lz -llzma -lbz2 -Wl,-rpath,$SRC_DIR/src/htslib/ - In file included from src/bed.h:6, - from src/dicey.cpp:12: - /opt/conda/conda-bld/dicey_1718311588591/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/progress.hpp:23:3: error: #error This header is deprecated and will be removed. (You can define BOOST_TIMER_ENABLE_DEPRECATED to suppress this error.) - 23 | # error This header is deprecated and will be removed. (You can define BOOST_TIMER_ENABLE_DEPRECATED to suppress this error.) - | ^~~~~ - In file included from /opt/conda/conda-bld/dicey_1718311588591/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/progress.hpp:29: - /opt/conda/conda-bld/dicey_1718311588591/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/timer.hpp:21:3: error: #error This header is deprecated and will be removed. (You can define BOOST_TIMER_ENABLE_DEPRECATED to suppress this error.) - 21 | # error This header is deprecated and will be removed. (You can define BOOST_TIMER_ENABLE_DEPRECATED to suppress this error.) - | ^~~~~ - In file included from /opt/conda/conda-bld/dicey_1718311588591/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/smart_ptr/detail/requires_cxx11.hpp:9, - from /opt/conda/conda-bld/dicey_1718311588591/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/smart_ptr/intrusive_ptr.hpp:16, - from /opt/conda/conda-bld/dicey_1718311588591/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/filesystem/exception.hpp:20, - from /opt/conda/conda-bld/dicey_1718311588591/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/filesystem.hpp:17, - from src/bed.h:4: - /opt/conda/conda-bld/dicey_1718311588591/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/config/pragma_message.hpp:24:34: note: '#pragma message: This header is deprecated. Use the facilities in or instead.' - 24 | # define BOOST_PRAGMA_MESSAGE(x) _Pragma(BOOST_STRINGIZE(message(x))) - | ^~~~~~~ - /opt/conda/conda-bld/dicey_1718311588591/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/config/header_deprecated.hpp:23:37: note: in expansion of macro 'BOOST_PRAGMA_MESSAGE' - 23 | # define BOOST_HEADER_DEPRECATED(a) BOOST_PRAGMA_MESSAGE("This header is deprecated. Use " a " instead.") - | ^~~~~~~~~~~~~~~~~~~~ - /opt/conda/conda-bld/dicey_1718311588591/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/progress.hpp:27:1: note: in expansion of macro 'BOOST_HEADER_DEPRECATED' - 27 | BOOST_HEADER_DEPRECATED( "the facilities in or " ) - | ^~~~~~~~~~~~~~~~~~~~~~~ - /opt/conda/conda-bld/dicey_1718311588591/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/config/pragma_message.hpp:24:34: note: '#pragma message: This header is deprecated. Use the facilities in instead.' - 24 | # define BOOST_PRAGMA_MESSAGE(x) _Pragma(BOOST_STRINGIZE(message(x))) - | ^~~~~~~ - /opt/conda/conda-bld/dicey_1718311588591/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/config/header_deprecated.hpp:23:37: note: in expansion of macro 'BOOST_PRAGMA_MESSAGE' - 23 | # define BOOST_HEADER_DEPRECATED(a) BOOST_PRAGMA_MESSAGE("This header is deprecated. Use " a " instead.") - | ^~~~~~~~~~~~~~~~~~~~ - /opt/conda/conda-bld/dicey_1718311588591/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/timer.hpp:25:1: note: in expansion of macro 'BOOST_HEADER_DEPRECATED' - 25 | BOOST_HEADER_DEPRECATED( "the facilities in " ) - | ^~~~~~~~~~~~~~~~~~~~~~~ - In file included from src/dicey.cpp:17: - src/hunter.h:65:35: warning: 'template struct std::binary_function' is deprecated [-Wdeprecated-declarations] - 65 | struct SortDnaHit : public std::binary_function { - | ^~~~~~~~~~~~~~~ - In file included from /opt/conda/conda-bld/dicey_1718311588591/_build_env/lib/gcc/x86_64-conda-linux-gnu/12.3.0/include/c/string:48, - from /opt/conda/conda-bld/dicey_1718311588591/_build_env/lib/gcc/x86_64-conda-linux-gnu/12.3.0/include/c/bits/locale_classes.h:40, - from /opt/conda/conda-bld/dicey_1718311588591/_build_env/lib/gcc/x86_64-conda-linux-gnu/12.3.0/include/c/bits/ios_base.h:41, - from /opt/conda/conda-bld/dicey_1718311588591/_build_env/lib/gcc/x86_64-conda-linux-gnu/12.3.0/include/c/ios:42, - from /opt/conda/conda-bld/dicey_1718311588591/_build_env/lib/gcc/x86_64-conda-linux-gnu/12.3.0/include/c/ostream:38, - from /opt/conda/conda-bld/dicey_1718311588591/_build_env/lib/gcc/x86_64-conda-linux-gnu/12.3.0/include/c/iostream:39, - from src/dicey.cpp:3: - /opt/conda/conda-bld/dicey_1718311588591/_build_env/lib/gcc/x86_64-conda-linux-gnu/12.3.0/include/c/bits/stl_function.h:131:12: note: declared here - 131 | struct binary_function - | ^~~~~~~~~~~~~~~ - In file included from src/dicey.cpp:18: - src/silica.h:80:37: warning: 'template struct std::binary_function' is deprecated [-Wdeprecated-declarations] - 80 | struct SortPrimer : public std::binary_function - | ^~~~~~~~~~~~~~~ - /opt/conda/conda-bld/dicey_1718311588591/_build_env/lib/gcc/x86_64-conda-linux-gnu/12.3.0/include/c/bits/stl_function.h:131:12: note: declared here - 131 | struct binary_function - | ^~~~~~~~~~~~~~~ - src/silica.h:100:39: warning: 'template struct std::binary_function' is deprecated [-Wdeprecated-declarations] - 100 | struct SortProducts : public std::binary_function - | ^~~~~~~~~~~~~~~ - /opt/conda/conda-bld/dicey_1718311588591/_build_env/lib/gcc/x86_64-conda-linux-gnu/12.3.0/include/c/bits/stl_function.h:131:12: note: declared here - 131 | struct binary_function - | ^~~~~~~~~~~~~~~ - In file included from src/padlock.h:34, - from src/dicey.cpp:21: - src/gtf.h:53:42: warning: 'template struct std::binary_function' is deprecated [-Wdeprecated-declarations] - 53 | struct SortIntervalLabel : public std::binary_function { - | ^~~~~~~~~~~~~~~ - /opt/conda/conda-bld/dicey_1718311588591/_build_env/lib/gcc/x86_64-conda-linux-gnu/12.3.0/include/c/bits/stl_function.h:131:12: note: declared here - 131 | struct binary_function - | ^~~~~~~~~~~~~~~ - src/gtf.h:60:42: warning: 'template struct std::binary_function' is deprecated [-Wdeprecated-declarations] - 60 | struct SortIntervalStart : public std::binary_function { - | ^~~~~~~~~~~~~~~ - /opt/conda/conda-bld/dicey_1718311588591/_build_env/lib/gcc/x86_64-conda-linux-gnu/12.3.0/include/c/bits/stl_function.h:131:12: note: declared here - 131 | struct binary_function - | ^~~~~~~~~~~~~~~ - make: *** [Makefile:60: src/dicey] Error 1 - Traceback (most recent call last): - File "/opt/conda/bin/conda-build", line 11, in - sys.exit(execute()) - File "/opt/conda/lib/python3.10/site-packages/conda_build/cli/main_build.py", line 590, in execute - api.build( - File "/opt/conda/lib/python3.10/site-packages/conda_build/api.py", line 250, in build - return build_tree( - File "/opt/conda/lib/python3.10/site-packages/conda_build/build.py", line 3638, in build_tree - packages_from_this = build( - File "/opt/conda/lib/python3.10/site-packages/conda_build/build.py", line 2506, in build - utils.check_call_env( - File "/opt/conda/lib/python3.10/site-packages/conda_build/utils.py", line 405, in check_call_env - return _func_defaulting_env_to_os_environ("call", *popenargs, **kwargs) - File "/opt/conda/lib/python3.10/site-packages/conda_build/utils.py", line 381, in _func_defaulting_env_to_os_environ - raise subprocess.CalledProcessError(proc.returncode, _args) - subprocess.CalledProcessError: Command '['/bin/bash', '-o', 'errexit', '/opt/conda/conda-bld/dicey_1718311588591/work/conda_build.sh']' returned non-zero exit status 2. -# Last 100 lines of the build log. diff --git a/recipes/dicey/build_failure.linux-aarch64.yaml b/recipes/dicey/build_failure.linux-aarch64.yaml deleted file mode 100644 index c0c5be81f9cf2..0000000000000 --- a/recipes/dicey/build_failure.linux-aarch64.yaml +++ /dev/null @@ -1,104 +0,0 @@ -recipe_sha: c8389fa92d55fba29aa3e922321084ba770fc8c234a709c8b440b779fa5268d0 # The hash of the recipe's meta.yaml at which this recipe failed to build. -skiplist: true # Set to true to skiplist this recipe so that it will be ignored as long as its latest commit is the one given above. -log: |- - Sample programs can be found in the examples-directory. - A program 'example.cpp' can be compiled with the command: - g -std=c14 -D__STDC_FORMAT_MACROS -I$SRC_DIR/src/sdslLite/include -L$SRC_DIR/src/sdslLite/lib -I$PREFIX/include -L$PREFIX/lib -Isrc/jlib/ -std=c14 -O3 -DNDEBUG -Wall -Wextra -pedantic -ffast-math -funroll-loops -D__extern_always_inline="extern __always_inline" \ - -I$SRC_DIR/src/sdslLite/include -L$SRC_DIR/src/sdslLite/lib \ - example.cpp -ldivsufsort -ldivsufsort64 - - Tests in the test-directory - A cheat sheet in the extras/cheatsheet-directory. - Have fun! - $BUILD_PREFIX/bin/aarch64-conda-linux-gnu-c -D__STDC_FORMAT_MACROS -I$SRC_DIR/src/sdslLite/include -L$SRC_DIR/src/sdslLite/lib -I$PREFIX/include -L$PREFIX/lib -Isrc/jlib/ -std=c14 src/dicey.cpp -o src/dicey -Wl,-O2 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,--allow-shlib-undefined -Wl,-rpath,$PREFIX/lib -Wl,-rpath-link,$PREFIX/lib -L$PREFIX/lib -L$SRC_DIR/src/htslib/ -L$SRC_DIR/src/htslib//lib -L$SRC_DIR/src/sdslLite//lib -lboost_iostreams -lboost_filesystem -lboost_system -lboost_program_options -lboost_date_time -ldl -lpthread -lhts -lz -llzma -lbz2 -Wl,-rpath,$SRC_DIR/src/htslib/ - In file included from src/bed.h:6, - from src/dicey.cpp:12: - /opt/conda/conda-bld/dicey_1718314872467/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/progress.hpp:23:3: error: #error This header is deprecated and will be removed. (You can define BOOST_TIMER_ENABLE_DEPRECATED to suppress this error.) - 23 | # error This header is deprecated and will be removed. (You can define BOOST_TIMER_ENABLE_DEPRECATED to suppress this error.) - | ^~~~~ - In file included from /opt/conda/conda-bld/dicey_1718314872467/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/progress.hpp:29: - /opt/conda/conda-bld/dicey_1718314872467/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/timer.hpp:21:3: error: #error This header is deprecated and will be removed. (You can define BOOST_TIMER_ENABLE_DEPRECATED to suppress this error.) - 21 | # error This header is deprecated and will be removed. (You can define BOOST_TIMER_ENABLE_DEPRECATED to suppress this error.) - | ^~~~~ - In file included from /opt/conda/conda-bld/dicey_1718314872467/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/smart_ptr/detail/requires_cxx11.hpp:9, - from /opt/conda/conda-bld/dicey_1718314872467/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/smart_ptr/intrusive_ptr.hpp:16, - from /opt/conda/conda-bld/dicey_1718314872467/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/filesystem/exception.hpp:20, - from /opt/conda/conda-bld/dicey_1718314872467/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/filesystem.hpp:17, - from src/bed.h:4: - /opt/conda/conda-bld/dicey_1718314872467/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/config/pragma_message.hpp:24:34: note: '#pragma message: This header is deprecated. Use the facilities in or instead.' - 24 | # define BOOST_PRAGMA_MESSAGE(x) _Pragma(BOOST_STRINGIZE(message(x))) - | ^~~~~~~ - /opt/conda/conda-bld/dicey_1718314872467/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/config/header_deprecated.hpp:23:37: note: in expansion of macro 'BOOST_PRAGMA_MESSAGE' - 23 | # define BOOST_HEADER_DEPRECATED(a) BOOST_PRAGMA_MESSAGE("This header is deprecated. Use " a " instead.") - | ^~~~~~~~~~~~~~~~~~~~ - /opt/conda/conda-bld/dicey_1718314872467/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/progress.hpp:27:1: note: in expansion of macro 'BOOST_HEADER_DEPRECATED' - 27 | BOOST_HEADER_DEPRECATED( "the facilities in or " ) - | ^~~~~~~~~~~~~~~~~~~~~~~ - /opt/conda/conda-bld/dicey_1718314872467/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/config/pragma_message.hpp:24:34: note: '#pragma message: This header is deprecated. Use the facilities in instead.' - 24 | # define BOOST_PRAGMA_MESSAGE(x) _Pragma(BOOST_STRINGIZE(message(x))) - | ^~~~~~~ - /opt/conda/conda-bld/dicey_1718314872467/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/config/header_deprecated.hpp:23:37: note: in expansion of macro 'BOOST_PRAGMA_MESSAGE' - 23 | # define BOOST_HEADER_DEPRECATED(a) BOOST_PRAGMA_MESSAGE("This header is deprecated. Use " a " instead.") - | ^~~~~~~~~~~~~~~~~~~~ - /opt/conda/conda-bld/dicey_1718314872467/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeho/include/boost/timer.hpp:25:1: note: in expansion of macro 'BOOST_HEADER_DEPRECATED' - 25 | BOOST_HEADER_DEPRECATED( "the facilities in " ) - | ^~~~~~~~~~~~~~~~~~~~~~~ - In file included from src/dicey.cpp:17: - src/hunter.h:65:35: warning: 'template struct std::binary_function' is deprecated [-Wdeprecated-declarations] - 65 | struct SortDnaHit : public std::binary_function { - | ^~~~~~~~~~~~~~~ - In file included from /opt/conda/conda-bld/dicey_1718314872467/_build_env/lib/gcc/aarch64-conda-linux-gnu/12.3.0/include/c/string:48, - from /opt/conda/conda-bld/dicey_1718314872467/_build_env/lib/gcc/aarch64-conda-linux-gnu/12.3.0/include/c/bits/locale_classes.h:40, - from /opt/conda/conda-bld/dicey_1718314872467/_build_env/lib/gcc/aarch64-conda-linux-gnu/12.3.0/include/c/bits/ios_base.h:41, - from /opt/conda/conda-bld/dicey_1718314872467/_build_env/lib/gcc/aarch64-conda-linux-gnu/12.3.0/include/c/ios:42, - from /opt/conda/conda-bld/dicey_1718314872467/_build_env/lib/gcc/aarch64-conda-linux-gnu/12.3.0/include/c/ostream:38, - from /opt/conda/conda-bld/dicey_1718314872467/_build_env/lib/gcc/aarch64-conda-linux-gnu/12.3.0/include/c/iostream:39, - from src/dicey.cpp:3: - /opt/conda/conda-bld/dicey_1718314872467/_build_env/lib/gcc/aarch64-conda-linux-gnu/12.3.0/include/c/bits/stl_function.h:131:12: note: declared here - 131 | struct binary_function - | ^~~~~~~~~~~~~~~ - In file included from src/dicey.cpp:18: - src/silica.h:80:37: warning: 'template struct std::binary_function' is deprecated [-Wdeprecated-declarations] - 80 | struct SortPrimer : public std::binary_function - | ^~~~~~~~~~~~~~~ - /opt/conda/conda-bld/dicey_1718314872467/_build_env/lib/gcc/aarch64-conda-linux-gnu/12.3.0/include/c/bits/stl_function.h:131:12: note: declared here - 131 | struct binary_function - | ^~~~~~~~~~~~~~~ - src/silica.h:100:39: warning: 'template struct std::binary_function' is deprecated [-Wdeprecated-declarations] - 100 | struct SortProducts : public std::binary_function - | ^~~~~~~~~~~~~~~ - /opt/conda/conda-bld/dicey_1718314872467/_build_env/lib/gcc/aarch64-conda-linux-gnu/12.3.0/include/c/bits/stl_function.h:131:12: note: declared here - 131 | struct binary_function - | ^~~~~~~~~~~~~~~ - In file included from src/padlock.h:34, - from src/dicey.cpp:21: - src/gtf.h:53:42: warning: 'template struct std::binary_function' is deprecated [-Wdeprecated-declarations] - 53 | struct SortIntervalLabel : public std::binary_function { - | ^~~~~~~~~~~~~~~ - /opt/conda/conda-bld/dicey_1718314872467/_build_env/lib/gcc/aarch64-conda-linux-gnu/12.3.0/include/c/bits/stl_function.h:131:12: note: declared here - 131 | struct binary_function - | ^~~~~~~~~~~~~~~ - src/gtf.h:60:42: warning: 'template struct std::binary_function' is deprecated [-Wdeprecated-declarations] - 60 | struct SortIntervalStart : public std::binary_function { - | ^~~~~~~~~~~~~~~ - /opt/conda/conda-bld/dicey_1718314872467/_build_env/lib/gcc/aarch64-conda-linux-gnu/12.3.0/include/c/bits/stl_function.h:131:12: note: declared here - 131 | struct binary_function - | ^~~~~~~~~~~~~~~ - make: *** [Makefile:60: src/dicey] Error 1 - Traceback (most recent call last): - File "/opt/conda/bin/conda-build", line 11, in - sys.exit(execute()) - File "/opt/conda/lib/python3.10/site-packages/conda_build/cli/main_build.py", line 590, in execute - api.build( - File "/opt/conda/lib/python3.10/site-packages/conda_build/api.py", line 250, in build - return build_tree( - File "/opt/conda/lib/python3.10/site-packages/conda_build/build.py", line 3638, in build_tree - packages_from_this = build( - File "/opt/conda/lib/python3.10/site-packages/conda_build/build.py", line 2506, in build - utils.check_call_env( - File "/opt/conda/lib/python3.10/site-packages/conda_build/utils.py", line 405, in check_call_env - return _func_defaulting_env_to_os_environ("call", *popenargs, **kwargs) - File "/opt/conda/lib/python3.10/site-packages/conda_build/utils.py", line 381, in _func_defaulting_env_to_os_environ - raise subprocess.CalledProcessError(proc.returncode, _args) - subprocess.CalledProcessError: Command '['/bin/bash', '-o', 'errexit', '/opt/conda/conda-bld/dicey_1718314872467/work/conda_build.sh']' returned non-zero exit status 2. -# Last 100 lines of the build log. diff --git a/recipes/dicey/build_failure.osx-64.yaml b/recipes/dicey/build_failure.osx-64.yaml deleted file mode 100644 index bd4b827824d0d..0000000000000 --- a/recipes/dicey/build_failure.osx-64.yaml +++ /dev/null @@ -1,104 +0,0 @@ -recipe_sha: c8389fa92d55fba29aa3e922321084ba770fc8c234a709c8b440b779fa5268d0 # The hash of the recipe's meta.yaml at which this recipe failed to build. -skiplist: true # Set to true to skiplist this recipe so that it will be ignored as long as its latest commit is the one given above. -log: |- - make[3]: Leaving directory '$SRC_DIR/src/xxsds/build' - make[3]: Entering directory '$SRC_DIR/src/xxsds/build' - [ 91%] Building CXX object tutorial/CMakeFiles/expl-20.dir/expl-20.cpp.o - [ 91%] Linking CXX executable expl-20 - make[3]: Leaving directory '$SRC_DIR/src/xxsds/build' - [ 91%] Built target expl-20 - make[3]: Entering directory '$SRC_DIR/src/xxsds/build' - make[3]: Leaving directory '$SRC_DIR/src/xxsds/build' - make[3]: Entering directory '$SRC_DIR/src/xxsds/build' - [ 91%] Building CXX object tutorial/CMakeFiles/expl-21.dir/expl-21.cpp.o - [ 91%] Linking CXX executable expl-21 - make[3]: Leaving directory '$SRC_DIR/src/xxsds/build' - [ 91%] Built target expl-21 - make[3]: Entering directory '$SRC_DIR/src/xxsds/build' - make[3]: Leaving directory '$SRC_DIR/src/xxsds/build' - make[3]: Entering directory '$SRC_DIR/src/xxsds/build' - [ 91%] Building CXX object tutorial/CMakeFiles/expl-22.dir/expl-22.cpp.o - [ 91%] Linking CXX executable expl-22 - make[3]: Leaving directory '$SRC_DIR/src/xxsds/build' - [ 91%] Built target expl-22 - make[3]: Entering directory '$SRC_DIR/src/xxsds/build' - make[3]: Leaving directory '$SRC_DIR/src/xxsds/build' - make[3]: Entering directory '$SRC_DIR/src/xxsds/build' - [ 91%] Building CXX object tutorial/CMakeFiles/expl-23.dir/expl-23.cpp.o - [ 91%] Linking CXX executable expl-23 - make[3]: Leaving directory '$SRC_DIR/src/xxsds/build' - [ 91%] Built target expl-23 - make[3]: Entering directory '$SRC_DIR/src/xxsds/build' - make[3]: Leaving directory '$SRC_DIR/src/xxsds/build' - make[3]: Entering directory '$SRC_DIR/src/xxsds/build' - [ 91%] Building CXX object tutorial/CMakeFiles/expl-24.dir/expl-24.cpp.o - [ 95%] Linking CXX executable expl-24 - make[3]: Leaving directory '$SRC_DIR/src/xxsds/build' - [ 95%] Built target expl-24 - make[3]: Entering directory '$SRC_DIR/src/xxsds/build' - make[3]: Leaving directory '$SRC_DIR/src/xxsds/build' - make[3]: Entering directory '$SRC_DIR/src/xxsds/build' - [ 95%] Building CXX object tutorial/CMakeFiles/expl-25.dir/expl-25.cpp.o - [ 95%] Linking CXX executable expl-25 - make[3]: Leaving directory '$SRC_DIR/src/xxsds/build' - [ 95%] Built target expl-25 - make[3]: Entering directory '$SRC_DIR/src/xxsds/build' - make[3]: Leaving directory '$SRC_DIR/src/xxsds/build' - make[3]: Entering directory '$SRC_DIR/src/xxsds/build' - [ 95%] Building CXX object tutorial/CMakeFiles/expl-26.dir/expl-26.cpp.o - [ 95%] Linking CXX executable expl-26 - make[3]: Leaving directory '$SRC_DIR/src/xxsds/build' - [ 95%] Built target expl-26 - make[3]: Entering directory '$SRC_DIR/src/xxsds/build' - make[3]: Leaving directory '$SRC_DIR/src/xxsds/build' - make[3]: Entering directory '$SRC_DIR/src/xxsds/build' - [100%] Building CXX object tutorial/CMakeFiles/int-vector-tutorial.dir/int-vector-tutorial.cpp.o - [100%] Linking CXX executable int-vector-tutorial - make[3]: Leaving directory '$SRC_DIR/src/xxsds/build' - [100%] Built target int-vector-tutorial - make[3]: Entering directory '$SRC_DIR/src/xxsds/build' - make[3]: Leaving directory '$SRC_DIR/src/xxsds/build' - make[3]: Entering directory '$SRC_DIR/src/xxsds/build' - [100%] Building CXX object tutorial/CMakeFiles/rmq-example.dir/rmq-example.cpp.o - [100%] Linking CXX executable rmq-example - make[3]: Leaving directory '$SRC_DIR/src/xxsds/build' - [100%] Built target rmq-example - make[3]: Entering directory '$SRC_DIR/src/xxsds/build' - make[3]: Leaving directory '$SRC_DIR/src/xxsds/build' - make[3]: Entering directory '$SRC_DIR/src/xxsds/build' - [100%] Building CXX object tutorial/CMakeFiles/use-a-wavelet-tree.dir/use-a-wavelet-tree.cpp.o - [100%] Linking CXX executable use-a-wavelet-tree - make[3]: Leaving directory '$SRC_DIR/src/xxsds/build' - [100%] Built target use-a-wavelet-tree - make[2]: Leaving directory '$SRC_DIR/src/xxsds/build' - Install the project... - -- Install configuration: "Release" - make[1]: Leaving directory '$SRC_DIR/src/xxsds/build' - Copy pre-commit into .git/hooks - SUCCESS: sdsl was installed successfully! - The sdsl include files are located in '$SRC_DIR/src/sdslLite/include'. - The library files are located in '$SRC_DIR/src/sdslLite/lib'. - - Sample programs can be found in the examples-directory. - A program 'example.cpp' can be compiled with the command: - g -std=c14 -D__STDC_FORMAT_MACROS -I$SRC_DIR/src/sdslLite/include -L$SRC_DIR/src/sdslLite/lib -I$PREFIX/include -L$PREFIX/lib -Isrc/jlib/ -std=c14 -O3 -DNDEBUG -msse4.2 -Wall -Wextra -pedantic -ffast-math -funroll-loops -D__extern_always_inline="extern __always_inline" -stdlib=libc \ - -I$SRC_DIR/src/sdslLite/include -L$SRC_DIR/src/sdslLite/lib \ - example.cpp -ldivsufsort -ldivsufsort64 - - Tests in the test-directory - A cheat sheet in the extras/cheatsheet-directory. - Have fun! - x86_64-apple-darwin13.4.0-clang -D__STDC_FORMAT_MACROS -I$SRC_DIR/src/sdslLite/include -L$SRC_DIR/src/sdslLite/lib -I$PREFIX/include -L$PREFIX/lib -Isrc/jlib/ -std=c14 src/dicey.cpp -o src/dicey -Wl,-headerpad_max_install_names -Wl,-dead_strip_dylibs -Wl,-rpath,$PREFIX/lib -L$PREFIX/lib -L$SRC_DIR/src/htslib/ -L$SRC_DIR/src/htslib//lib -L$SRC_DIR/src/sdslLite//lib -lboost_iostreams -lboost_filesystem -lboost_system -lboost_program_options -lboost_date_time -ldl -lpthread -lhts -lz -llzma -lbz2 -Wl,-rpath,$SRC_DIR/src/htslib/ - api.build( - File "/opt/mambaforge/envs/bioconda/lib/python3.10/site-packages/conda_build/api.py", line 250, in build - return build_tree( - File "/opt/mambaforge/envs/bioconda/lib/python3.10/site-packages/conda_build/build.py", line 3638, in build_tree - packages_from_this = build( - File "/opt/mambaforge/envs/bioconda/lib/python3.10/site-packages/conda_build/build.py", line 2506, in build - utils.check_call_env( - File "/opt/mambaforge/envs/bioconda/lib/python3.10/site-packages/conda_build/utils.py", line 405, in check_call_env - return _func_defaulting_env_to_os_environ("call", *popenargs, **kwargs) - File "/opt/mambaforge/envs/bioconda/lib/python3.10/site-packages/conda_build/utils.py", line 381, in _func_defaulting_env_to_os_environ - raise subprocess.CalledProcessError(proc.returncode, _args) - subprocess.CalledProcessError: Command '['/bin/bash', '-o', 'errexit', '/opt/mambaforge/envs/bioconda/conda-bld/dicey_1718321691422/work/conda_build.sh']' returned non-zero exit status 2. -# Last 100 lines of the build log. diff --git a/recipes/dicey/meta.yaml b/recipes/dicey/meta.yaml index d4c5c3060bf24..aff17789c7676 100644 --- a/recipes/dicey/meta.yaml +++ b/recipes/dicey/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "0.3.1" %} -{% set sha256 = "11ac3b8b6dd1a7dc83bd4fd32ecb4781b6a63c4eedb7870a40bc989f8734914b" %} +{% set version = "0.3.3" %} +{% set sha256 = "69e84d07c2e6c9232f5cb80bde5d61a5285a334deb78a4cad6804c800dd3a3d6" %} package: name: dicey @@ -14,7 +14,7 @@ source: build: - number: 1 + number: 0 run_exports: - {{ pin_subpackage("dicey", max_pin="x.x") }} @@ -22,20 +22,16 @@ requirements: build: - make - {{ compiler('cxx') }} - - cmake >=3.10 + - cmake - autoconf - automake - pkg-config - - clangdev - - llvm-openmp host: - zlib - bzip2 - libdeflate - boost-cpp - htslib - - clangdev - - llvm-openmp run: - zlib - bzip2 diff --git a/recipes/dnaio/meta.yaml b/recipes/dnaio/meta.yaml index f6b7feb2ad7c2..f3d95856ef974 100644 --- a/recipes/dnaio/meta.yaml +++ b/recipes/dnaio/meta.yaml @@ -1,15 +1,15 @@ -{% set version = "1.2.1" %} +{% set version = "1.2.2" %} package: name: dnaio version: {{ version }} source: - url: https://files.pythonhosted.org/packages/2b/bf/c62568ad2e5be8eb9760ddf3ab66107a4ef2a47fe1bb92de5eb5322e65d8/dnaio-1.2.1.tar.gz - sha256: 4786dc63614b9f3011463d9ea9d981723dd38d1091a415a557f71d8c74400f38 + url: https://files.pythonhosted.org/packages/1e/69/b11040d6cb619f2c879904dfd5f703c15d5ed05d20afc556318de9bc476b/dnaio-1.2.2.tar.gz + sha256: 55e1c8e5b86056ce3bb3a3eff643ebc9910a5d6d0d5c10a27eb4d5b6525117d5 build: - number: 2 + number: 0 script: "{{ PYTHON }} -m pip install . --no-deps -vv" run_exports: - {{ pin_subpackage('dnaio', max_pin="x") }} diff --git a/recipes/dxpy/meta.yaml b/recipes/dxpy/meta.yaml index e6c81569ec1ac..172199dff30e6 100644 --- a/recipes/dxpy/meta.yaml +++ b/recipes/dxpy/meta.yaml @@ -1,5 +1,5 @@ {% set name = "dxpy" %} -{% set version = "0.382.0" %} +{% set version = "0.383.1" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz - sha256: c8427fdc2d293622e2fa250afe6e51fc85a21c5abed697be863eb7a644c502e7 + sha256: 377af4014a5f27efd6fe9478d0fa9c30ced245947fbd2e2e5713c8a37db598b0 build: number: 0 diff --git a/recipes/earlgrey/build.sh b/recipes/earlgrey/build.sh index 5f17a2045b907..f0c29fd0423d2 100644 --- a/recipes/earlgrey/build.sh +++ b/recipes/earlgrey/build.sh @@ -26,10 +26,10 @@ cd ../ && rm -rf SA-SSR/ # Fixes to earlGrey executable sed -i.bak "/CONDA_DEFAULT_ENV/,+4d" ${PACKAGE_HOME}/earlGrey #remove check that conda environment has a specific name - +sed -i.bak "/CONDA_DEFAULT_ENV/,+4d" ${PACKAGE_HOME}/earlGreyLibConstruct #remove check that conda environment has a specific name # Fixes sed command for executables so that it works on both linux and macos -sed -i.bak "s|sed -i |sed -i.bak |g" ${PACKAGE_HOME}/earlGrey ${SCRIPT_DIR}/rcMergeRepeat* ${SCRIPT_DIR}/TEstrainer/TEstrainer_for_earlGrey.sh +sed -i.bak "s|sed -i |sed -i.bak |g" ${PACKAGE_HOME}/earlGrey ${PACKAGE_HOME}/earlGreyLibConstruct ${SCRIPT_DIR}/rcMergeRepeat* ${SCRIPT_DIR}/TEstrainer/TEstrainer_for_earlGrey.sh # Remove -pa from RepeatClassifier @@ -43,6 +43,7 @@ sed -i.bak 's/-t ${THREADS} / /' ${SCRIPT_DIR}/TEstrainer/TEstrainer # Add SCRIPT_DIR to correct path sed -i.bak "s|SCRIPT_DIR=.*|SCRIPT_DIR=${SCRIPT_DIR}|g" ${PACKAGE_HOME}/earlGrey +sed -i.bak "s|SCRIPT_DIR=.*|SCRIPT_DIR=${SCRIPT_DIR}|g" ${PACKAGE_HOME}/earlGreyLibConstruct sed -i.bak "s|SCRIPT_DIR=.*|SCRIPT_DIR=${SCRIPT_DIR}|g" ${SCRIPT_DIR}/rcMergeRepeat* sed -i.bak "s|SCRIPT_DIR=.*|SCRIPT_DIR=${SCRIPT_DIR}|g" ${SCRIPT_DIR}/headSwap.sh sed -i.bak "s|SCRIPT_DIR=.*|SCRIPT_DIR=${SCRIPT_DIR}|g" ${SCRIPT_DIR}/autoPie.sh @@ -51,6 +52,7 @@ sed -i.bak "s|INSERT_FILENAME_HERE|${SCRIPT_DIR}/TEstrainer/scripts/|g" ${SCRIPT # Set permissions to files chmod +x ${PACKAGE_HOME}/earlGrey +chmod +x ${PACKAGE_HOME}/earlGreyLibConstruct chmod +x ${SCRIPT_DIR}/TEstrainer/TEstrainer_for_earlGrey.sh chmod +x ${SCRIPT_DIR}/* > /dev/null 2>&1 chmod +x ${SCRIPT_DIR}/bin/LTR_FINDER.x86_64-1.0.7/ltr_finder @@ -76,3 +78,4 @@ echo "unset PERL5LIB" >> "${PREFIX}/etc/conda/deactivate.d/${PKG_NAME}_deactivat # Put earlGrey executable in bin cd ${PREFIX}/bin ln -sf ${PACKAGE_HOME}/earlGrey . +ln -sf ${PACKAGE_HOME}/earlGreyLibConstruct . diff --git a/recipes/earlgrey/meta.yaml b/recipes/earlgrey/meta.yaml index a0ebe85066f9e..a9ab065a15b4b 100644 --- a/recipes/earlgrey/meta.yaml +++ b/recipes/earlgrey/meta.yaml @@ -1,6 +1,6 @@ {% set name = "EarlGrey" %} -{% set version = "4.4.5" %} -{% set sha256 = "63def9d8389f6163fcd308e77dd23e3f923a2fe67cf5bc0a921c40d33028bfc1" %} +{% set version = "5.0.0" %} +{% set sha256 = "4106a767403baf17b4f1cc50e69ab0dcb8784f801562479461b33710eb0461ce" %} package: name: {{ name|lower }} @@ -12,6 +12,7 @@ source: build: number: 0 + skip: True # [osx] run_exports: - {{ pin_subpackage('earlgrey', max_pin='x') }} @@ -49,9 +50,13 @@ requirements: - r-viridis - r-cowplot - r-ggtext + - r-data.table + - r-magrittr - bedtools - emboss - pybedtools + - samtools + - heliano test: commands: diff --git a/recipes/emu/meta.yaml b/recipes/emu/meta.yaml index afaf213e3773d..b3c8730ce7056 100644 --- a/recipes/emu/meta.yaml +++ b/recipes/emu/meta.yaml @@ -1,5 +1,5 @@ {% set name = "emu" %} -{% set version = "3.4.6" %} +{% set version = "3.5.0" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: 'https://github.com/treangenlab/emu/archive/refs/tags/v{{version}}.tar.gz' - sha256: 9c7dab900ad6c3e8689733778a0ecfd8ebb15733e3c45f6ec3a7c32b8cb06805 + sha256: 3e26d6f66dfd7e0ff1bc63cefb8a4a08bbed4726b8c0002bf0e34abed7a18ed0 build: noarch: generic diff --git a/recipes/ena-upload-cli/meta.yaml b/recipes/ena-upload-cli/meta.yaml index 2a3213ae200e8..3c6fd85b48c5f 100644 --- a/recipes/ena-upload-cli/meta.yaml +++ b/recipes/ena-upload-cli/meta.yaml @@ -1,5 +1,5 @@ {% set name = "ena-upload-cli" %} -{% set version = "0.7.3" %} +{% set version = "0.7.4" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://github.com/usegalaxy-eu/ena-upload-cli/archive/refs/tags/{{ version }}.tar.gz" - sha256: 9508f63fddb0dc9541f1500e0c4ed064c21ad59ac3e0d2140497475387113745 + sha256: da6b07a681ae6c9ac61ca5b3e7e6fe8a5ed3f0ed7bae64936e19b33dfb2782bc build: number: 0 @@ -26,7 +26,7 @@ requirements: - genshi ==0.7.* - lxml >=4.9.3,<=5.0.0 - pandas >=2.0.3,<=3.0.0 - - pyyaml ==5.* + - pyyaml ==5.3.* - requests >=2.31.0,<=3.0.0 - openpyxl >=3.1.2,<=4.0.0 - jsonschema >=4.19.1 diff --git a/recipes/ensembl-utils/meta.yaml b/recipes/ensembl-utils/meta.yaml index 3bb007e3b72d9..77bbd0f6413b6 100644 --- a/recipes/ensembl-utils/meta.yaml +++ b/recipes/ensembl-utils/meta.yaml @@ -1,5 +1,5 @@ {% set name = "ensembl-utils" %} -{% set version = "0.4.4" %} +{% set version = "0.5.1" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/ensembl_utils-{{ version }}.tar.gz - sha256: d2cb0a7ef76145bc72313e90ab3302927ad2cce442d60b0a5c8eaf00a3c0da61 + sha256: 613d0f9584993aaacab42379b57b0ccbeac9f9269a99c186dddf84d396bc3c86 build: entry_points: diff --git a/recipes/eukfinder/build.sh b/recipes/eukfinder/build.sh new file mode 100755 index 0000000000000..67d7ab942645b --- /dev/null +++ b/recipes/eukfinder/build.sh @@ -0,0 +1,16 @@ +#!/bin/bash +set -ex +mkdir -p ${PREFIX}/bin +# Setup PLAST binaries +cp build/bin/plast $PREFIX/bin/ + +# Build acc2tax +# According to https://bioconda.github.io/contributor/troubleshooting.html +# and https://github.com/bioconda/bioconda-recipes/pull/49360#discussion_r1686187284 +$CC -o acc2tax acc2tax.c +cp acc2tax $PREFIX/bin/ + +chmod +x $PREFIX/bin/plast +chmod +x $PREFIX/bin/acc2tax + +$PYTHON setup.py install --single-version-externally-managed --record=record.txt diff --git a/recipes/eukfinder/meta.yaml b/recipes/eukfinder/meta.yaml new file mode 100644 index 0000000000000..5067efc48f607 --- /dev/null +++ b/recipes/eukfinder/meta.yaml @@ -0,0 +1,61 @@ +{% set version = "1.2.3" %} + +package: + name: eukfinder + version: {{ version }} + +build: + number: 0 + run_exports: + - {{ pin_subpackage('eukfinder', max_pin="x") }} + +source: + - url: https://github.com/RogerLab/Eukfinder/archive/refs/tags/v{{ version }}.tar.gz + sha256: 8b8235049084e8c7171ce8968b07be25bad9b9979ce1f04cfe4b8690f5641a7d + - url: https://github.com/PLAST-software/plast-library/releases/download/v2.3.2/plastbinary_osx_v2.3.2.tar.gz # [osx] + sha256: 0dbbf88f6e59bb153ff04b5cc80743304d44fc1196de930fd2b56a1061792a6a # [osx] + - url: https://github.com/PLAST-software/plast-library/releases/download/v2.3.2/plastbinary_linux_v2.3.2.tar.gz # [linux] + sha256: d8a3ad66849b6090c41acde71750e3d0c339d6b9b7c6f316c307870d773d86fe # [linux] + - url: https://github.com/Tassadaar/acc2tax/archive/refs/tags/v1.0.tar.gz + sha256: 349fa233c565eaa01ef31b9d3f32fa01a9d9f234ba7e0136e289af837add6979 + +requirements: + build: + - wget + - python >=3.6,<3.7 + - setuptools + - {{ compiler('c') }} + - {{ compiler('cxx') }} + - cmake + host: + - python >=3.6,<3.7 + - setuptools + run: + - python >=3.6,<3.7 + - ete3 + - numpy + - pandas + - joblib + - pyqt =5 + - spades + - seqkit + - trimmomatic + - centrifuge + - bowtie2 + + +test: + commands: + - plast -h + - acc2tax --help + - eukfinder --help + - eukfinder read_prep -h + - eukfinder short_seqs -h + - eukfinder long_seqs -h + + +about: + home: https://github.com/RogerLab/Eukfinder + license: MIT + license_file: LICENSE.txt + summary: "Eukfinder is a tool for detecting eukaryotic sequences in metagenomic data." diff --git a/recipes/eukulele/meta.yaml b/recipes/eukulele/meta.yaml index 21ea41ffd4f6b..24cd50ddf57b4 100644 --- a/recipes/eukulele/meta.yaml +++ b/recipes/eukulele/meta.yaml @@ -11,7 +11,7 @@ source: sha256: {{ sha256 }} build: - number: 0 + number: 1 noarch: python script: "{{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir --use-pep517 -vvv" run_exports: @@ -41,6 +41,7 @@ requirements: - sphinxcontrib-bibtex ==1.0.0 - blast - diamond + - busco >=4.0.4 test: commands: diff --git a/recipes/eva-sub-cli/build.sh b/recipes/eva-sub-cli/build.sh index aa7198453931d..695dd90715c8c 100644 --- a/recipes/eva-sub-cli/build.sh +++ b/recipes/eva-sub-cli/build.sh @@ -3,11 +3,10 @@ BIOVALIDATOR_VERSION=2.2.1 EVA_SUB_CLI="${PREFIX}/share/${PKG_NAME}-${PKG_VERSION}" -mkdir -p ${PREFIX}/bin ${EVA_SUB_CLI} +mkdir -p ${EVA_SUB_CLI} # Install eva-sub-cli $PYTHON -m pip install . -cp bin/* ${PREFIX}/bin echo "Done with eva-sub-cli" cd ${EVA_SUB_CLI} diff --git a/recipes/eva-sub-cli/meta.yaml b/recipes/eva-sub-cli/meta.yaml index 2b2ff86a1b018..2b0ae04c0c9d7 100644 --- a/recipes/eva-sub-cli/meta.yaml +++ b/recipes/eva-sub-cli/meta.yaml @@ -1,5 +1,5 @@ {% set name = "eva-sub-cli" %} -{% set version = "0.3" %} +{% set version = "0.4" %} package: name: {{ name }} @@ -7,11 +7,13 @@ package: source: url: https://github.com/EBIvariation/eva-sub-cli/archive/v{{version}}.tar.gz - sha256: bf5e00ffd7f4a290350011ceb626f818111f8646975e5dd7247910555971e1bd + sha256: be4d4109d9879ad94ccc01a3bd534ff6077775f126977dfb3f2d6fd9cfb251ba build: number: 0 noarch: generic + script_env: + - SETUPTOOLS_SCM_PRETEND_VERSION={{ version }} run_exports: - {{ pin_subpackage(name, max_pin="x.x") }} @@ -20,7 +22,7 @@ requirements: - nextflow >=21.10.0 - python >=3.8 - nodejs >=10.19.1 - - vcf-validator >=0.9.6 + - vcf-validator >=0.9.7 - ebi-eva-common-pyutils >=0.6.1 - pyyaml - jinja2 @@ -28,11 +30,12 @@ requirements: - requests - jsonschema - unzip + - setuptools-scm run: - nextflow >=21.10.0 - python >=3.8 - nodejs >=10.19.1 - - vcf-validator >=0.9.6 + - vcf-validator >=0.9.7 - ebi-eva-common-pyutils >=0.6.1 - pyyaml - jinja2 diff --git a/recipes/exomiser-rest-prioritiser/meta.yaml b/recipes/exomiser-rest-prioritiser/meta.yaml index 5f67ff79744ad..f00da2d66df74 100644 --- a/recipes/exomiser-rest-prioritiser/meta.yaml +++ b/recipes/exomiser-rest-prioritiser/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "14.0.0" %} -{% set sha256 = "6817537b1e602f533219089fc89d6c1d154e26e61efb05a5de382a56eeba4094" %} +{% set version = "14.0.2" %} +{% set sha256 = "752d46ae3e28aad581fd891d3ad2c1045039d52d52806c9da57e95c42c0beba6" %} package: name: exomiser-rest-prioritiser diff --git a/recipes/expam/meta.yaml b/recipes/expam/meta.yaml index bfae3d6356b7e..b17336bf93486 100644 --- a/recipes/expam/meta.yaml +++ b/recipes/expam/meta.yaml @@ -1,5 +1,5 @@ {% set name = "expam" %} -{% set version = "1.2.2.5" %} +{% set version = "1.4.0.5" %} package: name: "{{ name|lower }}" @@ -7,12 +7,15 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: 4a102a67da23c37598c0a0778d0caf99d4c6c0ea4286aff7ca0ab360dc5cda09 + sha256: 7b89e363b95e8b04da05a5cc9c5b51ac29988a926e9ca510ca8735faae4a5cfb build: - number: 1 - skip: true # [py < 38] - script: "{{ PYTHON }} -m pip install . --no-deps --no-build-isolation -vvv" + number: 0 + skip: True # [osx] + script: "{{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir -vvv" + entry_points: + - expam=expam.main:main + - expam_limit=expam.sandbox.main:main run_exports: - {{ pin_subpackage('expam', max_pin="x") }} @@ -24,9 +27,9 @@ requirements: - python - cython - numpy >=1.22.0 - - setuptools >=46.4 run: - python + - ete3 - numpy >=1.22.0 - matplotlib-base - multiprocess @@ -47,8 +50,11 @@ about: license_family: BSD license_file: LICENSE summary: "Metagenomic profiling using a reference phylogeny" - doc_url: https://expam.readthedocs.io/en/latest/ + doc_url: https://expam.readthedocs.io/en/latest + dev_url: https://github.com/seansolari/expam extra: + additional-platforms: + - linux-aarch64 recipe-maintainers: - seansolari diff --git a/recipes/falco/build.sh b/recipes/falco/build.sh index 294c111775771..ad4472c78b36a 100644 --- a/recipes/falco/build.sh +++ b/recipes/falco/build.sh @@ -7,7 +7,7 @@ export M4="$BUILD_PREFIX/bin/m4" # add Configuration and example files to opt falco=$PREFIX/opt/falco mkdir -p $falco -cp -r ./* $falco +cp -rf ./* $falco #to fix problems with htslib export C_INCLUDE_PATH=$C_INCLUDE_PATH:${PREFIX}/include @@ -15,8 +15,14 @@ export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:${PREFIX}/include export LIBRARY_PATH=$LIBRARY_PATH:${PREFIX}/lib export LD_LIBRARY_PATH=$LIBRARY_PATH:${PREFIX}/lib +export INCLUDES="-I{PREFIX}/include" +export LIBPATH="-L${PREFIX}/lib" +export LDFLAGS="${LDFLAGS} -L${PREFIX}/lib" +export CXXFLAGS="${CXXFLAGS} -O3 -I{PREFIX}/include" + cd $falco -./configure --prefix=$falco --enable-hts +autoreconf -if +./configure --prefix=$falco --enable-hts CXX="${CXX}" CXXFLAGS="${CXXFLAGS}" make -j ${CPU_COUNT} make install for i in $(ls -1 | grep -v Configuration | grep -v bin); diff --git a/recipes/falco/meta.yaml b/recipes/falco/meta.yaml index 8acc3f753b796..b11966d06a4d1 100644 --- a/recipes/falco/meta.yaml +++ b/recipes/falco/meta.yaml @@ -1,19 +1,18 @@ -{% set version = "1.2.3" %} +{% set version = "1.2.4" %} package: name: falco version: {{ version }} build: - number: 1 + number: 0 run_exports: # falco is currently not intended to be stable between minor versions (x.x). - {{ pin_subpackage('falco', max_pin="x.x") }} - source: url: https://github.com/smithlabcode/falco/releases/download/v{{ version }}/falco-{{ version }}.tar.gz - sha256: b2d4da736efecfa669ad555fbb69862bc7fb57dcf32efcb6c151c47f98b32b8a + sha256: 116c257fbf87bf99083d8e539a51ce74bc5a8d141f99a437a0c23e9d1379096a requirements: build: @@ -21,20 +20,22 @@ requirements: - {{ compiler('cxx') }} - autoconf - automake + - libtool host: - zlib - htslib run: - - zlib - htslib about: - home: https://github.com/smithlabcode/falco + home: 'https://github.com/smithlabcode/falco' license: GPL-3.0-only + license_family: GPL3 license_file: LICENSE summary: | falco is a drop-in C++ implementation of FastQC to assess the quality of sequence reads. - doc_url: 'https://falco.readthedocs.io/' + doc_url: 'https://falco.readthedocs.io' + dev_url: 'https://github.com/smithlabcode/falco' test: commands: diff --git a/recipes/fast-edit-distance/meta.yaml b/recipes/fast-edit-distance/meta.yaml index b47cfdda7a5ee..a9fa25ffb9240 100644 --- a/recipes/fast-edit-distance/meta.yaml +++ b/recipes/fast-edit-distance/meta.yaml @@ -1,5 +1,5 @@ {% set name = "fast-edit-distance" %} -{% set version = "1.2.1" %} +{% set version = "1.2.2" %} package: name: {{ name|lower }} @@ -7,10 +7,10 @@ package: source: url: https://github.com/youyupei/fast_edit_distance/archive/v{{ version }}.tar.gz - sha256: c3f3913381d8a7a5eb96cef5b31bc69fb19c55b653a98525abc0c4922cd07247 + sha256: 71ead99841435bc2e94be5c8ec89ab5797472b0e7924e0b1a171e5ddf4f7e501 build: - number: 2 + number: 0 script: {{ PYTHON }} -m pip install . -vvv --no-deps --no-build-isolation --no-cache-dir run_exports: - {{ pin_subpackage('fast-edit-distance', max_pin="x") }} diff --git a/recipes/fastaptamer/build.sh b/recipes/fastaptamer/build.sh index 552c9eeefe138..b8017fd635a55 100644 --- a/recipes/fastaptamer/build.sh +++ b/recipes/fastaptamer/build.sh @@ -1,3 +1,4 @@ #!/bin/bash + mkdir -p ${PREFIX}/bin -cp fastaptamer_* $PREFIX/bin +cp -rf fastaptamer_* $PREFIX/bin diff --git a/recipes/fastaptamer/meta.yaml b/recipes/fastaptamer/meta.yaml index f22fd64ed1930..af4aa20de6d29 100644 --- a/recipes/fastaptamer/meta.yaml +++ b/recipes/fastaptamer/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "1.0.14" %} +{% set version = "1.0.16" %} package: name: fastaptamer @@ -6,11 +6,13 @@ package: source: url: https://github.com/FASTAptamer/FASTAptamer/archive/v{{ version }}.tar.gz - sha256: 261ffd8364fef68a762a94851da6b0e5969e44bafab1a91033afc5499532b446 + sha256: 8333a6d96a4bb44ca45f4f37af10613c5a04e73a83ec1648612c43e383a9140d build: - number: 1 + number: 0 noarch: generic + run_exports: + - {{ pin_subpackage('fastaptamer', max_pin="x") }} requirements: run: @@ -21,7 +23,8 @@ test: - fastaptamer_cluster -h about: - home: http://burkelab.missouri.edu/fastaptamer.html - license: GNU General Public License v3.0 + home: https://burkelab.missouri.edu/fastaptamer.html + license: "GPL-3.0-or-later" + license_family: GPL3 license_file: LICENSE.txt summary: A Bioinformatic Toolkit for High-Throughput Sequence Analysis of Combinatorial Selections diff --git a/recipes/fastlin/meta.yaml b/recipes/fastlin/meta.yaml index 611c110f0b89a..d208f595b3223 100644 --- a/recipes/fastlin/meta.yaml +++ b/recipes/fastlin/meta.yaml @@ -1,5 +1,5 @@ {% set name = "fastlin" %} -{% set version = "0.3.0" %} +{% set version = "0.4.1" %} package: name: {{ name|lower}} @@ -7,10 +7,10 @@ package: source: url: https://github.com/rderelle/fastlin/archive/{{ version }}.tar.gz - sha256: 3d73f83465bef74003e2d8a853a2902a33e289d1acbe1d6a1f4b93ead3ef546e + sha256: 928730bbd2b7c7397b0b69da2e3cc90391f9771bcd33870c7037cc0e4ca1fc4f build: - number: 1 + number: 0 script: "cargo install --no-track --locked --verbose --root \"${PREFIX}\" --path ." run_exports: - {{ pin_subpackage(name, max_pin="x.x") }} diff --git a/recipes/fastq-screen/build.sh b/recipes/fastq-screen/build.sh index 9231a3df38e4f..992b6d8c20941 100644 --- a/recipes/fastq-screen/build.sh +++ b/recipes/fastq-screen/build.sh @@ -1,8 +1,9 @@ #!/bin/bash + fastqscreen=$PREFIX/share/$PKG_NAME-$PKG_VERSION-$PKG_BUILDNUM mkdir -p $fastqscreen sed -i.bak '1 s|^.*$|#!/usr/bin/env perl|g' fastq_screen -cp -r ./* $fastqscreen -rm -f $fastqscreen/fastq_screen.bak +cp -rf ./* $fastqscreen +rm -rf $fastqscreen/fastq_screen.bak mkdir -p $PREFIX/bin -ln -s $fastqscreen/fastq_screen $PREFIX/bin/fastq_screen +ln -sf $fastqscreen/fastq_screen $PREFIX/bin/fastq_screen diff --git a/recipes/fastq-screen/meta.yaml b/recipes/fastq-screen/meta.yaml index 213a3d619d8db..9b5b05615e468 100644 --- a/recipes/fastq-screen/meta.yaml +++ b/recipes/fastq-screen/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "0.15.3" %} -{% set sha256 = "002750d78ca50fe0f789e24445e10988e16244f81b4f0189bf2fc4ee8b680be5" %} +{% set version = "0.16.0" %} +{% set sha256 = "4c193cd4755506a1ecb2ae0e325a4d2e47a26ae093786255be46c38a8d8c16ed" %} package: name: fastq-screen @@ -12,9 +12,11 @@ source: build: noarch: generic number: 0 + run_exports: + - {{ pin_subpackage('fastq-screen', max_pin="x.x") }} requirements: - build: + host: - bowtie - bowtie2 - perl @@ -31,6 +33,8 @@ test: - fastq_screen --version about: - home: 'http://www.bioinformatics.babraham.ac.uk/projects/fastq_screen/' - license: GPLv3 - summary: 'FastQ Screen allows you to screen a library of sequences in FastQ format against a set of sequence databases so you can see if the composition of the library matches with what you expect' + home: 'https://www.bioinformatics.babraham.ac.uk/projects/fastq_screen' + license: GPL-3.0-or-later + license_family: GPL3 + summary: 'FastQ Screen allows you to screen a library of sequences in FastQ format against a set of sequence databases so you can see if the composition of the library matches with what you expect.' + dev_url: https://github.com/StevenWingett/FastQ-Screen diff --git a/recipes/fiji-simple_omero_client/meta.yaml b/recipes/fiji-simple_omero_client/meta.yaml index 98f1a97ecd7cd..ae6d29efb6ced 100644 --- a/recipes/fiji-simple_omero_client/meta.yaml +++ b/recipes/fiji-simple_omero_client/meta.yaml @@ -1,5 +1,5 @@ {% set name = "fiji-simple_omero_client" %} -{% set version = "5.18.0" %} +{% set version = "5.19.0" %} package: name: {{ name | lower }} @@ -7,7 +7,7 @@ package: source: url: https://github.com/GReD-Clermont/simple-omero-client/releases/download/{{ version }}/simple-omero-client-{{ version }}.jar - sha256: 0b70886437e9cf6c2ab1096d6e711c7319b45bac6784ab4aac5fb8ef98e64e61 + sha256: 4d3e592b4d3bd2e9c692cab376d8a1b83ea29ba2a2d56d606ed5de09b5077734 build: number: 0 diff --git a/recipes/fiji/meta.yaml b/recipes/fiji/meta.yaml index 055f596ba2279..32d3dc462697e 100644 --- a/recipes/fiji/meta.yaml +++ b/recipes/fiji/meta.yaml @@ -1,15 +1,16 @@ package: name: fiji - version: 20231211 + version: 20240614 source: - - url: https://downloads.imagej.net/fiji/archive/20231211-1317/fiji-linux64.zip # [linux] - md5: 9292db721a289c13de35dbb882a84c2a # [linux] - - url: https://downloads.imagej.net/fiji/archive/20231211-1317/fiji-macosx.zip # [osx] - md5: 46959cc6a43b7ace2981a9a4a3486e4c # [osx] + - url: https://downloads.imagej.net/fiji/archive/20240614-2117/fiji-linux64.zip # [linux] + md5: 7b210a29f56248252fc5f10eada6e470 # [linux] + - url: https://downloads.imagej.net/fiji/archive/20240614-2117/fiji-macosx.zip # [osx] + md5: f3d107a4569e230770ce7462ee8d94ea # [osx] build: number: 0 + skip: True # [osx] run_exports: - {{ pin_subpackage("fiji", max_pin=None) }} @@ -29,7 +30,7 @@ test: about: home: http://fiji.sc - license: GNU General Public License + license: GPL-3.0-or-later summary: Fiji is an image processing package—a "batteries-included" distribution of ImageJ, bundling a lot of plugins which facilitate scientific image analysis. extra: diff --git a/recipes/galaxy-data/meta.yaml b/recipes/galaxy-data/meta.yaml index 12aa8245714e8..c8e6406f0d915 100644 --- a/recipes/galaxy-data/meta.yaml +++ b/recipes/galaxy-data/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "24.1.1" %} -{% set sha256 = "be4d1ba81589cc5e6d4fb38829c1770483cff6c380b7647aa80b7bc90737f573" %} +{% set version = "24.1.2" %} +{% set sha256 = "d75e5e9e954773c683cb54a655da0c9733f1c6b0f6e691fedb6a1edc6e4aede2" %} {% set galaxy_version = version.split(".")[:2]|join(".") %} package: diff --git a/recipes/galaxy-files/meta.yaml b/recipes/galaxy-files/meta.yaml index f5c2829d09ef4..83a3987023337 100644 --- a/recipes/galaxy-files/meta.yaml +++ b/recipes/galaxy-files/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "24.1.1" %} -{% set sha256 = "d3c23617eed928515fd492fd97588790b1c095fdd298b5f5584307f34846c4ca" %} +{% set version = "24.1.2" %} +{% set sha256 = "39f25b6f9a2f48625bf21fe0021e90768f598db1113867960420afc5988a4e70" %} {% set galaxy_version = version.split(".")[:2]|join(".") %} package: diff --git a/recipes/galaxy-objectstore/meta.yaml b/recipes/galaxy-objectstore/meta.yaml index ed250a556cf83..0581ff15a3a22 100644 --- a/recipes/galaxy-objectstore/meta.yaml +++ b/recipes/galaxy-objectstore/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "24.1.1" %} -{% set sha256 = "0a38e7fedc5c9300507d441c17d745957e1c8a0c65d1b7efde62361bf024eff1" %} +{% set version = "24.1.2" %} +{% set sha256 = "1079e628fb89125792781e9a62711e8281f3cd34eff0cd5ce8ed452d6c06cb3e" %} {% set galaxy_version = version.split(".")[:2]|join(".") %} package: diff --git a/recipes/galaxy-schema/meta.yaml b/recipes/galaxy-schema/meta.yaml index f89975a11c2c7..2cb94358c1d1f 100644 --- a/recipes/galaxy-schema/meta.yaml +++ b/recipes/galaxy-schema/meta.yaml @@ -1,6 +1,6 @@ {% set name = "galaxy-schema" %} -{% set version = "24.1.1" %} -{% set sha256 = "622c65bf1f7fc0cfb5cf6ee844e819a7ceff2b929aca5894848761b3a7df84fa" %} +{% set version = "24.1.2" %} +{% set sha256 = "526d9c7e211da145f4169272a69b4a512304110da3dd9df61d0d305991db5309" %} {% set galaxy_version = version.split(".")[:2]|join(".") %} package: diff --git a/recipes/galaxy_sequence_utils/build.sh b/recipes/galaxy_sequence_utils/build.sh deleted file mode 100755 index 4899c226c8dd0..0000000000000 --- a/recipes/galaxy_sequence_utils/build.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -$PYTHON setup.py install --single-version-externally-managed --record=record.txt - -# Add more build steps here, if they are necessary. - -# See -# http://docs.continuum.io/conda/build.html -# for a list of environment variables that are set during the build process. diff --git a/recipes/galaxy_sequence_utils/meta.yaml b/recipes/galaxy_sequence_utils/meta.yaml index 5e9efa7fccb47..cb980ad17cd3a 100644 --- a/recipes/galaxy_sequence_utils/meta.yaml +++ b/recipes/galaxy_sequence_utils/meta.yaml @@ -1,6 +1,6 @@ {% set name = "galaxy_sequence_utils" %} -{% set version = "1.1.5" %} -{% set sha256 = "c32bd91f6ff11ad6e8b62f8de309d695ef5c33a782afbf5122c1db7144ef1162" %} +{% set version = "1.2.0" %} +{% set sha256 = "103f0e25f5660793253d9ac540c2eb2d7ddc82d16aa0a62c0869b60033898410" %} package: name: {{ name|lower }} @@ -13,13 +13,13 @@ about: summary: Sequence Utilities from the Galaxy project source: - url: https://pypi.io/packages/source/g/galaxy-sequence-utils/galaxy_sequence_utils-{{ version }}.tar.gz + url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/galaxy_sequence_utils-{{ version }}.tar.gz sha256: {{ sha256 }} build: noarch: python - number: 1 - preserve_egg_dir: True + script: {{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + number: 0 run_exports: -{{ pin_subpackage(name, max_pin="x") }} entry_points: @@ -40,17 +40,20 @@ build: requirements: host: - - python + - python >=3.8 - setuptools - - six - + - pip run: - - python - - six + - python >=3.8 test: imports: - galaxy_utils commands: + - gx-fastq-groomer --help - gx-fastq-trimmer-by-quality --help - gx-fastq-masker-by-quality --help + +extra: + recipe-maintainers: + - nsoranzo diff --git a/recipes/gappa/build.sh b/recipes/gappa/build.sh index 2456a7bb675f9..8686b9ce267bb 100644 --- a/recipes/gappa/build.sh +++ b/recipes/gappa/build.sh @@ -8,5 +8,5 @@ make -j ${CPU_COUNT} mkdir -p $PREFIX/bin +chmod 0755 bin/gappa cp bin/gappa $PREFIX/bin - diff --git a/recipes/gappa/meta.yaml b/recipes/gappa/meta.yaml index e1be51a506d49..968f366e34297 100644 --- a/recipes/gappa/meta.yaml +++ b/recipes/gappa/meta.yaml @@ -3,7 +3,7 @@ package: version: "0.8.5" build: - number: 1 + number: 2 run_exports: - {{ pin_subpackage('gappa', max_pin='x.x') }} @@ -17,9 +17,11 @@ requirements: - {{ compiler('cxx') }} - cmake host: - - llvm-openmp # [osx] + - libgomp # [linux] + - llvm-openmp # [osx] - zlib run: + - libgomp # [linux] - llvm-openmp # [osx] test: @@ -29,6 +31,7 @@ test: about: home: https://github.com/lczech/gappa license: GPL-3.0-only + license_family: GPL3 license_file: LICENSE.txt summary: Genesis Applications for Phylogenetic Placement Analysis description: | @@ -42,6 +45,7 @@ about: extra: additional-platforms: - linux-aarch64 + - osx-arm64 identifiers: - doi:10.1093/bioinformatics/btaa070 - doi:10.3389/fbinf.2022.871393 diff --git a/recipes/gbintk/meta.yaml b/recipes/gbintk/meta.yaml index 72a2297b54004..55b527d6a6173 100644 --- a/recipes/gbintk/meta.yaml +++ b/recipes/gbintk/meta.yaml @@ -1,5 +1,5 @@ {% set name = "gbintk" %} -{% set version = "0.1.0" %} +{% set version = "1.0.0" %} package: name: "{{ name|lower }}" @@ -7,11 +7,11 @@ package: source: url: "https://github.com/metagentools/{{ name }}/archive/refs/tags/v{{ version }}.tar.gz" - sha256: 5070e3c0c3c2fecdc585695cad0d9f32111ebe9e40b40da9e7b31a53bd7d7129 + sha256: 9e0784a6ecf826631dd6c8a84f24d4f0df9c80d2800c5615094fb99750326b3c build: - number: 0 - noarch: python + number: 1 + noarch: false entry_points: - gbintk = gbintk.cli:main script: @@ -60,5 +60,7 @@ about: dev_url: "https://github.com/metagentools/gbintk" extra: + skip-lints: + - should_be_noarch_generic recipe-maintainers: - Vini2 diff --git a/recipes/gempipe/meta.yaml b/recipes/gempipe/meta.yaml index f50d683f9316f..53866de36f064 100755 --- a/recipes/gempipe/meta.yaml +++ b/recipes/gempipe/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "1.35.0" %} +{% set version = "1.35.3" %} package: name: "gempipe" @@ -7,7 +7,7 @@ package: source: url: https://github.com/lazzarigioele/gempipe/archive/v{{ version }}.tar.gz - sha256: 412a88c0d9350d15523ca298742468d9786c8713b4da5beb7fbc320a04544566 + sha256: 98652ae059cb2ef582e3ec7d1d4c217ff3c061fcbc758acf0bc1a1e8616a18c0 build: diff --git a/recipes/gencove/meta.yaml b/recipes/gencove/meta.yaml index 1783439bff438..3e73bdf53321c 100644 --- a/recipes/gencove/meta.yaml +++ b/recipes/gencove/meta.yaml @@ -1,6 +1,6 @@ {% set name = "gencove" %} -{% set version = "2.20.2" %} -{% set sha256 = "992f92ee304c29b3ef5d4c5f3381fcb68557f94bc373b6e9f2e20906a437ff96" %} +{% set version = "2.21.0" %} +{% set sha256 = "805be8b0c0f3e8d189bca16a805649e9594d455c0fa183ecd856ee3208287258" %} package: name: {{ name }} diff --git a/recipes/genmod/meta.yaml b/recipes/genmod/meta.yaml index 4b226e225aa97..4bf3f662ad0da 100644 --- a/recipes/genmod/meta.yaml +++ b/recipes/genmod/meta.yaml @@ -1,5 +1,5 @@ {% set name = "genmod" %} -{% set version = "3.8.2" %} +{% set version = "3.8.3" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: 72921cce29fd8d6b99eea76921a0a71d3846abcb92bcb02dafd24886ab9264a3 + sha256: 97a411f3f014557cf57aed9cc18e55e097ab7c54b191eb7995c10dd97d4bdeaf build: number: 0 diff --git a/recipes/genomad/meta.yaml b/recipes/genomad/meta.yaml index b51cf838f00c0..d7cdc637c9c9d 100644 --- a/recipes/genomad/meta.yaml +++ b/recipes/genomad/meta.yaml @@ -1,5 +1,5 @@ {% set name = "genomad" %} -{% set version = "1.8.0" %} +{% set version = "1.8.1" %} package: name: "{{ name|lower }}" @@ -7,10 +7,10 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: 631599f9fea8ea8d07bdc9334e0fc328aed1274968da78f6f5854c0146022233 + sha256: 34f867267529cdbb006332dc77f553f974deb07eaea0649b19bfdebea2bd9371 build: - number: 2 + number: 0 noarch: python script: "{{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir -vvv" entry_points: diff --git a/recipes/genomedata/meta.yaml b/recipes/genomedata/meta.yaml index e2eebeb0d54df..12a66928b7dc5 100644 --- a/recipes/genomedata/meta.yaml +++ b/recipes/genomedata/meta.yaml @@ -1,6 +1,6 @@ {% set name = "genomedata" %} -{% set version = "1.7.2" %} -{% set sha256 = "588efabd6a163af059e945aa6c638b9e9129ab46f27c4a35baafdbfb5f7edbbd" %} +{% set version = "1.7.3" %} +{% set sha256 = "308a2110ec14659f4a9e40d1515e5d9c95ebf808923f0cfbbe5cff4e7a8cce3c" %} package: name: {{ name|lower }} @@ -12,7 +12,7 @@ source: build: skip: True # [osx or py < 39] - number: 2 + number: 1 entry_points: - genomedata-close-data = genomedata._close_data:main - genomedata-erase-data = genomedata._erase_data:main @@ -45,7 +45,7 @@ requirements: - hdf5 - pytables >=3.4.3 - pybigwig - - path.py + - path - textinput - bedtools - ucsc-bigwigtobedgraph >=377 diff --git a/recipes/genomic_address_service/meta.yaml b/recipes/genomic_address_service/meta.yaml index 6eea935428e20..4e65403116784 100644 --- a/recipes/genomic_address_service/meta.yaml +++ b/recipes/genomic_address_service/meta.yaml @@ -1,6 +1,6 @@ {% set name = "genomic_address_service" %} -{% set version = "0.1.1" %} -{% set sha256 = "5aa088e063190561f09c8d5f66f54af5a2c7561e2ad24eaf41055e56331b2954" %} +{% set version = "0.1.2" %} +{% set sha256 = "c338cdca4d23730dc78725226d9ef2853b7aa63e3fc130359fab75cd2df3d34a" %} package: name: {{ name|lower }} @@ -12,7 +12,7 @@ source: build: - number: 1 + number: 0 noarch: python run_exports: - {{ pin_subpackage("genomic_address_service", max_pin="x.x") }} diff --git a/recipes/get_mnv/get_mnv-aarch64.patch b/recipes/get_mnv/get_mnv-aarch64.patch new file mode 100644 index 0000000000000..58564ecf1a63e --- /dev/null +++ b/recipes/get_mnv/get_mnv-aarch64.patch @@ -0,0 +1,11 @@ +--- Cargo.toml.orig 2024-10-07 11:42:31.332000000 +0000 ++++ Cargo.toml 2024-10-07 11:40:19.716000000 +0000 +@@ -12,7 +12,7 @@ + clap = { version = "4.0.32", features = ["derive"] } + env_logger = "0.10" + log = "0.4" +-rust-htslib = { version = "0.37.0", default-features = false, features = ["static"] } ++rust-htslib = { version = "0.47.0", default-features = false, features = ["static"] } + serde = { version = "1.0", features = ["derive"] } + csv = "1.1" + protein-translate = "0.2.0" diff --git a/recipes/get_mnv/meta.yaml b/recipes/get_mnv/meta.yaml new file mode 100644 index 0000000000000..c3415c69574be --- /dev/null +++ b/recipes/get_mnv/meta.yaml @@ -0,0 +1,84 @@ +{% set name = "get_mnv" %} +{% set version = "1.0.0" %} +{% set sha256 = "b9ba6fe1a5f5f73afa98cde9e348f7861d44690f795338816a8a0724a66e1aa8" %} + +package: + name: "{{ name|lower }}" + version: "{{ version }}" + +source: + url: "https://github.com/PathoGenOmics-Lab/{{ name }}/archive/refs/tags/{{ version }}.tar.gz" + sha256: "{{ sha256 }}" + patches: + - get_mnv-aarch64.patch # [aarch64] + +build: + number: 1 + script: | + set -xe + export LANG=C.UTF-8 + export LC_ALL=C.UTF-8 + export RUST_BACKTRACE=1 + export OPENSSL_NO_VENDOR=1 + export OPENSSL_DIR=$PREFIX + export OPENSSL_INCLUDE_DIR=$PREFIX/include + export OPENSSL_LIB_DIR=$PREFIX/lib + export CURL_STATIC_SSL=1 + export CURL_SYS_STATIC=1 + #export CARGO_NET_OFFLINE=true + export HTS_LIB_DIR=$PREFIX/lib + export HTS_INCLUDE_DIR=$PREFIX/include + export LIBCLANG_PATH=$PREFIX/lib # [linux and aarch64] + export CPLUS_INCLUDE_PATH=$PREFIX/include # [linux and aarch64] + export HTS_STATIC=1 + export HTS_SYS_BUNDLED=0 + cargo install --no-track --locked --verbose --root "${PREFIX}" --path . + run_exports: + - {{ pin_subpackage(name, max_pin="x") }} + +requirements: + build: + - {{ compiler('rust') }} + - pkg-config + host: + - openssl + - curl + - htslib + - bzip2 + - xz + - zlib + - clangdev >=16,<17 # [linux and aarch64] + + run: + - {{ pin_compatible('openssl') }} + - {{ pin_compatible('curl') }} + - {{ pin_compatible('htslib') }} + - {{ pin_compatible('bzip2') }} + - {{ pin_compatible('xz') }} + - {{ pin_compatible('zlib') }} + +test: + commands: + - get_mnv --help + - get_mnv --version + +about: + home: "https://github.com/PathoGenOmics-Lab/get_mnv" + license: "GPL-3.0-or-later" + license_family: GPL3 + license_file: LICENSE + summary: "Tool to identify Multi-Nucleotide Variants (MNVs) in genomic sequences." + description: | + get_MNV is a tool designed to identify Multi-Nucleotide Variants (MNVs) within the same codon in genomic sequences, providing more accurate annotation for genomic data. + doc_url: "https://github.com/PathoGenOmics-Lab/get_mnv" + dev_url: "https://github.com/PathoGenOmics-Lab/get_mnv" + +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 + recipe-maintainers: + - PathoGenOmics-Lab + categories: + - Genomics + - Variant Analysis \ No newline at end of file diff --git a/recipes/gfainject/build.sh b/recipes/gfainject/build.sh new file mode 100644 index 0000000000000..9f0dcbc83f9ad --- /dev/null +++ b/recipes/gfainject/build.sh @@ -0,0 +1,7 @@ +#!/bin/bash -euo + +set -xe + +# build statically linked binary with Rust +export RUST_BACKTRACE=1 +cargo install --verbose --path . --root ${PREFIX} --no-track diff --git a/recipes/gfainject/meta.yaml b/recipes/gfainject/meta.yaml new file mode 100644 index 0000000000000..f3d9aa1891954 --- /dev/null +++ b/recipes/gfainject/meta.yaml @@ -0,0 +1,38 @@ +{% set name = "gfainject" %} +{% set version = "0.1.0" %} + +package: + name: {{ name|lower }} + version: {{ version }} + +source: + url: https://github.com/AndreaGuarracino/{{ name }}/archive/refs/tags/v{{ version }}.tar.gz + sha256: a4388e524d5942f53d2fa94a93b2e82c926506c27cfdf04c04fbe8669a7ecebf + +build: + number: 0 + run_exports: + - {{ pin_subpackage(name, max_pin='x.x') }} + +requirements: + build: + - {{ compiler('rust') }} + +test: + commands: + - gfainject --help + +about: + home: https://github.com/AndreaGuarracino/{{ name }} + license: MIT + license_family: MIT + license_file: LICENSE + summary: Inject alignment into pangenome graphs + dev_url: https://github.com/AndreaGuarracino/{{ name }} + +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 + recipe-maintainers: + - AndreaGuarracino diff --git a/recipes/gfastats/build.sh b/recipes/gfastats/build.sh index ebc40b05e0827..541d146c1fbcd 100644 --- a/recipes/gfastats/build.sh +++ b/recipes/gfastats/build.sh @@ -1,9 +1,11 @@ #!/bin/sh +set -xe + export LIBRARY_PATH="${PREFIX}/lib:$LIBRARY_PATH" export CXXFLAGS="-g -Wall -I$PREFIX/include -O3 -I$SRC_DIR/include -I$SRC_DIR/include/zlib -std=gnu++14 -lstdc++" -make -j CXX=$CXX +make -j ${CPU_COUNT} CXX=$CXX mkdir -p $PREFIX/bin/ cp build/bin/gfastats $PREFIX/bin/ diff --git a/recipes/gfastats/meta.yaml b/recipes/gfastats/meta.yaml index e8744f927e173..66a7fdddf5450 100644 --- a/recipes/gfastats/meta.yaml +++ b/recipes/gfastats/meta.yaml @@ -1,16 +1,18 @@ {% set name = "gfastats" %} -{% set version = "1.3.6" %} - +{% set version = "1.3.8" %} + package: name: {{ name }} version: {{ version }} source: - url: https://github.com/vgl-hub/gfastats/releases/download/v{{ version }}/{{ name }}.v{{ version }}.tar.gz - sha256: 9f48bafeca028fa00aa862724857bdfe3d2d44c9509280c094d06f91ea648f66 + git_url: https://github.com/vgl-hub/gfastats.git + git_tag: v{{ version }} build: - number: 3 + number: 0 + run_exports: + - {{ pin_subpackage('gfastats', max_pin="x") }} requirements: build: @@ -30,9 +32,15 @@ about: summary: The swiss army knife for genome assembly extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 identifiers: - biotools:gfastats - usegalaxy-eu:gfastats container: # extended-base generates en_US.UTF-8 locale and sets LC_ALL, LANG properly extended-base: true + skip-lints: + - uses_vcs_url + - missing_hash \ No newline at end of file diff --git a/recipes/gget/meta.yaml b/recipes/gget/meta.yaml index 85619dbaf4cc2..f06207b8c5c82 100644 --- a/recipes/gget/meta.yaml +++ b/recipes/gget/meta.yaml @@ -1,6 +1,6 @@ {% set name = "gget" %} -{% set version = "0.28.6" %} -{% set sha256 = "4cbc60e967a30d79878525cbae64871bf1f7c764427a689a7f55e52720b01f82" %} +{% set version = "0.29.0" %} +{% set sha256 = "5af54af941477bead501d66a0509a8bcf672ba637ef0750bb3faef79959512e3" %} package: name: "{{ name|lower }}" @@ -21,26 +21,26 @@ build: requirements: host: - - python >=3.6 + - python >=3.7 - pip - bs4 - requests >=2.22.0 - pandas >=1.0.0 - ipython - - mysql-connector-python >=8.0.5,<=8.0.29 + - mysql-connector-python >=8.0.32 - matplotlib-base - tqdm - ipywidgets - lxml - numpy >=1.17.2 run: - - python >=3.6 + - python >=3.7 - numpy >=1.17.2 - pandas >=1.0.0 - requests >=2.22.0 - ipython - matplotlib-base - - mysql-connector-python >=8.0.5,<=8.0.29 + - mysql-connector-python >=8.0.32 - bs4 >=4.10.0 - ipywidgets - tqdm @@ -60,10 +60,10 @@ test: about: home: "https://github.com/pachterlab/gget" - license: BSD-2-Clause + license: "BSD-2-Clause" license_family: BSD license_file: LICENSE - summary: "gget enables efficient querying of genomic databases" + summary: "gget enables efficient querying of genomic databases." description: | gget enables efficient querying of genomic databases, such as Ensembl, UniProt, NCBI, directly into a Python or terminal programming environment. It was @@ -75,3 +75,5 @@ extra: recipe-maintainers: - nh13 - lauraluebbert + identifiers: + - doi:10.1093/bioinformatics/btac836 diff --git a/recipes/giatools/meta.yaml b/recipes/giatools/meta.yaml index c3ef78906c776..569685efd8a6a 100644 --- a/recipes/giatools/meta.yaml +++ b/recipes/giatools/meta.yaml @@ -1,5 +1,5 @@ {% set name = "giatools" %} -{% set version = "0.1.2" %} +{% set version = "0.3.1" %} package: name: "{{ name }}" @@ -7,7 +7,7 @@ package: source: url: "https://github.com/BMCV/giatools/archive/refs/tags/{{ version }}.zip" - sha256: a16291b3f3d1868559e8a87d9656a254da9f438e0dcd178ea331b707df3d8f1f + sha256: 3c763086a656514219a9b81fbfe2c4ac1c58a91c58345d18ebd028c44e2eb080 build: number: 0 diff --git a/recipes/gmap/meta.yaml b/recipes/gmap/meta.yaml index 6d429fbd0cae6..71ff7f70c033b 100644 --- a/recipes/gmap/meta.yaml +++ b/recipes/gmap/meta.yaml @@ -1,6 +1,6 @@ {% set name = "GMAP" %} -{% set version = "2024.08.14" %} -{% set sha256 = "45580a7fbfa5422836e27b13df1e5eba148141db27e7fb9b05fc308df101f97a" %} +{% set version = "2024.09.18" %} +{% set sha256 = "00d28c1a8c95295c8edd006cc0d1b5154cabe185de1f5a5dd8ccdb01fab38a18" %} package: name: {{ name|lower }} diff --git a/recipes/gmap/single_quote_paths.patch b/recipes/gmap/single_quote_paths.patch index eb91cc0d478f1..d84b680d54a59 100644 --- a/recipes/gmap/single_quote_paths.patch +++ b/recipes/gmap/single_quote_paths.patch @@ -35,7 +35,7 @@ --- a/util/gmap_build.pl.in 2020-06-01 02:24:13.000000000 +0200 +++ b/util/gmap_build.pl.in 2020-06-18 12:50:12.031880110 +0200 -@@ -14,7 +14,7 @@ +@@ -14,7 +14,7 @@ use Getopt::Long; Getopt::Long::Configure(qw(no_auto_abbrev no_ignore_case_always)); # Default values @@ -44,15 +44,14 @@ my $sampling = 3; my $sleeptime = 2; -@@ -92,7 +92,7 @@ - print STDERR "Writing files under $user_gmapdb\n"; - $gmapdb = $user_gmapdb; +@@ -99,7 +99,7 @@ if (defined($user_genomedb)) { + print STDERR "Writing genome files under $user_genomedb\n"; + $genomedb = $user_genomedb; } else { -- $gmapdb = "@GMAPDB@"; -+ $gmapdb = '@GMAPDB@'; - print STDERR "Destination directory not defined with -D flag, so writing files under $gmapdb\n"; - } - +- $genomedb = "@GMAPDB@"; ++ $genomedb = '@GMAPDB@'; + print STDERR "Destination directory for genome not defined with -D flag, so writing files under $genomedb\n"; + } --- a/util/gmap_cat.pl.in 2020-04-22 20:17:57.000000000 +0200 diff --git a/recipes/goldrush/meta.yaml b/recipes/goldrush/meta.yaml index d922f93a62226..f9a23e06eccd6 100644 --- a/recipes/goldrush/meta.yaml +++ b/recipes/goldrush/meta.yaml @@ -1,13 +1,13 @@ {% set name = "goldrush" %} -{% set version = "1.1.2" %} +{% set version = "1.2.0" %} package: name: {{ name|lower }} version: {{ version }} source: - url: https://github.com/bcgsc/goldrush/releases/download/{{ version }}/{{ name|lower }}-{{ version }}.tar.xz - sha256: a502a90f1d3a0039fb6c00485f9de64f6f25b4f92ecdf8f977e7f3cf106e948f + url: https://github.com/bcgsc/goldrush/releases/download/{{ version }}/{{ name|lower }}-{{ version }}.tar.gz + sha256: 3f70860ed92b9313dbab16efed65ea7bc6080d78b4e18afc8cb910e086a7f0f7 build: skip: true # [py < 38 or win or py > 39] @@ -17,11 +17,11 @@ build: requirements: build: - {{ compiler('cxx') }} - host: - - python - meson - ninja - cmake + host: + - python - llvm-openmp # [osx] - libgomp # [linux] - gperftools @@ -30,6 +30,7 @@ requirements: - libdivsufsort - sparsehash - btllib >=1.6.2 + - intervaltree run: - make - python @@ -39,6 +40,7 @@ requirements: - minimap2 - gperftools - bc + - snakemake test: commands: diff --git a/recipes/graphbin2/meta.yaml b/recipes/graphbin2/meta.yaml index d2123ff197adf..e1f542ba39620 100644 --- a/recipes/graphbin2/meta.yaml +++ b/recipes/graphbin2/meta.yaml @@ -1,5 +1,5 @@ {% set name = "GraphBin2" %} -{% set version = "1.3.2" %} +{% set version = "1.3.3" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://github.com/metagentools/{{ name }}/archive/refs/tags/v{{ version }}.tar.gz" - sha256: 5cb611d539ac2608cf262ea5db39e4d81bc7c9c1a53ea2f5a47fb5d8abcb848a + sha256: 03ab89dbb6d26c9b414ff808598c295cf22fd3af22816a5c9fada94104a79686 build: number: 0 diff --git a/recipes/gsearch/build.sh b/recipes/gsearch/build.sh index 255e702c00317..530cb231081c0 100644 --- a/recipes/gsearch/build.sh +++ b/recipes/gsearch/build.sh @@ -5,4 +5,4 @@ export CARGO_NET_GIT_FETCH_WITH_CLI=true CARGO_HOME="$(pwd)/.cargo" # build statically linked binary with Rust -RUST_BACKTRACE=1 cargo install --features annembed_intel-mkl,simdeez_f --verbose --path . --root $PREFIX +RUST_BACKTRACE=1 cargo install --features simdeez_f --verbose --path . --root $PREFIX diff --git a/recipes/gsearch/meta.yaml b/recipes/gsearch/meta.yaml index e7611a00fd79f..b5933506444d4 100644 --- a/recipes/gsearch/meta.yaml +++ b/recipes/gsearch/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "0.2.1" %} +{% set version = "0.2.2" %} package: name: gsearch @@ -11,7 +11,7 @@ build: skip: True # [osx] source: url: https://github.com/jianshu93/gsearch/archive/v{{ version }}.tar.gz - sha256: baafe82d1f4b46af3365db0803e10528bb1f8f2f2d03d0cd2655d46a02616e5e + sha256: 2f0247712a302f152b1f08d153f5555a5e7d1608b23f6f9a7eb90e6fa2990945 requirements: build: diff --git a/recipes/gsmap/meta.yaml b/recipes/gsmap/meta.yaml new file mode 100644 index 0000000000000..6e49d56bd3d26 --- /dev/null +++ b/recipes/gsmap/meta.yaml @@ -0,0 +1,69 @@ +{% set name = "gsmap" %} +{% set version = "1.70" %} + +package: + name: {{ name }} + version: {{ version }} + +source: + url: "https://pypi.io/packages/source/{{ name[0] }}/gsMap/{{ name }}-{{ version }}.tar.gz" + sha256: 54a8373c79c1ffe71e0b4c1e2cf33aed1a61b742e23efa05b00b8466b3ec3da9 + +build: + noarch: python + number: 0 + script: {{ PYTHON }} -m pip install . --no-deps -vv + run_exports: + - {{ pin_subpackage(name, max_pin="x") }} + +requirements: + host: + - python >=3.8 + - pip + - flit >=3.2,<4 + + run: + - python >=3.8 + - numpy + - pandas + - scipy + - scikit-learn + - matplotlib-base + - seaborn + - tqdm + - progress + - pyyaml + - pyranges + - pyfiglet + - plotly + - kaleido-core + - jinja2 + - scanpy >=1.8 + - zarr + - bitarray + - pyarrow + - scikit-misc + +test: + commands: + - gsmap --help + +about: + home: https://github.com/LeonSong1995/gsMap + license: MIT + license_file: LICENSE + summary: "gsMap (genetically informed spatial mapping of cells for complex traits)" + description: | + gsMap integrates spatial transcriptomics (ST) data with genome-wide association study (GWAS) summary statistics to map cells to human complex traits, including diseases, in a spatially resolved manner. + authors: + - name: liyang + email: songliyang@westlake.edu.cn + - name: wenhao + email: chenwenhao@westlake.edu.cn + doc_url: "https://yanglab.westlake.edu.cn/gsmap/document" + dev_url: "https://github.com/LeonSong1995/gsMap" + +extra: + recipe-maintainers: + - Ganten-Hornby + - leonSong1995 diff --git a/recipes/gtotree/meta.yaml b/recipes/gtotree/meta.yaml index 6955b5089cf72..1a94e22d51527 100644 --- a/recipes/gtotree/meta.yaml +++ b/recipes/gtotree/meta.yaml @@ -1,5 +1,5 @@ {% set name = "GToTree" %} -{% set version = "1.8.6" %} +{% set version = "1.8.8" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: https://github.com/AstrobioMike/GToTree/archive/v{{ version }}.tar.gz - sha256: 1712d9e18f128bbeeb585b1528a8e207c3a36cc7f1dbb7df66416ec0278d5a9a + sha256: 81e5856fa188a5096725605a31a1bf6bf4f8baa1dc2acc83eda29a0ff7a742b5 build: number: 0 diff --git a/recipes/guidescan/build.sh b/recipes/guidescan/build.sh index 2385814a50278..bb59e1fc4528b 100644 --- a/recipes/guidescan/build.sh +++ b/recipes/guidescan/build.sh @@ -1,5 +1,7 @@ #!/bin/bash +set -xe + mkdir -p $PREFIX/bin mkdir -p build @@ -10,6 +12,6 @@ cd build # Further, certain features (related to filesystem/path.h) are only available in macOS 10.15 cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 -make +make -j ${CPU_COUNT} cp bin/guidescan $PREFIX/bin chmod +x $PREFIX/bin/guidescan diff --git a/recipes/guidescan/build_failure.osx-64.yaml b/recipes/guidescan/build_failure.osx-64.yaml deleted file mode 100644 index b8e3ec35afd30..0000000000000 --- a/recipes/guidescan/build_failure.osx-64.yaml +++ /dev/null @@ -1,104 +0,0 @@ -recipe_sha: a17179d188e714827d6bbac62906797d0e10fa8175f281936ae9a98790ac17ae # The commit at which this recipe failed to build. -skiplist: true # Set to true to skiplist this recipe so that it will be ignored as long as its latest commit is the one given above. -log: |2- - - CMake Deprecation Warning at sdsl/external/googletest/googletest/CMakeLists.txt:48 (cmake_minimum_required): - Compatibility with CMake < 2.8.12 will be removed from a future version of - CMake. - - Update the VERSION argument value or use a ... suffix to tell - CMake that the project does not need compatibility with older versions. - - - -- Found PythonInterp: /opt/mambaforge/envs/bioconda/bin/python (found version "3.8.16") - -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success - -- Found Threads: TRUE - -- Looking for C include cstdio - -- Looking for C include cstdio - found - -- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) - -- Found CURL: /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/lib/libcurl.dylib (found version "7.30.0") - -- Configuring done (19.2s) - -- Generating done (1.3s) - -- Build files have been written to: $SRC_DIR/build - [ 0%] Building C object sdsl/external/libdivsufsort/lib/CMakeFiles/divsufsort.dir/divsufsort.o - [ 0%] Building C object sdsl/external/libdivsufsort/lib/CMakeFiles/divsufsort.dir/sssort.o - [ 0%] Building C object sdsl/external/libdivsufsort/lib/CMakeFiles/divsufsort.dir/trsort.o - [ 8%] Building C object sdsl/external/libdivsufsort/lib/CMakeFiles/divsufsort.dir/utils.o - [ 8%] Linking C static library libdivsufsort.a - [ 8%] Built target divsufsort - [ 8%] Building C object sdsl/external/libdivsufsort/lib/CMakeFiles/divsufsort64.dir/divsufsort.o - [ 8%] Building C object sdsl/external/libdivsufsort/lib/CMakeFiles/divsufsort64.dir/sssort.o - [ 16%] Building C object sdsl/external/libdivsufsort/lib/CMakeFiles/divsufsort64.dir/trsort.o - [ 16%] Building C object sdsl/external/libdivsufsort/lib/CMakeFiles/divsufsort64.dir/utils.o - [ 16%] Linking C static library libdivsufsort64.a - [ 16%] Built target divsufsort64 - [ 25%] Building CXX object sdsl/external/googletest/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o - In file included from /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/work/sdsl/external/googletest/googletest/src/gtest-all.cc:39: - In file included from /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/work/sdsl/external/googletest/googletest/include/gtest/gtest.h:62: - In file included from /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/work/sdsl/external/googletest/googletest/include/gtest/gtest-param-test.h:193: - /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/work/sdsl/external/googletest/googletest/include/gtest/internal/gtest-param-util-generated.h:107:8: warning: definition of implicit copy constructor for 'ValueArray2' is deprecated because it has a user-provided copy assignment operator [-Wdeprecated-copy-with-user-provided-copy] - void operator=(const ValueArray2& other); - ^ - /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/work/sdsl/external/googletest/googletest/include/gtest/gtest-param-test.h:354:10: note: in implicit copy constructor for 'testing::internal::ValueArray2' first required here - return internal::ValueArray2(v1, v2); - ^ - /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/work/sdsl/external/googletest/googletest/include/gtest/gtest-param-test.h:1221:10: note: in instantiation of function template specialization 'testing::Values' requested here - return Values(false, true); - ^ - 1 warning generated. - [ 25%] Linking CXX static library libgtest.a - [ 25%] Built target gtest - [ 25%] Building CXX object sdsl/external/googletest/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o - In file included from /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/work/sdsl/external/googletest/googletest/src/gtest_main.cc:32: - In file included from /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/work/sdsl/external/googletest/googletest/include/gtest/gtest.h:62: - In file included from /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/work/sdsl/external/googletest/googletest/include/gtest/gtest-param-test.h:193: - /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/work/sdsl/external/googletest/googletest/include/gtest/internal/gtest-param-util-generated.h:107:8: warning: definition of implicit copy constructor for 'ValueArray2' is deprecated because it has a user-provided copy assignment operator [-Wdeprecated-copy-with-user-provided-copy] - void operator=(const ValueArray2& other); - ^ - /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/work/sdsl/external/googletest/googletest/include/gtest/gtest-param-test.h:354:10: note: in implicit copy constructor for 'testing::internal::ValueArray2' first required here - return internal::ValueArray2(v1, v2); - ^ - /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/work/sdsl/external/googletest/googletest/include/gtest/gtest-param-test.h:1221:10: note: in instantiation of function template specialization 'testing::Values' requested here - return Values(false, true); - ^ - 1 warning generated. - [ 25%] Linking CXX static library libgtest_main.a - [ 25%] Built target gtest_main - [ 33%] Building CXX object sdsl/lib/CMakeFiles/sdsl.dir/bits.cpp.o - In file included from /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/work/sdsl/lib/bits.cpp:17: - In file included from /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/work/build/sdsl/lib/../include/sdsl/bits.hpp:25: - In file included from /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/_build_env/bin/../include/c/v1/iostream:43: - In file included from /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/_build_env/bin/../include/c/v1/ios:221: - In file included from /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/_build_env/bin/../include/c/v1/__locale:18: - In file included from /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/_build_env/bin/../include/c/v1/mutex:191: - In file included from /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/_build_env/bin/../include/c/v1/__memory/shared_ptr.h:22: - In file included from /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/_build_env/bin/../include/c/v1/__memory/allocation_guard.h:14: - In file included from /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/_build_env/bin/../include/c/v1/__memory/allocator_traits.h:14: - In file included from /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/_build_env/bin/../include/c/v1/__memory/construct_at.h:23: - /opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/_build_env/bin/../include/c/v1/new:355:14: error: no member named 'aligned_alloc' in the global namespace - return ::aligned_alloc(__alignment, __size > __rounded_size ? __size : __rounded_size); - ~~^ - 1 error generated. - make[2]: *** [sdsl/lib/CMakeFiles/sdsl.dir/build.make:76: sdsl/lib/CMakeFiles/sdsl.dir/bits.cpp.o] Error 1 - make[1]: *** [CMakeFiles/Makefile2:682: sdsl/lib/CMakeFiles/sdsl.dir/all] Error 2 - make: *** [Makefile:156: all] Error 2 - Traceback (most recent call last): - File "/opt/mambaforge/envs/bioconda/bin/conda-mambabuild", line 10, in - sys.exit(main()) - File "/opt/mambaforge/envs/bioconda/lib/python3.8/site-packages/boa/cli/mambabuild.py", line 256, in main - call_conda_build(action, config) - File "/opt/mambaforge/envs/bioconda/lib/python3.8/site-packages/boa/cli/mambabuild.py", line 228, in call_conda_build - result = api.build( - File "/opt/mambaforge/envs/bioconda/lib/python3.8/site-packages/conda_build/api.py", line 180, in build - return build_tree( - File "/opt/mambaforge/envs/bioconda/lib/python3.8/site-packages/conda_build/build.py", line 3078, in build_tree - packages_from_this = build(metadata, stats, - File "/opt/mambaforge/envs/bioconda/lib/python3.8/site-packages/conda_build/build.py", line 2198, in build - utils.check_call_env(cmd, env=env, rewrite_stdout_env=rewrite_env, - File "/opt/mambaforge/envs/bioconda/lib/python3.8/site-packages/conda_build/utils.py", line 451, in check_call_env - return _func_defaulting_env_to_os_environ("call", *popenargs, **kwargs) - File "/opt/mambaforge/envs/bioconda/lib/python3.8/site-packages/conda_build/utils.py", line 427, in _func_defaulting_env_to_os_environ - raise subprocess.CalledProcessError(proc.returncode, _args) - subprocess.CalledProcessError: Command '['/bin/bash', '-o', 'errexit', '/opt/mambaforge/envs/bioconda/conda-bld/guidescan_1685353540554/work/conda_build.sh']' returned non-zero exit status 2. -# Last 100 lines of the build log. diff --git a/recipes/guidescan/meta.yaml b/recipes/guidescan/meta.yaml index ffd02572d5146..a77e8729aca56 100644 --- a/recipes/guidescan/meta.yaml +++ b/recipes/guidescan/meta.yaml @@ -10,7 +10,7 @@ source: sha256: 24075dc9c391e16af7ac7bf0af4cba0682b420e7ed63ca7c928f16a61adc5ff1 build: - number: 1 + number: 2 run_exports: - {{ pin_subpackage(name, max_pin="x.x") }} @@ -24,6 +24,7 @@ requirements: extra: additional-platforms: + - linux-aarch64 - osx-arm64 test: diff --git a/recipes/gxf2bed/build.sh b/recipes/gxf2bed/build.sh index 8e10cdc3e3237..5502a47bd8e38 100644 --- a/recipes/gxf2bed/build.sh +++ b/recipes/gxf2bed/build.sh @@ -1,9 +1,6 @@ #!/bin/bash -# Add workaround for SSH-based Git connections from Rust/cargo. See https://github.com/rust-lang/cargo/issues/2078 for details. -# We set CARGO_HOME because we don't pass on HOME to conda-build, thus rendering the default "${HOME}/.cargo" defunct. -export CARGO_NET_GIT_FETCH_WITH_CLI=true CARGO_HOME="${BUILD_PREFIX}/.cargo" +set -xe # build statically linked binary with Rust -RUST_BACKTRACE=1 -cargo install --verbose --path . --root ${PREFIX} +RUST_BACKTRACE=1 cargo install --verbose --path . --root ${PREFIX} --no-track diff --git a/recipes/gxf2bed/meta.yaml b/recipes/gxf2bed/meta.yaml index a0b0d0160416c..0521ca13cce91 100644 --- a/recipes/gxf2bed/meta.yaml +++ b/recipes/gxf2bed/meta.yaml @@ -1,5 +1,5 @@ {% set name = "gxf2bed" %} -{% set version = "0.2.2" %} +{% set version = "0.2.3" %} package: name: gxf2bed @@ -7,17 +7,17 @@ package: source: url: https://github.com/alejandrogzi/{{ name }}/archive/refs/tags/v{{ version }}.tar.gz - sha256: ee500e08e8c94b2663ea511482d6520300cb81c9cbbb05a288563e4a808f5377 + sha256: 1f8358a972bded0c4906bf03532ba4ee9f7fc6bf9b84063e4b25b98f37ced45f build: - number: 0 + number: 1 run_exports: - {{ pin_subpackage('gxf2bed', max_pin="x.x") }} requirements: build: - {{ compiler("cxx") }} - - rust >=1.39 + - {{ compiler("rust") }} - pkg-config test: @@ -33,5 +33,8 @@ about: summary: "Fastest GTF/GFF-to-BED converter chilling around" extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 recipe-maintainers: - alejandrogzi diff --git a/recipes/harpy/meta.yaml b/recipes/harpy/meta.yaml index 2043096dc8d2e..7dd9fe1ffeb0c 100644 --- a/recipes/harpy/meta.yaml +++ b/recipes/harpy/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "1.8.1" %} -{% set sha256 = "e51ea8b7156fb628920d75d4bc517c11dae915e20f9cf5e51d29fe05267063a0" %} +{% set version = "1.9" %} +{% set sha256 = "9b9b717eea2eff2d35b3096d5867f34813d1d7ca9d8946df10844c0635b98fd8" %} package: name: harpy @@ -10,7 +10,7 @@ source: sha256: '{{ sha256 }}' build: - number: 0 + number: 1 skip: True # [osx or py < 39] script_env: - SETUPTOOLS_SCM_PRETEND_VERSION={{ version }} @@ -35,6 +35,7 @@ requirements: run: - apptainer - bcftools =1.20 + - conda >24.7 - pandas - pysam - python diff --git a/recipes/haystac/meta.yaml b/recipes/haystac/meta.yaml index dad3655e9430e..3564d22685597 100644 --- a/recipes/haystac/meta.yaml +++ b/recipes/haystac/meta.yaml @@ -1,5 +1,5 @@ {% set name = "haystac" %} -{% set version = "0.4.10" %} +{% set version = "0.4.11" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: 8cf707410549ba312001875a1b11ccf6eb40c10c2b0ca09e9b4c669f585fe022 + sha256: 77727ce69b8df4211c43b424a292cd703987946e889a370337ce4afc7b6f0edd build: number: 0 @@ -15,6 +15,8 @@ build: entry_points: - haystac = haystac.cli:Haystac script: "{{ PYTHON }} -m pip install . -vv --ignore-installed --no-deps" + run_exports: + - {{ pin_subpackage("haystac", max_pin="x.x") }} requirements: host: @@ -24,11 +26,10 @@ requirements: - python - setuptools run: - - argparse =1.4.0 - - numpy =1.19.2 - - pandas =1.0.3 + - numpy =2.0.0 + - pandas =2.2.2 - psutil =5.7.2 - - python =3.6.7 + - python =3.9.19 - pyyaml =5.4.1 - requests =2.24.0 - snakemake-minimal =6.3.0 @@ -53,4 +54,3 @@ extra: - antonisdim skip-lints: - uses_setuptools - diff --git a/recipes/heliano/LICENSE.txt b/recipes/heliano/LICENSE.txt new file mode 100644 index 0000000000000..f288702d2fa16 --- /dev/null +++ b/recipes/heliano/LICENSE.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/recipes/heliano/build.sh b/recipes/heliano/build.sh new file mode 100644 index 0000000000000..6088c7b3dd2c1 --- /dev/null +++ b/recipes/heliano/build.sh @@ -0,0 +1,38 @@ +#!/bin/bash +#Based on https://github.com/TobyBaril/EarlGrey/blob/main/configure +set -x + +# Define paths +PACKAGE_HOME=${PREFIX}/share/${PKG_NAME}-${PKG_VERSION}-${PKG_BUILDNUM} + +# create directories +mkdir -p ${PREFIX}/bin +mkdir -p ${PACKAGE_HOME} + +# put package in share directory +cp -rf * ${PACKAGE_HOME}/ + +# fix file paths +BCHECK=${PACKAGE_HOME}/heliano_bcheck.R +FISHER=${PACKAGE_HOME}/heliano_fisher.R +HMMmodel=${PACKAGE_HOME}/RepHel.hmm +Headermodel=${PACKAGE_HOME}/tclcv.txt +SPLIT=${PACKAGE_HOME}/SplitJoint.R +SORT=${PACKAGE_HOME}/Sort.sh + +sed -i.bak "s|_INTERPRETERPYTHON_PATH_|/usr/bin/env python|" ${PACKAGE_HOME}/heliano.py +sed -i.bak "s|_HMM_|${HMMmodel}|" ${PACKAGE_HOME}/heliano.py +sed -i.bak "s|_HEADER_|${Headermodel}|" ${PACKAGE_HOME}/heliano.py +sed -i.bak "s|_FISHER_|${FISHER}|" ${PACKAGE_HOME}/heliano.py +sed -i.bak "s|_BOUNDARY_|${BCHECK}|" ${PACKAGE_HOME}/heliano.py +sed -i.bak "s|_SPLIT_JOINT_|${SPLIT}|" ${PACKAGE_HOME}/heliano.py +sed -i.bak "s|_SORTPRO_|${SORT}|" ${PACKAGE_HOME}/heliano.py + +# set permissions to files +chmod +x ${PACKAGE_HOME}/heliano.py +chmod +x ${PACKAGE_HOME}/heliano_cons.py + +# put files in the executable bin +cd ${PREFIX}/bin || exit 1 +ln -sf "${PACKAGE_HOME}/heliano.py" heliano +ln -sf "${PACKAGE_HOME}/heliano_cons.py" heliano_cons diff --git a/recipes/heliano/meta.yaml b/recipes/heliano/meta.yaml new file mode 100644 index 0000000000000..10c9d85b021fe --- /dev/null +++ b/recipes/heliano/meta.yaml @@ -0,0 +1,55 @@ +{% set name = "heliano" %} +{% set version = "1.2.1" %} +{% set sha256 = "9aeb0e90913bc817e388eed8961910d138eeb5a5e54f6edd5c49596015b7a6b3" %} + +package: + name: {{ name|lower }} + version: {{ version }} + +source: + url: https://github.com/Zhenlisme/heliano/archive/refs/tags/v{{ version }}.tar.gz + sha256: {{ sha256 }} + +build: + number: 0 + noarch: generic + run_exports: + - {{ pin_subpackage('heliano', max_pin='x') }} + +requirements: + run: + - python >=3.9 + - r-base >=4.1 + - biopython + - pybedtools + - r-bedtoolsr + - r-seqinr + - bedtools + - dialign2 + - mafft + - cd-hit + - blast + - emboss + - hmmer + - genometools-genometools + - rnabob + +test: + commands: + - heliano -h + +about: + home: "https://github.com/Zhenlisme/heliano" + dev_url: "https://github.com/Zhenlisme/heliano" + summary: "HELIANO: A fast and accurate tool for detection of Helitron-like elements" + license: GNU General Public License v3.0 + license_file: LICENSE.txt + description: | + Helitron-like elements (HLE1 and HLE2) are DNA transposons. + They have been found in diverse species and seem to play significant roles in the evolution of host genomes. + Although known for over twenty years, Helitron sequences are still challenging to identify. + Here, we propose HELIANO (Helitron-like elements annotator) as an efficient solution for detecting Helitron-like elements. + +extra: + identifiers: + - doi:10.1093/nar/gkae679 diff --git a/recipes/hifiasm_meta/build.sh b/recipes/hifiasm_meta/build.sh index 038578306214d..203ecd2114aef 100644 --- a/recipes/hifiasm_meta/build.sh +++ b/recipes/hifiasm_meta/build.sh @@ -1,6 +1,8 @@ #!/bin/bash +set -xe + mkdir -p $PREFIX/bin -make INCLUDES="-I$PREFIX/include" CXXFLAGS="-L$PREFIX/lib" CC=${CC} CXX=${CXX} +make -j ${CPU_COUNT} INCLUDES="-I$PREFIX/include" CXXFLAGS="-L$PREFIX/lib" CC=${CC} CXX=${CXX} cp hifiasm_meta $PREFIX/bin diff --git a/recipes/hifiasm_meta/hifiasm_meta-aarch64.patch b/recipes/hifiasm_meta/hifiasm_meta-aarch64.patch new file mode 100644 index 0000000000000..ef87b0fb9cb08 --- /dev/null +++ b/recipes/hifiasm_meta/hifiasm_meta-aarch64.patch @@ -0,0 +1,9358 @@ +diff --git c/Levenshtein_distance.h i/Levenshtein_distance.h +index 5e2a7bf..d17bd01 100644 +--- c/Levenshtein_distance.h ++++ i/Levenshtein_distance.h +@@ -1,10 +1,14 @@ + #ifndef __LEVENSHTEIN__ + #define __LEVENSHTEIN__ + #include ++#ifdef __ARM_NEON ++#include "sse2neon.h" ++#else + #include "emmintrin.h" + #include "nmmintrin.h" + #include "smmintrin.h" + #include ++#endif + #include + #include + #include +diff --git c/Makefile i/Makefile +index a31eb89..56ff4cd 100644 +--- c/Makefile ++++ i/Makefile +@@ -1,6 +1,6 @@ + CXX= g++ + CC= gcc +-CXXFLAGS= -g3 -O3 -msse4.2 -mpopcnt -fomit-frame-pointer -Wall -Wno-unused -Wno-sign-compare ++CXXFLAGS= -g3 -O3 -fomit-frame-pointer -Wall -Wno-unused -Wno-sign-compare + CFLAGS= $(CXXFLAGS) + CPPFLAGS= + INCLUDES= +diff --git c/ksw2_extz2_sse.c i/ksw2_extz2_sse.c +index 02bb4c2..5265fdb 100644 +--- c/ksw2_extz2_sse.c ++++ i/ksw2_extz2_sse.c +@@ -2,8 +2,15 @@ + #include + #include "ksw2.h" + ++#ifdef __ARM_NEON ++#include "sse2neon.h" ++#define __SSE2__ ++#endif ++ + #ifdef __SSE2__ ++#ifdef __x86_64__ + #include ++#endif + + #ifdef KSW_SSE2_ONLY + #undef __SSE4_1__ +diff --git c/sse2neon.h i/sse2neon.h +new file mode 100644 +index 0000000..2b12721 +--- /dev/null ++++ i/sse2neon.h +@@ -0,0 +1,9301 @@ ++#ifndef SSE2NEON_H ++#define SSE2NEON_H ++ ++/* ++ * sse2neon is freely redistributable under the MIT License. ++ * ++ * Copyright (c) 2015-2024 SSE2NEON Contributors. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a copy ++ * of this software and associated documentation files (the "Software"), to deal ++ * in the Software without restriction, including without limitation the rights ++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++ * copies of the Software, and to permit persons to whom the Software is ++ * furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ++ * SOFTWARE. ++ */ ++ ++// This header file provides a simple API translation layer ++// between SSE intrinsics to their corresponding Arm/Aarch64 NEON versions ++// ++// Contributors to this work are: ++// John W. Ratcliff ++// Brandon Rowlett ++// Ken Fast ++// Eric van Beurden ++// Alexander Potylitsin ++// Hasindu Gamaarachchi ++// Jim Huang ++// Mark Cheng ++// Malcolm James MacLeod ++// Devin Hussey (easyaspi314) ++// Sebastian Pop ++// Developer Ecosystem Engineering ++// Danila Kutenin ++// François Turban (JishinMaster) ++// Pei-Hsuan Hung ++// Yang-Hao Yuan ++// Syoyo Fujita ++// Brecht Van Lommel ++// Jonathan Hue ++// Cuda Chen ++// Aymen Qader ++// Anthony Roberts ++ ++/* Tunable configurations */ ++ ++/* Enable precise implementation of math operations ++ * This would slow down the computation a bit, but gives consistent result with ++ * x86 SSE. (e.g. would solve a hole or NaN pixel in the rendering result) ++ */ ++/* _mm_min|max_ps|ss|pd|sd */ ++#ifndef SSE2NEON_PRECISE_MINMAX ++#define SSE2NEON_PRECISE_MINMAX (0) ++#endif ++/* _mm_rcp_ps */ ++#ifndef SSE2NEON_PRECISE_DIV ++#define SSE2NEON_PRECISE_DIV (0) ++#endif ++/* _mm_sqrt_ps and _mm_rsqrt_ps */ ++#ifndef SSE2NEON_PRECISE_SQRT ++#define SSE2NEON_PRECISE_SQRT (0) ++#endif ++/* _mm_dp_pd */ ++#ifndef SSE2NEON_PRECISE_DP ++#define SSE2NEON_PRECISE_DP (0) ++#endif ++ ++/* Enable inclusion of windows.h on MSVC platforms ++ * This makes _mm_clflush functional on windows, as there is no builtin. ++ */ ++#ifndef SSE2NEON_INCLUDE_WINDOWS_H ++#define SSE2NEON_INCLUDE_WINDOWS_H (0) ++#endif ++ ++/* compiler specific definitions */ ++#if defined(__GNUC__) || defined(__clang__) ++#pragma push_macro("FORCE_INLINE") ++#pragma push_macro("ALIGN_STRUCT") ++#define FORCE_INLINE static inline __attribute__((always_inline)) ++#define ALIGN_STRUCT(x) __attribute__((aligned(x))) ++#define _sse2neon_likely(x) __builtin_expect(!!(x), 1) ++#define _sse2neon_unlikely(x) __builtin_expect(!!(x), 0) ++#elif defined(_MSC_VER) ++#if _MSVC_TRADITIONAL ++#error Using the traditional MSVC preprocessor is not supported! Use /Zc:preprocessor instead. ++#endif ++#ifndef FORCE_INLINE ++#define FORCE_INLINE static inline ++#endif ++#ifndef ALIGN_STRUCT ++#define ALIGN_STRUCT(x) __declspec(align(x)) ++#endif ++#define _sse2neon_likely(x) (x) ++#define _sse2neon_unlikely(x) (x) ++#else ++#pragma message("Macro name collisions may happen with unsupported compilers.") ++#endif ++ ++ ++#if defined(__GNUC__) && !defined(__clang__) ++#pragma push_macro("FORCE_INLINE_OPTNONE") ++#define FORCE_INLINE_OPTNONE static inline __attribute__((optimize("O0"))) ++#elif defined(__clang__) ++#pragma push_macro("FORCE_INLINE_OPTNONE") ++#define FORCE_INLINE_OPTNONE static inline __attribute__((optnone)) ++#else ++#define FORCE_INLINE_OPTNONE FORCE_INLINE ++#endif ++ ++#if !defined(__clang__) && defined(__GNUC__) && __GNUC__ < 10 ++#warning "GCC versions earlier than 10 are not supported." ++#endif ++ ++/* C language does not allow initializing a variable with a function call. */ ++#ifdef __cplusplus ++#define _sse2neon_const static const ++#else ++#define _sse2neon_const const ++#endif ++ ++#include ++#include ++ ++#if defined(_WIN32) ++/* Definitions for _mm_{malloc,free} are provided by ++ * from both MinGW-w64 and MSVC. ++ */ ++#define SSE2NEON_ALLOC_DEFINED ++#endif ++ ++/* If using MSVC */ ++#ifdef _MSC_VER ++#include ++#if SSE2NEON_INCLUDE_WINDOWS_H ++#include ++#include ++#endif ++ ++#if !defined(__cplusplus) ++#error SSE2NEON only supports C++ compilation with this compiler ++#endif ++ ++#ifdef SSE2NEON_ALLOC_DEFINED ++#include ++#endif ++ ++#if (defined(_M_AMD64) || defined(__x86_64__)) || \ ++ (defined(_M_ARM64) || defined(__arm64__)) ++#define SSE2NEON_HAS_BITSCAN64 ++#endif ++#endif ++ ++#if defined(__GNUC__) || defined(__clang__) ++#define _sse2neon_define0(type, s, body) \ ++ __extension__({ \ ++ type _a = (s); \ ++ body \ ++ }) ++#define _sse2neon_define1(type, s, body) \ ++ __extension__({ \ ++ type _a = (s); \ ++ body \ ++ }) ++#define _sse2neon_define2(type, a, b, body) \ ++ __extension__({ \ ++ type _a = (a), _b = (b); \ ++ body \ ++ }) ++#define _sse2neon_return(ret) (ret) ++#else ++#define _sse2neon_define0(type, a, body) [=](type _a) { body }(a) ++#define _sse2neon_define1(type, a, body) [](type _a) { body }(a) ++#define _sse2neon_define2(type, a, b, body) \ ++ [](type _a, type _b) { body }((a), (b)) ++#define _sse2neon_return(ret) return ret ++#endif ++ ++#define _sse2neon_init(...) \ ++ { \ ++ __VA_ARGS__ \ ++ } ++ ++/* Compiler barrier */ ++#if defined(_MSC_VER) ++#define SSE2NEON_BARRIER() _ReadWriteBarrier() ++#else ++#define SSE2NEON_BARRIER() \ ++ do { \ ++ __asm__ __volatile__("" ::: "memory"); \ ++ (void) 0; \ ++ } while (0) ++#endif ++ ++/* Memory barriers ++ * __atomic_thread_fence does not include a compiler barrier; instead, ++ * the barrier is part of __atomic_load/__atomic_store's "volatile-like" ++ * semantics. ++ */ ++#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) ++#include ++#endif ++ ++FORCE_INLINE void _sse2neon_smp_mb(void) ++{ ++ SSE2NEON_BARRIER(); ++#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ ++ !defined(__STDC_NO_ATOMICS__) ++ atomic_thread_fence(memory_order_seq_cst); ++#elif defined(__GNUC__) || defined(__clang__) ++ __atomic_thread_fence(__ATOMIC_SEQ_CST); ++#else /* MSVC */ ++ __dmb(_ARM64_BARRIER_ISH); ++#endif ++} ++ ++/* Architecture-specific build options */ ++/* FIXME: #pragma GCC push_options is only available on GCC */ ++#if defined(__GNUC__) ++#if defined(__arm__) && __ARM_ARCH == 7 ++/* According to ARM C Language Extensions Architecture specification, ++ * __ARM_NEON is defined to a value indicating the Advanced SIMD (NEON) ++ * architecture supported. ++ */ ++#if !defined(__ARM_NEON) || !defined(__ARM_NEON__) ++#error "You must enable NEON instructions (e.g. -mfpu=neon) to use SSE2NEON." ++#endif ++#if !defined(__clang__) ++#pragma GCC push_options ++#pragma GCC target("fpu=neon") ++#endif ++#elif defined(__aarch64__) || defined(_M_ARM64) ++#if !defined(__clang__) && !defined(_MSC_VER) ++#pragma GCC push_options ++#pragma GCC target("+simd") ++#endif ++#elif __ARM_ARCH == 8 ++#if !defined(__ARM_NEON) || !defined(__ARM_NEON__) ++#error \ ++ "You must enable NEON instructions (e.g. -mfpu=neon-fp-armv8) to use SSE2NEON." ++#endif ++#if !defined(__clang__) && !defined(_MSC_VER) ++#pragma GCC push_options ++#endif ++#else ++#error \ ++ "Unsupported target. Must be either ARMv7-A+NEON or ARMv8-A \ ++(you could try setting target explicitly with -march or -mcpu)" ++#endif ++#endif ++ ++#include ++#if (!defined(__aarch64__) && !defined(_M_ARM64)) && (__ARM_ARCH == 8) ++#if defined __has_include && __has_include() ++#include ++#endif ++#endif ++ ++/* Apple Silicon cache lines are double of what is commonly used by Intel, AMD ++ * and other Arm microarchitectures use. ++ * From sysctl -a on Apple M1: ++ * hw.cachelinesize: 128 ++ */ ++#if defined(__APPLE__) && (defined(__aarch64__) || defined(__arm64__)) ++#define SSE2NEON_CACHELINE_SIZE 128 ++#else ++#define SSE2NEON_CACHELINE_SIZE 64 ++#endif ++ ++/* Rounding functions require either Aarch64 instructions or libm fallback */ ++#if !defined(__aarch64__) && !defined(_M_ARM64) ++#include ++#endif ++ ++/* On ARMv7, some registers, such as PMUSERENR and PMCCNTR, are read-only ++ * or even not accessible in user mode. ++ * To write or access to these registers in user mode, ++ * we have to perform syscall instead. ++ */ ++#if (!defined(__aarch64__) && !defined(_M_ARM64)) ++#include ++#endif ++ ++/* "__has_builtin" can be used to query support for built-in functions ++ * provided by gcc/clang and other compilers that support it. ++ */ ++#ifndef __has_builtin /* GCC prior to 10 or non-clang compilers */ ++/* Compatibility with gcc <= 9 */ ++#if defined(__GNUC__) && (__GNUC__ <= 9) ++#define __has_builtin(x) HAS##x ++#define HAS__builtin_popcount 1 ++#define HAS__builtin_popcountll 1 ++ ++// __builtin_shuffle introduced in GCC 4.7.0 ++#if (__GNUC__ >= 5) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) ++#define HAS__builtin_shuffle 1 ++#else ++#define HAS__builtin_shuffle 0 ++#endif ++ ++#define HAS__builtin_shufflevector 0 ++#define HAS__builtin_nontemporal_store 0 ++#else ++#define __has_builtin(x) 0 ++#endif ++#endif ++ ++/** ++ * MACRO for shuffle parameter for _mm_shuffle_ps(). ++ * Argument fp3 is a digit[0123] that represents the fp from argument "b" ++ * of mm_shuffle_ps that will be placed in fp3 of result. fp2 is the same ++ * for fp2 in result. fp1 is a digit[0123] that represents the fp from ++ * argument "a" of mm_shuffle_ps that will be places in fp1 of result. ++ * fp0 is the same for fp0 of result. ++ */ ++#define _MM_SHUFFLE(fp3, fp2, fp1, fp0) \ ++ (((fp3) << 6) | ((fp2) << 4) | ((fp1) << 2) | ((fp0))) ++ ++#if __has_builtin(__builtin_shufflevector) ++#define _sse2neon_shuffle(type, a, b, ...) \ ++ __builtin_shufflevector(a, b, __VA_ARGS__) ++#elif __has_builtin(__builtin_shuffle) ++#define _sse2neon_shuffle(type, a, b, ...) \ ++ __extension__({ \ ++ type tmp = {__VA_ARGS__}; \ ++ __builtin_shuffle(a, b, tmp); \ ++ }) ++#endif ++ ++#ifdef _sse2neon_shuffle ++#define vshuffle_s16(a, b, ...) _sse2neon_shuffle(int16x4_t, a, b, __VA_ARGS__) ++#define vshuffleq_s16(a, b, ...) _sse2neon_shuffle(int16x8_t, a, b, __VA_ARGS__) ++#define vshuffle_s32(a, b, ...) _sse2neon_shuffle(int32x2_t, a, b, __VA_ARGS__) ++#define vshuffleq_s32(a, b, ...) _sse2neon_shuffle(int32x4_t, a, b, __VA_ARGS__) ++#define vshuffle_s64(a, b, ...) _sse2neon_shuffle(int64x1_t, a, b, __VA_ARGS__) ++#define vshuffleq_s64(a, b, ...) _sse2neon_shuffle(int64x2_t, a, b, __VA_ARGS__) ++#endif ++ ++/* Rounding mode macros. */ ++#define _MM_FROUND_TO_NEAREST_INT 0x00 ++#define _MM_FROUND_TO_NEG_INF 0x01 ++#define _MM_FROUND_TO_POS_INF 0x02 ++#define _MM_FROUND_TO_ZERO 0x03 ++#define _MM_FROUND_CUR_DIRECTION 0x04 ++#define _MM_FROUND_NO_EXC 0x08 ++#define _MM_FROUND_RAISE_EXC 0x00 ++#define _MM_FROUND_NINT (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_RAISE_EXC) ++#define _MM_FROUND_FLOOR (_MM_FROUND_TO_NEG_INF | _MM_FROUND_RAISE_EXC) ++#define _MM_FROUND_CEIL (_MM_FROUND_TO_POS_INF | _MM_FROUND_RAISE_EXC) ++#define _MM_FROUND_TRUNC (_MM_FROUND_TO_ZERO | _MM_FROUND_RAISE_EXC) ++#define _MM_FROUND_RINT (_MM_FROUND_CUR_DIRECTION | _MM_FROUND_RAISE_EXC) ++#define _MM_FROUND_NEARBYINT (_MM_FROUND_CUR_DIRECTION | _MM_FROUND_NO_EXC) ++#define _MM_ROUND_NEAREST 0x0000 ++#define _MM_ROUND_DOWN 0x2000 ++#define _MM_ROUND_UP 0x4000 ++#define _MM_ROUND_TOWARD_ZERO 0x6000 ++/* Flush zero mode macros. */ ++#define _MM_FLUSH_ZERO_MASK 0x8000 ++#define _MM_FLUSH_ZERO_ON 0x8000 ++#define _MM_FLUSH_ZERO_OFF 0x0000 ++/* Denormals are zeros mode macros. */ ++#define _MM_DENORMALS_ZERO_MASK 0x0040 ++#define _MM_DENORMALS_ZERO_ON 0x0040 ++#define _MM_DENORMALS_ZERO_OFF 0x0000 ++ ++/* indicate immediate constant argument in a given range */ ++#define __constrange(a, b) const ++ ++/* A few intrinsics accept traditional data types like ints or floats, but ++ * most operate on data types that are specific to SSE. ++ * If a vector type ends in d, it contains doubles, and if it does not have ++ * a suffix, it contains floats. An integer vector type can contain any type ++ * of integer, from chars to shorts to unsigned long longs. ++ */ ++typedef int64x1_t __m64; ++typedef float32x4_t __m128; /* 128-bit vector containing 4 floats */ ++// On ARM 32-bit architecture, the float64x2_t is not supported. ++// The data type __m128d should be represented in a different way for related ++// intrinsic conversion. ++#if defined(__aarch64__) || defined(_M_ARM64) ++typedef float64x2_t __m128d; /* 128-bit vector containing 2 doubles */ ++#else ++typedef float32x4_t __m128d; ++#endif ++typedef int64x2_t __m128i; /* 128-bit vector containing integers */ ++ ++// Some intrinsics operate on unaligned data types. ++typedef int16_t ALIGN_STRUCT(1) unaligned_int16_t; ++typedef int32_t ALIGN_STRUCT(1) unaligned_int32_t; ++typedef int64_t ALIGN_STRUCT(1) unaligned_int64_t; ++ ++// __int64 is defined in the Intrinsics Guide which maps to different datatype ++// in different data model ++#if !(defined(_WIN32) || defined(_WIN64) || defined(__int64)) ++#if (defined(__x86_64__) || defined(__i386__)) ++#define __int64 long long ++#else ++#define __int64 int64_t ++#endif ++#endif ++ ++/* type-safe casting between types */ ++ ++#define vreinterpretq_m128_f16(x) vreinterpretq_f32_f16(x) ++#define vreinterpretq_m128_f32(x) (x) ++#define vreinterpretq_m128_f64(x) vreinterpretq_f32_f64(x) ++ ++#define vreinterpretq_m128_u8(x) vreinterpretq_f32_u8(x) ++#define vreinterpretq_m128_u16(x) vreinterpretq_f32_u16(x) ++#define vreinterpretq_m128_u32(x) vreinterpretq_f32_u32(x) ++#define vreinterpretq_m128_u64(x) vreinterpretq_f32_u64(x) ++ ++#define vreinterpretq_m128_s8(x) vreinterpretq_f32_s8(x) ++#define vreinterpretq_m128_s16(x) vreinterpretq_f32_s16(x) ++#define vreinterpretq_m128_s32(x) vreinterpretq_f32_s32(x) ++#define vreinterpretq_m128_s64(x) vreinterpretq_f32_s64(x) ++ ++#define vreinterpretq_f16_m128(x) vreinterpretq_f16_f32(x) ++#define vreinterpretq_f32_m128(x) (x) ++#define vreinterpretq_f64_m128(x) vreinterpretq_f64_f32(x) ++ ++#define vreinterpretq_u8_m128(x) vreinterpretq_u8_f32(x) ++#define vreinterpretq_u16_m128(x) vreinterpretq_u16_f32(x) ++#define vreinterpretq_u32_m128(x) vreinterpretq_u32_f32(x) ++#define vreinterpretq_u64_m128(x) vreinterpretq_u64_f32(x) ++ ++#define vreinterpretq_s8_m128(x) vreinterpretq_s8_f32(x) ++#define vreinterpretq_s16_m128(x) vreinterpretq_s16_f32(x) ++#define vreinterpretq_s32_m128(x) vreinterpretq_s32_f32(x) ++#define vreinterpretq_s64_m128(x) vreinterpretq_s64_f32(x) ++ ++#define vreinterpretq_m128i_s8(x) vreinterpretq_s64_s8(x) ++#define vreinterpretq_m128i_s16(x) vreinterpretq_s64_s16(x) ++#define vreinterpretq_m128i_s32(x) vreinterpretq_s64_s32(x) ++#define vreinterpretq_m128i_s64(x) (x) ++ ++#define vreinterpretq_m128i_u8(x) vreinterpretq_s64_u8(x) ++#define vreinterpretq_m128i_u16(x) vreinterpretq_s64_u16(x) ++#define vreinterpretq_m128i_u32(x) vreinterpretq_s64_u32(x) ++#define vreinterpretq_m128i_u64(x) vreinterpretq_s64_u64(x) ++ ++#define vreinterpretq_f32_m128i(x) vreinterpretq_f32_s64(x) ++#define vreinterpretq_f64_m128i(x) vreinterpretq_f64_s64(x) ++ ++#define vreinterpretq_s8_m128i(x) vreinterpretq_s8_s64(x) ++#define vreinterpretq_s16_m128i(x) vreinterpretq_s16_s64(x) ++#define vreinterpretq_s32_m128i(x) vreinterpretq_s32_s64(x) ++#define vreinterpretq_s64_m128i(x) (x) ++ ++#define vreinterpretq_u8_m128i(x) vreinterpretq_u8_s64(x) ++#define vreinterpretq_u16_m128i(x) vreinterpretq_u16_s64(x) ++#define vreinterpretq_u32_m128i(x) vreinterpretq_u32_s64(x) ++#define vreinterpretq_u64_m128i(x) vreinterpretq_u64_s64(x) ++ ++#define vreinterpret_m64_s8(x) vreinterpret_s64_s8(x) ++#define vreinterpret_m64_s16(x) vreinterpret_s64_s16(x) ++#define vreinterpret_m64_s32(x) vreinterpret_s64_s32(x) ++#define vreinterpret_m64_s64(x) (x) ++ ++#define vreinterpret_m64_u8(x) vreinterpret_s64_u8(x) ++#define vreinterpret_m64_u16(x) vreinterpret_s64_u16(x) ++#define vreinterpret_m64_u32(x) vreinterpret_s64_u32(x) ++#define vreinterpret_m64_u64(x) vreinterpret_s64_u64(x) ++ ++#define vreinterpret_m64_f16(x) vreinterpret_s64_f16(x) ++#define vreinterpret_m64_f32(x) vreinterpret_s64_f32(x) ++#define vreinterpret_m64_f64(x) vreinterpret_s64_f64(x) ++ ++#define vreinterpret_u8_m64(x) vreinterpret_u8_s64(x) ++#define vreinterpret_u16_m64(x) vreinterpret_u16_s64(x) ++#define vreinterpret_u32_m64(x) vreinterpret_u32_s64(x) ++#define vreinterpret_u64_m64(x) vreinterpret_u64_s64(x) ++ ++#define vreinterpret_s8_m64(x) vreinterpret_s8_s64(x) ++#define vreinterpret_s16_m64(x) vreinterpret_s16_s64(x) ++#define vreinterpret_s32_m64(x) vreinterpret_s32_s64(x) ++#define vreinterpret_s64_m64(x) (x) ++ ++#define vreinterpret_f32_m64(x) vreinterpret_f32_s64(x) ++ ++#if defined(__aarch64__) || defined(_M_ARM64) ++#define vreinterpretq_m128d_s32(x) vreinterpretq_f64_s32(x) ++#define vreinterpretq_m128d_s64(x) vreinterpretq_f64_s64(x) ++ ++#define vreinterpretq_m128d_u64(x) vreinterpretq_f64_u64(x) ++ ++#define vreinterpretq_m128d_f32(x) vreinterpretq_f64_f32(x) ++#define vreinterpretq_m128d_f64(x) (x) ++ ++#define vreinterpretq_s64_m128d(x) vreinterpretq_s64_f64(x) ++ ++#define vreinterpretq_u32_m128d(x) vreinterpretq_u32_f64(x) ++#define vreinterpretq_u64_m128d(x) vreinterpretq_u64_f64(x) ++ ++#define vreinterpretq_f64_m128d(x) (x) ++#define vreinterpretq_f32_m128d(x) vreinterpretq_f32_f64(x) ++#else ++#define vreinterpretq_m128d_s32(x) vreinterpretq_f32_s32(x) ++#define vreinterpretq_m128d_s64(x) vreinterpretq_f32_s64(x) ++ ++#define vreinterpretq_m128d_u32(x) vreinterpretq_f32_u32(x) ++#define vreinterpretq_m128d_u64(x) vreinterpretq_f32_u64(x) ++ ++#define vreinterpretq_m128d_f32(x) (x) ++ ++#define vreinterpretq_s64_m128d(x) vreinterpretq_s64_f32(x) ++ ++#define vreinterpretq_u32_m128d(x) vreinterpretq_u32_f32(x) ++#define vreinterpretq_u64_m128d(x) vreinterpretq_u64_f32(x) ++ ++#define vreinterpretq_f32_m128d(x) (x) ++#endif ++ ++// A struct is defined in this header file called 'SIMDVec' which can be used ++// by applications which attempt to access the contents of an __m128 struct ++// directly. It is important to note that accessing the __m128 struct directly ++// is bad coding practice by Microsoft: @see: ++// https://learn.microsoft.com/en-us/cpp/cpp/m128 ++// ++// However, some legacy source code may try to access the contents of an __m128 ++// struct directly so the developer can use the SIMDVec as an alias for it. Any ++// casting must be done manually by the developer, as you cannot cast or ++// otherwise alias the base NEON data type for intrinsic operations. ++// ++// union intended to allow direct access to an __m128 variable using the names ++// that the MSVC compiler provides. This union should really only be used when ++// trying to access the members of the vector as integer values. GCC/clang ++// allow native access to the float members through a simple array access ++// operator (in C since 4.6, in C++ since 4.8). ++// ++// Ideally direct accesses to SIMD vectors should not be used since it can cause ++// a performance hit. If it really is needed however, the original __m128 ++// variable can be aliased with a pointer to this union and used to access ++// individual components. The use of this union should be hidden behind a macro ++// that is used throughout the codebase to access the members instead of always ++// declaring this type of variable. ++typedef union ALIGN_STRUCT(16) SIMDVec { ++ float m128_f32[4]; // as floats - DON'T USE. Added for convenience. ++ int8_t m128_i8[16]; // as signed 8-bit integers. ++ int16_t m128_i16[8]; // as signed 16-bit integers. ++ int32_t m128_i32[4]; // as signed 32-bit integers. ++ int64_t m128_i64[2]; // as signed 64-bit integers. ++ uint8_t m128_u8[16]; // as unsigned 8-bit integers. ++ uint16_t m128_u16[8]; // as unsigned 16-bit integers. ++ uint32_t m128_u32[4]; // as unsigned 32-bit integers. ++ uint64_t m128_u64[2]; // as unsigned 64-bit integers. ++} SIMDVec; ++ ++// casting using SIMDVec ++#define vreinterpretq_nth_u64_m128i(x, n) (((SIMDVec *) &x)->m128_u64[n]) ++#define vreinterpretq_nth_u32_m128i(x, n) (((SIMDVec *) &x)->m128_u32[n]) ++#define vreinterpretq_nth_u8_m128i(x, n) (((SIMDVec *) &x)->m128_u8[n]) ++ ++/* SSE macros */ ++#define _MM_GET_FLUSH_ZERO_MODE _sse2neon_mm_get_flush_zero_mode ++#define _MM_SET_FLUSH_ZERO_MODE _sse2neon_mm_set_flush_zero_mode ++#define _MM_GET_DENORMALS_ZERO_MODE _sse2neon_mm_get_denormals_zero_mode ++#define _MM_SET_DENORMALS_ZERO_MODE _sse2neon_mm_set_denormals_zero_mode ++ ++// Function declaration ++// SSE ++FORCE_INLINE unsigned int _MM_GET_ROUNDING_MODE(void); ++FORCE_INLINE __m128 _mm_move_ss(__m128, __m128); ++FORCE_INLINE __m128 _mm_or_ps(__m128, __m128); ++FORCE_INLINE __m128 _mm_set_ps1(float); ++FORCE_INLINE __m128 _mm_setzero_ps(void); ++// SSE2 ++FORCE_INLINE __m128i _mm_and_si128(__m128i, __m128i); ++FORCE_INLINE __m128i _mm_castps_si128(__m128); ++FORCE_INLINE __m128i _mm_cmpeq_epi32(__m128i, __m128i); ++FORCE_INLINE __m128i _mm_cvtps_epi32(__m128); ++FORCE_INLINE __m128d _mm_move_sd(__m128d, __m128d); ++FORCE_INLINE __m128i _mm_or_si128(__m128i, __m128i); ++FORCE_INLINE __m128i _mm_set_epi32(int, int, int, int); ++FORCE_INLINE __m128i _mm_set_epi64x(int64_t, int64_t); ++FORCE_INLINE __m128d _mm_set_pd(double, double); ++FORCE_INLINE __m128i _mm_set1_epi32(int); ++FORCE_INLINE __m128i _mm_setzero_si128(void); ++// SSE4.1 ++FORCE_INLINE __m128d _mm_ceil_pd(__m128d); ++FORCE_INLINE __m128 _mm_ceil_ps(__m128); ++FORCE_INLINE __m128d _mm_floor_pd(__m128d); ++FORCE_INLINE __m128 _mm_floor_ps(__m128); ++FORCE_INLINE_OPTNONE __m128d _mm_round_pd(__m128d, int); ++FORCE_INLINE_OPTNONE __m128 _mm_round_ps(__m128, int); ++// SSE4.2 ++FORCE_INLINE uint32_t _mm_crc32_u8(uint32_t, uint8_t); ++ ++/* Backwards compatibility for compilers with lack of specific type support */ ++ ++// Older gcc does not define vld1q_u8_x4 type ++#if defined(__GNUC__) && !defined(__clang__) && \ ++ ((__GNUC__ <= 13 && defined(__arm__)) || \ ++ (__GNUC__ == 10 && __GNUC_MINOR__ < 3 && defined(__aarch64__)) || \ ++ (__GNUC__ <= 9 && defined(__aarch64__))) ++FORCE_INLINE uint8x16x4_t _sse2neon_vld1q_u8_x4(const uint8_t *p) ++{ ++ uint8x16x4_t ret; ++ ret.val[0] = vld1q_u8(p + 0); ++ ret.val[1] = vld1q_u8(p + 16); ++ ret.val[2] = vld1q_u8(p + 32); ++ ret.val[3] = vld1q_u8(p + 48); ++ return ret; ++} ++#else ++// Wraps vld1q_u8_x4 ++FORCE_INLINE uint8x16x4_t _sse2neon_vld1q_u8_x4(const uint8_t *p) ++{ ++ return vld1q_u8_x4(p); ++} ++#endif ++ ++#if !defined(__aarch64__) && !defined(_M_ARM64) ++/* emulate vaddv u8 variant */ ++FORCE_INLINE uint8_t _sse2neon_vaddv_u8(uint8x8_t v8) ++{ ++ const uint64x1_t v1 = vpaddl_u32(vpaddl_u16(vpaddl_u8(v8))); ++ return vget_lane_u8(vreinterpret_u8_u64(v1), 0); ++} ++#else ++// Wraps vaddv_u8 ++FORCE_INLINE uint8_t _sse2neon_vaddv_u8(uint8x8_t v8) ++{ ++ return vaddv_u8(v8); ++} ++#endif ++ ++#if !defined(__aarch64__) && !defined(_M_ARM64) ++/* emulate vaddvq u8 variant */ ++FORCE_INLINE uint8_t _sse2neon_vaddvq_u8(uint8x16_t a) ++{ ++ uint8x8_t tmp = vpadd_u8(vget_low_u8(a), vget_high_u8(a)); ++ uint8_t res = 0; ++ for (int i = 0; i < 8; ++i) ++ res += tmp[i]; ++ return res; ++} ++#else ++// Wraps vaddvq_u8 ++FORCE_INLINE uint8_t _sse2neon_vaddvq_u8(uint8x16_t a) ++{ ++ return vaddvq_u8(a); ++} ++#endif ++ ++#if !defined(__aarch64__) && !defined(_M_ARM64) ++/* emulate vaddvq u16 variant */ ++FORCE_INLINE uint16_t _sse2neon_vaddvq_u16(uint16x8_t a) ++{ ++ uint32x4_t m = vpaddlq_u16(a); ++ uint64x2_t n = vpaddlq_u32(m); ++ uint64x1_t o = vget_low_u64(n) + vget_high_u64(n); ++ ++ return vget_lane_u32((uint32x2_t) o, 0); ++} ++#else ++// Wraps vaddvq_u16 ++FORCE_INLINE uint16_t _sse2neon_vaddvq_u16(uint16x8_t a) ++{ ++ return vaddvq_u16(a); ++} ++#endif ++ ++/* Function Naming Conventions ++ * The naming convention of SSE intrinsics is straightforward. A generic SSE ++ * intrinsic function is given as follows: ++ * _mm__ ++ * ++ * The parts of this format are given as follows: ++ * 1. describes the operation performed by the intrinsic ++ * 2. identifies the data type of the function's primary arguments ++ * ++ * This last part, , is a little complicated. It identifies the ++ * content of the input values, and can be set to any of the following values: ++ * + ps - vectors contain floats (ps stands for packed single-precision) ++ * + pd - vectors contain doubles (pd stands for packed double-precision) ++ * + epi8/epi16/epi32/epi64 - vectors contain 8-bit/16-bit/32-bit/64-bit ++ * signed integers ++ * + epu8/epu16/epu32/epu64 - vectors contain 8-bit/16-bit/32-bit/64-bit ++ * unsigned integers ++ * + si128 - unspecified 128-bit vector or 256-bit vector ++ * + m128/m128i/m128d - identifies input vector types when they are different ++ * than the type of the returned vector ++ * ++ * For example, _mm_setzero_ps. The _mm implies that the function returns ++ * a 128-bit vector. The _ps at the end implies that the argument vectors ++ * contain floats. ++ * ++ * A complete example: Byte Shuffle - pshufb (_mm_shuffle_epi8) ++ * // Set packed 16-bit integers. 128 bits, 8 short, per 16 bits ++ * __m128i v_in = _mm_setr_epi16(1, 2, 3, 4, 5, 6, 7, 8); ++ * // Set packed 8-bit integers ++ * // 128 bits, 16 chars, per 8 bits ++ * __m128i v_perm = _mm_setr_epi8(1, 0, 2, 3, 8, 9, 10, 11, ++ * 4, 5, 12, 13, 6, 7, 14, 15); ++ * // Shuffle packed 8-bit integers ++ * __m128i v_out = _mm_shuffle_epi8(v_in, v_perm); // pshufb ++ */ ++ ++/* Constants for use with _mm_prefetch. */ ++enum _mm_hint { ++ _MM_HINT_NTA = 0, /* load data to L1 and L2 cache, mark it as NTA */ ++ _MM_HINT_T0 = 1, /* load data to L1 and L2 cache */ ++ _MM_HINT_T1 = 2, /* load data to L2 cache only */ ++ _MM_HINT_T2 = 3, /* load data to L2 cache only, mark it as NTA */ ++}; ++ ++// The bit field mapping to the FPCR(floating-point control register) ++typedef struct { ++ uint16_t res0; ++ uint8_t res1 : 6; ++ uint8_t bit22 : 1; ++ uint8_t bit23 : 1; ++ uint8_t bit24 : 1; ++ uint8_t res2 : 7; ++#if defined(__aarch64__) || defined(_M_ARM64) ++ uint32_t res3; ++#endif ++} fpcr_bitfield; ++ ++// Takes the upper 64 bits of a and places it in the low end of the result ++// Takes the lower 64 bits of b and places it into the high end of the result. ++FORCE_INLINE __m128 _mm_shuffle_ps_1032(__m128 a, __m128 b) ++{ ++ float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); ++ float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); ++ return vreinterpretq_m128_f32(vcombine_f32(a32, b10)); ++} ++ ++// takes the lower two 32-bit values from a and swaps them and places in high ++// end of result takes the higher two 32 bit values from b and swaps them and ++// places in low end of result. ++FORCE_INLINE __m128 _mm_shuffle_ps_2301(__m128 a, __m128 b) ++{ ++ float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); ++ float32x2_t b23 = vrev64_f32(vget_high_f32(vreinterpretq_f32_m128(b))); ++ return vreinterpretq_m128_f32(vcombine_f32(a01, b23)); ++} ++ ++FORCE_INLINE __m128 _mm_shuffle_ps_0321(__m128 a, __m128 b) ++{ ++ float32x2_t a21 = vget_high_f32( ++ vextq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 3)); ++ float32x2_t b03 = vget_low_f32( ++ vextq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b), 3)); ++ return vreinterpretq_m128_f32(vcombine_f32(a21, b03)); ++} ++ ++FORCE_INLINE __m128 _mm_shuffle_ps_2103(__m128 a, __m128 b) ++{ ++ float32x2_t a03 = vget_low_f32( ++ vextq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 3)); ++ float32x2_t b21 = vget_high_f32( ++ vextq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b), 3)); ++ return vreinterpretq_m128_f32(vcombine_f32(a03, b21)); ++} ++ ++FORCE_INLINE __m128 _mm_shuffle_ps_1010(__m128 a, __m128 b) ++{ ++ float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); ++ float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); ++ return vreinterpretq_m128_f32(vcombine_f32(a10, b10)); ++} ++ ++FORCE_INLINE __m128 _mm_shuffle_ps_1001(__m128 a, __m128 b) ++{ ++ float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); ++ float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); ++ return vreinterpretq_m128_f32(vcombine_f32(a01, b10)); ++} ++ ++FORCE_INLINE __m128 _mm_shuffle_ps_0101(__m128 a, __m128 b) ++{ ++ float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); ++ float32x2_t b01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(b))); ++ return vreinterpretq_m128_f32(vcombine_f32(a01, b01)); ++} ++ ++// keeps the low 64 bits of b in the low and puts the high 64 bits of a in the ++// high ++FORCE_INLINE __m128 _mm_shuffle_ps_3210(__m128 a, __m128 b) ++{ ++ float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); ++ float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); ++ return vreinterpretq_m128_f32(vcombine_f32(a10, b32)); ++} ++ ++FORCE_INLINE __m128 _mm_shuffle_ps_0011(__m128 a, __m128 b) ++{ ++ float32x2_t a11 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(a)), 1); ++ float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); ++ return vreinterpretq_m128_f32(vcombine_f32(a11, b00)); ++} ++ ++FORCE_INLINE __m128 _mm_shuffle_ps_0022(__m128 a, __m128 b) ++{ ++ float32x2_t a22 = ++ vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(a)), 0); ++ float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); ++ return vreinterpretq_m128_f32(vcombine_f32(a22, b00)); ++} ++ ++FORCE_INLINE __m128 _mm_shuffle_ps_2200(__m128 a, __m128 b) ++{ ++ float32x2_t a00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(a)), 0); ++ float32x2_t b22 = ++ vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(b)), 0); ++ return vreinterpretq_m128_f32(vcombine_f32(a00, b22)); ++} ++ ++FORCE_INLINE __m128 _mm_shuffle_ps_3202(__m128 a, __m128 b) ++{ ++ float32_t a0 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); ++ float32x2_t a22 = ++ vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(a)), 0); ++ float32x2_t a02 = vset_lane_f32(a0, a22, 1); /* TODO: use vzip ?*/ ++ float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); ++ return vreinterpretq_m128_f32(vcombine_f32(a02, b32)); ++} ++ ++FORCE_INLINE __m128 _mm_shuffle_ps_1133(__m128 a, __m128 b) ++{ ++ float32x2_t a33 = ++ vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(a)), 1); ++ float32x2_t b11 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 1); ++ return vreinterpretq_m128_f32(vcombine_f32(a33, b11)); ++} ++ ++FORCE_INLINE __m128 _mm_shuffle_ps_2010(__m128 a, __m128 b) ++{ ++ float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); ++ float32_t b2 = vgetq_lane_f32(vreinterpretq_f32_m128(b), 2); ++ float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); ++ float32x2_t b20 = vset_lane_f32(b2, b00, 1); ++ return vreinterpretq_m128_f32(vcombine_f32(a10, b20)); ++} ++ ++FORCE_INLINE __m128 _mm_shuffle_ps_2001(__m128 a, __m128 b) ++{ ++ float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); ++ float32_t b2 = vgetq_lane_f32(b, 2); ++ float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); ++ float32x2_t b20 = vset_lane_f32(b2, b00, 1); ++ return vreinterpretq_m128_f32(vcombine_f32(a01, b20)); ++} ++ ++FORCE_INLINE __m128 _mm_shuffle_ps_2032(__m128 a, __m128 b) ++{ ++ float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); ++ float32_t b2 = vgetq_lane_f32(b, 2); ++ float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); ++ float32x2_t b20 = vset_lane_f32(b2, b00, 1); ++ return vreinterpretq_m128_f32(vcombine_f32(a32, b20)); ++} ++ ++// For MSVC, we check only if it is ARM64, as every single ARM64 processor ++// supported by WoA has crypto extensions. If this changes in the future, ++// this can be verified via the runtime-only method of: ++// IsProcessorFeaturePresent(PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE) ++#if (defined(_M_ARM64) && !defined(__clang__)) || \ ++ (defined(__ARM_FEATURE_CRYPTO) && \ ++ (defined(__aarch64__) || __has_builtin(__builtin_arm_crypto_vmullp64))) ++// Wraps vmull_p64 ++FORCE_INLINE uint64x2_t _sse2neon_vmull_p64(uint64x1_t _a, uint64x1_t _b) ++{ ++ poly64_t a = vget_lane_p64(vreinterpret_p64_u64(_a), 0); ++ poly64_t b = vget_lane_p64(vreinterpret_p64_u64(_b), 0); ++#if defined(_MSC_VER) ++ __n64 a1 = {a}, b1 = {b}; ++ return vreinterpretq_u64_p128(vmull_p64(a1, b1)); ++#else ++ return vreinterpretq_u64_p128(vmull_p64(a, b)); ++#endif ++} ++#else // ARMv7 polyfill ++// ARMv7/some A64 lacks vmull_p64, but it has vmull_p8. ++// ++// vmull_p8 calculates 8 8-bit->16-bit polynomial multiplies, but we need a ++// 64-bit->128-bit polynomial multiply. ++// ++// It needs some work and is somewhat slow, but it is still faster than all ++// known scalar methods. ++// ++// Algorithm adapted to C from ++// https://www.workofard.com/2017/07/ghash-for-low-end-cores/, which is adapted ++// from "Fast Software Polynomial Multiplication on ARM Processors Using the ++// NEON Engine" by Danilo Camara, Conrado Gouvea, Julio Lopez and Ricardo Dahab ++// (https://hal.inria.fr/hal-01506572) ++static uint64x2_t _sse2neon_vmull_p64(uint64x1_t _a, uint64x1_t _b) ++{ ++ poly8x8_t a = vreinterpret_p8_u64(_a); ++ poly8x8_t b = vreinterpret_p8_u64(_b); ++ ++ // Masks ++ uint8x16_t k48_32 = vcombine_u8(vcreate_u8(0x0000ffffffffffff), ++ vcreate_u8(0x00000000ffffffff)); ++ uint8x16_t k16_00 = vcombine_u8(vcreate_u8(0x000000000000ffff), ++ vcreate_u8(0x0000000000000000)); ++ ++ // Do the multiplies, rotating with vext to get all combinations ++ uint8x16_t d = vreinterpretq_u8_p16(vmull_p8(a, b)); // D = A0 * B0 ++ uint8x16_t e = ++ vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 1))); // E = A0 * B1 ++ uint8x16_t f = ++ vreinterpretq_u8_p16(vmull_p8(vext_p8(a, a, 1), b)); // F = A1 * B0 ++ uint8x16_t g = ++ vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 2))); // G = A0 * B2 ++ uint8x16_t h = ++ vreinterpretq_u8_p16(vmull_p8(vext_p8(a, a, 2), b)); // H = A2 * B0 ++ uint8x16_t i = ++ vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 3))); // I = A0 * B3 ++ uint8x16_t j = ++ vreinterpretq_u8_p16(vmull_p8(vext_p8(a, a, 3), b)); // J = A3 * B0 ++ uint8x16_t k = ++ vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 4))); // L = A0 * B4 ++ ++ // Add cross products ++ uint8x16_t l = veorq_u8(e, f); // L = E + F ++ uint8x16_t m = veorq_u8(g, h); // M = G + H ++ uint8x16_t n = veorq_u8(i, j); // N = I + J ++ ++ // Interleave. Using vzip1 and vzip2 prevents Clang from emitting TBL ++ // instructions. ++#if defined(__aarch64__) ++ uint8x16_t lm_p0 = vreinterpretq_u8_u64( ++ vzip1q_u64(vreinterpretq_u64_u8(l), vreinterpretq_u64_u8(m))); ++ uint8x16_t lm_p1 = vreinterpretq_u8_u64( ++ vzip2q_u64(vreinterpretq_u64_u8(l), vreinterpretq_u64_u8(m))); ++ uint8x16_t nk_p0 = vreinterpretq_u8_u64( ++ vzip1q_u64(vreinterpretq_u64_u8(n), vreinterpretq_u64_u8(k))); ++ uint8x16_t nk_p1 = vreinterpretq_u8_u64( ++ vzip2q_u64(vreinterpretq_u64_u8(n), vreinterpretq_u64_u8(k))); ++#else ++ uint8x16_t lm_p0 = vcombine_u8(vget_low_u8(l), vget_low_u8(m)); ++ uint8x16_t lm_p1 = vcombine_u8(vget_high_u8(l), vget_high_u8(m)); ++ uint8x16_t nk_p0 = vcombine_u8(vget_low_u8(n), vget_low_u8(k)); ++ uint8x16_t nk_p1 = vcombine_u8(vget_high_u8(n), vget_high_u8(k)); ++#endif ++ // t0 = (L) (P0 + P1) << 8 ++ // t1 = (M) (P2 + P3) << 16 ++ uint8x16_t t0t1_tmp = veorq_u8(lm_p0, lm_p1); ++ uint8x16_t t0t1_h = vandq_u8(lm_p1, k48_32); ++ uint8x16_t t0t1_l = veorq_u8(t0t1_tmp, t0t1_h); ++ ++ // t2 = (N) (P4 + P5) << 24 ++ // t3 = (K) (P6 + P7) << 32 ++ uint8x16_t t2t3_tmp = veorq_u8(nk_p0, nk_p1); ++ uint8x16_t t2t3_h = vandq_u8(nk_p1, k16_00); ++ uint8x16_t t2t3_l = veorq_u8(t2t3_tmp, t2t3_h); ++ ++ // De-interleave ++#if defined(__aarch64__) ++ uint8x16_t t0 = vreinterpretq_u8_u64( ++ vuzp1q_u64(vreinterpretq_u64_u8(t0t1_l), vreinterpretq_u64_u8(t0t1_h))); ++ uint8x16_t t1 = vreinterpretq_u8_u64( ++ vuzp2q_u64(vreinterpretq_u64_u8(t0t1_l), vreinterpretq_u64_u8(t0t1_h))); ++ uint8x16_t t2 = vreinterpretq_u8_u64( ++ vuzp1q_u64(vreinterpretq_u64_u8(t2t3_l), vreinterpretq_u64_u8(t2t3_h))); ++ uint8x16_t t3 = vreinterpretq_u8_u64( ++ vuzp2q_u64(vreinterpretq_u64_u8(t2t3_l), vreinterpretq_u64_u8(t2t3_h))); ++#else ++ uint8x16_t t1 = vcombine_u8(vget_high_u8(t0t1_l), vget_high_u8(t0t1_h)); ++ uint8x16_t t0 = vcombine_u8(vget_low_u8(t0t1_l), vget_low_u8(t0t1_h)); ++ uint8x16_t t3 = vcombine_u8(vget_high_u8(t2t3_l), vget_high_u8(t2t3_h)); ++ uint8x16_t t2 = vcombine_u8(vget_low_u8(t2t3_l), vget_low_u8(t2t3_h)); ++#endif ++ // Shift the cross products ++ uint8x16_t t0_shift = vextq_u8(t0, t0, 15); // t0 << 8 ++ uint8x16_t t1_shift = vextq_u8(t1, t1, 14); // t1 << 16 ++ uint8x16_t t2_shift = vextq_u8(t2, t2, 13); // t2 << 24 ++ uint8x16_t t3_shift = vextq_u8(t3, t3, 12); // t3 << 32 ++ ++ // Accumulate the products ++ uint8x16_t cross1 = veorq_u8(t0_shift, t1_shift); ++ uint8x16_t cross2 = veorq_u8(t2_shift, t3_shift); ++ uint8x16_t mix = veorq_u8(d, cross1); ++ uint8x16_t r = veorq_u8(mix, cross2); ++ return vreinterpretq_u64_u8(r); ++} ++#endif // ARMv7 polyfill ++ ++// C equivalent: ++// __m128i _mm_shuffle_epi32_default(__m128i a, ++// __constrange(0, 255) int imm) { ++// __m128i ret; ++// ret[0] = a[imm & 0x3]; ret[1] = a[(imm >> 2) & 0x3]; ++// ret[2] = a[(imm >> 4) & 0x03]; ret[3] = a[(imm >> 6) & 0x03]; ++// return ret; ++// } ++#define _mm_shuffle_epi32_default(a, imm) \ ++ vreinterpretq_m128i_s32(vsetq_lane_s32( \ ++ vgetq_lane_s32(vreinterpretq_s32_m128i(a), ((imm) >> 6) & 0x3), \ ++ vsetq_lane_s32( \ ++ vgetq_lane_s32(vreinterpretq_s32_m128i(a), ((imm) >> 4) & 0x3), \ ++ vsetq_lane_s32(vgetq_lane_s32(vreinterpretq_s32_m128i(a), \ ++ ((imm) >> 2) & 0x3), \ ++ vmovq_n_s32(vgetq_lane_s32( \ ++ vreinterpretq_s32_m128i(a), (imm) & (0x3))), \ ++ 1), \ ++ 2), \ ++ 3)) ++ ++// Takes the upper 64 bits of a and places it in the low end of the result ++// Takes the lower 64 bits of a and places it into the high end of the result. ++FORCE_INLINE __m128i _mm_shuffle_epi_1032(__m128i a) ++{ ++ int32x2_t a32 = vget_high_s32(vreinterpretq_s32_m128i(a)); ++ int32x2_t a10 = vget_low_s32(vreinterpretq_s32_m128i(a)); ++ return vreinterpretq_m128i_s32(vcombine_s32(a32, a10)); ++} ++ ++// takes the lower two 32-bit values from a and swaps them and places in low end ++// of result takes the higher two 32 bit values from a and swaps them and places ++// in high end of result. ++FORCE_INLINE __m128i _mm_shuffle_epi_2301(__m128i a) ++{ ++ int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); ++ int32x2_t a23 = vrev64_s32(vget_high_s32(vreinterpretq_s32_m128i(a))); ++ return vreinterpretq_m128i_s32(vcombine_s32(a01, a23)); ++} ++ ++// rotates the least significant 32 bits into the most significant 32 bits, and ++// shifts the rest down ++FORCE_INLINE __m128i _mm_shuffle_epi_0321(__m128i a) ++{ ++ return vreinterpretq_m128i_s32( ++ vextq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(a), 1)); ++} ++ ++// rotates the most significant 32 bits into the least significant 32 bits, and ++// shifts the rest up ++FORCE_INLINE __m128i _mm_shuffle_epi_2103(__m128i a) ++{ ++ return vreinterpretq_m128i_s32( ++ vextq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(a), 3)); ++} ++ ++// gets the lower 64 bits of a, and places it in the upper 64 bits ++// gets the lower 64 bits of a and places it in the lower 64 bits ++FORCE_INLINE __m128i _mm_shuffle_epi_1010(__m128i a) ++{ ++ int32x2_t a10 = vget_low_s32(vreinterpretq_s32_m128i(a)); ++ return vreinterpretq_m128i_s32(vcombine_s32(a10, a10)); ++} ++ ++// gets the lower 64 bits of a, swaps the 0 and 1 elements, and places it in the ++// lower 64 bits gets the lower 64 bits of a, and places it in the upper 64 bits ++FORCE_INLINE __m128i _mm_shuffle_epi_1001(__m128i a) ++{ ++ int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); ++ int32x2_t a10 = vget_low_s32(vreinterpretq_s32_m128i(a)); ++ return vreinterpretq_m128i_s32(vcombine_s32(a01, a10)); ++} ++ ++// gets the lower 64 bits of a, swaps the 0 and 1 elements and places it in the ++// upper 64 bits gets the lower 64 bits of a, swaps the 0 and 1 elements, and ++// places it in the lower 64 bits ++FORCE_INLINE __m128i _mm_shuffle_epi_0101(__m128i a) ++{ ++ int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); ++ return vreinterpretq_m128i_s32(vcombine_s32(a01, a01)); ++} ++ ++FORCE_INLINE __m128i _mm_shuffle_epi_2211(__m128i a) ++{ ++ int32x2_t a11 = vdup_lane_s32(vget_low_s32(vreinterpretq_s32_m128i(a)), 1); ++ int32x2_t a22 = vdup_lane_s32(vget_high_s32(vreinterpretq_s32_m128i(a)), 0); ++ return vreinterpretq_m128i_s32(vcombine_s32(a11, a22)); ++} ++ ++FORCE_INLINE __m128i _mm_shuffle_epi_0122(__m128i a) ++{ ++ int32x2_t a22 = vdup_lane_s32(vget_high_s32(vreinterpretq_s32_m128i(a)), 0); ++ int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); ++ return vreinterpretq_m128i_s32(vcombine_s32(a22, a01)); ++} ++ ++FORCE_INLINE __m128i _mm_shuffle_epi_3332(__m128i a) ++{ ++ int32x2_t a32 = vget_high_s32(vreinterpretq_s32_m128i(a)); ++ int32x2_t a33 = vdup_lane_s32(vget_high_s32(vreinterpretq_s32_m128i(a)), 1); ++ return vreinterpretq_m128i_s32(vcombine_s32(a32, a33)); ++} ++ ++#if defined(__aarch64__) || defined(_M_ARM64) ++#define _mm_shuffle_epi32_splat(a, imm) \ ++ vreinterpretq_m128i_s32(vdupq_laneq_s32(vreinterpretq_s32_m128i(a), (imm))) ++#else ++#define _mm_shuffle_epi32_splat(a, imm) \ ++ vreinterpretq_m128i_s32( \ ++ vdupq_n_s32(vgetq_lane_s32(vreinterpretq_s32_m128i(a), (imm)))) ++#endif ++ ++// NEON does not support a general purpose permute intrinsic. ++// Shuffle single-precision (32-bit) floating-point elements in a using the ++// control in imm8, and store the results in dst. ++// ++// C equivalent: ++// __m128 _mm_shuffle_ps_default(__m128 a, __m128 b, ++// __constrange(0, 255) int imm) { ++// __m128 ret; ++// ret[0] = a[imm & 0x3]; ret[1] = a[(imm >> 2) & 0x3]; ++// ret[2] = b[(imm >> 4) & 0x03]; ret[3] = b[(imm >> 6) & 0x03]; ++// return ret; ++// } ++// ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_ps ++#define _mm_shuffle_ps_default(a, b, imm) \ ++ vreinterpretq_m128_f32(vsetq_lane_f32( \ ++ vgetq_lane_f32(vreinterpretq_f32_m128(b), ((imm) >> 6) & 0x3), \ ++ vsetq_lane_f32( \ ++ vgetq_lane_f32(vreinterpretq_f32_m128(b), ((imm) >> 4) & 0x3), \ ++ vsetq_lane_f32( \ ++ vgetq_lane_f32(vreinterpretq_f32_m128(a), ((imm) >> 2) & 0x3), \ ++ vmovq_n_f32( \ ++ vgetq_lane_f32(vreinterpretq_f32_m128(a), (imm) & (0x3))), \ ++ 1), \ ++ 2), \ ++ 3)) ++ ++// Shuffle 16-bit integers in the low 64 bits of a using the control in imm8. ++// Store the results in the low 64 bits of dst, with the high 64 bits being ++// copied from a to dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shufflelo_epi16 ++#define _mm_shufflelo_epi16_function(a, imm) \ ++ _sse2neon_define1( \ ++ __m128i, a, int16x8_t ret = vreinterpretq_s16_m128i(_a); \ ++ int16x4_t lowBits = vget_low_s16(ret); \ ++ ret = vsetq_lane_s16(vget_lane_s16(lowBits, (imm) & (0x3)), ret, 0); \ ++ ret = vsetq_lane_s16(vget_lane_s16(lowBits, ((imm) >> 2) & 0x3), ret, \ ++ 1); \ ++ ret = vsetq_lane_s16(vget_lane_s16(lowBits, ((imm) >> 4) & 0x3), ret, \ ++ 2); \ ++ ret = vsetq_lane_s16(vget_lane_s16(lowBits, ((imm) >> 6) & 0x3), ret, \ ++ 3); \ ++ _sse2neon_return(vreinterpretq_m128i_s16(ret));) ++ ++// Shuffle 16-bit integers in the high 64 bits of a using the control in imm8. ++// Store the results in the high 64 bits of dst, with the low 64 bits being ++// copied from a to dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shufflehi_epi16 ++#define _mm_shufflehi_epi16_function(a, imm) \ ++ _sse2neon_define1( \ ++ __m128i, a, int16x8_t ret = vreinterpretq_s16_m128i(_a); \ ++ int16x4_t highBits = vget_high_s16(ret); \ ++ ret = vsetq_lane_s16(vget_lane_s16(highBits, (imm) & (0x3)), ret, 4); \ ++ ret = vsetq_lane_s16(vget_lane_s16(highBits, ((imm) >> 2) & 0x3), ret, \ ++ 5); \ ++ ret = vsetq_lane_s16(vget_lane_s16(highBits, ((imm) >> 4) & 0x3), ret, \ ++ 6); \ ++ ret = vsetq_lane_s16(vget_lane_s16(highBits, ((imm) >> 6) & 0x3), ret, \ ++ 7); \ ++ _sse2neon_return(vreinterpretq_m128i_s16(ret));) ++ ++/* MMX */ ++ ++//_mm_empty is a no-op on arm ++FORCE_INLINE void _mm_empty(void) {} ++ ++/* SSE */ ++ ++// Add packed single-precision (32-bit) floating-point elements in a and b, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_ps ++FORCE_INLINE __m128 _mm_add_ps(__m128 a, __m128 b) ++{ ++ return vreinterpretq_m128_f32( ++ vaddq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); ++} ++ ++// Add the lower single-precision (32-bit) floating-point element in a and b, ++// store the result in the lower element of dst, and copy the upper 3 packed ++// elements from a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_ss ++FORCE_INLINE __m128 _mm_add_ss(__m128 a, __m128 b) ++{ ++ float32_t b0 = vgetq_lane_f32(vreinterpretq_f32_m128(b), 0); ++ float32x4_t value = vsetq_lane_f32(b0, vdupq_n_f32(0), 0); ++ // the upper values in the result must be the remnants of . ++ return vreinterpretq_m128_f32(vaddq_f32(a, value)); ++} ++ ++// Compute the bitwise AND of packed single-precision (32-bit) floating-point ++// elements in a and b, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_and_ps ++FORCE_INLINE __m128 _mm_and_ps(__m128 a, __m128 b) ++{ ++ return vreinterpretq_m128_s32( ++ vandq_s32(vreinterpretq_s32_m128(a), vreinterpretq_s32_m128(b))); ++} ++ ++// Compute the bitwise NOT of packed single-precision (32-bit) floating-point ++// elements in a and then AND with b, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_andnot_ps ++FORCE_INLINE __m128 _mm_andnot_ps(__m128 a, __m128 b) ++{ ++ return vreinterpretq_m128_s32( ++ vbicq_s32(vreinterpretq_s32_m128(b), ++ vreinterpretq_s32_m128(a))); // *NOTE* argument swap ++} ++ ++// Average packed unsigned 16-bit integers in a and b, and store the results in ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_avg_pu16 ++FORCE_INLINE __m64 _mm_avg_pu16(__m64 a, __m64 b) ++{ ++ return vreinterpret_m64_u16( ++ vrhadd_u16(vreinterpret_u16_m64(a), vreinterpret_u16_m64(b))); ++} ++ ++// Average packed unsigned 8-bit integers in a and b, and store the results in ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_avg_pu8 ++FORCE_INLINE __m64 _mm_avg_pu8(__m64 a, __m64 b) ++{ ++ return vreinterpret_m64_u8( ++ vrhadd_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))); ++} ++ ++// Compare packed single-precision (32-bit) floating-point elements in a and b ++// for equality, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_ps ++FORCE_INLINE __m128 _mm_cmpeq_ps(__m128 a, __m128 b) ++{ ++ return vreinterpretq_m128_u32( ++ vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); ++} ++ ++// Compare the lower single-precision (32-bit) floating-point elements in a and ++// b for equality, store the result in the lower element of dst, and copy the ++// upper 3 packed elements from a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_ss ++FORCE_INLINE __m128 _mm_cmpeq_ss(__m128 a, __m128 b) ++{ ++ return _mm_move_ss(a, _mm_cmpeq_ps(a, b)); ++} ++ ++// Compare packed single-precision (32-bit) floating-point elements in a and b ++// for greater-than-or-equal, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpge_ps ++FORCE_INLINE __m128 _mm_cmpge_ps(__m128 a, __m128 b) ++{ ++ return vreinterpretq_m128_u32( ++ vcgeq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); ++} ++ ++// Compare the lower single-precision (32-bit) floating-point elements in a and ++// b for greater-than-or-equal, store the result in the lower element of dst, ++// and copy the upper 3 packed elements from a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpge_ss ++FORCE_INLINE __m128 _mm_cmpge_ss(__m128 a, __m128 b) ++{ ++ return _mm_move_ss(a, _mm_cmpge_ps(a, b)); ++} ++ ++// Compare packed single-precision (32-bit) floating-point elements in a and b ++// for greater-than, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_ps ++FORCE_INLINE __m128 _mm_cmpgt_ps(__m128 a, __m128 b) ++{ ++ return vreinterpretq_m128_u32( ++ vcgtq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); ++} ++ ++// Compare the lower single-precision (32-bit) floating-point elements in a and ++// b for greater-than, store the result in the lower element of dst, and copy ++// the upper 3 packed elements from a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_ss ++FORCE_INLINE __m128 _mm_cmpgt_ss(__m128 a, __m128 b) ++{ ++ return _mm_move_ss(a, _mm_cmpgt_ps(a, b)); ++} ++ ++// Compare packed single-precision (32-bit) floating-point elements in a and b ++// for less-than-or-equal, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmple_ps ++FORCE_INLINE __m128 _mm_cmple_ps(__m128 a, __m128 b) ++{ ++ return vreinterpretq_m128_u32( ++ vcleq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); ++} ++ ++// Compare the lower single-precision (32-bit) floating-point elements in a and ++// b for less-than-or-equal, store the result in the lower element of dst, and ++// copy the upper 3 packed elements from a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmple_ss ++FORCE_INLINE __m128 _mm_cmple_ss(__m128 a, __m128 b) ++{ ++ return _mm_move_ss(a, _mm_cmple_ps(a, b)); ++} ++ ++// Compare packed single-precision (32-bit) floating-point elements in a and b ++// for less-than, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_ps ++FORCE_INLINE __m128 _mm_cmplt_ps(__m128 a, __m128 b) ++{ ++ return vreinterpretq_m128_u32( ++ vcltq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); ++} ++ ++// Compare the lower single-precision (32-bit) floating-point elements in a and ++// b for less-than, store the result in the lower element of dst, and copy the ++// upper 3 packed elements from a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_ss ++FORCE_INLINE __m128 _mm_cmplt_ss(__m128 a, __m128 b) ++{ ++ return _mm_move_ss(a, _mm_cmplt_ps(a, b)); ++} ++ ++// Compare packed single-precision (32-bit) floating-point elements in a and b ++// for not-equal, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpneq_ps ++FORCE_INLINE __m128 _mm_cmpneq_ps(__m128 a, __m128 b) ++{ ++ return vreinterpretq_m128_u32(vmvnq_u32( ++ vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); ++} ++ ++// Compare the lower single-precision (32-bit) floating-point elements in a and ++// b for not-equal, store the result in the lower element of dst, and copy the ++// upper 3 packed elements from a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpneq_ss ++FORCE_INLINE __m128 _mm_cmpneq_ss(__m128 a, __m128 b) ++{ ++ return _mm_move_ss(a, _mm_cmpneq_ps(a, b)); ++} ++ ++// Compare packed single-precision (32-bit) floating-point elements in a and b ++// for not-greater-than-or-equal, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnge_ps ++FORCE_INLINE __m128 _mm_cmpnge_ps(__m128 a, __m128 b) ++{ ++ return vreinterpretq_m128_u32(vmvnq_u32( ++ vcgeq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); ++} ++ ++// Compare the lower single-precision (32-bit) floating-point elements in a and ++// b for not-greater-than-or-equal, store the result in the lower element of ++// dst, and copy the upper 3 packed elements from a to the upper elements of ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnge_ss ++FORCE_INLINE __m128 _mm_cmpnge_ss(__m128 a, __m128 b) ++{ ++ return _mm_move_ss(a, _mm_cmpnge_ps(a, b)); ++} ++ ++// Compare packed single-precision (32-bit) floating-point elements in a and b ++// for not-greater-than, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpngt_ps ++FORCE_INLINE __m128 _mm_cmpngt_ps(__m128 a, __m128 b) ++{ ++ return vreinterpretq_m128_u32(vmvnq_u32( ++ vcgtq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); ++} ++ ++// Compare the lower single-precision (32-bit) floating-point elements in a and ++// b for not-greater-than, store the result in the lower element of dst, and ++// copy the upper 3 packed elements from a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpngt_ss ++FORCE_INLINE __m128 _mm_cmpngt_ss(__m128 a, __m128 b) ++{ ++ return _mm_move_ss(a, _mm_cmpngt_ps(a, b)); ++} ++ ++// Compare packed single-precision (32-bit) floating-point elements in a and b ++// for not-less-than-or-equal, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnle_ps ++FORCE_INLINE __m128 _mm_cmpnle_ps(__m128 a, __m128 b) ++{ ++ return vreinterpretq_m128_u32(vmvnq_u32( ++ vcleq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); ++} ++ ++// Compare the lower single-precision (32-bit) floating-point elements in a and ++// b for not-less-than-or-equal, store the result in the lower element of dst, ++// and copy the upper 3 packed elements from a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnle_ss ++FORCE_INLINE __m128 _mm_cmpnle_ss(__m128 a, __m128 b) ++{ ++ return _mm_move_ss(a, _mm_cmpnle_ps(a, b)); ++} ++ ++// Compare packed single-precision (32-bit) floating-point elements in a and b ++// for not-less-than, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnlt_ps ++FORCE_INLINE __m128 _mm_cmpnlt_ps(__m128 a, __m128 b) ++{ ++ return vreinterpretq_m128_u32(vmvnq_u32( ++ vcltq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); ++} ++ ++// Compare the lower single-precision (32-bit) floating-point elements in a and ++// b for not-less-than, store the result in the lower element of dst, and copy ++// the upper 3 packed elements from a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnlt_ss ++FORCE_INLINE __m128 _mm_cmpnlt_ss(__m128 a, __m128 b) ++{ ++ return _mm_move_ss(a, _mm_cmpnlt_ps(a, b)); ++} ++ ++// Compare packed single-precision (32-bit) floating-point elements in a and b ++// to see if neither is NaN, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpord_ps ++// ++// See also: ++// http://stackoverflow.com/questions/8627331/what-does-ordered-unordered-comparison-mean ++// http://stackoverflow.com/questions/29349621/neon-isnanval-intrinsics ++FORCE_INLINE __m128 _mm_cmpord_ps(__m128 a, __m128 b) ++{ ++ // Note: NEON does not have ordered compare builtin ++ // Need to compare a eq a and b eq b to check for NaN ++ // Do AND of results to get final ++ uint32x4_t ceqaa = ++ vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); ++ uint32x4_t ceqbb = ++ vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); ++ return vreinterpretq_m128_u32(vandq_u32(ceqaa, ceqbb)); ++} ++ ++// Compare the lower single-precision (32-bit) floating-point elements in a and ++// b to see if neither is NaN, store the result in the lower element of dst, and ++// copy the upper 3 packed elements from a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpord_ss ++FORCE_INLINE __m128 _mm_cmpord_ss(__m128 a, __m128 b) ++{ ++ return _mm_move_ss(a, _mm_cmpord_ps(a, b)); ++} ++ ++// Compare packed single-precision (32-bit) floating-point elements in a and b ++// to see if either is NaN, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpunord_ps ++FORCE_INLINE __m128 _mm_cmpunord_ps(__m128 a, __m128 b) ++{ ++ uint32x4_t f32a = ++ vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); ++ uint32x4_t f32b = ++ vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); ++ return vreinterpretq_m128_u32(vmvnq_u32(vandq_u32(f32a, f32b))); ++} ++ ++// Compare the lower single-precision (32-bit) floating-point elements in a and ++// b to see if either is NaN, store the result in the lower element of dst, and ++// copy the upper 3 packed elements from a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpunord_ss ++FORCE_INLINE __m128 _mm_cmpunord_ss(__m128 a, __m128 b) ++{ ++ return _mm_move_ss(a, _mm_cmpunord_ps(a, b)); ++} ++ ++// Compare the lower single-precision (32-bit) floating-point element in a and b ++// for equality, and return the boolean result (0 or 1). ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comieq_ss ++FORCE_INLINE int _mm_comieq_ss(__m128 a, __m128 b) ++{ ++ uint32x4_t a_eq_b = ++ vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); ++ return vgetq_lane_u32(a_eq_b, 0) & 0x1; ++} ++ ++// Compare the lower single-precision (32-bit) floating-point element in a and b ++// for greater-than-or-equal, and return the boolean result (0 or 1). ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comige_ss ++FORCE_INLINE int _mm_comige_ss(__m128 a, __m128 b) ++{ ++ uint32x4_t a_ge_b = ++ vcgeq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); ++ return vgetq_lane_u32(a_ge_b, 0) & 0x1; ++} ++ ++// Compare the lower single-precision (32-bit) floating-point element in a and b ++// for greater-than, and return the boolean result (0 or 1). ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comigt_ss ++FORCE_INLINE int _mm_comigt_ss(__m128 a, __m128 b) ++{ ++ uint32x4_t a_gt_b = ++ vcgtq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); ++ return vgetq_lane_u32(a_gt_b, 0) & 0x1; ++} ++ ++// Compare the lower single-precision (32-bit) floating-point element in a and b ++// for less-than-or-equal, and return the boolean result (0 or 1). ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comile_ss ++FORCE_INLINE int _mm_comile_ss(__m128 a, __m128 b) ++{ ++ uint32x4_t a_le_b = ++ vcleq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); ++ return vgetq_lane_u32(a_le_b, 0) & 0x1; ++} ++ ++// Compare the lower single-precision (32-bit) floating-point element in a and b ++// for less-than, and return the boolean result (0 or 1). ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comilt_ss ++FORCE_INLINE int _mm_comilt_ss(__m128 a, __m128 b) ++{ ++ uint32x4_t a_lt_b = ++ vcltq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); ++ return vgetq_lane_u32(a_lt_b, 0) & 0x1; ++} ++ ++// Compare the lower single-precision (32-bit) floating-point element in a and b ++// for not-equal, and return the boolean result (0 or 1). ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comineq_ss ++FORCE_INLINE int _mm_comineq_ss(__m128 a, __m128 b) ++{ ++ return !_mm_comieq_ss(a, b); ++} ++ ++// Convert packed signed 32-bit integers in b to packed single-precision ++// (32-bit) floating-point elements, store the results in the lower 2 elements ++// of dst, and copy the upper 2 packed elements from a to the upper elements of ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvt_pi2ps ++FORCE_INLINE __m128 _mm_cvt_pi2ps(__m128 a, __m64 b) ++{ ++ return vreinterpretq_m128_f32( ++ vcombine_f32(vcvt_f32_s32(vreinterpret_s32_m64(b)), ++ vget_high_f32(vreinterpretq_f32_m128(a)))); ++} ++ ++// Convert packed single-precision (32-bit) floating-point elements in a to ++// packed 32-bit integers, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvt_ps2pi ++FORCE_INLINE __m64 _mm_cvt_ps2pi(__m128 a) ++{ ++#if (defined(__aarch64__) || defined(_M_ARM64)) || \ ++ defined(__ARM_FEATURE_DIRECTED_ROUNDING) ++ return vreinterpret_m64_s32( ++ vget_low_s32(vcvtnq_s32_f32(vrndiq_f32(vreinterpretq_f32_m128(a))))); ++#else ++ return vreinterpret_m64_s32(vcvt_s32_f32(vget_low_f32( ++ vreinterpretq_f32_m128(_mm_round_ps(a, _MM_FROUND_CUR_DIRECTION))))); ++#endif ++} ++ ++// Convert the signed 32-bit integer b to a single-precision (32-bit) ++// floating-point element, store the result in the lower element of dst, and ++// copy the upper 3 packed elements from a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvt_si2ss ++FORCE_INLINE __m128 _mm_cvt_si2ss(__m128 a, int b) ++{ ++ return vreinterpretq_m128_f32( ++ vsetq_lane_f32((float) b, vreinterpretq_f32_m128(a), 0)); ++} ++ ++// Convert the lower single-precision (32-bit) floating-point element in a to a ++// 32-bit integer, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvt_ss2si ++FORCE_INLINE int _mm_cvt_ss2si(__m128 a) ++{ ++#if (defined(__aarch64__) || defined(_M_ARM64)) || \ ++ defined(__ARM_FEATURE_DIRECTED_ROUNDING) ++ return vgetq_lane_s32(vcvtnq_s32_f32(vrndiq_f32(vreinterpretq_f32_m128(a))), ++ 0); ++#else ++ float32_t data = vgetq_lane_f32( ++ vreinterpretq_f32_m128(_mm_round_ps(a, _MM_FROUND_CUR_DIRECTION)), 0); ++ return (int32_t) data; ++#endif ++} ++ ++// Convert packed 16-bit integers in a to packed single-precision (32-bit) ++// floating-point elements, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpi16_ps ++FORCE_INLINE __m128 _mm_cvtpi16_ps(__m64 a) ++{ ++ return vreinterpretq_m128_f32( ++ vcvtq_f32_s32(vmovl_s16(vreinterpret_s16_m64(a)))); ++} ++ ++// Convert packed 32-bit integers in b to packed single-precision (32-bit) ++// floating-point elements, store the results in the lower 2 elements of dst, ++// and copy the upper 2 packed elements from a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpi32_ps ++FORCE_INLINE __m128 _mm_cvtpi32_ps(__m128 a, __m64 b) ++{ ++ return vreinterpretq_m128_f32( ++ vcombine_f32(vcvt_f32_s32(vreinterpret_s32_m64(b)), ++ vget_high_f32(vreinterpretq_f32_m128(a)))); ++} ++ ++// Convert packed signed 32-bit integers in a to packed single-precision ++// (32-bit) floating-point elements, store the results in the lower 2 elements ++// of dst, then convert the packed signed 32-bit integers in b to ++// single-precision (32-bit) floating-point element, and store the results in ++// the upper 2 elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpi32x2_ps ++FORCE_INLINE __m128 _mm_cvtpi32x2_ps(__m64 a, __m64 b) ++{ ++ return vreinterpretq_m128_f32(vcvtq_f32_s32( ++ vcombine_s32(vreinterpret_s32_m64(a), vreinterpret_s32_m64(b)))); ++} ++ ++// Convert the lower packed 8-bit integers in a to packed single-precision ++// (32-bit) floating-point elements, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpi8_ps ++FORCE_INLINE __m128 _mm_cvtpi8_ps(__m64 a) ++{ ++ return vreinterpretq_m128_f32(vcvtq_f32_s32( ++ vmovl_s16(vget_low_s16(vmovl_s8(vreinterpret_s8_m64(a)))))); ++} ++ ++// Convert packed single-precision (32-bit) floating-point elements in a to ++// packed 16-bit integers, and store the results in dst. Note: this intrinsic ++// will generate 0x7FFF, rather than 0x8000, for input values between 0x7FFF and ++// 0x7FFFFFFF. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtps_pi16 ++FORCE_INLINE __m64 _mm_cvtps_pi16(__m128 a) ++{ ++ return vreinterpret_m64_s16( ++ vqmovn_s32(vreinterpretq_s32_m128i(_mm_cvtps_epi32(a)))); ++} ++ ++// Convert packed single-precision (32-bit) floating-point elements in a to ++// packed 32-bit integers, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtps_pi32 ++#define _mm_cvtps_pi32(a) _mm_cvt_ps2pi(a) ++ ++// Convert packed single-precision (32-bit) floating-point elements in a to ++// packed 8-bit integers, and store the results in lower 4 elements of dst. ++// Note: this intrinsic will generate 0x7F, rather than 0x80, for input values ++// between 0x7F and 0x7FFFFFFF. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtps_pi8 ++FORCE_INLINE __m64 _mm_cvtps_pi8(__m128 a) ++{ ++ return vreinterpret_m64_s8(vqmovn_s16( ++ vcombine_s16(vreinterpret_s16_m64(_mm_cvtps_pi16(a)), vdup_n_s16(0)))); ++} ++ ++// Convert packed unsigned 16-bit integers in a to packed single-precision ++// (32-bit) floating-point elements, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpu16_ps ++FORCE_INLINE __m128 _mm_cvtpu16_ps(__m64 a) ++{ ++ return vreinterpretq_m128_f32( ++ vcvtq_f32_u32(vmovl_u16(vreinterpret_u16_m64(a)))); ++} ++ ++// Convert the lower packed unsigned 8-bit integers in a to packed ++// single-precision (32-bit) floating-point elements, and store the results in ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpu8_ps ++FORCE_INLINE __m128 _mm_cvtpu8_ps(__m64 a) ++{ ++ return vreinterpretq_m128_f32(vcvtq_f32_u32( ++ vmovl_u16(vget_low_u16(vmovl_u8(vreinterpret_u8_m64(a)))))); ++} ++ ++// Convert the signed 32-bit integer b to a single-precision (32-bit) ++// floating-point element, store the result in the lower element of dst, and ++// copy the upper 3 packed elements from a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi32_ss ++#define _mm_cvtsi32_ss(a, b) _mm_cvt_si2ss(a, b) ++ ++// Convert the signed 64-bit integer b to a single-precision (32-bit) ++// floating-point element, store the result in the lower element of dst, and ++// copy the upper 3 packed elements from a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64_ss ++FORCE_INLINE __m128 _mm_cvtsi64_ss(__m128 a, int64_t b) ++{ ++ return vreinterpretq_m128_f32( ++ vsetq_lane_f32((float) b, vreinterpretq_f32_m128(a), 0)); ++} ++ ++// Copy the lower single-precision (32-bit) floating-point element of a to dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtss_f32 ++FORCE_INLINE float _mm_cvtss_f32(__m128 a) ++{ ++ return vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); ++} ++ ++// Convert the lower single-precision (32-bit) floating-point element in a to a ++// 32-bit integer, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtss_si32 ++#define _mm_cvtss_si32(a) _mm_cvt_ss2si(a) ++ ++// Convert the lower single-precision (32-bit) floating-point element in a to a ++// 64-bit integer, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtss_si64 ++FORCE_INLINE int64_t _mm_cvtss_si64(__m128 a) ++{ ++#if (defined(__aarch64__) || defined(_M_ARM64)) || \ ++ defined(__ARM_FEATURE_DIRECTED_ROUNDING) ++ return (int64_t) vgetq_lane_f32(vrndiq_f32(vreinterpretq_f32_m128(a)), 0); ++#else ++ float32_t data = vgetq_lane_f32( ++ vreinterpretq_f32_m128(_mm_round_ps(a, _MM_FROUND_CUR_DIRECTION)), 0); ++ return (int64_t) data; ++#endif ++} ++ ++// Convert packed single-precision (32-bit) floating-point elements in a to ++// packed 32-bit integers with truncation, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtt_ps2pi ++FORCE_INLINE __m64 _mm_cvtt_ps2pi(__m128 a) ++{ ++ return vreinterpret_m64_s32( ++ vget_low_s32(vcvtq_s32_f32(vreinterpretq_f32_m128(a)))); ++} ++ ++// Convert the lower single-precision (32-bit) floating-point element in a to a ++// 32-bit integer with truncation, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtt_ss2si ++FORCE_INLINE int _mm_cvtt_ss2si(__m128 a) ++{ ++ return vgetq_lane_s32(vcvtq_s32_f32(vreinterpretq_f32_m128(a)), 0); ++} ++ ++// Convert packed single-precision (32-bit) floating-point elements in a to ++// packed 32-bit integers with truncation, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttps_pi32 ++#define _mm_cvttps_pi32(a) _mm_cvtt_ps2pi(a) ++ ++// Convert the lower single-precision (32-bit) floating-point element in a to a ++// 32-bit integer with truncation, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttss_si32 ++#define _mm_cvttss_si32(a) _mm_cvtt_ss2si(a) ++ ++// Convert the lower single-precision (32-bit) floating-point element in a to a ++// 64-bit integer with truncation, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttss_si64 ++FORCE_INLINE int64_t _mm_cvttss_si64(__m128 a) ++{ ++ return (int64_t) vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); ++} ++ ++// Divide packed single-precision (32-bit) floating-point elements in a by ++// packed elements in b, and store the results in dst. ++// Due to ARMv7-A NEON's lack of a precise division intrinsic, we implement ++// division by multiplying a by b's reciprocal before using the Newton-Raphson ++// method to approximate the results. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_div_ps ++FORCE_INLINE __m128 _mm_div_ps(__m128 a, __m128 b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128_f32( ++ vdivq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); ++#else ++ float32x4_t recip = vrecpeq_f32(vreinterpretq_f32_m128(b)); ++ recip = vmulq_f32(recip, vrecpsq_f32(recip, vreinterpretq_f32_m128(b))); ++ // Additional Netwon-Raphson iteration for accuracy ++ recip = vmulq_f32(recip, vrecpsq_f32(recip, vreinterpretq_f32_m128(b))); ++ return vreinterpretq_m128_f32(vmulq_f32(vreinterpretq_f32_m128(a), recip)); ++#endif ++} ++ ++// Divide the lower single-precision (32-bit) floating-point element in a by the ++// lower single-precision (32-bit) floating-point element in b, store the result ++// in the lower element of dst, and copy the upper 3 packed elements from a to ++// the upper elements of dst. ++// Warning: ARMv7-A does not produce the same result compared to Intel and not ++// IEEE-compliant. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_div_ss ++FORCE_INLINE __m128 _mm_div_ss(__m128 a, __m128 b) ++{ ++ float32_t value = ++ vgetq_lane_f32(vreinterpretq_f32_m128(_mm_div_ps(a, b)), 0); ++ return vreinterpretq_m128_f32( ++ vsetq_lane_f32(value, vreinterpretq_f32_m128(a), 0)); ++} ++ ++// Extract a 16-bit integer from a, selected with imm8, and store the result in ++// the lower element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_pi16 ++#define _mm_extract_pi16(a, imm) \ ++ (int32_t) vget_lane_u16(vreinterpret_u16_m64(a), (imm)) ++ ++// Free aligned memory that was allocated with _mm_malloc. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_free ++#if !defined(SSE2NEON_ALLOC_DEFINED) ++FORCE_INLINE void _mm_free(void *addr) ++{ ++ free(addr); ++} ++#endif ++ ++FORCE_INLINE uint64_t _sse2neon_get_fpcr(void) ++{ ++ uint64_t value; ++#if defined(_MSC_VER) ++ value = _ReadStatusReg(ARM64_FPCR); ++#else ++ __asm__ __volatile__("mrs %0, FPCR" : "=r"(value)); /* read */ ++#endif ++ return value; ++} ++ ++FORCE_INLINE void _sse2neon_set_fpcr(uint64_t value) ++{ ++#if defined(_MSC_VER) ++ _WriteStatusReg(ARM64_FPCR, value); ++#else ++ __asm__ __volatile__("msr FPCR, %0" ::"r"(value)); /* write */ ++#endif ++} ++ ++// Macro: Get the flush zero bits from the MXCSR control and status register. ++// The flush zero may contain any of the following flags: _MM_FLUSH_ZERO_ON or ++// _MM_FLUSH_ZERO_OFF ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_MM_GET_FLUSH_ZERO_MODE ++FORCE_INLINE unsigned int _sse2neon_mm_get_flush_zero_mode(void) ++{ ++ union { ++ fpcr_bitfield field; ++#if defined(__aarch64__) || defined(_M_ARM64) ++ uint64_t value; ++#else ++ uint32_t value; ++#endif ++ } r; ++ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ r.value = _sse2neon_get_fpcr(); ++#else ++ __asm__ __volatile__("vmrs %0, FPSCR" : "=r"(r.value)); /* read */ ++#endif ++ ++ return r.field.bit24 ? _MM_FLUSH_ZERO_ON : _MM_FLUSH_ZERO_OFF; ++} ++ ++// Macro: Get the rounding mode bits from the MXCSR control and status register. ++// The rounding mode may contain any of the following flags: _MM_ROUND_NEAREST, ++// _MM_ROUND_DOWN, _MM_ROUND_UP, _MM_ROUND_TOWARD_ZERO ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_MM_GET_ROUNDING_MODE ++FORCE_INLINE unsigned int _MM_GET_ROUNDING_MODE(void) ++{ ++ union { ++ fpcr_bitfield field; ++#if defined(__aarch64__) || defined(_M_ARM64) ++ uint64_t value; ++#else ++ uint32_t value; ++#endif ++ } r; ++ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ r.value = _sse2neon_get_fpcr(); ++#else ++ __asm__ __volatile__("vmrs %0, FPSCR" : "=r"(r.value)); /* read */ ++#endif ++ ++ if (r.field.bit22) { ++ return r.field.bit23 ? _MM_ROUND_TOWARD_ZERO : _MM_ROUND_UP; ++ } else { ++ return r.field.bit23 ? _MM_ROUND_DOWN : _MM_ROUND_NEAREST; ++ } ++} ++ ++// Copy a to dst, and insert the 16-bit integer i into dst at the location ++// specified by imm8. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_pi16 ++#define _mm_insert_pi16(a, b, imm) \ ++ vreinterpret_m64_s16(vset_lane_s16((b), vreinterpret_s16_m64(a), (imm))) ++ ++// Load 128-bits (composed of 4 packed single-precision (32-bit) floating-point ++// elements) from memory into dst. mem_addr must be aligned on a 16-byte ++// boundary or a general-protection exception may be generated. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_ps ++FORCE_INLINE __m128 _mm_load_ps(const float *p) ++{ ++ return vreinterpretq_m128_f32(vld1q_f32(p)); ++} ++ ++// Load a single-precision (32-bit) floating-point element from memory into all ++// elements of dst. ++// ++// dst[31:0] := MEM[mem_addr+31:mem_addr] ++// dst[63:32] := MEM[mem_addr+31:mem_addr] ++// dst[95:64] := MEM[mem_addr+31:mem_addr] ++// dst[127:96] := MEM[mem_addr+31:mem_addr] ++// ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_ps1 ++#define _mm_load_ps1 _mm_load1_ps ++ ++// Load a single-precision (32-bit) floating-point element from memory into the ++// lower of dst, and zero the upper 3 elements. mem_addr does not need to be ++// aligned on any particular boundary. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_ss ++FORCE_INLINE __m128 _mm_load_ss(const float *p) ++{ ++ return vreinterpretq_m128_f32(vsetq_lane_f32(*p, vdupq_n_f32(0), 0)); ++} ++ ++// Load a single-precision (32-bit) floating-point element from memory into all ++// elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load1_ps ++FORCE_INLINE __m128 _mm_load1_ps(const float *p) ++{ ++ return vreinterpretq_m128_f32(vld1q_dup_f32(p)); ++} ++ ++// Load 2 single-precision (32-bit) floating-point elements from memory into the ++// upper 2 elements of dst, and copy the lower 2 elements from a to dst. ++// mem_addr does not need to be aligned on any particular boundary. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadh_pi ++FORCE_INLINE __m128 _mm_loadh_pi(__m128 a, __m64 const *p) ++{ ++ return vreinterpretq_m128_f32( ++ vcombine_f32(vget_low_f32(a), vld1_f32((const float32_t *) p))); ++} ++ ++// Load 2 single-precision (32-bit) floating-point elements from memory into the ++// lower 2 elements of dst, and copy the upper 2 elements from a to dst. ++// mem_addr does not need to be aligned on any particular boundary. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadl_pi ++FORCE_INLINE __m128 _mm_loadl_pi(__m128 a, __m64 const *p) ++{ ++ return vreinterpretq_m128_f32( ++ vcombine_f32(vld1_f32((const float32_t *) p), vget_high_f32(a))); ++} ++ ++// Load 4 single-precision (32-bit) floating-point elements from memory into dst ++// in reverse order. mem_addr must be aligned on a 16-byte boundary or a ++// general-protection exception may be generated. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadr_ps ++FORCE_INLINE __m128 _mm_loadr_ps(const float *p) ++{ ++ float32x4_t v = vrev64q_f32(vld1q_f32(p)); ++ return vreinterpretq_m128_f32(vextq_f32(v, v, 2)); ++} ++ ++// Load 128-bits (composed of 4 packed single-precision (32-bit) floating-point ++// elements) from memory into dst. mem_addr does not need to be aligned on any ++// particular boundary. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_ps ++FORCE_INLINE __m128 _mm_loadu_ps(const float *p) ++{ ++ // for neon, alignment doesn't matter, so _mm_load_ps and _mm_loadu_ps are ++ // equivalent for neon ++ return vreinterpretq_m128_f32(vld1q_f32(p)); ++} ++ ++// Load unaligned 16-bit integer from memory into the first element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_si16 ++FORCE_INLINE __m128i _mm_loadu_si16(const void *p) ++{ ++ return vreinterpretq_m128i_s16( ++ vsetq_lane_s16(*(const unaligned_int16_t *) p, vdupq_n_s16(0), 0)); ++} ++ ++// Load unaligned 64-bit integer from memory into the first element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_si64 ++FORCE_INLINE __m128i _mm_loadu_si64(const void *p) ++{ ++ return vreinterpretq_m128i_s64( ++ vsetq_lane_s64(*(const unaligned_int64_t *) p, vdupq_n_s64(0), 0)); ++} ++ ++// Allocate size bytes of memory, aligned to the alignment specified in align, ++// and return a pointer to the allocated memory. _mm_free should be used to free ++// memory that is allocated with _mm_malloc. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_malloc ++#if !defined(SSE2NEON_ALLOC_DEFINED) ++FORCE_INLINE void *_mm_malloc(size_t size, size_t align) ++{ ++ void *ptr; ++ if (align == 1) ++ return malloc(size); ++ if (align == 2 || (sizeof(void *) == 8 && align == 4)) ++ align = sizeof(void *); ++ if (!posix_memalign(&ptr, align, size)) ++ return ptr; ++ return NULL; ++} ++#endif ++ ++// Conditionally store 8-bit integer elements from a into memory using mask ++// (elements are not stored when the highest bit is not set in the corresponding ++// element) and a non-temporal memory hint. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskmove_si64 ++FORCE_INLINE void _mm_maskmove_si64(__m64 a, __m64 mask, char *mem_addr) ++{ ++ int8x8_t shr_mask = vshr_n_s8(vreinterpret_s8_m64(mask), 7); ++ __m128 b = _mm_load_ps((const float *) mem_addr); ++ int8x8_t masked = ++ vbsl_s8(vreinterpret_u8_s8(shr_mask), vreinterpret_s8_m64(a), ++ vreinterpret_s8_u64(vget_low_u64(vreinterpretq_u64_m128(b)))); ++ vst1_s8((int8_t *) mem_addr, masked); ++} ++ ++// Conditionally store 8-bit integer elements from a into memory using mask ++// (elements are not stored when the highest bit is not set in the corresponding ++// element) and a non-temporal memory hint. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_maskmovq ++#define _m_maskmovq(a, mask, mem_addr) _mm_maskmove_si64(a, mask, mem_addr) ++ ++// Compare packed signed 16-bit integers in a and b, and store packed maximum ++// values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_pi16 ++FORCE_INLINE __m64 _mm_max_pi16(__m64 a, __m64 b) ++{ ++ return vreinterpret_m64_s16( ++ vmax_s16(vreinterpret_s16_m64(a), vreinterpret_s16_m64(b))); ++} ++ ++// Compare packed single-precision (32-bit) floating-point elements in a and b, ++// and store packed maximum values in dst. dst does not follow the IEEE Standard ++// for Floating-Point Arithmetic (IEEE 754) maximum value when inputs are NaN or ++// signed-zero values. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_ps ++FORCE_INLINE __m128 _mm_max_ps(__m128 a, __m128 b) ++{ ++#if SSE2NEON_PRECISE_MINMAX ++ float32x4_t _a = vreinterpretq_f32_m128(a); ++ float32x4_t _b = vreinterpretq_f32_m128(b); ++ return vreinterpretq_m128_f32(vbslq_f32(vcgtq_f32(_a, _b), _a, _b)); ++#else ++ return vreinterpretq_m128_f32( ++ vmaxq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); ++#endif ++} ++ ++// Compare packed unsigned 8-bit integers in a and b, and store packed maximum ++// values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_pu8 ++FORCE_INLINE __m64 _mm_max_pu8(__m64 a, __m64 b) ++{ ++ return vreinterpret_m64_u8( ++ vmax_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))); ++} ++ ++// Compare the lower single-precision (32-bit) floating-point elements in a and ++// b, store the maximum value in the lower element of dst, and copy the upper 3 ++// packed elements from a to the upper element of dst. dst does not follow the ++// IEEE Standard for Floating-Point Arithmetic (IEEE 754) maximum value when ++// inputs are NaN or signed-zero values. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_ss ++FORCE_INLINE __m128 _mm_max_ss(__m128 a, __m128 b) ++{ ++ float32_t value = vgetq_lane_f32(_mm_max_ps(a, b), 0); ++ return vreinterpretq_m128_f32( ++ vsetq_lane_f32(value, vreinterpretq_f32_m128(a), 0)); ++} ++ ++// Compare packed signed 16-bit integers in a and b, and store packed minimum ++// values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_pi16 ++FORCE_INLINE __m64 _mm_min_pi16(__m64 a, __m64 b) ++{ ++ return vreinterpret_m64_s16( ++ vmin_s16(vreinterpret_s16_m64(a), vreinterpret_s16_m64(b))); ++} ++ ++// Compare packed single-precision (32-bit) floating-point elements in a and b, ++// and store packed minimum values in dst. dst does not follow the IEEE Standard ++// for Floating-Point Arithmetic (IEEE 754) minimum value when inputs are NaN or ++// signed-zero values. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_ps ++FORCE_INLINE __m128 _mm_min_ps(__m128 a, __m128 b) ++{ ++#if SSE2NEON_PRECISE_MINMAX ++ float32x4_t _a = vreinterpretq_f32_m128(a); ++ float32x4_t _b = vreinterpretq_f32_m128(b); ++ return vreinterpretq_m128_f32(vbslq_f32(vcltq_f32(_a, _b), _a, _b)); ++#else ++ return vreinterpretq_m128_f32( ++ vminq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); ++#endif ++} ++ ++// Compare packed unsigned 8-bit integers in a and b, and store packed minimum ++// values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_pu8 ++FORCE_INLINE __m64 _mm_min_pu8(__m64 a, __m64 b) ++{ ++ return vreinterpret_m64_u8( ++ vmin_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))); ++} ++ ++// Compare the lower single-precision (32-bit) floating-point elements in a and ++// b, store the minimum value in the lower element of dst, and copy the upper 3 ++// packed elements from a to the upper element of dst. dst does not follow the ++// IEEE Standard for Floating-Point Arithmetic (IEEE 754) minimum value when ++// inputs are NaN or signed-zero values. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_ss ++FORCE_INLINE __m128 _mm_min_ss(__m128 a, __m128 b) ++{ ++ float32_t value = vgetq_lane_f32(_mm_min_ps(a, b), 0); ++ return vreinterpretq_m128_f32( ++ vsetq_lane_f32(value, vreinterpretq_f32_m128(a), 0)); ++} ++ ++// Move the lower single-precision (32-bit) floating-point element from b to the ++// lower element of dst, and copy the upper 3 packed elements from a to the ++// upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_move_ss ++FORCE_INLINE __m128 _mm_move_ss(__m128 a, __m128 b) ++{ ++ return vreinterpretq_m128_f32( ++ vsetq_lane_f32(vgetq_lane_f32(vreinterpretq_f32_m128(b), 0), ++ vreinterpretq_f32_m128(a), 0)); ++} ++ ++// Move the upper 2 single-precision (32-bit) floating-point elements from b to ++// the lower 2 elements of dst, and copy the upper 2 elements from a to the ++// upper 2 elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movehl_ps ++FORCE_INLINE __m128 _mm_movehl_ps(__m128 a, __m128 b) ++{ ++#if defined(aarch64__) ++ return vreinterpretq_m128_u64( ++ vzip2q_u64(vreinterpretq_u64_m128(b), vreinterpretq_u64_m128(a))); ++#else ++ float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); ++ float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); ++ return vreinterpretq_m128_f32(vcombine_f32(b32, a32)); ++#endif ++} ++ ++// Move the lower 2 single-precision (32-bit) floating-point elements from b to ++// the upper 2 elements of dst, and copy the lower 2 elements from a to the ++// lower 2 elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movelh_ps ++FORCE_INLINE __m128 _mm_movelh_ps(__m128 __A, __m128 __B) ++{ ++ float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(__A)); ++ float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(__B)); ++ return vreinterpretq_m128_f32(vcombine_f32(a10, b10)); ++} ++ ++// Create mask from the most significant bit of each 8-bit element in a, and ++// store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movemask_pi8 ++FORCE_INLINE int _mm_movemask_pi8(__m64 a) ++{ ++ uint8x8_t input = vreinterpret_u8_m64(a); ++#if defined(__aarch64__) || defined(_M_ARM64) ++ static const int8_t shift[8] = {0, 1, 2, 3, 4, 5, 6, 7}; ++ uint8x8_t tmp = vshr_n_u8(input, 7); ++ return vaddv_u8(vshl_u8(tmp, vld1_s8(shift))); ++#else ++ // Refer the implementation of `_mm_movemask_epi8` ++ uint16x4_t high_bits = vreinterpret_u16_u8(vshr_n_u8(input, 7)); ++ uint32x2_t paired16 = ++ vreinterpret_u32_u16(vsra_n_u16(high_bits, high_bits, 7)); ++ uint8x8_t paired32 = ++ vreinterpret_u8_u32(vsra_n_u32(paired16, paired16, 14)); ++ return vget_lane_u8(paired32, 0) | ((int) vget_lane_u8(paired32, 4) << 4); ++#endif ++} ++ ++// Set each bit of mask dst based on the most significant bit of the ++// corresponding packed single-precision (32-bit) floating-point element in a. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movemask_ps ++FORCE_INLINE int _mm_movemask_ps(__m128 a) ++{ ++ uint32x4_t input = vreinterpretq_u32_m128(a); ++#if defined(__aarch64__) || defined(_M_ARM64) ++ static const int32_t shift[4] = {0, 1, 2, 3}; ++ uint32x4_t tmp = vshrq_n_u32(input, 31); ++ return vaddvq_u32(vshlq_u32(tmp, vld1q_s32(shift))); ++#else ++ // Uses the exact same method as _mm_movemask_epi8, see that for details. ++ // Shift out everything but the sign bits with a 32-bit unsigned shift ++ // right. ++ uint64x2_t high_bits = vreinterpretq_u64_u32(vshrq_n_u32(input, 31)); ++ // Merge the two pairs together with a 64-bit unsigned shift right + add. ++ uint8x16_t paired = ++ vreinterpretq_u8_u64(vsraq_n_u64(high_bits, high_bits, 31)); ++ // Extract the result. ++ return vgetq_lane_u8(paired, 0) | (vgetq_lane_u8(paired, 8) << 2); ++#endif ++} ++ ++// Multiply packed single-precision (32-bit) floating-point elements in a and b, ++// and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_ps ++FORCE_INLINE_OPTNONE __m128 _mm_mul_ps(__m128 a, __m128 b) ++{ ++ return vreinterpretq_m128_f32( ++ vmulq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); ++} ++ ++// Multiply the lower single-precision (32-bit) floating-point element in a and ++// b, store the result in the lower element of dst, and copy the upper 3 packed ++// elements from a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_ss ++FORCE_INLINE __m128 _mm_mul_ss(__m128 a, __m128 b) ++{ ++ return _mm_move_ss(a, _mm_mul_ps(a, b)); ++} ++ ++// Multiply the packed unsigned 16-bit integers in a and b, producing ++// intermediate 32-bit integers, and store the high 16 bits of the intermediate ++// integers in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mulhi_pu16 ++FORCE_INLINE __m64 _mm_mulhi_pu16(__m64 a, __m64 b) ++{ ++ return vreinterpret_m64_u16(vshrn_n_u32( ++ vmull_u16(vreinterpret_u16_m64(a), vreinterpret_u16_m64(b)), 16)); ++} ++ ++// Compute the bitwise OR of packed single-precision (32-bit) floating-point ++// elements in a and b, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_or_ps ++FORCE_INLINE __m128 _mm_or_ps(__m128 a, __m128 b) ++{ ++ return vreinterpretq_m128_s32( ++ vorrq_s32(vreinterpretq_s32_m128(a), vreinterpretq_s32_m128(b))); ++} ++ ++// Average packed unsigned 8-bit integers in a and b, and store the results in ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pavgb ++#define _m_pavgb(a, b) _mm_avg_pu8(a, b) ++ ++// Average packed unsigned 16-bit integers in a and b, and store the results in ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pavgw ++#define _m_pavgw(a, b) _mm_avg_pu16(a, b) ++ ++// Extract a 16-bit integer from a, selected with imm8, and store the result in ++// the lower element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pextrw ++#define _m_pextrw(a, imm) _mm_extract_pi16(a, imm) ++ ++// Copy a to dst, and insert the 16-bit integer i into dst at the location ++// specified by imm8. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=m_pinsrw ++#define _m_pinsrw(a, i, imm) _mm_insert_pi16(a, i, imm) ++ ++// Compare packed signed 16-bit integers in a and b, and store packed maximum ++// values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pmaxsw ++#define _m_pmaxsw(a, b) _mm_max_pi16(a, b) ++ ++// Compare packed unsigned 8-bit integers in a and b, and store packed maximum ++// values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pmaxub ++#define _m_pmaxub(a, b) _mm_max_pu8(a, b) ++ ++// Compare packed signed 16-bit integers in a and b, and store packed minimum ++// values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pminsw ++#define _m_pminsw(a, b) _mm_min_pi16(a, b) ++ ++// Compare packed unsigned 8-bit integers in a and b, and store packed minimum ++// values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pminub ++#define _m_pminub(a, b) _mm_min_pu8(a, b) ++ ++// Create mask from the most significant bit of each 8-bit element in a, and ++// store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pmovmskb ++#define _m_pmovmskb(a) _mm_movemask_pi8(a) ++ ++// Multiply the packed unsigned 16-bit integers in a and b, producing ++// intermediate 32-bit integers, and store the high 16 bits of the intermediate ++// integers in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pmulhuw ++#define _m_pmulhuw(a, b) _mm_mulhi_pu16(a, b) ++ ++// Fetch the line of data from memory that contains address p to a location in ++// the cache hierarchy specified by the locality hint i. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_prefetch ++FORCE_INLINE void _mm_prefetch(char const *p, int i) ++{ ++ (void) i; ++#if defined(_MSC_VER) ++ switch (i) { ++ case _MM_HINT_NTA: ++ __prefetch2(p, 1); ++ break; ++ case _MM_HINT_T0: ++ __prefetch2(p, 0); ++ break; ++ case _MM_HINT_T1: ++ __prefetch2(p, 2); ++ break; ++ case _MM_HINT_T2: ++ __prefetch2(p, 4); ++ break; ++ } ++#else ++ switch (i) { ++ case _MM_HINT_NTA: ++ __builtin_prefetch(p, 0, 0); ++ break; ++ case _MM_HINT_T0: ++ __builtin_prefetch(p, 0, 3); ++ break; ++ case _MM_HINT_T1: ++ __builtin_prefetch(p, 0, 2); ++ break; ++ case _MM_HINT_T2: ++ __builtin_prefetch(p, 0, 1); ++ break; ++ } ++#endif ++} ++ ++// Compute the absolute differences of packed unsigned 8-bit integers in a and ++// b, then horizontally sum each consecutive 8 differences to produce four ++// unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low ++// 16 bits of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=m_psadbw ++#define _m_psadbw(a, b) _mm_sad_pu8(a, b) ++ ++// Shuffle 16-bit integers in a using the control in imm8, and store the results ++// in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pshufw ++#define _m_pshufw(a, imm) _mm_shuffle_pi16(a, imm) ++ ++// Compute the approximate reciprocal of packed single-precision (32-bit) ++// floating-point elements in a, and store the results in dst. The maximum ++// relative error for this approximation is less than 1.5*2^-12. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_rcp_ps ++FORCE_INLINE __m128 _mm_rcp_ps(__m128 in) ++{ ++ float32x4_t recip = vrecpeq_f32(vreinterpretq_f32_m128(in)); ++ recip = vmulq_f32(recip, vrecpsq_f32(recip, vreinterpretq_f32_m128(in))); ++#if SSE2NEON_PRECISE_DIV ++ // Additional Netwon-Raphson iteration for accuracy ++ recip = vmulq_f32(recip, vrecpsq_f32(recip, vreinterpretq_f32_m128(in))); ++#endif ++ return vreinterpretq_m128_f32(recip); ++} ++ ++// Compute the approximate reciprocal of the lower single-precision (32-bit) ++// floating-point element in a, store the result in the lower element of dst, ++// and copy the upper 3 packed elements from a to the upper elements of dst. The ++// maximum relative error for this approximation is less than 1.5*2^-12. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_rcp_ss ++FORCE_INLINE __m128 _mm_rcp_ss(__m128 a) ++{ ++ return _mm_move_ss(a, _mm_rcp_ps(a)); ++} ++ ++// Compute the approximate reciprocal square root of packed single-precision ++// (32-bit) floating-point elements in a, and store the results in dst. The ++// maximum relative error for this approximation is less than 1.5*2^-12. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_rsqrt_ps ++FORCE_INLINE __m128 _mm_rsqrt_ps(__m128 in) ++{ ++ float32x4_t out = vrsqrteq_f32(vreinterpretq_f32_m128(in)); ++ ++ // Generate masks for detecting whether input has any 0.0f/-0.0f ++ // (which becomes positive/negative infinity by IEEE-754 arithmetic rules). ++ const uint32x4_t pos_inf = vdupq_n_u32(0x7F800000); ++ const uint32x4_t neg_inf = vdupq_n_u32(0xFF800000); ++ const uint32x4_t has_pos_zero = ++ vceqq_u32(pos_inf, vreinterpretq_u32_f32(out)); ++ const uint32x4_t has_neg_zero = ++ vceqq_u32(neg_inf, vreinterpretq_u32_f32(out)); ++ ++ out = vmulq_f32( ++ out, vrsqrtsq_f32(vmulq_f32(vreinterpretq_f32_m128(in), out), out)); ++#if SSE2NEON_PRECISE_SQRT ++ // Additional Netwon-Raphson iteration for accuracy ++ out = vmulq_f32( ++ out, vrsqrtsq_f32(vmulq_f32(vreinterpretq_f32_m128(in), out), out)); ++#endif ++ ++ // Set output vector element to infinity/negative-infinity if ++ // the corresponding input vector element is 0.0f/-0.0f. ++ out = vbslq_f32(has_pos_zero, (float32x4_t) pos_inf, out); ++ out = vbslq_f32(has_neg_zero, (float32x4_t) neg_inf, out); ++ ++ return vreinterpretq_m128_f32(out); ++} ++ ++// Compute the approximate reciprocal square root of the lower single-precision ++// (32-bit) floating-point element in a, store the result in the lower element ++// of dst, and copy the upper 3 packed elements from a to the upper elements of ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_rsqrt_ss ++FORCE_INLINE __m128 _mm_rsqrt_ss(__m128 in) ++{ ++ return vsetq_lane_f32(vgetq_lane_f32(_mm_rsqrt_ps(in), 0), in, 0); ++} ++ ++// Compute the absolute differences of packed unsigned 8-bit integers in a and ++// b, then horizontally sum each consecutive 8 differences to produce four ++// unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low ++// 16 bits of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sad_pu8 ++FORCE_INLINE __m64 _mm_sad_pu8(__m64 a, __m64 b) ++{ ++ uint64x1_t t = vpaddl_u32(vpaddl_u16( ++ vpaddl_u8(vabd_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))))); ++ return vreinterpret_m64_u16( ++ vset_lane_u16((int) vget_lane_u64(t, 0), vdup_n_u16(0), 0)); ++} ++ ++// Macro: Set the flush zero bits of the MXCSR control and status register to ++// the value in unsigned 32-bit integer a. The flush zero may contain any of the ++// following flags: _MM_FLUSH_ZERO_ON or _MM_FLUSH_ZERO_OFF ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_MM_SET_FLUSH_ZERO_MODE ++FORCE_INLINE void _sse2neon_mm_set_flush_zero_mode(unsigned int flag) ++{ ++ // AArch32 Advanced SIMD arithmetic always uses the Flush-to-zero setting, ++ // regardless of the value of the FZ bit. ++ union { ++ fpcr_bitfield field; ++#if defined(__aarch64__) || defined(_M_ARM64) ++ uint64_t value; ++#else ++ uint32_t value; ++#endif ++ } r; ++ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ r.value = _sse2neon_get_fpcr(); ++#else ++ __asm__ __volatile__("vmrs %0, FPSCR" : "=r"(r.value)); /* read */ ++#endif ++ ++ r.field.bit24 = (flag & _MM_FLUSH_ZERO_MASK) == _MM_FLUSH_ZERO_ON; ++ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ _sse2neon_set_fpcr(r.value); ++#else ++ __asm__ __volatile__("vmsr FPSCR, %0" ::"r"(r)); /* write */ ++#endif ++} ++ ++// Set packed single-precision (32-bit) floating-point elements in dst with the ++// supplied values. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_ps ++FORCE_INLINE __m128 _mm_set_ps(float w, float z, float y, float x) ++{ ++ float ALIGN_STRUCT(16) data[4] = {x, y, z, w}; ++ return vreinterpretq_m128_f32(vld1q_f32(data)); ++} ++ ++// Broadcast single-precision (32-bit) floating-point value a to all elements of ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_ps1 ++FORCE_INLINE __m128 _mm_set_ps1(float _w) ++{ ++ return vreinterpretq_m128_f32(vdupq_n_f32(_w)); ++} ++ ++// Macro: Set the rounding mode bits of the MXCSR control and status register to ++// the value in unsigned 32-bit integer a. The rounding mode may contain any of ++// the following flags: _MM_ROUND_NEAREST, _MM_ROUND_DOWN, _MM_ROUND_UP, ++// _MM_ROUND_TOWARD_ZERO ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_MM_SET_ROUNDING_MODE ++FORCE_INLINE void _MM_SET_ROUNDING_MODE(int rounding) ++{ ++ union { ++ fpcr_bitfield field; ++#if defined(__aarch64__) || defined(_M_ARM64) ++ uint64_t value; ++#else ++ uint32_t value; ++#endif ++ } r; ++ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ r.value = _sse2neon_get_fpcr(); ++#else ++ __asm__ __volatile__("vmrs %0, FPSCR" : "=r"(r.value)); /* read */ ++#endif ++ ++ switch (rounding) { ++ case _MM_ROUND_TOWARD_ZERO: ++ r.field.bit22 = 1; ++ r.field.bit23 = 1; ++ break; ++ case _MM_ROUND_DOWN: ++ r.field.bit22 = 0; ++ r.field.bit23 = 1; ++ break; ++ case _MM_ROUND_UP: ++ r.field.bit22 = 1; ++ r.field.bit23 = 0; ++ break; ++ default: //_MM_ROUND_NEAREST ++ r.field.bit22 = 0; ++ r.field.bit23 = 0; ++ } ++ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ _sse2neon_set_fpcr(r.value); ++#else ++ __asm__ __volatile__("vmsr FPSCR, %0" ::"r"(r)); /* write */ ++#endif ++} ++ ++// Copy single-precision (32-bit) floating-point element a to the lower element ++// of dst, and zero the upper 3 elements. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_ss ++FORCE_INLINE __m128 _mm_set_ss(float a) ++{ ++ return vreinterpretq_m128_f32(vsetq_lane_f32(a, vdupq_n_f32(0), 0)); ++} ++ ++// Broadcast single-precision (32-bit) floating-point value a to all elements of ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_ps ++FORCE_INLINE __m128 _mm_set1_ps(float _w) ++{ ++ return vreinterpretq_m128_f32(vdupq_n_f32(_w)); ++} ++ ++// Set the MXCSR control and status register with the value in unsigned 32-bit ++// integer a. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setcsr ++// FIXME: _mm_setcsr() implementation supports changing the rounding mode only. ++FORCE_INLINE void _mm_setcsr(unsigned int a) ++{ ++ _MM_SET_ROUNDING_MODE(a); ++} ++ ++// Get the unsigned 32-bit value of the MXCSR control and status register. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_getcsr ++// FIXME: _mm_getcsr() implementation supports reading the rounding mode only. ++FORCE_INLINE unsigned int _mm_getcsr(void) ++{ ++ return _MM_GET_ROUNDING_MODE(); ++} ++ ++// Set packed single-precision (32-bit) floating-point elements in dst with the ++// supplied values in reverse order. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_ps ++FORCE_INLINE __m128 _mm_setr_ps(float w, float z, float y, float x) ++{ ++ float ALIGN_STRUCT(16) data[4] = {w, z, y, x}; ++ return vreinterpretq_m128_f32(vld1q_f32(data)); ++} ++ ++// Return vector of type __m128 with all elements set to zero. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setzero_ps ++FORCE_INLINE __m128 _mm_setzero_ps(void) ++{ ++ return vreinterpretq_m128_f32(vdupq_n_f32(0)); ++} ++ ++// Shuffle 16-bit integers in a using the control in imm8, and store the results ++// in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_pi16 ++#ifdef _sse2neon_shuffle ++#define _mm_shuffle_pi16(a, imm) \ ++ vreinterpret_m64_s16(vshuffle_s16( \ ++ vreinterpret_s16_m64(a), vreinterpret_s16_m64(a), (imm & 0x3), \ ++ ((imm >> 2) & 0x3), ((imm >> 4) & 0x3), ((imm >> 6) & 0x3))) ++#else ++#define _mm_shuffle_pi16(a, imm) \ ++ _sse2neon_define1( \ ++ __m64, a, int16x4_t ret; \ ++ ret = vmov_n_s16( \ ++ vget_lane_s16(vreinterpret_s16_m64(_a), (imm) & (0x3))); \ ++ ret = vset_lane_s16( \ ++ vget_lane_s16(vreinterpret_s16_m64(_a), ((imm) >> 2) & 0x3), ret, \ ++ 1); \ ++ ret = vset_lane_s16( \ ++ vget_lane_s16(vreinterpret_s16_m64(_a), ((imm) >> 4) & 0x3), ret, \ ++ 2); \ ++ ret = vset_lane_s16( \ ++ vget_lane_s16(vreinterpret_s16_m64(_a), ((imm) >> 6) & 0x3), ret, \ ++ 3); \ ++ _sse2neon_return(vreinterpret_m64_s16(ret));) ++#endif ++ ++// Perform a serializing operation on all store-to-memory instructions that were ++// issued prior to this instruction. Guarantees that every store instruction ++// that precedes, in program order, is globally visible before any store ++// instruction which follows the fence in program order. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sfence ++FORCE_INLINE void _mm_sfence(void) ++{ ++ _sse2neon_smp_mb(); ++} ++ ++// Perform a serializing operation on all load-from-memory and store-to-memory ++// instructions that were issued prior to this instruction. Guarantees that ++// every memory access that precedes, in program order, the memory fence ++// instruction is globally visible before any memory instruction which follows ++// the fence in program order. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mfence ++FORCE_INLINE void _mm_mfence(void) ++{ ++ _sse2neon_smp_mb(); ++} ++ ++// Perform a serializing operation on all load-from-memory instructions that ++// were issued prior to this instruction. Guarantees that every load instruction ++// that precedes, in program order, is globally visible before any load ++// instruction which follows the fence in program order. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_lfence ++FORCE_INLINE void _mm_lfence(void) ++{ ++ _sse2neon_smp_mb(); ++} ++ ++// FORCE_INLINE __m128 _mm_shuffle_ps(__m128 a, __m128 b, __constrange(0,255) ++// int imm) ++#ifdef _sse2neon_shuffle ++#define _mm_shuffle_ps(a, b, imm) \ ++ __extension__({ \ ++ float32x4_t _input1 = vreinterpretq_f32_m128(a); \ ++ float32x4_t _input2 = vreinterpretq_f32_m128(b); \ ++ float32x4_t _shuf = \ ++ vshuffleq_s32(_input1, _input2, (imm) & (0x3), ((imm) >> 2) & 0x3, \ ++ (((imm) >> 4) & 0x3) + 4, (((imm) >> 6) & 0x3) + 4); \ ++ vreinterpretq_m128_f32(_shuf); \ ++ }) ++#else // generic ++#define _mm_shuffle_ps(a, b, imm) \ ++ _sse2neon_define2( \ ++ __m128, a, b, __m128 ret; switch (imm) { \ ++ case _MM_SHUFFLE(1, 0, 3, 2): \ ++ ret = _mm_shuffle_ps_1032(_a, _b); \ ++ break; \ ++ case _MM_SHUFFLE(2, 3, 0, 1): \ ++ ret = _mm_shuffle_ps_2301(_a, _b); \ ++ break; \ ++ case _MM_SHUFFLE(0, 3, 2, 1): \ ++ ret = _mm_shuffle_ps_0321(_a, _b); \ ++ break; \ ++ case _MM_SHUFFLE(2, 1, 0, 3): \ ++ ret = _mm_shuffle_ps_2103(_a, _b); \ ++ break; \ ++ case _MM_SHUFFLE(1, 0, 1, 0): \ ++ ret = _mm_movelh_ps(_a, _b); \ ++ break; \ ++ case _MM_SHUFFLE(1, 0, 0, 1): \ ++ ret = _mm_shuffle_ps_1001(_a, _b); \ ++ break; \ ++ case _MM_SHUFFLE(0, 1, 0, 1): \ ++ ret = _mm_shuffle_ps_0101(_a, _b); \ ++ break; \ ++ case _MM_SHUFFLE(3, 2, 1, 0): \ ++ ret = _mm_shuffle_ps_3210(_a, _b); \ ++ break; \ ++ case _MM_SHUFFLE(0, 0, 1, 1): \ ++ ret = _mm_shuffle_ps_0011(_a, _b); \ ++ break; \ ++ case _MM_SHUFFLE(0, 0, 2, 2): \ ++ ret = _mm_shuffle_ps_0022(_a, _b); \ ++ break; \ ++ case _MM_SHUFFLE(2, 2, 0, 0): \ ++ ret = _mm_shuffle_ps_2200(_a, _b); \ ++ break; \ ++ case _MM_SHUFFLE(3, 2, 0, 2): \ ++ ret = _mm_shuffle_ps_3202(_a, _b); \ ++ break; \ ++ case _MM_SHUFFLE(3, 2, 3, 2): \ ++ ret = _mm_movehl_ps(_b, _a); \ ++ break; \ ++ case _MM_SHUFFLE(1, 1, 3, 3): \ ++ ret = _mm_shuffle_ps_1133(_a, _b); \ ++ break; \ ++ case _MM_SHUFFLE(2, 0, 1, 0): \ ++ ret = _mm_shuffle_ps_2010(_a, _b); \ ++ break; \ ++ case _MM_SHUFFLE(2, 0, 0, 1): \ ++ ret = _mm_shuffle_ps_2001(_a, _b); \ ++ break; \ ++ case _MM_SHUFFLE(2, 0, 3, 2): \ ++ ret = _mm_shuffle_ps_2032(_a, _b); \ ++ break; \ ++ default: \ ++ ret = _mm_shuffle_ps_default(_a, _b, (imm)); \ ++ break; \ ++ } _sse2neon_return(ret);) ++#endif ++ ++// Compute the square root of packed single-precision (32-bit) floating-point ++// elements in a, and store the results in dst. ++// Due to ARMv7-A NEON's lack of a precise square root intrinsic, we implement ++// square root by multiplying input in with its reciprocal square root before ++// using the Newton-Raphson method to approximate the results. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sqrt_ps ++FORCE_INLINE __m128 _mm_sqrt_ps(__m128 in) ++{ ++#if (defined(__aarch64__) || defined(_M_ARM64)) && !SSE2NEON_PRECISE_SQRT ++ return vreinterpretq_m128_f32(vsqrtq_f32(vreinterpretq_f32_m128(in))); ++#else ++ float32x4_t recip = vrsqrteq_f32(vreinterpretq_f32_m128(in)); ++ ++ // Test for vrsqrteq_f32(0) -> positive infinity case. ++ // Change to zero, so that s * 1/sqrt(s) result is zero too. ++ const uint32x4_t pos_inf = vdupq_n_u32(0x7F800000); ++ const uint32x4_t div_by_zero = ++ vceqq_u32(pos_inf, vreinterpretq_u32_f32(recip)); ++ recip = vreinterpretq_f32_u32( ++ vandq_u32(vmvnq_u32(div_by_zero), vreinterpretq_u32_f32(recip))); ++ ++ recip = vmulq_f32( ++ vrsqrtsq_f32(vmulq_f32(recip, recip), vreinterpretq_f32_m128(in)), ++ recip); ++ // Additional Netwon-Raphson iteration for accuracy ++ recip = vmulq_f32( ++ vrsqrtsq_f32(vmulq_f32(recip, recip), vreinterpretq_f32_m128(in)), ++ recip); ++ ++ // sqrt(s) = s * 1/sqrt(s) ++ return vreinterpretq_m128_f32(vmulq_f32(vreinterpretq_f32_m128(in), recip)); ++#endif ++} ++ ++// Compute the square root of the lower single-precision (32-bit) floating-point ++// element in a, store the result in the lower element of dst, and copy the ++// upper 3 packed elements from a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sqrt_ss ++FORCE_INLINE __m128 _mm_sqrt_ss(__m128 in) ++{ ++ float32_t value = ++ vgetq_lane_f32(vreinterpretq_f32_m128(_mm_sqrt_ps(in)), 0); ++ return vreinterpretq_m128_f32( ++ vsetq_lane_f32(value, vreinterpretq_f32_m128(in), 0)); ++} ++ ++// Store 128-bits (composed of 4 packed single-precision (32-bit) floating-point ++// elements) from a into memory. mem_addr must be aligned on a 16-byte boundary ++// or a general-protection exception may be generated. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_ps ++FORCE_INLINE void _mm_store_ps(float *p, __m128 a) ++{ ++ vst1q_f32(p, vreinterpretq_f32_m128(a)); ++} ++ ++// Store the lower single-precision (32-bit) floating-point element from a into ++// 4 contiguous elements in memory. mem_addr must be aligned on a 16-byte ++// boundary or a general-protection exception may be generated. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_ps1 ++FORCE_INLINE void _mm_store_ps1(float *p, __m128 a) ++{ ++ float32_t a0 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); ++ vst1q_f32(p, vdupq_n_f32(a0)); ++} ++ ++// Store the lower single-precision (32-bit) floating-point element from a into ++// memory. mem_addr does not need to be aligned on any particular boundary. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_ss ++FORCE_INLINE void _mm_store_ss(float *p, __m128 a) ++{ ++ vst1q_lane_f32(p, vreinterpretq_f32_m128(a), 0); ++} ++ ++// Store the lower single-precision (32-bit) floating-point element from a into ++// 4 contiguous elements in memory. mem_addr must be aligned on a 16-byte ++// boundary or a general-protection exception may be generated. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store1_ps ++#define _mm_store1_ps _mm_store_ps1 ++ ++// Store the upper 2 single-precision (32-bit) floating-point elements from a ++// into memory. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeh_pi ++FORCE_INLINE void _mm_storeh_pi(__m64 *p, __m128 a) ++{ ++ *p = vreinterpret_m64_f32(vget_high_f32(a)); ++} ++ ++// Store the lower 2 single-precision (32-bit) floating-point elements from a ++// into memory. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storel_pi ++FORCE_INLINE void _mm_storel_pi(__m64 *p, __m128 a) ++{ ++ *p = vreinterpret_m64_f32(vget_low_f32(a)); ++} ++ ++// Store 4 single-precision (32-bit) floating-point elements from a into memory ++// in reverse order. mem_addr must be aligned on a 16-byte boundary or a ++// general-protection exception may be generated. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storer_ps ++FORCE_INLINE void _mm_storer_ps(float *p, __m128 a) ++{ ++ float32x4_t tmp = vrev64q_f32(vreinterpretq_f32_m128(a)); ++ float32x4_t rev = vextq_f32(tmp, tmp, 2); ++ vst1q_f32(p, rev); ++} ++ ++// Store 128-bits (composed of 4 packed single-precision (32-bit) floating-point ++// elements) from a into memory. mem_addr does not need to be aligned on any ++// particular boundary. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_ps ++FORCE_INLINE void _mm_storeu_ps(float *p, __m128 a) ++{ ++ vst1q_f32(p, vreinterpretq_f32_m128(a)); ++} ++ ++// Stores 16-bits of integer data a at the address p. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_si16 ++FORCE_INLINE void _mm_storeu_si16(void *p, __m128i a) ++{ ++ vst1q_lane_s16((int16_t *) p, vreinterpretq_s16_m128i(a), 0); ++} ++ ++// Stores 64-bits of integer data a at the address p. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_si64 ++FORCE_INLINE void _mm_storeu_si64(void *p, __m128i a) ++{ ++ vst1q_lane_s64((int64_t *) p, vreinterpretq_s64_m128i(a), 0); ++} ++ ++// Store 64-bits of integer data from a into memory using a non-temporal memory ++// hint. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_pi ++FORCE_INLINE void _mm_stream_pi(__m64 *p, __m64 a) ++{ ++ vst1_s64((int64_t *) p, vreinterpret_s64_m64(a)); ++} ++ ++// Store 128-bits (composed of 4 packed single-precision (32-bit) floating- ++// point elements) from a into memory using a non-temporal memory hint. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_ps ++FORCE_INLINE void _mm_stream_ps(float *p, __m128 a) ++{ ++#if __has_builtin(__builtin_nontemporal_store) ++ __builtin_nontemporal_store(a, (float32x4_t *) p); ++#else ++ vst1q_f32(p, vreinterpretq_f32_m128(a)); ++#endif ++} ++ ++// Subtract packed single-precision (32-bit) floating-point elements in b from ++// packed single-precision (32-bit) floating-point elements in a, and store the ++// results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_ps ++FORCE_INLINE __m128 _mm_sub_ps(__m128 a, __m128 b) ++{ ++ return vreinterpretq_m128_f32( ++ vsubq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); ++} ++ ++// Subtract the lower single-precision (32-bit) floating-point element in b from ++// the lower single-precision (32-bit) floating-point element in a, store the ++// result in the lower element of dst, and copy the upper 3 packed elements from ++// a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_ss ++FORCE_INLINE __m128 _mm_sub_ss(__m128 a, __m128 b) ++{ ++ return _mm_move_ss(a, _mm_sub_ps(a, b)); ++} ++ ++// Macro: Transpose the 4x4 matrix formed by the 4 rows of single-precision ++// (32-bit) floating-point elements in row0, row1, row2, and row3, and store the ++// transposed matrix in these vectors (row0 now contains column 0, etc.). ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=MM_TRANSPOSE4_PS ++#define _MM_TRANSPOSE4_PS(row0, row1, row2, row3) \ ++ do { \ ++ float32x4x2_t ROW01 = vtrnq_f32(row0, row1); \ ++ float32x4x2_t ROW23 = vtrnq_f32(row2, row3); \ ++ row0 = vcombine_f32(vget_low_f32(ROW01.val[0]), \ ++ vget_low_f32(ROW23.val[0])); \ ++ row1 = vcombine_f32(vget_low_f32(ROW01.val[1]), \ ++ vget_low_f32(ROW23.val[1])); \ ++ row2 = vcombine_f32(vget_high_f32(ROW01.val[0]), \ ++ vget_high_f32(ROW23.val[0])); \ ++ row3 = vcombine_f32(vget_high_f32(ROW01.val[1]), \ ++ vget_high_f32(ROW23.val[1])); \ ++ } while (0) ++ ++// according to the documentation, these intrinsics behave the same as the ++// non-'u' versions. We'll just alias them here. ++#define _mm_ucomieq_ss _mm_comieq_ss ++#define _mm_ucomige_ss _mm_comige_ss ++#define _mm_ucomigt_ss _mm_comigt_ss ++#define _mm_ucomile_ss _mm_comile_ss ++#define _mm_ucomilt_ss _mm_comilt_ss ++#define _mm_ucomineq_ss _mm_comineq_ss ++ ++// Return vector of type __m128i with undefined elements. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_undefined_si128 ++FORCE_INLINE __m128i _mm_undefined_si128(void) ++{ ++#if defined(__GNUC__) || defined(__clang__) ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wuninitialized" ++#endif ++ __m128i a; ++#if defined(_MSC_VER) ++ a = _mm_setzero_si128(); ++#endif ++ return a; ++#if defined(__GNUC__) || defined(__clang__) ++#pragma GCC diagnostic pop ++#endif ++} ++ ++// Return vector of type __m128 with undefined elements. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_undefined_ps ++FORCE_INLINE __m128 _mm_undefined_ps(void) ++{ ++#if defined(__GNUC__) || defined(__clang__) ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wuninitialized" ++#endif ++ __m128 a; ++#if defined(_MSC_VER) ++ a = _mm_setzero_ps(); ++#endif ++ return a; ++#if defined(__GNUC__) || defined(__clang__) ++#pragma GCC diagnostic pop ++#endif ++} ++ ++// Unpack and interleave single-precision (32-bit) floating-point elements from ++// the high half a and b, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_ps ++FORCE_INLINE __m128 _mm_unpackhi_ps(__m128 a, __m128 b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128_f32( ++ vzip2q_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); ++#else ++ float32x2_t a1 = vget_high_f32(vreinterpretq_f32_m128(a)); ++ float32x2_t b1 = vget_high_f32(vreinterpretq_f32_m128(b)); ++ float32x2x2_t result = vzip_f32(a1, b1); ++ return vreinterpretq_m128_f32(vcombine_f32(result.val[0], result.val[1])); ++#endif ++} ++ ++// Unpack and interleave single-precision (32-bit) floating-point elements from ++// the low half of a and b, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_ps ++FORCE_INLINE __m128 _mm_unpacklo_ps(__m128 a, __m128 b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128_f32( ++ vzip1q_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); ++#else ++ float32x2_t a1 = vget_low_f32(vreinterpretq_f32_m128(a)); ++ float32x2_t b1 = vget_low_f32(vreinterpretq_f32_m128(b)); ++ float32x2x2_t result = vzip_f32(a1, b1); ++ return vreinterpretq_m128_f32(vcombine_f32(result.val[0], result.val[1])); ++#endif ++} ++ ++// Compute the bitwise XOR of packed single-precision (32-bit) floating-point ++// elements in a and b, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_xor_ps ++FORCE_INLINE __m128 _mm_xor_ps(__m128 a, __m128 b) ++{ ++ return vreinterpretq_m128_s32( ++ veorq_s32(vreinterpretq_s32_m128(a), vreinterpretq_s32_m128(b))); ++} ++ ++/* SSE2 */ ++ ++// Add packed 16-bit integers in a and b, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_epi16 ++FORCE_INLINE __m128i _mm_add_epi16(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s16( ++ vaddq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); ++} ++ ++// Add packed 32-bit integers in a and b, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_epi32 ++FORCE_INLINE __m128i _mm_add_epi32(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s32( ++ vaddq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); ++} ++ ++// Add packed 64-bit integers in a and b, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_epi64 ++FORCE_INLINE __m128i _mm_add_epi64(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s64( ++ vaddq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); ++} ++ ++// Add packed 8-bit integers in a and b, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_epi8 ++FORCE_INLINE __m128i _mm_add_epi8(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s8( ++ vaddq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); ++} ++ ++// Add packed double-precision (64-bit) floating-point elements in a and b, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_pd ++FORCE_INLINE __m128d _mm_add_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64( ++ vaddq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); ++#else ++ double *da = (double *) &a; ++ double *db = (double *) &b; ++ double c[2]; ++ c[0] = da[0] + db[0]; ++ c[1] = da[1] + db[1]; ++ return vld1q_f32((float32_t *) c); ++#endif ++} ++ ++// Add the lower double-precision (64-bit) floating-point element in a and b, ++// store the result in the lower element of dst, and copy the upper element from ++// a to the upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_sd ++FORCE_INLINE __m128d _mm_add_sd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return _mm_move_sd(a, _mm_add_pd(a, b)); ++#else ++ double *da = (double *) &a; ++ double *db = (double *) &b; ++ double c[2]; ++ c[0] = da[0] + db[0]; ++ c[1] = da[1]; ++ return vld1q_f32((float32_t *) c); ++#endif ++} ++ ++// Add 64-bit integers a and b, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_si64 ++FORCE_INLINE __m64 _mm_add_si64(__m64 a, __m64 b) ++{ ++ return vreinterpret_m64_s64( ++ vadd_s64(vreinterpret_s64_m64(a), vreinterpret_s64_m64(b))); ++} ++ ++// Add packed signed 16-bit integers in a and b using saturation, and store the ++// results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_adds_epi16 ++FORCE_INLINE __m128i _mm_adds_epi16(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s16( ++ vqaddq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); ++} ++ ++// Add packed signed 8-bit integers in a and b using saturation, and store the ++// results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_adds_epi8 ++FORCE_INLINE __m128i _mm_adds_epi8(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s8( ++ vqaddq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); ++} ++ ++// Add packed unsigned 16-bit integers in a and b using saturation, and store ++// the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_adds_epu16 ++FORCE_INLINE __m128i _mm_adds_epu16(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u16( ++ vqaddq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); ++} ++ ++// Add packed unsigned 8-bit integers in a and b using saturation, and store the ++// results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_adds_epu8 ++FORCE_INLINE __m128i _mm_adds_epu8(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u8( ++ vqaddq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); ++} ++ ++// Compute the bitwise AND of packed double-precision (64-bit) floating-point ++// elements in a and b, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_and_pd ++FORCE_INLINE __m128d _mm_and_pd(__m128d a, __m128d b) ++{ ++ return vreinterpretq_m128d_s64( ++ vandq_s64(vreinterpretq_s64_m128d(a), vreinterpretq_s64_m128d(b))); ++} ++ ++// Compute the bitwise AND of 128 bits (representing integer data) in a and b, ++// and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_and_si128 ++FORCE_INLINE __m128i _mm_and_si128(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s32( ++ vandq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); ++} ++ ++// Compute the bitwise NOT of packed double-precision (64-bit) floating-point ++// elements in a and then AND with b, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_andnot_pd ++FORCE_INLINE __m128d _mm_andnot_pd(__m128d a, __m128d b) ++{ ++ // *NOTE* argument swap ++ return vreinterpretq_m128d_s64( ++ vbicq_s64(vreinterpretq_s64_m128d(b), vreinterpretq_s64_m128d(a))); ++} ++ ++// Compute the bitwise NOT of 128 bits (representing integer data) in a and then ++// AND with b, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_andnot_si128 ++FORCE_INLINE __m128i _mm_andnot_si128(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s32( ++ vbicq_s32(vreinterpretq_s32_m128i(b), ++ vreinterpretq_s32_m128i(a))); // *NOTE* argument swap ++} ++ ++// Average packed unsigned 16-bit integers in a and b, and store the results in ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_avg_epu16 ++FORCE_INLINE __m128i _mm_avg_epu16(__m128i a, __m128i b) ++{ ++ return (__m128i) vrhaddq_u16(vreinterpretq_u16_m128i(a), ++ vreinterpretq_u16_m128i(b)); ++} ++ ++// Average packed unsigned 8-bit integers in a and b, and store the results in ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_avg_epu8 ++FORCE_INLINE __m128i _mm_avg_epu8(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u8( ++ vrhaddq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); ++} ++ ++// Shift a left by imm8 bytes while shifting in zeros, and store the results in ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_bslli_si128 ++#define _mm_bslli_si128(a, imm) _mm_slli_si128(a, imm) ++ ++// Shift a right by imm8 bytes while shifting in zeros, and store the results in ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_bsrli_si128 ++#define _mm_bsrli_si128(a, imm) _mm_srli_si128(a, imm) ++ ++// Cast vector of type __m128d to type __m128. This intrinsic is only used for ++// compilation and does not generate any instructions, thus it has zero latency. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castpd_ps ++FORCE_INLINE __m128 _mm_castpd_ps(__m128d a) ++{ ++ return vreinterpretq_m128_s64(vreinterpretq_s64_m128d(a)); ++} ++ ++// Cast vector of type __m128d to type __m128i. This intrinsic is only used for ++// compilation and does not generate any instructions, thus it has zero latency. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castpd_si128 ++FORCE_INLINE __m128i _mm_castpd_si128(__m128d a) ++{ ++ return vreinterpretq_m128i_s64(vreinterpretq_s64_m128d(a)); ++} ++ ++// Cast vector of type __m128 to type __m128d. This intrinsic is only used for ++// compilation and does not generate any instructions, thus it has zero latency. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castps_pd ++FORCE_INLINE __m128d _mm_castps_pd(__m128 a) ++{ ++ return vreinterpretq_m128d_s32(vreinterpretq_s32_m128(a)); ++} ++ ++// Cast vector of type __m128 to type __m128i. This intrinsic is only used for ++// compilation and does not generate any instructions, thus it has zero latency. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castps_si128 ++FORCE_INLINE __m128i _mm_castps_si128(__m128 a) ++{ ++ return vreinterpretq_m128i_s32(vreinterpretq_s32_m128(a)); ++} ++ ++// Cast vector of type __m128i to type __m128d. This intrinsic is only used for ++// compilation and does not generate any instructions, thus it has zero latency. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castsi128_pd ++FORCE_INLINE __m128d _mm_castsi128_pd(__m128i a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64(vreinterpretq_f64_m128i(a)); ++#else ++ return vreinterpretq_m128d_f32(vreinterpretq_f32_m128i(a)); ++#endif ++} ++ ++// Cast vector of type __m128i to type __m128. This intrinsic is only used for ++// compilation and does not generate any instructions, thus it has zero latency. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castsi128_ps ++FORCE_INLINE __m128 _mm_castsi128_ps(__m128i a) ++{ ++ return vreinterpretq_m128_s32(vreinterpretq_s32_m128i(a)); ++} ++ ++// Invalidate and flush the cache line that contains p from all levels of the ++// cache hierarchy. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_clflush ++#if defined(__APPLE__) ++#include ++#endif ++FORCE_INLINE void _mm_clflush(void const *p) ++{ ++ (void) p; ++ ++ /* sys_icache_invalidate is supported since macOS 10.5. ++ * However, it does not work on non-jailbroken iOS devices, although the ++ * compilation is successful. ++ */ ++#if defined(__APPLE__) ++ sys_icache_invalidate((void *) (uintptr_t) p, SSE2NEON_CACHELINE_SIZE); ++#elif defined(__GNUC__) || defined(__clang__) ++ uintptr_t ptr = (uintptr_t) p; ++ __builtin___clear_cache((char *) ptr, ++ (char *) ptr + SSE2NEON_CACHELINE_SIZE); ++#elif (_MSC_VER) && SSE2NEON_INCLUDE_WINDOWS_H ++ FlushInstructionCache(GetCurrentProcess(), p, SSE2NEON_CACHELINE_SIZE); ++#endif ++} ++ ++// Compare packed 16-bit integers in a and b for equality, and store the results ++// in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_epi16 ++FORCE_INLINE __m128i _mm_cmpeq_epi16(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u16( ++ vceqq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); ++} ++ ++// Compare packed 32-bit integers in a and b for equality, and store the results ++// in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_epi32 ++FORCE_INLINE __m128i _mm_cmpeq_epi32(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u32( ++ vceqq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); ++} ++ ++// Compare packed 8-bit integers in a and b for equality, and store the results ++// in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_epi8 ++FORCE_INLINE __m128i _mm_cmpeq_epi8(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u8( ++ vceqq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); ++} ++ ++// Compare packed double-precision (64-bit) floating-point elements in a and b ++// for equality, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_pd ++FORCE_INLINE __m128d _mm_cmpeq_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_u64( ++ vceqq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); ++#else ++ // (a == b) -> (a_lo == b_lo) && (a_hi == b_hi) ++ uint32x4_t cmp = ++ vceqq_u32(vreinterpretq_u32_m128d(a), vreinterpretq_u32_m128d(b)); ++ uint32x4_t swapped = vrev64q_u32(cmp); ++ return vreinterpretq_m128d_u32(vandq_u32(cmp, swapped)); ++#endif ++} ++ ++// Compare the lower double-precision (64-bit) floating-point elements in a and ++// b for equality, store the result in the lower element of dst, and copy the ++// upper element from a to the upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_sd ++FORCE_INLINE __m128d _mm_cmpeq_sd(__m128d a, __m128d b) ++{ ++ return _mm_move_sd(a, _mm_cmpeq_pd(a, b)); ++} ++ ++// Compare packed double-precision (64-bit) floating-point elements in a and b ++// for greater-than-or-equal, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpge_pd ++FORCE_INLINE __m128d _mm_cmpge_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_u64( ++ vcgeq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); ++#else ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t a1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t b1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t d[2]; ++ d[0] = (*(double *) &a0) >= (*(double *) &b0) ? ~UINT64_C(0) : UINT64_C(0); ++ d[1] = (*(double *) &a1) >= (*(double *) &b1) ? ~UINT64_C(0) : UINT64_C(0); ++ ++ return vreinterpretq_m128d_u64(vld1q_u64(d)); ++#endif ++} ++ ++// Compare the lower double-precision (64-bit) floating-point elements in a and ++// b for greater-than-or-equal, store the result in the lower element of dst, ++// and copy the upper element from a to the upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpge_sd ++FORCE_INLINE __m128d _mm_cmpge_sd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return _mm_move_sd(a, _mm_cmpge_pd(a, b)); ++#else ++ // expand "_mm_cmpge_pd()" to reduce unnecessary operations ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t a1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t d[2]; ++ d[0] = (*(double *) &a0) >= (*(double *) &b0) ? ~UINT64_C(0) : UINT64_C(0); ++ d[1] = a1; ++ ++ return vreinterpretq_m128d_u64(vld1q_u64(d)); ++#endif ++} ++ ++// Compare packed signed 16-bit integers in a and b for greater-than, and store ++// the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_epi16 ++FORCE_INLINE __m128i _mm_cmpgt_epi16(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u16( ++ vcgtq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); ++} ++ ++// Compare packed signed 32-bit integers in a and b for greater-than, and store ++// the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_epi32 ++FORCE_INLINE __m128i _mm_cmpgt_epi32(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u32( ++ vcgtq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); ++} ++ ++// Compare packed signed 8-bit integers in a and b for greater-than, and store ++// the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_epi8 ++FORCE_INLINE __m128i _mm_cmpgt_epi8(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u8( ++ vcgtq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); ++} ++ ++// Compare packed double-precision (64-bit) floating-point elements in a and b ++// for greater-than, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_pd ++FORCE_INLINE __m128d _mm_cmpgt_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_u64( ++ vcgtq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); ++#else ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t a1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t b1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t d[2]; ++ d[0] = (*(double *) &a0) > (*(double *) &b0) ? ~UINT64_C(0) : UINT64_C(0); ++ d[1] = (*(double *) &a1) > (*(double *) &b1) ? ~UINT64_C(0) : UINT64_C(0); ++ ++ return vreinterpretq_m128d_u64(vld1q_u64(d)); ++#endif ++} ++ ++// Compare the lower double-precision (64-bit) floating-point elements in a and ++// b for greater-than, store the result in the lower element of dst, and copy ++// the upper element from a to the upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_sd ++FORCE_INLINE __m128d _mm_cmpgt_sd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return _mm_move_sd(a, _mm_cmpgt_pd(a, b)); ++#else ++ // expand "_mm_cmpge_pd()" to reduce unnecessary operations ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t a1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t d[2]; ++ d[0] = (*(double *) &a0) > (*(double *) &b0) ? ~UINT64_C(0) : UINT64_C(0); ++ d[1] = a1; ++ ++ return vreinterpretq_m128d_u64(vld1q_u64(d)); ++#endif ++} ++ ++// Compare packed double-precision (64-bit) floating-point elements in a and b ++// for less-than-or-equal, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmple_pd ++FORCE_INLINE __m128d _mm_cmple_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_u64( ++ vcleq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); ++#else ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t a1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t b1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t d[2]; ++ d[0] = (*(double *) &a0) <= (*(double *) &b0) ? ~UINT64_C(0) : UINT64_C(0); ++ d[1] = (*(double *) &a1) <= (*(double *) &b1) ? ~UINT64_C(0) : UINT64_C(0); ++ ++ return vreinterpretq_m128d_u64(vld1q_u64(d)); ++#endif ++} ++ ++// Compare the lower double-precision (64-bit) floating-point elements in a and ++// b for less-than-or-equal, store the result in the lower element of dst, and ++// copy the upper element from a to the upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmple_sd ++FORCE_INLINE __m128d _mm_cmple_sd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return _mm_move_sd(a, _mm_cmple_pd(a, b)); ++#else ++ // expand "_mm_cmpge_pd()" to reduce unnecessary operations ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t a1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t d[2]; ++ d[0] = (*(double *) &a0) <= (*(double *) &b0) ? ~UINT64_C(0) : UINT64_C(0); ++ d[1] = a1; ++ ++ return vreinterpretq_m128d_u64(vld1q_u64(d)); ++#endif ++} ++ ++// Compare packed signed 16-bit integers in a and b for less-than, and store the ++// results in dst. Note: This intrinsic emits the pcmpgtw instruction with the ++// order of the operands switched. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_epi16 ++FORCE_INLINE __m128i _mm_cmplt_epi16(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u16( ++ vcltq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); ++} ++ ++// Compare packed signed 32-bit integers in a and b for less-than, and store the ++// results in dst. Note: This intrinsic emits the pcmpgtd instruction with the ++// order of the operands switched. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_epi32 ++FORCE_INLINE __m128i _mm_cmplt_epi32(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u32( ++ vcltq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); ++} ++ ++// Compare packed signed 8-bit integers in a and b for less-than, and store the ++// results in dst. Note: This intrinsic emits the pcmpgtb instruction with the ++// order of the operands switched. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_epi8 ++FORCE_INLINE __m128i _mm_cmplt_epi8(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u8( ++ vcltq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); ++} ++ ++// Compare packed double-precision (64-bit) floating-point elements in a and b ++// for less-than, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_pd ++FORCE_INLINE __m128d _mm_cmplt_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_u64( ++ vcltq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); ++#else ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t a1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t b1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t d[2]; ++ d[0] = (*(double *) &a0) < (*(double *) &b0) ? ~UINT64_C(0) : UINT64_C(0); ++ d[1] = (*(double *) &a1) < (*(double *) &b1) ? ~UINT64_C(0) : UINT64_C(0); ++ ++ return vreinterpretq_m128d_u64(vld1q_u64(d)); ++#endif ++} ++ ++// Compare the lower double-precision (64-bit) floating-point elements in a and ++// b for less-than, store the result in the lower element of dst, and copy the ++// upper element from a to the upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_sd ++FORCE_INLINE __m128d _mm_cmplt_sd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return _mm_move_sd(a, _mm_cmplt_pd(a, b)); ++#else ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t a1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t d[2]; ++ d[0] = (*(double *) &a0) < (*(double *) &b0) ? ~UINT64_C(0) : UINT64_C(0); ++ d[1] = a1; ++ ++ return vreinterpretq_m128d_u64(vld1q_u64(d)); ++#endif ++} ++ ++// Compare packed double-precision (64-bit) floating-point elements in a and b ++// for not-equal, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpneq_pd ++FORCE_INLINE __m128d _mm_cmpneq_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_s32(vmvnq_s32(vreinterpretq_s32_u64( ++ vceqq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))))); ++#else ++ // (a == b) -> (a_lo == b_lo) && (a_hi == b_hi) ++ uint32x4_t cmp = ++ vceqq_u32(vreinterpretq_u32_m128d(a), vreinterpretq_u32_m128d(b)); ++ uint32x4_t swapped = vrev64q_u32(cmp); ++ return vreinterpretq_m128d_u32(vmvnq_u32(vandq_u32(cmp, swapped))); ++#endif ++} ++ ++// Compare the lower double-precision (64-bit) floating-point elements in a and ++// b for not-equal, store the result in the lower element of dst, and copy the ++// upper element from a to the upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpneq_sd ++FORCE_INLINE __m128d _mm_cmpneq_sd(__m128d a, __m128d b) ++{ ++ return _mm_move_sd(a, _mm_cmpneq_pd(a, b)); ++} ++ ++// Compare packed double-precision (64-bit) floating-point elements in a and b ++// for not-greater-than-or-equal, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnge_pd ++FORCE_INLINE __m128d _mm_cmpnge_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_u64(veorq_u64( ++ vcgeq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b)), ++ vdupq_n_u64(UINT64_MAX))); ++#else ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t a1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t b1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t d[2]; ++ d[0] = ++ !((*(double *) &a0) >= (*(double *) &b0)) ? ~UINT64_C(0) : UINT64_C(0); ++ d[1] = ++ !((*(double *) &a1) >= (*(double *) &b1)) ? ~UINT64_C(0) : UINT64_C(0); ++ ++ return vreinterpretq_m128d_u64(vld1q_u64(d)); ++#endif ++} ++ ++// Compare the lower double-precision (64-bit) floating-point elements in a and ++// b for not-greater-than-or-equal, store the result in the lower element of ++// dst, and copy the upper element from a to the upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnge_sd ++FORCE_INLINE __m128d _mm_cmpnge_sd(__m128d a, __m128d b) ++{ ++ return _mm_move_sd(a, _mm_cmpnge_pd(a, b)); ++} ++ ++// Compare packed double-precision (64-bit) floating-point elements in a and b ++// for not-greater-than, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_cmpngt_pd ++FORCE_INLINE __m128d _mm_cmpngt_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_u64(veorq_u64( ++ vcgtq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b)), ++ vdupq_n_u64(UINT64_MAX))); ++#else ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t a1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t b1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t d[2]; ++ d[0] = ++ !((*(double *) &a0) > (*(double *) &b0)) ? ~UINT64_C(0) : UINT64_C(0); ++ d[1] = ++ !((*(double *) &a1) > (*(double *) &b1)) ? ~UINT64_C(0) : UINT64_C(0); ++ ++ return vreinterpretq_m128d_u64(vld1q_u64(d)); ++#endif ++} ++ ++// Compare the lower double-precision (64-bit) floating-point elements in a and ++// b for not-greater-than, store the result in the lower element of dst, and ++// copy the upper element from a to the upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpngt_sd ++FORCE_INLINE __m128d _mm_cmpngt_sd(__m128d a, __m128d b) ++{ ++ return _mm_move_sd(a, _mm_cmpngt_pd(a, b)); ++} ++ ++// Compare packed double-precision (64-bit) floating-point elements in a and b ++// for not-less-than-or-equal, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnle_pd ++FORCE_INLINE __m128d _mm_cmpnle_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_u64(veorq_u64( ++ vcleq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b)), ++ vdupq_n_u64(UINT64_MAX))); ++#else ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t a1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t b1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t d[2]; ++ d[0] = ++ !((*(double *) &a0) <= (*(double *) &b0)) ? ~UINT64_C(0) : UINT64_C(0); ++ d[1] = ++ !((*(double *) &a1) <= (*(double *) &b1)) ? ~UINT64_C(0) : UINT64_C(0); ++ ++ return vreinterpretq_m128d_u64(vld1q_u64(d)); ++#endif ++} ++ ++// Compare the lower double-precision (64-bit) floating-point elements in a and ++// b for not-less-than-or-equal, store the result in the lower element of dst, ++// and copy the upper element from a to the upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnle_sd ++FORCE_INLINE __m128d _mm_cmpnle_sd(__m128d a, __m128d b) ++{ ++ return _mm_move_sd(a, _mm_cmpnle_pd(a, b)); ++} ++ ++// Compare packed double-precision (64-bit) floating-point elements in a and b ++// for not-less-than, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnlt_pd ++FORCE_INLINE __m128d _mm_cmpnlt_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_u64(veorq_u64( ++ vcltq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b)), ++ vdupq_n_u64(UINT64_MAX))); ++#else ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t a1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t b1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t d[2]; ++ d[0] = ++ !((*(double *) &a0) < (*(double *) &b0)) ? ~UINT64_C(0) : UINT64_C(0); ++ d[1] = ++ !((*(double *) &a1) < (*(double *) &b1)) ? ~UINT64_C(0) : UINT64_C(0); ++ ++ return vreinterpretq_m128d_u64(vld1q_u64(d)); ++#endif ++} ++ ++// Compare the lower double-precision (64-bit) floating-point elements in a and ++// b for not-less-than, store the result in the lower element of dst, and copy ++// the upper element from a to the upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnlt_sd ++FORCE_INLINE __m128d _mm_cmpnlt_sd(__m128d a, __m128d b) ++{ ++ return _mm_move_sd(a, _mm_cmpnlt_pd(a, b)); ++} ++ ++// Compare packed double-precision (64-bit) floating-point elements in a and b ++// to see if neither is NaN, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpord_pd ++FORCE_INLINE __m128d _mm_cmpord_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ // Excluding NaNs, any two floating point numbers can be compared. ++ uint64x2_t not_nan_a = ++ vceqq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(a)); ++ uint64x2_t not_nan_b = ++ vceqq_f64(vreinterpretq_f64_m128d(b), vreinterpretq_f64_m128d(b)); ++ return vreinterpretq_m128d_u64(vandq_u64(not_nan_a, not_nan_b)); ++#else ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t a1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t b1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t d[2]; ++ d[0] = ((*(double *) &a0) == (*(double *) &a0) && ++ (*(double *) &b0) == (*(double *) &b0)) ++ ? ~UINT64_C(0) ++ : UINT64_C(0); ++ d[1] = ((*(double *) &a1) == (*(double *) &a1) && ++ (*(double *) &b1) == (*(double *) &b1)) ++ ? ~UINT64_C(0) ++ : UINT64_C(0); ++ ++ return vreinterpretq_m128d_u64(vld1q_u64(d)); ++#endif ++} ++ ++// Compare the lower double-precision (64-bit) floating-point elements in a and ++// b to see if neither is NaN, store the result in the lower element of dst, and ++// copy the upper element from a to the upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpord_sd ++FORCE_INLINE __m128d _mm_cmpord_sd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return _mm_move_sd(a, _mm_cmpord_pd(a, b)); ++#else ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t a1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t d[2]; ++ d[0] = ((*(double *) &a0) == (*(double *) &a0) && ++ (*(double *) &b0) == (*(double *) &b0)) ++ ? ~UINT64_C(0) ++ : UINT64_C(0); ++ d[1] = a1; ++ ++ return vreinterpretq_m128d_u64(vld1q_u64(d)); ++#endif ++} ++ ++// Compare packed double-precision (64-bit) floating-point elements in a and b ++// to see if either is NaN, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpunord_pd ++FORCE_INLINE __m128d _mm_cmpunord_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ // Two NaNs are not equal in comparison operation. ++ uint64x2_t not_nan_a = ++ vceqq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(a)); ++ uint64x2_t not_nan_b = ++ vceqq_f64(vreinterpretq_f64_m128d(b), vreinterpretq_f64_m128d(b)); ++ return vreinterpretq_m128d_s32( ++ vmvnq_s32(vreinterpretq_s32_u64(vandq_u64(not_nan_a, not_nan_b)))); ++#else ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t a1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t b1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t d[2]; ++ d[0] = ((*(double *) &a0) == (*(double *) &a0) && ++ (*(double *) &b0) == (*(double *) &b0)) ++ ? UINT64_C(0) ++ : ~UINT64_C(0); ++ d[1] = ((*(double *) &a1) == (*(double *) &a1) && ++ (*(double *) &b1) == (*(double *) &b1)) ++ ? UINT64_C(0) ++ : ~UINT64_C(0); ++ ++ return vreinterpretq_m128d_u64(vld1q_u64(d)); ++#endif ++} ++ ++// Compare the lower double-precision (64-bit) floating-point elements in a and ++// b to see if either is NaN, store the result in the lower element of dst, and ++// copy the upper element from a to the upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpunord_sd ++FORCE_INLINE __m128d _mm_cmpunord_sd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return _mm_move_sd(a, _mm_cmpunord_pd(a, b)); ++#else ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t a1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t d[2]; ++ d[0] = ((*(double *) &a0) == (*(double *) &a0) && ++ (*(double *) &b0) == (*(double *) &b0)) ++ ? UINT64_C(0) ++ : ~UINT64_C(0); ++ d[1] = a1; ++ ++ return vreinterpretq_m128d_u64(vld1q_u64(d)); ++#endif ++} ++ ++// Compare the lower double-precision (64-bit) floating-point element in a and b ++// for greater-than-or-equal, and return the boolean result (0 or 1). ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comige_sd ++FORCE_INLINE int _mm_comige_sd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vgetq_lane_u64(vcgeq_f64(a, b), 0) & 0x1; ++#else ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ ++ return (*(double *) &a0 >= *(double *) &b0); ++#endif ++} ++ ++// Compare the lower double-precision (64-bit) floating-point element in a and b ++// for greater-than, and return the boolean result (0 or 1). ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comigt_sd ++FORCE_INLINE int _mm_comigt_sd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vgetq_lane_u64(vcgtq_f64(a, b), 0) & 0x1; ++#else ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ ++ return (*(double *) &a0 > *(double *) &b0); ++#endif ++} ++ ++// Compare the lower double-precision (64-bit) floating-point element in a and b ++// for less-than-or-equal, and return the boolean result (0 or 1). ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comile_sd ++FORCE_INLINE int _mm_comile_sd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vgetq_lane_u64(vcleq_f64(a, b), 0) & 0x1; ++#else ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ ++ return (*(double *) &a0 <= *(double *) &b0); ++#endif ++} ++ ++// Compare the lower double-precision (64-bit) floating-point element in a and b ++// for less-than, and return the boolean result (0 or 1). ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comilt_sd ++FORCE_INLINE int _mm_comilt_sd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vgetq_lane_u64(vcltq_f64(a, b), 0) & 0x1; ++#else ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ ++ return (*(double *) &a0 < *(double *) &b0); ++#endif ++} ++ ++// Compare the lower double-precision (64-bit) floating-point element in a and b ++// for equality, and return the boolean result (0 or 1). ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comieq_sd ++FORCE_INLINE int _mm_comieq_sd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vgetq_lane_u64(vceqq_f64(a, b), 0) & 0x1; ++#else ++ uint32x4_t a_not_nan = ++ vceqq_u32(vreinterpretq_u32_m128d(a), vreinterpretq_u32_m128d(a)); ++ uint32x4_t b_not_nan = ++ vceqq_u32(vreinterpretq_u32_m128d(b), vreinterpretq_u32_m128d(b)); ++ uint32x4_t a_and_b_not_nan = vandq_u32(a_not_nan, b_not_nan); ++ uint32x4_t a_eq_b = ++ vceqq_u32(vreinterpretq_u32_m128d(a), vreinterpretq_u32_m128d(b)); ++ uint64x2_t and_results = vandq_u64(vreinterpretq_u64_u32(a_and_b_not_nan), ++ vreinterpretq_u64_u32(a_eq_b)); ++ return vgetq_lane_u64(and_results, 0) & 0x1; ++#endif ++} ++ ++// Compare the lower double-precision (64-bit) floating-point element in a and b ++// for not-equal, and return the boolean result (0 or 1). ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comineq_sd ++FORCE_INLINE int _mm_comineq_sd(__m128d a, __m128d b) ++{ ++ return !_mm_comieq_sd(a, b); ++} ++ ++// Convert packed signed 32-bit integers in a to packed double-precision ++// (64-bit) floating-point elements, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi32_pd ++FORCE_INLINE __m128d _mm_cvtepi32_pd(__m128i a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64( ++ vcvtq_f64_s64(vmovl_s32(vget_low_s32(vreinterpretq_s32_m128i(a))))); ++#else ++ double a0 = (double) vgetq_lane_s32(vreinterpretq_s32_m128i(a), 0); ++ double a1 = (double) vgetq_lane_s32(vreinterpretq_s32_m128i(a), 1); ++ return _mm_set_pd(a1, a0); ++#endif ++} ++ ++// Convert packed signed 32-bit integers in a to packed single-precision ++// (32-bit) floating-point elements, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi32_ps ++FORCE_INLINE __m128 _mm_cvtepi32_ps(__m128i a) ++{ ++ return vreinterpretq_m128_f32(vcvtq_f32_s32(vreinterpretq_s32_m128i(a))); ++} ++ ++// Convert packed double-precision (64-bit) floating-point elements in a to ++// packed 32-bit integers, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpd_epi32 ++FORCE_INLINE_OPTNONE __m128i _mm_cvtpd_epi32(__m128d a) ++{ ++// vrnd32xq_f64 not supported on clang ++#if defined(__ARM_FEATURE_FRINT) && !defined(__clang__) ++ float64x2_t rounded = vrnd32xq_f64(vreinterpretq_f64_m128d(a)); ++ int64x2_t integers = vcvtq_s64_f64(rounded); ++ return vreinterpretq_m128i_s32( ++ vcombine_s32(vmovn_s64(integers), vdup_n_s32(0))); ++#else ++ __m128d rnd = _mm_round_pd(a, _MM_FROUND_CUR_DIRECTION); ++ double d0 = ((double *) &rnd)[0]; ++ double d1 = ((double *) &rnd)[1]; ++ return _mm_set_epi32(0, 0, (int32_t) d1, (int32_t) d0); ++#endif ++} ++ ++// Convert packed double-precision (64-bit) floating-point elements in a to ++// packed 32-bit integers, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpd_pi32 ++FORCE_INLINE_OPTNONE __m64 _mm_cvtpd_pi32(__m128d a) ++{ ++ __m128d rnd = _mm_round_pd(a, _MM_FROUND_CUR_DIRECTION); ++ double d0 = ((double *) &rnd)[0]; ++ double d1 = ((double *) &rnd)[1]; ++ int32_t ALIGN_STRUCT(16) data[2] = {(int32_t) d0, (int32_t) d1}; ++ return vreinterpret_m64_s32(vld1_s32(data)); ++} ++ ++// Convert packed double-precision (64-bit) floating-point elements in a to ++// packed single-precision (32-bit) floating-point elements, and store the ++// results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpd_ps ++FORCE_INLINE __m128 _mm_cvtpd_ps(__m128d a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ float32x2_t tmp = vcvt_f32_f64(vreinterpretq_f64_m128d(a)); ++ return vreinterpretq_m128_f32(vcombine_f32(tmp, vdup_n_f32(0))); ++#else ++ float a0 = (float) ((double *) &a)[0]; ++ float a1 = (float) ((double *) &a)[1]; ++ return _mm_set_ps(0, 0, a1, a0); ++#endif ++} ++ ++// Convert packed signed 32-bit integers in a to packed double-precision ++// (64-bit) floating-point elements, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpi32_pd ++FORCE_INLINE __m128d _mm_cvtpi32_pd(__m64 a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64( ++ vcvtq_f64_s64(vmovl_s32(vreinterpret_s32_m64(a)))); ++#else ++ double a0 = (double) vget_lane_s32(vreinterpret_s32_m64(a), 0); ++ double a1 = (double) vget_lane_s32(vreinterpret_s32_m64(a), 1); ++ return _mm_set_pd(a1, a0); ++#endif ++} ++ ++// Convert packed single-precision (32-bit) floating-point elements in a to ++// packed 32-bit integers, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtps_epi32 ++// *NOTE*. The default rounding mode on SSE is 'round to even', which ARMv7-A ++// does not support! It is supported on ARMv8-A however. ++FORCE_INLINE __m128i _mm_cvtps_epi32(__m128 a) ++{ ++#if defined(__ARM_FEATURE_FRINT) ++ return vreinterpretq_m128i_s32(vcvtq_s32_f32(vrnd32xq_f32(a))); ++#elif (defined(__aarch64__) || defined(_M_ARM64)) || \ ++ defined(__ARM_FEATURE_DIRECTED_ROUNDING) ++ switch (_MM_GET_ROUNDING_MODE()) { ++ case _MM_ROUND_NEAREST: ++ return vreinterpretq_m128i_s32(vcvtnq_s32_f32(a)); ++ case _MM_ROUND_DOWN: ++ return vreinterpretq_m128i_s32(vcvtmq_s32_f32(a)); ++ case _MM_ROUND_UP: ++ return vreinterpretq_m128i_s32(vcvtpq_s32_f32(a)); ++ default: // _MM_ROUND_TOWARD_ZERO ++ return vreinterpretq_m128i_s32(vcvtq_s32_f32(a)); ++ } ++#else ++ float *f = (float *) &a; ++ switch (_MM_GET_ROUNDING_MODE()) { ++ case _MM_ROUND_NEAREST: { ++ uint32x4_t signmask = vdupq_n_u32(0x80000000); ++ float32x4_t half = vbslq_f32(signmask, vreinterpretq_f32_m128(a), ++ vdupq_n_f32(0.5f)); /* +/- 0.5 */ ++ int32x4_t r_normal = vcvtq_s32_f32(vaddq_f32( ++ vreinterpretq_f32_m128(a), half)); /* round to integer: [a + 0.5]*/ ++ int32x4_t r_trunc = vcvtq_s32_f32( ++ vreinterpretq_f32_m128(a)); /* truncate to integer: [a] */ ++ int32x4_t plusone = vreinterpretq_s32_u32(vshrq_n_u32( ++ vreinterpretq_u32_s32(vnegq_s32(r_trunc)), 31)); /* 1 or 0 */ ++ int32x4_t r_even = vbicq_s32(vaddq_s32(r_trunc, plusone), ++ vdupq_n_s32(1)); /* ([a] + {0,1}) & ~1 */ ++ float32x4_t delta = vsubq_f32( ++ vreinterpretq_f32_m128(a), ++ vcvtq_f32_s32(r_trunc)); /* compute delta: delta = (a - [a]) */ ++ uint32x4_t is_delta_half = ++ vceqq_f32(delta, half); /* delta == +/- 0.5 */ ++ return vreinterpretq_m128i_s32( ++ vbslq_s32(is_delta_half, r_even, r_normal)); ++ } ++ case _MM_ROUND_DOWN: ++ return _mm_set_epi32(floorf(f[3]), floorf(f[2]), floorf(f[1]), ++ floorf(f[0])); ++ case _MM_ROUND_UP: ++ return _mm_set_epi32(ceilf(f[3]), ceilf(f[2]), ceilf(f[1]), ++ ceilf(f[0])); ++ default: // _MM_ROUND_TOWARD_ZERO ++ return _mm_set_epi32((int32_t) f[3], (int32_t) f[2], (int32_t) f[1], ++ (int32_t) f[0]); ++ } ++#endif ++} ++ ++// Convert packed single-precision (32-bit) floating-point elements in a to ++// packed double-precision (64-bit) floating-point elements, and store the ++// results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtps_pd ++FORCE_INLINE __m128d _mm_cvtps_pd(__m128 a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64( ++ vcvt_f64_f32(vget_low_f32(vreinterpretq_f32_m128(a)))); ++#else ++ double a0 = (double) vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); ++ double a1 = (double) vgetq_lane_f32(vreinterpretq_f32_m128(a), 1); ++ return _mm_set_pd(a1, a0); ++#endif ++} ++ ++// Copy the lower double-precision (64-bit) floating-point element of a to dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsd_f64 ++FORCE_INLINE double _mm_cvtsd_f64(__m128d a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return (double) vgetq_lane_f64(vreinterpretq_f64_m128d(a), 0); ++#else ++ return ((double *) &a)[0]; ++#endif ++} ++ ++// Convert the lower double-precision (64-bit) floating-point element in a to a ++// 32-bit integer, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsd_si32 ++FORCE_INLINE int32_t _mm_cvtsd_si32(__m128d a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return (int32_t) vgetq_lane_f64(vrndiq_f64(vreinterpretq_f64_m128d(a)), 0); ++#else ++ __m128d rnd = _mm_round_pd(a, _MM_FROUND_CUR_DIRECTION); ++ double ret = ((double *) &rnd)[0]; ++ return (int32_t) ret; ++#endif ++} ++ ++// Convert the lower double-precision (64-bit) floating-point element in a to a ++// 64-bit integer, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsd_si64 ++FORCE_INLINE int64_t _mm_cvtsd_si64(__m128d a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return (int64_t) vgetq_lane_f64(vrndiq_f64(vreinterpretq_f64_m128d(a)), 0); ++#else ++ __m128d rnd = _mm_round_pd(a, _MM_FROUND_CUR_DIRECTION); ++ double ret = ((double *) &rnd)[0]; ++ return (int64_t) ret; ++#endif ++} ++ ++// Convert the lower double-precision (64-bit) floating-point element in a to a ++// 64-bit integer, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsd_si64x ++#define _mm_cvtsd_si64x _mm_cvtsd_si64 ++ ++// Convert the lower double-precision (64-bit) floating-point element in b to a ++// single-precision (32-bit) floating-point element, store the result in the ++// lower element of dst, and copy the upper 3 packed elements from a to the ++// upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsd_ss ++FORCE_INLINE __m128 _mm_cvtsd_ss(__m128 a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128_f32(vsetq_lane_f32( ++ vget_lane_f32(vcvt_f32_f64(vreinterpretq_f64_m128d(b)), 0), ++ vreinterpretq_f32_m128(a), 0)); ++#else ++ return vreinterpretq_m128_f32(vsetq_lane_f32((float) ((double *) &b)[0], ++ vreinterpretq_f32_m128(a), 0)); ++#endif ++} ++ ++// Copy the lower 32-bit integer in a to dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi128_si32 ++FORCE_INLINE int _mm_cvtsi128_si32(__m128i a) ++{ ++ return vgetq_lane_s32(vreinterpretq_s32_m128i(a), 0); ++} ++ ++// Copy the lower 64-bit integer in a to dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi128_si64 ++FORCE_INLINE int64_t _mm_cvtsi128_si64(__m128i a) ++{ ++ return vgetq_lane_s64(vreinterpretq_s64_m128i(a), 0); ++} ++ ++// Copy the lower 64-bit integer in a to dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi128_si64x ++#define _mm_cvtsi128_si64x(a) _mm_cvtsi128_si64(a) ++ ++// Convert the signed 32-bit integer b to a double-precision (64-bit) ++// floating-point element, store the result in the lower element of dst, and ++// copy the upper element from a to the upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi32_sd ++FORCE_INLINE __m128d _mm_cvtsi32_sd(__m128d a, int32_t b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64( ++ vsetq_lane_f64((double) b, vreinterpretq_f64_m128d(a), 0)); ++#else ++ double bf = (double) b; ++ return vreinterpretq_m128d_s64( ++ vsetq_lane_s64(*(int64_t *) &bf, vreinterpretq_s64_m128d(a), 0)); ++#endif ++} ++ ++// Copy the lower 64-bit integer in a to dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi128_si64x ++#define _mm_cvtsi128_si64x(a) _mm_cvtsi128_si64(a) ++ ++// Copy 32-bit integer a to the lower elements of dst, and zero the upper ++// elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi32_si128 ++FORCE_INLINE __m128i _mm_cvtsi32_si128(int a) ++{ ++ return vreinterpretq_m128i_s32(vsetq_lane_s32(a, vdupq_n_s32(0), 0)); ++} ++ ++// Convert the signed 64-bit integer b to a double-precision (64-bit) ++// floating-point element, store the result in the lower element of dst, and ++// copy the upper element from a to the upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64_sd ++FORCE_INLINE __m128d _mm_cvtsi64_sd(__m128d a, int64_t b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64( ++ vsetq_lane_f64((double) b, vreinterpretq_f64_m128d(a), 0)); ++#else ++ double bf = (double) b; ++ return vreinterpretq_m128d_s64( ++ vsetq_lane_s64(*(int64_t *) &bf, vreinterpretq_s64_m128d(a), 0)); ++#endif ++} ++ ++// Copy 64-bit integer a to the lower element of dst, and zero the upper ++// element. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64_si128 ++FORCE_INLINE __m128i _mm_cvtsi64_si128(int64_t a) ++{ ++ return vreinterpretq_m128i_s64(vsetq_lane_s64(a, vdupq_n_s64(0), 0)); ++} ++ ++// Copy 64-bit integer a to the lower element of dst, and zero the upper ++// element. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64x_si128 ++#define _mm_cvtsi64x_si128(a) _mm_cvtsi64_si128(a) ++ ++// Convert the signed 64-bit integer b to a double-precision (64-bit) ++// floating-point element, store the result in the lower element of dst, and ++// copy the upper element from a to the upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64x_sd ++#define _mm_cvtsi64x_sd(a, b) _mm_cvtsi64_sd(a, b) ++ ++// Convert the lower single-precision (32-bit) floating-point element in b to a ++// double-precision (64-bit) floating-point element, store the result in the ++// lower element of dst, and copy the upper element from a to the upper element ++// of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtss_sd ++FORCE_INLINE __m128d _mm_cvtss_sd(__m128d a, __m128 b) ++{ ++ double d = (double) vgetq_lane_f32(vreinterpretq_f32_m128(b), 0); ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64( ++ vsetq_lane_f64(d, vreinterpretq_f64_m128d(a), 0)); ++#else ++ return vreinterpretq_m128d_s64( ++ vsetq_lane_s64(*(int64_t *) &d, vreinterpretq_s64_m128d(a), 0)); ++#endif ++} ++ ++// Convert packed double-precision (64-bit) floating-point elements in a to ++// packed 32-bit integers with truncation, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttpd_epi32 ++FORCE_INLINE __m128i _mm_cvttpd_epi32(__m128d a) ++{ ++ double a0 = ((double *) &a)[0]; ++ double a1 = ((double *) &a)[1]; ++ return _mm_set_epi32(0, 0, (int32_t) a1, (int32_t) a0); ++} ++ ++// Convert packed double-precision (64-bit) floating-point elements in a to ++// packed 32-bit integers with truncation, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttpd_pi32 ++FORCE_INLINE __m64 _mm_cvttpd_pi32(__m128d a) ++{ ++ double a0 = ((double *) &a)[0]; ++ double a1 = ((double *) &a)[1]; ++ int32_t ALIGN_STRUCT(16) data[2] = {(int32_t) a0, (int32_t) a1}; ++ return vreinterpret_m64_s32(vld1_s32(data)); ++} ++ ++// Convert packed single-precision (32-bit) floating-point elements in a to ++// packed 32-bit integers with truncation, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttps_epi32 ++FORCE_INLINE __m128i _mm_cvttps_epi32(__m128 a) ++{ ++ return vreinterpretq_m128i_s32(vcvtq_s32_f32(vreinterpretq_f32_m128(a))); ++} ++ ++// Convert the lower double-precision (64-bit) floating-point element in a to a ++// 32-bit integer with truncation, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttsd_si32 ++FORCE_INLINE int32_t _mm_cvttsd_si32(__m128d a) ++{ ++ double ret = *((double *) &a); ++ return (int32_t) ret; ++} ++ ++// Convert the lower double-precision (64-bit) floating-point element in a to a ++// 64-bit integer with truncation, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttsd_si64 ++FORCE_INLINE int64_t _mm_cvttsd_si64(__m128d a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vgetq_lane_s64(vcvtq_s64_f64(vreinterpretq_f64_m128d(a)), 0); ++#else ++ double ret = *((double *) &a); ++ return (int64_t) ret; ++#endif ++} ++ ++// Convert the lower double-precision (64-bit) floating-point element in a to a ++// 64-bit integer with truncation, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttsd_si64x ++#define _mm_cvttsd_si64x(a) _mm_cvttsd_si64(a) ++ ++// Divide packed double-precision (64-bit) floating-point elements in a by ++// packed elements in b, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_div_pd ++FORCE_INLINE __m128d _mm_div_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64( ++ vdivq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); ++#else ++ double *da = (double *) &a; ++ double *db = (double *) &b; ++ double c[2]; ++ c[0] = da[0] / db[0]; ++ c[1] = da[1] / db[1]; ++ return vld1q_f32((float32_t *) c); ++#endif ++} ++ ++// Divide the lower double-precision (64-bit) floating-point element in a by the ++// lower double-precision (64-bit) floating-point element in b, store the result ++// in the lower element of dst, and copy the upper element from a to the upper ++// element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_div_sd ++FORCE_INLINE __m128d _mm_div_sd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ float64x2_t tmp = ++ vdivq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b)); ++ return vreinterpretq_m128d_f64( ++ vsetq_lane_f64(vgetq_lane_f64(vreinterpretq_f64_m128d(a), 1), tmp, 1)); ++#else ++ return _mm_move_sd(a, _mm_div_pd(a, b)); ++#endif ++} ++ ++// Extract a 16-bit integer from a, selected with imm8, and store the result in ++// the lower element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_epi16 ++// FORCE_INLINE int _mm_extract_epi16(__m128i a, __constrange(0,8) int imm) ++#define _mm_extract_epi16(a, imm) \ ++ vgetq_lane_u16(vreinterpretq_u16_m128i(a), (imm)) ++ ++// Copy a to dst, and insert the 16-bit integer i into dst at the location ++// specified by imm8. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_epi16 ++// FORCE_INLINE __m128i _mm_insert_epi16(__m128i a, int b, ++// __constrange(0,8) int imm) ++#define _mm_insert_epi16(a, b, imm) \ ++ vreinterpretq_m128i_s16( \ ++ vsetq_lane_s16((b), vreinterpretq_s16_m128i(a), (imm))) ++ ++// Load 128-bits (composed of 2 packed double-precision (64-bit) floating-point ++// elements) from memory into dst. mem_addr must be aligned on a 16-byte ++// boundary or a general-protection exception may be generated. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_pd ++FORCE_INLINE __m128d _mm_load_pd(const double *p) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64(vld1q_f64(p)); ++#else ++ const float *fp = (const float *) p; ++ float ALIGN_STRUCT(16) data[4] = {fp[0], fp[1], fp[2], fp[3]}; ++ return vreinterpretq_m128d_f32(vld1q_f32(data)); ++#endif ++} ++ ++// Load a double-precision (64-bit) floating-point element from memory into both ++// elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_pd1 ++#define _mm_load_pd1 _mm_load1_pd ++ ++// Load a double-precision (64-bit) floating-point element from memory into the ++// lower of dst, and zero the upper element. mem_addr does not need to be ++// aligned on any particular boundary. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_sd ++FORCE_INLINE __m128d _mm_load_sd(const double *p) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64(vsetq_lane_f64(*p, vdupq_n_f64(0), 0)); ++#else ++ const float *fp = (const float *) p; ++ float ALIGN_STRUCT(16) data[4] = {fp[0], fp[1], 0, 0}; ++ return vreinterpretq_m128d_f32(vld1q_f32(data)); ++#endif ++} ++ ++// Load 128-bits of integer data from memory into dst. mem_addr must be aligned ++// on a 16-byte boundary or a general-protection exception may be generated. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_si128 ++FORCE_INLINE __m128i _mm_load_si128(const __m128i *p) ++{ ++ return vreinterpretq_m128i_s32(vld1q_s32((const int32_t *) p)); ++} ++ ++// Load a double-precision (64-bit) floating-point element from memory into both ++// elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load1_pd ++FORCE_INLINE __m128d _mm_load1_pd(const double *p) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64(vld1q_dup_f64(p)); ++#else ++ return vreinterpretq_m128d_s64(vdupq_n_s64(*(const int64_t *) p)); ++#endif ++} ++ ++// Load a double-precision (64-bit) floating-point element from memory into the ++// upper element of dst, and copy the lower element from a to dst. mem_addr does ++// not need to be aligned on any particular boundary. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadh_pd ++FORCE_INLINE __m128d _mm_loadh_pd(__m128d a, const double *p) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64( ++ vcombine_f64(vget_low_f64(vreinterpretq_f64_m128d(a)), vld1_f64(p))); ++#else ++ return vreinterpretq_m128d_f32(vcombine_f32( ++ vget_low_f32(vreinterpretq_f32_m128d(a)), vld1_f32((const float *) p))); ++#endif ++} ++ ++// Load 64-bit integer from memory into the first element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadl_epi64 ++FORCE_INLINE __m128i _mm_loadl_epi64(__m128i const *p) ++{ ++ /* Load the lower 64 bits of the value pointed to by p into the ++ * lower 64 bits of the result, zeroing the upper 64 bits of the result. ++ */ ++ return vreinterpretq_m128i_s32( ++ vcombine_s32(vld1_s32((int32_t const *) p), vcreate_s32(0))); ++} ++ ++// Load a double-precision (64-bit) floating-point element from memory into the ++// lower element of dst, and copy the upper element from a to dst. mem_addr does ++// not need to be aligned on any particular boundary. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadl_pd ++FORCE_INLINE __m128d _mm_loadl_pd(__m128d a, const double *p) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64( ++ vcombine_f64(vld1_f64(p), vget_high_f64(vreinterpretq_f64_m128d(a)))); ++#else ++ return vreinterpretq_m128d_f32( ++ vcombine_f32(vld1_f32((const float *) p), ++ vget_high_f32(vreinterpretq_f32_m128d(a)))); ++#endif ++} ++ ++// Load 2 double-precision (64-bit) floating-point elements from memory into dst ++// in reverse order. mem_addr must be aligned on a 16-byte boundary or a ++// general-protection exception may be generated. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadr_pd ++FORCE_INLINE __m128d _mm_loadr_pd(const double *p) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ float64x2_t v = vld1q_f64(p); ++ return vreinterpretq_m128d_f64(vextq_f64(v, v, 1)); ++#else ++ int64x2_t v = vld1q_s64((const int64_t *) p); ++ return vreinterpretq_m128d_s64(vextq_s64(v, v, 1)); ++#endif ++} ++ ++// Loads two double-precision from unaligned memory, floating-point values. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_pd ++FORCE_INLINE __m128d _mm_loadu_pd(const double *p) ++{ ++ return _mm_load_pd(p); ++} ++ ++// Load 128-bits of integer data from memory into dst. mem_addr does not need to ++// be aligned on any particular boundary. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_si128 ++FORCE_INLINE __m128i _mm_loadu_si128(const __m128i *p) ++{ ++ return vreinterpretq_m128i_s32(vld1q_s32((const unaligned_int32_t *) p)); ++} ++ ++// Load unaligned 32-bit integer from memory into the first element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_si32 ++FORCE_INLINE __m128i _mm_loadu_si32(const void *p) ++{ ++ return vreinterpretq_m128i_s32( ++ vsetq_lane_s32(*(const unaligned_int32_t *) p, vdupq_n_s32(0), 0)); ++} ++ ++// Multiply packed signed 16-bit integers in a and b, producing intermediate ++// signed 32-bit integers. Horizontally add adjacent pairs of intermediate ++// 32-bit integers, and pack the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_madd_epi16 ++FORCE_INLINE __m128i _mm_madd_epi16(__m128i a, __m128i b) ++{ ++ int32x4_t low = vmull_s16(vget_low_s16(vreinterpretq_s16_m128i(a)), ++ vget_low_s16(vreinterpretq_s16_m128i(b))); ++#if defined(__aarch64__) || defined(_M_ARM64) ++ int32x4_t high = ++ vmull_high_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b)); ++ ++ return vreinterpretq_m128i_s32(vpaddq_s32(low, high)); ++#else ++ int32x4_t high = vmull_s16(vget_high_s16(vreinterpretq_s16_m128i(a)), ++ vget_high_s16(vreinterpretq_s16_m128i(b))); ++ ++ int32x2_t low_sum = vpadd_s32(vget_low_s32(low), vget_high_s32(low)); ++ int32x2_t high_sum = vpadd_s32(vget_low_s32(high), vget_high_s32(high)); ++ ++ return vreinterpretq_m128i_s32(vcombine_s32(low_sum, high_sum)); ++#endif ++} ++ ++// Conditionally store 8-bit integer elements from a into memory using mask ++// (elements are not stored when the highest bit is not set in the corresponding ++// element) and a non-temporal memory hint. mem_addr does not need to be aligned ++// on any particular boundary. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskmoveu_si128 ++FORCE_INLINE void _mm_maskmoveu_si128(__m128i a, __m128i mask, char *mem_addr) ++{ ++ int8x16_t shr_mask = vshrq_n_s8(vreinterpretq_s8_m128i(mask), 7); ++ __m128 b = _mm_load_ps((const float *) mem_addr); ++ int8x16_t masked = ++ vbslq_s8(vreinterpretq_u8_s8(shr_mask), vreinterpretq_s8_m128i(a), ++ vreinterpretq_s8_m128(b)); ++ vst1q_s8((int8_t *) mem_addr, masked); ++} ++ ++// Compare packed signed 16-bit integers in a and b, and store packed maximum ++// values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epi16 ++FORCE_INLINE __m128i _mm_max_epi16(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s16( ++ vmaxq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); ++} ++ ++// Compare packed unsigned 8-bit integers in a and b, and store packed maximum ++// values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epu8 ++FORCE_INLINE __m128i _mm_max_epu8(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u8( ++ vmaxq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); ++} ++ ++// Compare packed double-precision (64-bit) floating-point elements in a and b, ++// and store packed maximum values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_pd ++FORCE_INLINE __m128d _mm_max_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++#if SSE2NEON_PRECISE_MINMAX ++ float64x2_t _a = vreinterpretq_f64_m128d(a); ++ float64x2_t _b = vreinterpretq_f64_m128d(b); ++ return vreinterpretq_m128d_f64(vbslq_f64(vcgtq_f64(_a, _b), _a, _b)); ++#else ++ return vreinterpretq_m128d_f64( ++ vmaxq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); ++#endif ++#else ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t a1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t b1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t d[2]; ++ d[0] = (*(double *) &a0) > (*(double *) &b0) ? a0 : b0; ++ d[1] = (*(double *) &a1) > (*(double *) &b1) ? a1 : b1; ++ ++ return vreinterpretq_m128d_u64(vld1q_u64(d)); ++#endif ++} ++ ++// Compare the lower double-precision (64-bit) floating-point elements in a and ++// b, store the maximum value in the lower element of dst, and copy the upper ++// element from a to the upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_sd ++FORCE_INLINE __m128d _mm_max_sd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return _mm_move_sd(a, _mm_max_pd(a, b)); ++#else ++ double *da = (double *) &a; ++ double *db = (double *) &b; ++ double c[2] = {da[0] > db[0] ? da[0] : db[0], da[1]}; ++ return vreinterpretq_m128d_f32(vld1q_f32((float32_t *) c)); ++#endif ++} ++ ++// Compare packed signed 16-bit integers in a and b, and store packed minimum ++// values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_epi16 ++FORCE_INLINE __m128i _mm_min_epi16(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s16( ++ vminq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); ++} ++ ++// Compare packed unsigned 8-bit integers in a and b, and store packed minimum ++// values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_epu8 ++FORCE_INLINE __m128i _mm_min_epu8(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u8( ++ vminq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); ++} ++ ++// Compare packed double-precision (64-bit) floating-point elements in a and b, ++// and store packed minimum values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_pd ++FORCE_INLINE __m128d _mm_min_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++#if SSE2NEON_PRECISE_MINMAX ++ float64x2_t _a = vreinterpretq_f64_m128d(a); ++ float64x2_t _b = vreinterpretq_f64_m128d(b); ++ return vreinterpretq_m128d_f64(vbslq_f64(vcltq_f64(_a, _b), _a, _b)); ++#else ++ return vreinterpretq_m128d_f64( ++ vminq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); ++#endif ++#else ++ uint64_t a0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t a1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(a)); ++ uint64_t b0 = (uint64_t) vget_low_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t b1 = (uint64_t) vget_high_u64(vreinterpretq_u64_m128d(b)); ++ uint64_t d[2]; ++ d[0] = (*(double *) &a0) < (*(double *) &b0) ? a0 : b0; ++ d[1] = (*(double *) &a1) < (*(double *) &b1) ? a1 : b1; ++ return vreinterpretq_m128d_u64(vld1q_u64(d)); ++#endif ++} ++ ++// Compare the lower double-precision (64-bit) floating-point elements in a and ++// b, store the minimum value in the lower element of dst, and copy the upper ++// element from a to the upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_sd ++FORCE_INLINE __m128d _mm_min_sd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return _mm_move_sd(a, _mm_min_pd(a, b)); ++#else ++ double *da = (double *) &a; ++ double *db = (double *) &b; ++ double c[2] = {da[0] < db[0] ? da[0] : db[0], da[1]}; ++ return vreinterpretq_m128d_f32(vld1q_f32((float32_t *) c)); ++#endif ++} ++ ++// Copy the lower 64-bit integer in a to the lower element of dst, and zero the ++// upper element. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_move_epi64 ++FORCE_INLINE __m128i _mm_move_epi64(__m128i a) ++{ ++ return vreinterpretq_m128i_s64( ++ vsetq_lane_s64(0, vreinterpretq_s64_m128i(a), 1)); ++} ++ ++// Move the lower double-precision (64-bit) floating-point element from b to the ++// lower element of dst, and copy the upper element from a to the upper element ++// of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_move_sd ++FORCE_INLINE __m128d _mm_move_sd(__m128d a, __m128d b) ++{ ++ return vreinterpretq_m128d_f32( ++ vcombine_f32(vget_low_f32(vreinterpretq_f32_m128d(b)), ++ vget_high_f32(vreinterpretq_f32_m128d(a)))); ++} ++ ++// Create mask from the most significant bit of each 8-bit element in a, and ++// store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movemask_epi8 ++FORCE_INLINE int _mm_movemask_epi8(__m128i a) ++{ ++ // Use increasingly wide shifts+adds to collect the sign bits ++ // together. ++ // Since the widening shifts would be rather confusing to follow in little ++ // endian, everything will be illustrated in big endian order instead. This ++ // has a different result - the bits would actually be reversed on a big ++ // endian machine. ++ ++ // Starting input (only half the elements are shown): ++ // 89 ff 1d c0 00 10 99 33 ++ uint8x16_t input = vreinterpretq_u8_m128i(a); ++ ++ // Shift out everything but the sign bits with an unsigned shift right. ++ // ++ // Bytes of the vector:: ++ // 89 ff 1d c0 00 10 99 33 ++ // \ \ \ \ \ \ \ \ high_bits = (uint16x4_t)(input >> 7) ++ // | | | | | | | | ++ // 01 01 00 01 00 00 01 00 ++ // ++ // Bits of first important lane(s): ++ // 10001001 (89) ++ // \______ ++ // | ++ // 00000001 (01) ++ uint16x8_t high_bits = vreinterpretq_u16_u8(vshrq_n_u8(input, 7)); ++ ++ // Merge the even lanes together with a 16-bit unsigned shift right + add. ++ // 'xx' represents garbage data which will be ignored in the final result. ++ // In the important bytes, the add functions like a binary OR. ++ // ++ // 01 01 00 01 00 00 01 00 ++ // \_ | \_ | \_ | \_ | paired16 = (uint32x4_t)(input + (input >> 7)) ++ // \| \| \| \| ++ // xx 03 xx 01 xx 00 xx 02 ++ // ++ // 00000001 00000001 (01 01) ++ // \_______ | ++ // \| ++ // xxxxxxxx xxxxxx11 (xx 03) ++ uint32x4_t paired16 = ++ vreinterpretq_u32_u16(vsraq_n_u16(high_bits, high_bits, 7)); ++ ++ // Repeat with a wider 32-bit shift + add. ++ // xx 03 xx 01 xx 00 xx 02 ++ // \____ | \____ | paired32 = (uint64x1_t)(paired16 + (paired16 >> ++ // 14)) ++ // \| \| ++ // xx xx xx 0d xx xx xx 02 ++ // ++ // 00000011 00000001 (03 01) ++ // \\_____ || ++ // '----.\|| ++ // xxxxxxxx xxxx1101 (xx 0d) ++ uint64x2_t paired32 = ++ vreinterpretq_u64_u32(vsraq_n_u32(paired16, paired16, 14)); ++ ++ // Last, an even wider 64-bit shift + add to get our result in the low 8 bit ++ // lanes. xx xx xx 0d xx xx xx 02 ++ // \_________ | paired64 = (uint8x8_t)(paired32 + (paired32 >> ++ // 28)) ++ // \| ++ // xx xx xx xx xx xx xx d2 ++ // ++ // 00001101 00000010 (0d 02) ++ // \ \___ | | ++ // '---. \| | ++ // xxxxxxxx 11010010 (xx d2) ++ uint8x16_t paired64 = ++ vreinterpretq_u8_u64(vsraq_n_u64(paired32, paired32, 28)); ++ ++ // Extract the low 8 bits from each 64-bit lane with 2 8-bit extracts. ++ // xx xx xx xx xx xx xx d2 ++ // || return paired64[0] ++ // d2 ++ // Note: Little endian would return the correct value 4b (01001011) instead. ++ return vgetq_lane_u8(paired64, 0) | ((int) vgetq_lane_u8(paired64, 8) << 8); ++} ++ ++// Set each bit of mask dst based on the most significant bit of the ++// corresponding packed double-precision (64-bit) floating-point element in a. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movemask_pd ++FORCE_INLINE int _mm_movemask_pd(__m128d a) ++{ ++ uint64x2_t input = vreinterpretq_u64_m128d(a); ++ uint64x2_t high_bits = vshrq_n_u64(input, 63); ++ return (int) (vgetq_lane_u64(high_bits, 0) | ++ (vgetq_lane_u64(high_bits, 1) << 1)); ++} ++ ++// Copy the lower 64-bit integer in a to dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movepi64_pi64 ++FORCE_INLINE __m64 _mm_movepi64_pi64(__m128i a) ++{ ++ return vreinterpret_m64_s64(vget_low_s64(vreinterpretq_s64_m128i(a))); ++} ++ ++// Copy the 64-bit integer a to the lower element of dst, and zero the upper ++// element. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movpi64_epi64 ++FORCE_INLINE __m128i _mm_movpi64_epi64(__m64 a) ++{ ++ return vreinterpretq_m128i_s64( ++ vcombine_s64(vreinterpret_s64_m64(a), vdup_n_s64(0))); ++} ++ ++// Multiply the low unsigned 32-bit integers from each packed 64-bit element in ++// a and b, and store the unsigned 64-bit results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_epu32 ++FORCE_INLINE __m128i _mm_mul_epu32(__m128i a, __m128i b) ++{ ++ // vmull_u32 upcasts instead of masking, so we downcast. ++ uint32x2_t a_lo = vmovn_u64(vreinterpretq_u64_m128i(a)); ++ uint32x2_t b_lo = vmovn_u64(vreinterpretq_u64_m128i(b)); ++ return vreinterpretq_m128i_u64(vmull_u32(a_lo, b_lo)); ++} ++ ++// Multiply packed double-precision (64-bit) floating-point elements in a and b, ++// and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_pd ++FORCE_INLINE __m128d _mm_mul_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64( ++ vmulq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); ++#else ++ double *da = (double *) &a; ++ double *db = (double *) &b; ++ double c[2]; ++ c[0] = da[0] * db[0]; ++ c[1] = da[1] * db[1]; ++ return vld1q_f32((float32_t *) c); ++#endif ++} ++ ++// Multiply the lower double-precision (64-bit) floating-point element in a and ++// b, store the result in the lower element of dst, and copy the upper element ++// from a to the upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_mul_sd ++FORCE_INLINE __m128d _mm_mul_sd(__m128d a, __m128d b) ++{ ++ return _mm_move_sd(a, _mm_mul_pd(a, b)); ++} ++ ++// Multiply the low unsigned 32-bit integers from a and b, and store the ++// unsigned 64-bit result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_su32 ++FORCE_INLINE __m64 _mm_mul_su32(__m64 a, __m64 b) ++{ ++ return vreinterpret_m64_u64(vget_low_u64( ++ vmull_u32(vreinterpret_u32_m64(a), vreinterpret_u32_m64(b)))); ++} ++ ++// Multiply the packed signed 16-bit integers in a and b, producing intermediate ++// 32-bit integers, and store the high 16 bits of the intermediate integers in ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mulhi_epi16 ++FORCE_INLINE __m128i _mm_mulhi_epi16(__m128i a, __m128i b) ++{ ++ /* FIXME: issue with large values because of result saturation */ ++ // int16x8_t ret = vqdmulhq_s16(vreinterpretq_s16_m128i(a), ++ // vreinterpretq_s16_m128i(b)); /* =2*a*b */ return ++ // vreinterpretq_m128i_s16(vshrq_n_s16(ret, 1)); ++ int16x4_t a3210 = vget_low_s16(vreinterpretq_s16_m128i(a)); ++ int16x4_t b3210 = vget_low_s16(vreinterpretq_s16_m128i(b)); ++ int32x4_t ab3210 = vmull_s16(a3210, b3210); /* 3333222211110000 */ ++ int16x4_t a7654 = vget_high_s16(vreinterpretq_s16_m128i(a)); ++ int16x4_t b7654 = vget_high_s16(vreinterpretq_s16_m128i(b)); ++ int32x4_t ab7654 = vmull_s16(a7654, b7654); /* 7777666655554444 */ ++ uint16x8x2_t r = ++ vuzpq_u16(vreinterpretq_u16_s32(ab3210), vreinterpretq_u16_s32(ab7654)); ++ return vreinterpretq_m128i_u16(r.val[1]); ++} ++ ++// Multiply the packed unsigned 16-bit integers in a and b, producing ++// intermediate 32-bit integers, and store the high 16 bits of the intermediate ++// integers in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mulhi_epu16 ++FORCE_INLINE __m128i _mm_mulhi_epu16(__m128i a, __m128i b) ++{ ++ uint16x4_t a3210 = vget_low_u16(vreinterpretq_u16_m128i(a)); ++ uint16x4_t b3210 = vget_low_u16(vreinterpretq_u16_m128i(b)); ++ uint32x4_t ab3210 = vmull_u16(a3210, b3210); ++#if defined(__aarch64__) || defined(_M_ARM64) ++ uint32x4_t ab7654 = ++ vmull_high_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b)); ++ uint16x8_t r = vuzp2q_u16(vreinterpretq_u16_u32(ab3210), ++ vreinterpretq_u16_u32(ab7654)); ++ return vreinterpretq_m128i_u16(r); ++#else ++ uint16x4_t a7654 = vget_high_u16(vreinterpretq_u16_m128i(a)); ++ uint16x4_t b7654 = vget_high_u16(vreinterpretq_u16_m128i(b)); ++ uint32x4_t ab7654 = vmull_u16(a7654, b7654); ++ uint16x8x2_t r = ++ vuzpq_u16(vreinterpretq_u16_u32(ab3210), vreinterpretq_u16_u32(ab7654)); ++ return vreinterpretq_m128i_u16(r.val[1]); ++#endif ++} ++ ++// Multiply the packed 16-bit integers in a and b, producing intermediate 32-bit ++// integers, and store the low 16 bits of the intermediate integers in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mullo_epi16 ++FORCE_INLINE __m128i _mm_mullo_epi16(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s16( ++ vmulq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); ++} ++ ++// Compute the bitwise OR of packed double-precision (64-bit) floating-point ++// elements in a and b, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_or_pd ++FORCE_INLINE __m128d _mm_or_pd(__m128d a, __m128d b) ++{ ++ return vreinterpretq_m128d_s64( ++ vorrq_s64(vreinterpretq_s64_m128d(a), vreinterpretq_s64_m128d(b))); ++} ++ ++// Compute the bitwise OR of 128 bits (representing integer data) in a and b, ++// and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_or_si128 ++FORCE_INLINE __m128i _mm_or_si128(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s32( ++ vorrq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); ++} ++ ++// Convert packed signed 16-bit integers from a and b to packed 8-bit integers ++// using signed saturation, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_packs_epi16 ++FORCE_INLINE __m128i _mm_packs_epi16(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s8( ++ vcombine_s8(vqmovn_s16(vreinterpretq_s16_m128i(a)), ++ vqmovn_s16(vreinterpretq_s16_m128i(b)))); ++} ++ ++// Convert packed signed 32-bit integers from a and b to packed 16-bit integers ++// using signed saturation, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_packs_epi32 ++FORCE_INLINE __m128i _mm_packs_epi32(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s16( ++ vcombine_s16(vqmovn_s32(vreinterpretq_s32_m128i(a)), ++ vqmovn_s32(vreinterpretq_s32_m128i(b)))); ++} ++ ++// Convert packed signed 16-bit integers from a and b to packed 8-bit integers ++// using unsigned saturation, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_packus_epi16 ++FORCE_INLINE __m128i _mm_packus_epi16(const __m128i a, const __m128i b) ++{ ++ return vreinterpretq_m128i_u8( ++ vcombine_u8(vqmovun_s16(vreinterpretq_s16_m128i(a)), ++ vqmovun_s16(vreinterpretq_s16_m128i(b)))); ++} ++ ++// Pause the processor. This is typically used in spin-wait loops and depending ++// on the x86 processor typical values are in the 40-100 cycle range. The ++// 'yield' instruction isn't a good fit because it's effectively a nop on most ++// Arm cores. Experience with several databases has shown has shown an 'isb' is ++// a reasonable approximation. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_pause ++FORCE_INLINE void _mm_pause(void) ++{ ++#if defined(_MSC_VER) ++ __isb(_ARM64_BARRIER_SY); ++#else ++ __asm__ __volatile__("isb\n"); ++#endif ++} ++ ++// Compute the absolute differences of packed unsigned 8-bit integers in a and ++// b, then horizontally sum each consecutive 8 differences to produce two ++// unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low ++// 16 bits of 64-bit elements in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sad_epu8 ++FORCE_INLINE __m128i _mm_sad_epu8(__m128i a, __m128i b) ++{ ++ uint16x8_t t = vpaddlq_u8(vabdq_u8((uint8x16_t) a, (uint8x16_t) b)); ++ return vreinterpretq_m128i_u64(vpaddlq_u32(vpaddlq_u16(t))); ++} ++ ++// Set packed 16-bit integers in dst with the supplied values. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_epi16 ++FORCE_INLINE __m128i _mm_set_epi16(short i7, ++ short i6, ++ short i5, ++ short i4, ++ short i3, ++ short i2, ++ short i1, ++ short i0) ++{ ++ int16_t ALIGN_STRUCT(16) data[8] = {i0, i1, i2, i3, i4, i5, i6, i7}; ++ return vreinterpretq_m128i_s16(vld1q_s16(data)); ++} ++ ++// Set packed 32-bit integers in dst with the supplied values. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_epi32 ++FORCE_INLINE __m128i _mm_set_epi32(int i3, int i2, int i1, int i0) ++{ ++ int32_t ALIGN_STRUCT(16) data[4] = {i0, i1, i2, i3}; ++ return vreinterpretq_m128i_s32(vld1q_s32(data)); ++} ++ ++// Set packed 64-bit integers in dst with the supplied values. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_epi64 ++FORCE_INLINE __m128i _mm_set_epi64(__m64 i1, __m64 i2) ++{ ++ return _mm_set_epi64x(vget_lane_s64(i1, 0), vget_lane_s64(i2, 0)); ++} ++ ++// Set packed 64-bit integers in dst with the supplied values. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_epi64x ++FORCE_INLINE __m128i _mm_set_epi64x(int64_t i1, int64_t i2) ++{ ++ return vreinterpretq_m128i_s64( ++ vcombine_s64(vcreate_s64(i2), vcreate_s64(i1))); ++} ++ ++// Set packed 8-bit integers in dst with the supplied values. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_epi8 ++FORCE_INLINE __m128i _mm_set_epi8(signed char b15, ++ signed char b14, ++ signed char b13, ++ signed char b12, ++ signed char b11, ++ signed char b10, ++ signed char b9, ++ signed char b8, ++ signed char b7, ++ signed char b6, ++ signed char b5, ++ signed char b4, ++ signed char b3, ++ signed char b2, ++ signed char b1, ++ signed char b0) ++{ ++ int8_t ALIGN_STRUCT(16) ++ data[16] = {(int8_t) b0, (int8_t) b1, (int8_t) b2, (int8_t) b3, ++ (int8_t) b4, (int8_t) b5, (int8_t) b6, (int8_t) b7, ++ (int8_t) b8, (int8_t) b9, (int8_t) b10, (int8_t) b11, ++ (int8_t) b12, (int8_t) b13, (int8_t) b14, (int8_t) b15}; ++ return (__m128i) vld1q_s8(data); ++} ++ ++// Set packed double-precision (64-bit) floating-point elements in dst with the ++// supplied values. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_pd ++FORCE_INLINE __m128d _mm_set_pd(double e1, double e0) ++{ ++ double ALIGN_STRUCT(16) data[2] = {e0, e1}; ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64(vld1q_f64((float64_t *) data)); ++#else ++ return vreinterpretq_m128d_f32(vld1q_f32((float32_t *) data)); ++#endif ++} ++ ++// Broadcast double-precision (64-bit) floating-point value a to all elements of ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_pd1 ++#define _mm_set_pd1 _mm_set1_pd ++ ++// Copy double-precision (64-bit) floating-point element a to the lower element ++// of dst, and zero the upper element. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_sd ++FORCE_INLINE __m128d _mm_set_sd(double a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64(vsetq_lane_f64(a, vdupq_n_f64(0), 0)); ++#else ++ return _mm_set_pd(0, a); ++#endif ++} ++ ++// Broadcast 16-bit integer a to all elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_epi16 ++FORCE_INLINE __m128i _mm_set1_epi16(short w) ++{ ++ return vreinterpretq_m128i_s16(vdupq_n_s16(w)); ++} ++ ++// Broadcast 32-bit integer a to all elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_epi32 ++FORCE_INLINE __m128i _mm_set1_epi32(int _i) ++{ ++ return vreinterpretq_m128i_s32(vdupq_n_s32(_i)); ++} ++ ++// Broadcast 64-bit integer a to all elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_epi64 ++FORCE_INLINE __m128i _mm_set1_epi64(__m64 _i) ++{ ++ return vreinterpretq_m128i_s64(vdupq_lane_s64(_i, 0)); ++} ++ ++// Broadcast 64-bit integer a to all elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_epi64x ++FORCE_INLINE __m128i _mm_set1_epi64x(int64_t _i) ++{ ++ return vreinterpretq_m128i_s64(vdupq_n_s64(_i)); ++} ++ ++// Broadcast 8-bit integer a to all elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_epi8 ++FORCE_INLINE __m128i _mm_set1_epi8(signed char w) ++{ ++ return vreinterpretq_m128i_s8(vdupq_n_s8(w)); ++} ++ ++// Broadcast double-precision (64-bit) floating-point value a to all elements of ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_pd ++FORCE_INLINE __m128d _mm_set1_pd(double d) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64(vdupq_n_f64(d)); ++#else ++ return vreinterpretq_m128d_s64(vdupq_n_s64(*(int64_t *) &d)); ++#endif ++} ++ ++// Set packed 16-bit integers in dst with the supplied values in reverse order. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_epi16 ++FORCE_INLINE __m128i _mm_setr_epi16(short w0, ++ short w1, ++ short w2, ++ short w3, ++ short w4, ++ short w5, ++ short w6, ++ short w7) ++{ ++ int16_t ALIGN_STRUCT(16) data[8] = {w0, w1, w2, w3, w4, w5, w6, w7}; ++ return vreinterpretq_m128i_s16(vld1q_s16((int16_t *) data)); ++} ++ ++// Set packed 32-bit integers in dst with the supplied values in reverse order. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_epi32 ++FORCE_INLINE __m128i _mm_setr_epi32(int i3, int i2, int i1, int i0) ++{ ++ int32_t ALIGN_STRUCT(16) data[4] = {i3, i2, i1, i0}; ++ return vreinterpretq_m128i_s32(vld1q_s32(data)); ++} ++ ++// Set packed 64-bit integers in dst with the supplied values in reverse order. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_epi64 ++FORCE_INLINE __m128i _mm_setr_epi64(__m64 e1, __m64 e0) ++{ ++ return vreinterpretq_m128i_s64(vcombine_s64(e1, e0)); ++} ++ ++// Set packed 8-bit integers in dst with the supplied values in reverse order. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_epi8 ++FORCE_INLINE __m128i _mm_setr_epi8(signed char b0, ++ signed char b1, ++ signed char b2, ++ signed char b3, ++ signed char b4, ++ signed char b5, ++ signed char b6, ++ signed char b7, ++ signed char b8, ++ signed char b9, ++ signed char b10, ++ signed char b11, ++ signed char b12, ++ signed char b13, ++ signed char b14, ++ signed char b15) ++{ ++ int8_t ALIGN_STRUCT(16) ++ data[16] = {(int8_t) b0, (int8_t) b1, (int8_t) b2, (int8_t) b3, ++ (int8_t) b4, (int8_t) b5, (int8_t) b6, (int8_t) b7, ++ (int8_t) b8, (int8_t) b9, (int8_t) b10, (int8_t) b11, ++ (int8_t) b12, (int8_t) b13, (int8_t) b14, (int8_t) b15}; ++ return (__m128i) vld1q_s8(data); ++} ++ ++// Set packed double-precision (64-bit) floating-point elements in dst with the ++// supplied values in reverse order. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_pd ++FORCE_INLINE __m128d _mm_setr_pd(double e1, double e0) ++{ ++ return _mm_set_pd(e0, e1); ++} ++ ++// Return vector of type __m128d with all elements set to zero. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setzero_pd ++FORCE_INLINE __m128d _mm_setzero_pd(void) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64(vdupq_n_f64(0)); ++#else ++ return vreinterpretq_m128d_f32(vdupq_n_f32(0)); ++#endif ++} ++ ++// Return vector of type __m128i with all elements set to zero. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setzero_si128 ++FORCE_INLINE __m128i _mm_setzero_si128(void) ++{ ++ return vreinterpretq_m128i_s32(vdupq_n_s32(0)); ++} ++ ++// Shuffle 32-bit integers in a using the control in imm8, and store the results ++// in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_epi32 ++// FORCE_INLINE __m128i _mm_shuffle_epi32(__m128i a, ++// __constrange(0,255) int imm) ++#if defined(_sse2neon_shuffle) ++#define _mm_shuffle_epi32(a, imm) \ ++ __extension__({ \ ++ int32x4_t _input = vreinterpretq_s32_m128i(a); \ ++ int32x4_t _shuf = \ ++ vshuffleq_s32(_input, _input, (imm) & (0x3), ((imm) >> 2) & 0x3, \ ++ ((imm) >> 4) & 0x3, ((imm) >> 6) & 0x3); \ ++ vreinterpretq_m128i_s32(_shuf); \ ++ }) ++#else // generic ++#define _mm_shuffle_epi32(a, imm) \ ++ _sse2neon_define1( \ ++ __m128i, a, __m128i ret; switch (imm) { \ ++ case _MM_SHUFFLE(1, 0, 3, 2): \ ++ ret = _mm_shuffle_epi_1032(_a); \ ++ break; \ ++ case _MM_SHUFFLE(2, 3, 0, 1): \ ++ ret = _mm_shuffle_epi_2301(_a); \ ++ break; \ ++ case _MM_SHUFFLE(0, 3, 2, 1): \ ++ ret = _mm_shuffle_epi_0321(_a); \ ++ break; \ ++ case _MM_SHUFFLE(2, 1, 0, 3): \ ++ ret = _mm_shuffle_epi_2103(_a); \ ++ break; \ ++ case _MM_SHUFFLE(1, 0, 1, 0): \ ++ ret = _mm_shuffle_epi_1010(_a); \ ++ break; \ ++ case _MM_SHUFFLE(1, 0, 0, 1): \ ++ ret = _mm_shuffle_epi_1001(_a); \ ++ break; \ ++ case _MM_SHUFFLE(0, 1, 0, 1): \ ++ ret = _mm_shuffle_epi_0101(_a); \ ++ break; \ ++ case _MM_SHUFFLE(2, 2, 1, 1): \ ++ ret = _mm_shuffle_epi_2211(_a); \ ++ break; \ ++ case _MM_SHUFFLE(0, 1, 2, 2): \ ++ ret = _mm_shuffle_epi_0122(_a); \ ++ break; \ ++ case _MM_SHUFFLE(3, 3, 3, 2): \ ++ ret = _mm_shuffle_epi_3332(_a); \ ++ break; \ ++ case _MM_SHUFFLE(0, 0, 0, 0): \ ++ ret = _mm_shuffle_epi32_splat(_a, 0); \ ++ break; \ ++ case _MM_SHUFFLE(1, 1, 1, 1): \ ++ ret = _mm_shuffle_epi32_splat(_a, 1); \ ++ break; \ ++ case _MM_SHUFFLE(2, 2, 2, 2): \ ++ ret = _mm_shuffle_epi32_splat(_a, 2); \ ++ break; \ ++ case _MM_SHUFFLE(3, 3, 3, 3): \ ++ ret = _mm_shuffle_epi32_splat(_a, 3); \ ++ break; \ ++ default: \ ++ ret = _mm_shuffle_epi32_default(_a, (imm)); \ ++ break; \ ++ } _sse2neon_return(ret);) ++#endif ++ ++// Shuffle double-precision (64-bit) floating-point elements using the control ++// in imm8, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_pd ++#ifdef _sse2neon_shuffle ++#define _mm_shuffle_pd(a, b, imm8) \ ++ vreinterpretq_m128d_s64( \ ++ vshuffleq_s64(vreinterpretq_s64_m128d(a), vreinterpretq_s64_m128d(b), \ ++ imm8 & 0x1, ((imm8 & 0x2) >> 1) + 2)) ++#else ++#define _mm_shuffle_pd(a, b, imm8) \ ++ _mm_castsi128_pd(_mm_set_epi64x( \ ++ vgetq_lane_s64(vreinterpretq_s64_m128d(b), (imm8 & 0x2) >> 1), \ ++ vgetq_lane_s64(vreinterpretq_s64_m128d(a), imm8 & 0x1))) ++#endif ++ ++// FORCE_INLINE __m128i _mm_shufflehi_epi16(__m128i a, ++// __constrange(0,255) int imm) ++#if defined(_sse2neon_shuffle) ++#define _mm_shufflehi_epi16(a, imm) \ ++ __extension__({ \ ++ int16x8_t _input = vreinterpretq_s16_m128i(a); \ ++ int16x8_t _shuf = \ ++ vshuffleq_s16(_input, _input, 0, 1, 2, 3, ((imm) & (0x3)) + 4, \ ++ (((imm) >> 2) & 0x3) + 4, (((imm) >> 4) & 0x3) + 4, \ ++ (((imm) >> 6) & 0x3) + 4); \ ++ vreinterpretq_m128i_s16(_shuf); \ ++ }) ++#else // generic ++#define _mm_shufflehi_epi16(a, imm) _mm_shufflehi_epi16_function((a), (imm)) ++#endif ++ ++// FORCE_INLINE __m128i _mm_shufflelo_epi16(__m128i a, ++// __constrange(0,255) int imm) ++#if defined(_sse2neon_shuffle) ++#define _mm_shufflelo_epi16(a, imm) \ ++ __extension__({ \ ++ int16x8_t _input = vreinterpretq_s16_m128i(a); \ ++ int16x8_t _shuf = vshuffleq_s16( \ ++ _input, _input, ((imm) & (0x3)), (((imm) >> 2) & 0x3), \ ++ (((imm) >> 4) & 0x3), (((imm) >> 6) & 0x3), 4, 5, 6, 7); \ ++ vreinterpretq_m128i_s16(_shuf); \ ++ }) ++#else // generic ++#define _mm_shufflelo_epi16(a, imm) _mm_shufflelo_epi16_function((a), (imm)) ++#endif ++ ++// Shift packed 16-bit integers in a left by count while shifting in zeros, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sll_epi16 ++FORCE_INLINE __m128i _mm_sll_epi16(__m128i a, __m128i count) ++{ ++ uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); ++ if (_sse2neon_unlikely(c & ~15)) ++ return _mm_setzero_si128(); ++ ++ int16x8_t vc = vdupq_n_s16((int16_t) c); ++ return vreinterpretq_m128i_s16(vshlq_s16(vreinterpretq_s16_m128i(a), vc)); ++} ++ ++// Shift packed 32-bit integers in a left by count while shifting in zeros, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sll_epi32 ++FORCE_INLINE __m128i _mm_sll_epi32(__m128i a, __m128i count) ++{ ++ uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); ++ if (_sse2neon_unlikely(c & ~31)) ++ return _mm_setzero_si128(); ++ ++ int32x4_t vc = vdupq_n_s32((int32_t) c); ++ return vreinterpretq_m128i_s32(vshlq_s32(vreinterpretq_s32_m128i(a), vc)); ++} ++ ++// Shift packed 64-bit integers in a left by count while shifting in zeros, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sll_epi64 ++FORCE_INLINE __m128i _mm_sll_epi64(__m128i a, __m128i count) ++{ ++ uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); ++ if (_sse2neon_unlikely(c & ~63)) ++ return _mm_setzero_si128(); ++ ++ int64x2_t vc = vdupq_n_s64((int64_t) c); ++ return vreinterpretq_m128i_s64(vshlq_s64(vreinterpretq_s64_m128i(a), vc)); ++} ++ ++// Shift packed 16-bit integers in a left by imm8 while shifting in zeros, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_slli_epi16 ++FORCE_INLINE __m128i _mm_slli_epi16(__m128i a, int imm) ++{ ++ if (_sse2neon_unlikely(imm & ~15)) ++ return _mm_setzero_si128(); ++ return vreinterpretq_m128i_s16( ++ vshlq_s16(vreinterpretq_s16_m128i(a), vdupq_n_s16(imm))); ++} ++ ++// Shift packed 32-bit integers in a left by imm8 while shifting in zeros, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_slli_epi32 ++FORCE_INLINE __m128i _mm_slli_epi32(__m128i a, int imm) ++{ ++ if (_sse2neon_unlikely(imm & ~31)) ++ return _mm_setzero_si128(); ++ return vreinterpretq_m128i_s32( ++ vshlq_s32(vreinterpretq_s32_m128i(a), vdupq_n_s32(imm))); ++} ++ ++// Shift packed 64-bit integers in a left by imm8 while shifting in zeros, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_slli_epi64 ++FORCE_INLINE __m128i _mm_slli_epi64(__m128i a, int imm) ++{ ++ if (_sse2neon_unlikely(imm & ~63)) ++ return _mm_setzero_si128(); ++ return vreinterpretq_m128i_s64( ++ vshlq_s64(vreinterpretq_s64_m128i(a), vdupq_n_s64(imm))); ++} ++ ++// Shift a left by imm8 bytes while shifting in zeros, and store the results in ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_slli_si128 ++#define _mm_slli_si128(a, imm) \ ++ _sse2neon_define1( \ ++ __m128i, a, int8x16_t ret; \ ++ if (_sse2neon_unlikely(imm == 0)) ret = vreinterpretq_s8_m128i(_a); \ ++ else if (_sse2neon_unlikely((imm) & ~15)) ret = vdupq_n_s8(0); \ ++ else ret = vextq_s8(vdupq_n_s8(0), vreinterpretq_s8_m128i(_a), \ ++ ((imm <= 0 || imm > 15) ? 0 : (16 - imm))); \ ++ _sse2neon_return(vreinterpretq_m128i_s8(ret));) ++ ++// Compute the square root of packed double-precision (64-bit) floating-point ++// elements in a, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sqrt_pd ++FORCE_INLINE __m128d _mm_sqrt_pd(__m128d a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64(vsqrtq_f64(vreinterpretq_f64_m128d(a))); ++#else ++ double a0 = sqrt(((double *) &a)[0]); ++ double a1 = sqrt(((double *) &a)[1]); ++ return _mm_set_pd(a1, a0); ++#endif ++} ++ ++// Compute the square root of the lower double-precision (64-bit) floating-point ++// element in b, store the result in the lower element of dst, and copy the ++// upper element from a to the upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sqrt_sd ++FORCE_INLINE __m128d _mm_sqrt_sd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return _mm_move_sd(a, _mm_sqrt_pd(b)); ++#else ++ return _mm_set_pd(((double *) &a)[1], sqrt(((double *) &b)[0])); ++#endif ++} ++ ++// Shift packed 16-bit integers in a right by count while shifting in sign bits, ++// and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sra_epi16 ++FORCE_INLINE __m128i _mm_sra_epi16(__m128i a, __m128i count) ++{ ++ int64_t c = vgetq_lane_s64(count, 0); ++ if (_sse2neon_unlikely(c & ~15)) ++ return _mm_cmplt_epi16(a, _mm_setzero_si128()); ++ return vreinterpretq_m128i_s16( ++ vshlq_s16((int16x8_t) a, vdupq_n_s16((int) -c))); ++} ++ ++// Shift packed 32-bit integers in a right by count while shifting in sign bits, ++// and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sra_epi32 ++FORCE_INLINE __m128i _mm_sra_epi32(__m128i a, __m128i count) ++{ ++ int64_t c = vgetq_lane_s64(count, 0); ++ if (_sse2neon_unlikely(c & ~31)) ++ return _mm_cmplt_epi32(a, _mm_setzero_si128()); ++ return vreinterpretq_m128i_s32( ++ vshlq_s32((int32x4_t) a, vdupq_n_s32((int) -c))); ++} ++ ++// Shift packed 16-bit integers in a right by imm8 while shifting in sign ++// bits, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srai_epi16 ++FORCE_INLINE __m128i _mm_srai_epi16(__m128i a, int imm) ++{ ++ const int count = (imm & ~15) ? 15 : imm; ++ return (__m128i) vshlq_s16((int16x8_t) a, vdupq_n_s16(-count)); ++} ++ ++// Shift packed 32-bit integers in a right by imm8 while shifting in sign bits, ++// and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srai_epi32 ++// FORCE_INLINE __m128i _mm_srai_epi32(__m128i a, __constrange(0,255) int imm) ++#define _mm_srai_epi32(a, imm) \ ++ _sse2neon_define0( \ ++ __m128i, a, __m128i ret; if (_sse2neon_unlikely((imm) == 0)) { \ ++ ret = _a; \ ++ } else if (_sse2neon_likely(0 < (imm) && (imm) < 32)) { \ ++ ret = vreinterpretq_m128i_s32( \ ++ vshlq_s32(vreinterpretq_s32_m128i(_a), vdupq_n_s32(-(imm)))); \ ++ } else { \ ++ ret = vreinterpretq_m128i_s32( \ ++ vshrq_n_s32(vreinterpretq_s32_m128i(_a), 31)); \ ++ } _sse2neon_return(ret);) ++ ++// Shift packed 16-bit integers in a right by count while shifting in zeros, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srl_epi16 ++FORCE_INLINE __m128i _mm_srl_epi16(__m128i a, __m128i count) ++{ ++ uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); ++ if (_sse2neon_unlikely(c & ~15)) ++ return _mm_setzero_si128(); ++ ++ int16x8_t vc = vdupq_n_s16(-(int16_t) c); ++ return vreinterpretq_m128i_u16(vshlq_u16(vreinterpretq_u16_m128i(a), vc)); ++} ++ ++// Shift packed 32-bit integers in a right by count while shifting in zeros, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srl_epi32 ++FORCE_INLINE __m128i _mm_srl_epi32(__m128i a, __m128i count) ++{ ++ uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); ++ if (_sse2neon_unlikely(c & ~31)) ++ return _mm_setzero_si128(); ++ ++ int32x4_t vc = vdupq_n_s32(-(int32_t) c); ++ return vreinterpretq_m128i_u32(vshlq_u32(vreinterpretq_u32_m128i(a), vc)); ++} ++ ++// Shift packed 64-bit integers in a right by count while shifting in zeros, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srl_epi64 ++FORCE_INLINE __m128i _mm_srl_epi64(__m128i a, __m128i count) ++{ ++ uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); ++ if (_sse2neon_unlikely(c & ~63)) ++ return _mm_setzero_si128(); ++ ++ int64x2_t vc = vdupq_n_s64(-(int64_t) c); ++ return vreinterpretq_m128i_u64(vshlq_u64(vreinterpretq_u64_m128i(a), vc)); ++} ++ ++// Shift packed 16-bit integers in a right by imm8 while shifting in zeros, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srli_epi16 ++#define _mm_srli_epi16(a, imm) \ ++ _sse2neon_define0( \ ++ __m128i, a, __m128i ret; if (_sse2neon_unlikely((imm) & ~15)) { \ ++ ret = _mm_setzero_si128(); \ ++ } else { \ ++ ret = vreinterpretq_m128i_u16( \ ++ vshlq_u16(vreinterpretq_u16_m128i(_a), vdupq_n_s16(-(imm)))); \ ++ } _sse2neon_return(ret);) ++ ++// Shift packed 32-bit integers in a right by imm8 while shifting in zeros, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srli_epi32 ++// FORCE_INLINE __m128i _mm_srli_epi32(__m128i a, __constrange(0,255) int imm) ++#define _mm_srli_epi32(a, imm) \ ++ _sse2neon_define0( \ ++ __m128i, a, __m128i ret; if (_sse2neon_unlikely((imm) & ~31)) { \ ++ ret = _mm_setzero_si128(); \ ++ } else { \ ++ ret = vreinterpretq_m128i_u32( \ ++ vshlq_u32(vreinterpretq_u32_m128i(_a), vdupq_n_s32(-(imm)))); \ ++ } _sse2neon_return(ret);) ++ ++// Shift packed 64-bit integers in a right by imm8 while shifting in zeros, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srli_epi64 ++#define _mm_srli_epi64(a, imm) \ ++ _sse2neon_define0( \ ++ __m128i, a, __m128i ret; if (_sse2neon_unlikely((imm) & ~63)) { \ ++ ret = _mm_setzero_si128(); \ ++ } else { \ ++ ret = vreinterpretq_m128i_u64( \ ++ vshlq_u64(vreinterpretq_u64_m128i(_a), vdupq_n_s64(-(imm)))); \ ++ } _sse2neon_return(ret);) ++ ++// Shift a right by imm8 bytes while shifting in zeros, and store the results in ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srli_si128 ++#define _mm_srli_si128(a, imm) \ ++ _sse2neon_define1( \ ++ __m128i, a, int8x16_t ret; \ ++ if (_sse2neon_unlikely((imm) & ~15)) ret = vdupq_n_s8(0); \ ++ else ret = vextq_s8(vreinterpretq_s8_m128i(_a), vdupq_n_s8(0), \ ++ (imm > 15 ? 0 : imm)); \ ++ _sse2neon_return(vreinterpretq_m128i_s8(ret));) ++ ++// Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point ++// elements) from a into memory. mem_addr must be aligned on a 16-byte boundary ++// or a general-protection exception may be generated. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_pd ++FORCE_INLINE void _mm_store_pd(double *mem_addr, __m128d a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ vst1q_f64((float64_t *) mem_addr, vreinterpretq_f64_m128d(a)); ++#else ++ vst1q_f32((float32_t *) mem_addr, vreinterpretq_f32_m128d(a)); ++#endif ++} ++ ++// Store the lower double-precision (64-bit) floating-point element from a into ++// 2 contiguous elements in memory. mem_addr must be aligned on a 16-byte ++// boundary or a general-protection exception may be generated. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_pd1 ++FORCE_INLINE void _mm_store_pd1(double *mem_addr, __m128d a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ float64x1_t a_low = vget_low_f64(vreinterpretq_f64_m128d(a)); ++ vst1q_f64((float64_t *) mem_addr, ++ vreinterpretq_f64_m128d(vcombine_f64(a_low, a_low))); ++#else ++ float32x2_t a_low = vget_low_f32(vreinterpretq_f32_m128d(a)); ++ vst1q_f32((float32_t *) mem_addr, ++ vreinterpretq_f32_m128d(vcombine_f32(a_low, a_low))); ++#endif ++} ++ ++// Store the lower double-precision (64-bit) floating-point element from a into ++// memory. mem_addr does not need to be aligned on any particular boundary. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_store_sd ++FORCE_INLINE void _mm_store_sd(double *mem_addr, __m128d a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ vst1_f64((float64_t *) mem_addr, vget_low_f64(vreinterpretq_f64_m128d(a))); ++#else ++ vst1_u64((uint64_t *) mem_addr, vget_low_u64(vreinterpretq_u64_m128d(a))); ++#endif ++} ++ ++// Store 128-bits of integer data from a into memory. mem_addr must be aligned ++// on a 16-byte boundary or a general-protection exception may be generated. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_si128 ++FORCE_INLINE void _mm_store_si128(__m128i *p, __m128i a) ++{ ++ vst1q_s32((int32_t *) p, vreinterpretq_s32_m128i(a)); ++} ++ ++// Store the lower double-precision (64-bit) floating-point element from a into ++// 2 contiguous elements in memory. mem_addr must be aligned on a 16-byte ++// boundary or a general-protection exception may be generated. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#expand=9,526,5601&text=_mm_store1_pd ++#define _mm_store1_pd _mm_store_pd1 ++ ++// Store the upper double-precision (64-bit) floating-point element from a into ++// memory. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeh_pd ++FORCE_INLINE void _mm_storeh_pd(double *mem_addr, __m128d a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ vst1_f64((float64_t *) mem_addr, vget_high_f64(vreinterpretq_f64_m128d(a))); ++#else ++ vst1_f32((float32_t *) mem_addr, vget_high_f32(vreinterpretq_f32_m128d(a))); ++#endif ++} ++ ++// Store 64-bit integer from the first element of a into memory. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storel_epi64 ++FORCE_INLINE void _mm_storel_epi64(__m128i *a, __m128i b) ++{ ++ vst1_u64((uint64_t *) a, vget_low_u64(vreinterpretq_u64_m128i(b))); ++} ++ ++// Store the lower double-precision (64-bit) floating-point element from a into ++// memory. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storel_pd ++FORCE_INLINE void _mm_storel_pd(double *mem_addr, __m128d a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ vst1_f64((float64_t *) mem_addr, vget_low_f64(vreinterpretq_f64_m128d(a))); ++#else ++ vst1_f32((float32_t *) mem_addr, vget_low_f32(vreinterpretq_f32_m128d(a))); ++#endif ++} ++ ++// Store 2 double-precision (64-bit) floating-point elements from a into memory ++// in reverse order. mem_addr must be aligned on a 16-byte boundary or a ++// general-protection exception may be generated. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storer_pd ++FORCE_INLINE void _mm_storer_pd(double *mem_addr, __m128d a) ++{ ++ float32x4_t f = vreinterpretq_f32_m128d(a); ++ _mm_store_pd(mem_addr, vreinterpretq_m128d_f32(vextq_f32(f, f, 2))); ++} ++ ++// Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point ++// elements) from a into memory. mem_addr does not need to be aligned on any ++// particular boundary. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_pd ++FORCE_INLINE void _mm_storeu_pd(double *mem_addr, __m128d a) ++{ ++ _mm_store_pd(mem_addr, a); ++} ++ ++// Store 128-bits of integer data from a into memory. mem_addr does not need to ++// be aligned on any particular boundary. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_si128 ++FORCE_INLINE void _mm_storeu_si128(__m128i *p, __m128i a) ++{ ++ vst1q_s32((int32_t *) p, vreinterpretq_s32_m128i(a)); ++} ++ ++// Store 32-bit integer from the first element of a into memory. mem_addr does ++// not need to be aligned on any particular boundary. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_si32 ++FORCE_INLINE void _mm_storeu_si32(void *p, __m128i a) ++{ ++ vst1q_lane_s32((int32_t *) p, vreinterpretq_s32_m128i(a), 0); ++} ++ ++// Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point ++// elements) from a into memory using a non-temporal memory hint. mem_addr must ++// be aligned on a 16-byte boundary or a general-protection exception may be ++// generated. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_pd ++FORCE_INLINE void _mm_stream_pd(double *p, __m128d a) ++{ ++#if __has_builtin(__builtin_nontemporal_store) ++ __builtin_nontemporal_store(a, (__m128d *) p); ++#elif defined(__aarch64__) || defined(_M_ARM64) ++ vst1q_f64(p, vreinterpretq_f64_m128d(a)); ++#else ++ vst1q_s64((int64_t *) p, vreinterpretq_s64_m128d(a)); ++#endif ++} ++ ++// Store 128-bits of integer data from a into memory using a non-temporal memory ++// hint. mem_addr must be aligned on a 16-byte boundary or a general-protection ++// exception may be generated. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_si128 ++FORCE_INLINE void _mm_stream_si128(__m128i *p, __m128i a) ++{ ++#if __has_builtin(__builtin_nontemporal_store) ++ __builtin_nontemporal_store(a, p); ++#else ++ vst1q_s64((int64_t *) p, vreinterpretq_s64_m128i(a)); ++#endif ++} ++ ++// Store 32-bit integer a into memory using a non-temporal hint to minimize ++// cache pollution. If the cache line containing address mem_addr is already in ++// the cache, the cache will be updated. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_si32 ++FORCE_INLINE void _mm_stream_si32(int *p, int a) ++{ ++ vst1q_lane_s32((int32_t *) p, vdupq_n_s32(a), 0); ++} ++ ++// Store 64-bit integer a into memory using a non-temporal hint to minimize ++// cache pollution. If the cache line containing address mem_addr is already in ++// the cache, the cache will be updated. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_si64 ++FORCE_INLINE void _mm_stream_si64(__int64 *p, __int64 a) ++{ ++ vst1_s64((int64_t *) p, vdup_n_s64((int64_t) a)); ++} ++ ++// Subtract packed 16-bit integers in b from packed 16-bit integers in a, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_epi16 ++FORCE_INLINE __m128i _mm_sub_epi16(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s16( ++ vsubq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); ++} ++ ++// Subtract packed 32-bit integers in b from packed 32-bit integers in a, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_epi32 ++FORCE_INLINE __m128i _mm_sub_epi32(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s32( ++ vsubq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); ++} ++ ++// Subtract packed 64-bit integers in b from packed 64-bit integers in a, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_epi64 ++FORCE_INLINE __m128i _mm_sub_epi64(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s64( ++ vsubq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); ++} ++ ++// Subtract packed 8-bit integers in b from packed 8-bit integers in a, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_epi8 ++FORCE_INLINE __m128i _mm_sub_epi8(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s8( ++ vsubq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); ++} ++ ++// Subtract packed double-precision (64-bit) floating-point elements in b from ++// packed double-precision (64-bit) floating-point elements in a, and store the ++// results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_sub_pd ++FORCE_INLINE __m128d _mm_sub_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64( ++ vsubq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); ++#else ++ double *da = (double *) &a; ++ double *db = (double *) &b; ++ double c[2]; ++ c[0] = da[0] - db[0]; ++ c[1] = da[1] - db[1]; ++ return vld1q_f32((float32_t *) c); ++#endif ++} ++ ++// Subtract the lower double-precision (64-bit) floating-point element in b from ++// the lower double-precision (64-bit) floating-point element in a, store the ++// result in the lower element of dst, and copy the upper element from a to the ++// upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_sd ++FORCE_INLINE __m128d _mm_sub_sd(__m128d a, __m128d b) ++{ ++ return _mm_move_sd(a, _mm_sub_pd(a, b)); ++} ++ ++// Subtract 64-bit integer b from 64-bit integer a, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_si64 ++FORCE_INLINE __m64 _mm_sub_si64(__m64 a, __m64 b) ++{ ++ return vreinterpret_m64_s64( ++ vsub_s64(vreinterpret_s64_m64(a), vreinterpret_s64_m64(b))); ++} ++ ++// Subtract packed signed 16-bit integers in b from packed 16-bit integers in a ++// using saturation, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_subs_epi16 ++FORCE_INLINE __m128i _mm_subs_epi16(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s16( ++ vqsubq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); ++} ++ ++// Subtract packed signed 8-bit integers in b from packed 8-bit integers in a ++// using saturation, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_subs_epi8 ++FORCE_INLINE __m128i _mm_subs_epi8(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s8( ++ vqsubq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); ++} ++ ++// Subtract packed unsigned 16-bit integers in b from packed unsigned 16-bit ++// integers in a using saturation, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_subs_epu16 ++FORCE_INLINE __m128i _mm_subs_epu16(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u16( ++ vqsubq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); ++} ++ ++// Subtract packed unsigned 8-bit integers in b from packed unsigned 8-bit ++// integers in a using saturation, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_subs_epu8 ++FORCE_INLINE __m128i _mm_subs_epu8(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u8( ++ vqsubq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); ++} ++ ++#define _mm_ucomieq_sd _mm_comieq_sd ++#define _mm_ucomige_sd _mm_comige_sd ++#define _mm_ucomigt_sd _mm_comigt_sd ++#define _mm_ucomile_sd _mm_comile_sd ++#define _mm_ucomilt_sd _mm_comilt_sd ++#define _mm_ucomineq_sd _mm_comineq_sd ++ ++// Return vector of type __m128d with undefined elements. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_undefined_pd ++FORCE_INLINE __m128d _mm_undefined_pd(void) ++{ ++#if defined(__GNUC__) || defined(__clang__) ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wuninitialized" ++#endif ++ __m128d a; ++#if defined(_MSC_VER) ++ a = _mm_setzero_pd(); ++#endif ++ return a; ++#if defined(__GNUC__) || defined(__clang__) ++#pragma GCC diagnostic pop ++#endif ++} ++ ++// Unpack and interleave 16-bit integers from the high half of a and b, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_epi16 ++FORCE_INLINE __m128i _mm_unpackhi_epi16(__m128i a, __m128i b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128i_s16( ++ vzip2q_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); ++#else ++ int16x4_t a1 = vget_high_s16(vreinterpretq_s16_m128i(a)); ++ int16x4_t b1 = vget_high_s16(vreinterpretq_s16_m128i(b)); ++ int16x4x2_t result = vzip_s16(a1, b1); ++ return vreinterpretq_m128i_s16(vcombine_s16(result.val[0], result.val[1])); ++#endif ++} ++ ++// Unpack and interleave 32-bit integers from the high half of a and b, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_epi32 ++FORCE_INLINE __m128i _mm_unpackhi_epi32(__m128i a, __m128i b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128i_s32( ++ vzip2q_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); ++#else ++ int32x2_t a1 = vget_high_s32(vreinterpretq_s32_m128i(a)); ++ int32x2_t b1 = vget_high_s32(vreinterpretq_s32_m128i(b)); ++ int32x2x2_t result = vzip_s32(a1, b1); ++ return vreinterpretq_m128i_s32(vcombine_s32(result.val[0], result.val[1])); ++#endif ++} ++ ++// Unpack and interleave 64-bit integers from the high half of a and b, and ++// store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_epi64 ++FORCE_INLINE __m128i _mm_unpackhi_epi64(__m128i a, __m128i b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128i_s64( ++ vzip2q_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); ++#else ++ int64x1_t a_h = vget_high_s64(vreinterpretq_s64_m128i(a)); ++ int64x1_t b_h = vget_high_s64(vreinterpretq_s64_m128i(b)); ++ return vreinterpretq_m128i_s64(vcombine_s64(a_h, b_h)); ++#endif ++} ++ ++// Unpack and interleave 8-bit integers from the high half of a and b, and store ++// the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_epi8 ++FORCE_INLINE __m128i _mm_unpackhi_epi8(__m128i a, __m128i b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128i_s8( ++ vzip2q_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); ++#else ++ int8x8_t a1 = ++ vreinterpret_s8_s16(vget_high_s16(vreinterpretq_s16_m128i(a))); ++ int8x8_t b1 = ++ vreinterpret_s8_s16(vget_high_s16(vreinterpretq_s16_m128i(b))); ++ int8x8x2_t result = vzip_s8(a1, b1); ++ return vreinterpretq_m128i_s8(vcombine_s8(result.val[0], result.val[1])); ++#endif ++} ++ ++// Unpack and interleave double-precision (64-bit) floating-point elements from ++// the high half of a and b, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_pd ++FORCE_INLINE __m128d _mm_unpackhi_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64( ++ vzip2q_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); ++#else ++ return vreinterpretq_m128d_s64( ++ vcombine_s64(vget_high_s64(vreinterpretq_s64_m128d(a)), ++ vget_high_s64(vreinterpretq_s64_m128d(b)))); ++#endif ++} ++ ++// Unpack and interleave 16-bit integers from the low half of a and b, and store ++// the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_epi16 ++FORCE_INLINE __m128i _mm_unpacklo_epi16(__m128i a, __m128i b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128i_s16( ++ vzip1q_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); ++#else ++ int16x4_t a1 = vget_low_s16(vreinterpretq_s16_m128i(a)); ++ int16x4_t b1 = vget_low_s16(vreinterpretq_s16_m128i(b)); ++ int16x4x2_t result = vzip_s16(a1, b1); ++ return vreinterpretq_m128i_s16(vcombine_s16(result.val[0], result.val[1])); ++#endif ++} ++ ++// Unpack and interleave 32-bit integers from the low half of a and b, and store ++// the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_epi32 ++FORCE_INLINE __m128i _mm_unpacklo_epi32(__m128i a, __m128i b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128i_s32( ++ vzip1q_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); ++#else ++ int32x2_t a1 = vget_low_s32(vreinterpretq_s32_m128i(a)); ++ int32x2_t b1 = vget_low_s32(vreinterpretq_s32_m128i(b)); ++ int32x2x2_t result = vzip_s32(a1, b1); ++ return vreinterpretq_m128i_s32(vcombine_s32(result.val[0], result.val[1])); ++#endif ++} ++ ++// Unpack and interleave 64-bit integers from the low half of a and b, and store ++// the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_epi64 ++FORCE_INLINE __m128i _mm_unpacklo_epi64(__m128i a, __m128i b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128i_s64( ++ vzip1q_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); ++#else ++ int64x1_t a_l = vget_low_s64(vreinterpretq_s64_m128i(a)); ++ int64x1_t b_l = vget_low_s64(vreinterpretq_s64_m128i(b)); ++ return vreinterpretq_m128i_s64(vcombine_s64(a_l, b_l)); ++#endif ++} ++ ++// Unpack and interleave 8-bit integers from the low half of a and b, and store ++// the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_epi8 ++FORCE_INLINE __m128i _mm_unpacklo_epi8(__m128i a, __m128i b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128i_s8( ++ vzip1q_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); ++#else ++ int8x8_t a1 = vreinterpret_s8_s16(vget_low_s16(vreinterpretq_s16_m128i(a))); ++ int8x8_t b1 = vreinterpret_s8_s16(vget_low_s16(vreinterpretq_s16_m128i(b))); ++ int8x8x2_t result = vzip_s8(a1, b1); ++ return vreinterpretq_m128i_s8(vcombine_s8(result.val[0], result.val[1])); ++#endif ++} ++ ++// Unpack and interleave double-precision (64-bit) floating-point elements from ++// the low half of a and b, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_pd ++FORCE_INLINE __m128d _mm_unpacklo_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64( ++ vzip1q_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); ++#else ++ return vreinterpretq_m128d_s64( ++ vcombine_s64(vget_low_s64(vreinterpretq_s64_m128d(a)), ++ vget_low_s64(vreinterpretq_s64_m128d(b)))); ++#endif ++} ++ ++// Compute the bitwise XOR of packed double-precision (64-bit) floating-point ++// elements in a and b, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_xor_pd ++FORCE_INLINE __m128d _mm_xor_pd(__m128d a, __m128d b) ++{ ++ return vreinterpretq_m128d_s64( ++ veorq_s64(vreinterpretq_s64_m128d(a), vreinterpretq_s64_m128d(b))); ++} ++ ++// Compute the bitwise XOR of 128 bits (representing integer data) in a and b, ++// and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_xor_si128 ++FORCE_INLINE __m128i _mm_xor_si128(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s32( ++ veorq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); ++} ++ ++/* SSE3 */ ++ ++// Alternatively add and subtract packed double-precision (64-bit) ++// floating-point elements in a to/from packed elements in b, and store the ++// results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_addsub_pd ++FORCE_INLINE __m128d _mm_addsub_pd(__m128d a, __m128d b) ++{ ++ _sse2neon_const __m128d mask = _mm_set_pd(1.0f, -1.0f); ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64(vfmaq_f64(vreinterpretq_f64_m128d(a), ++ vreinterpretq_f64_m128d(b), ++ vreinterpretq_f64_m128d(mask))); ++#else ++ return _mm_add_pd(_mm_mul_pd(b, mask), a); ++#endif ++} ++ ++// Alternatively add and subtract packed single-precision (32-bit) ++// floating-point elements in a to/from packed elements in b, and store the ++// results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=addsub_ps ++FORCE_INLINE __m128 _mm_addsub_ps(__m128 a, __m128 b) ++{ ++ _sse2neon_const __m128 mask = _mm_setr_ps(-1.0f, 1.0f, -1.0f, 1.0f); ++#if (defined(__aarch64__) || defined(_M_ARM64)) || \ ++ defined(__ARM_FEATURE_FMA) /* VFPv4+ */ ++ return vreinterpretq_m128_f32(vfmaq_f32(vreinterpretq_f32_m128(a), ++ vreinterpretq_f32_m128(mask), ++ vreinterpretq_f32_m128(b))); ++#else ++ return _mm_add_ps(_mm_mul_ps(b, mask), a); ++#endif ++} ++ ++// Horizontally add adjacent pairs of double-precision (64-bit) floating-point ++// elements in a and b, and pack the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_pd ++FORCE_INLINE __m128d _mm_hadd_pd(__m128d a, __m128d b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64( ++ vpaddq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); ++#else ++ double *da = (double *) &a; ++ double *db = (double *) &b; ++ double c[] = {da[0] + da[1], db[0] + db[1]}; ++ return vreinterpretq_m128d_u64(vld1q_u64((uint64_t *) c)); ++#endif ++} ++ ++// Horizontally add adjacent pairs of single-precision (32-bit) floating-point ++// elements in a and b, and pack the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_ps ++FORCE_INLINE __m128 _mm_hadd_ps(__m128 a, __m128 b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128_f32( ++ vpaddq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); ++#else ++ float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); ++ float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); ++ float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); ++ float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); ++ return vreinterpretq_m128_f32( ++ vcombine_f32(vpadd_f32(a10, a32), vpadd_f32(b10, b32))); ++#endif ++} ++ ++// Horizontally subtract adjacent pairs of double-precision (64-bit) ++// floating-point elements in a and b, and pack the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsub_pd ++FORCE_INLINE __m128d _mm_hsub_pd(__m128d _a, __m128d _b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ float64x2_t a = vreinterpretq_f64_m128d(_a); ++ float64x2_t b = vreinterpretq_f64_m128d(_b); ++ return vreinterpretq_m128d_f64( ++ vsubq_f64(vuzp1q_f64(a, b), vuzp2q_f64(a, b))); ++#else ++ double *da = (double *) &_a; ++ double *db = (double *) &_b; ++ double c[] = {da[0] - da[1], db[0] - db[1]}; ++ return vreinterpretq_m128d_u64(vld1q_u64((uint64_t *) c)); ++#endif ++} ++ ++// Horizontally subtract adjacent pairs of single-precision (32-bit) ++// floating-point elements in a and b, and pack the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsub_ps ++FORCE_INLINE __m128 _mm_hsub_ps(__m128 _a, __m128 _b) ++{ ++ float32x4_t a = vreinterpretq_f32_m128(_a); ++ float32x4_t b = vreinterpretq_f32_m128(_b); ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128_f32( ++ vsubq_f32(vuzp1q_f32(a, b), vuzp2q_f32(a, b))); ++#else ++ float32x4x2_t c = vuzpq_f32(a, b); ++ return vreinterpretq_m128_f32(vsubq_f32(c.val[0], c.val[1])); ++#endif ++} ++ ++// Load 128-bits of integer data from unaligned memory into dst. This intrinsic ++// may perform better than _mm_loadu_si128 when the data crosses a cache line ++// boundary. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_lddqu_si128 ++#define _mm_lddqu_si128 _mm_loadu_si128 ++ ++// Load a double-precision (64-bit) floating-point element from memory into both ++// elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loaddup_pd ++#define _mm_loaddup_pd _mm_load1_pd ++ ++// Duplicate the low double-precision (64-bit) floating-point element from a, ++// and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movedup_pd ++FORCE_INLINE __m128d _mm_movedup_pd(__m128d a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64( ++ vdupq_laneq_f64(vreinterpretq_f64_m128d(a), 0)); ++#else ++ return vreinterpretq_m128d_u64( ++ vdupq_n_u64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0))); ++#endif ++} ++ ++// Duplicate odd-indexed single-precision (32-bit) floating-point elements ++// from a, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movehdup_ps ++FORCE_INLINE __m128 _mm_movehdup_ps(__m128 a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128_f32( ++ vtrn2q_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a))); ++#elif defined(_sse2neon_shuffle) ++ return vreinterpretq_m128_f32(vshuffleq_s32( ++ vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 1, 1, 3, 3)); ++#else ++ float32_t a1 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 1); ++ float32_t a3 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 3); ++ float ALIGN_STRUCT(16) data[4] = {a1, a1, a3, a3}; ++ return vreinterpretq_m128_f32(vld1q_f32(data)); ++#endif ++} ++ ++// Duplicate even-indexed single-precision (32-bit) floating-point elements ++// from a, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_moveldup_ps ++FORCE_INLINE __m128 _mm_moveldup_ps(__m128 a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128_f32( ++ vtrn1q_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a))); ++#elif defined(_sse2neon_shuffle) ++ return vreinterpretq_m128_f32(vshuffleq_s32( ++ vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 0, 0, 2, 2)); ++#else ++ float32_t a0 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); ++ float32_t a2 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 2); ++ float ALIGN_STRUCT(16) data[4] = {a0, a0, a2, a2}; ++ return vreinterpretq_m128_f32(vld1q_f32(data)); ++#endif ++} ++ ++/* SSSE3 */ ++ ++// Compute the absolute value of packed signed 16-bit integers in a, and store ++// the unsigned results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_epi16 ++FORCE_INLINE __m128i _mm_abs_epi16(__m128i a) ++{ ++ return vreinterpretq_m128i_s16(vabsq_s16(vreinterpretq_s16_m128i(a))); ++} ++ ++// Compute the absolute value of packed signed 32-bit integers in a, and store ++// the unsigned results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_epi32 ++FORCE_INLINE __m128i _mm_abs_epi32(__m128i a) ++{ ++ return vreinterpretq_m128i_s32(vabsq_s32(vreinterpretq_s32_m128i(a))); ++} ++ ++// Compute the absolute value of packed signed 8-bit integers in a, and store ++// the unsigned results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_epi8 ++FORCE_INLINE __m128i _mm_abs_epi8(__m128i a) ++{ ++ return vreinterpretq_m128i_s8(vabsq_s8(vreinterpretq_s8_m128i(a))); ++} ++ ++// Compute the absolute value of packed signed 16-bit integers in a, and store ++// the unsigned results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_pi16 ++FORCE_INLINE __m64 _mm_abs_pi16(__m64 a) ++{ ++ return vreinterpret_m64_s16(vabs_s16(vreinterpret_s16_m64(a))); ++} ++ ++// Compute the absolute value of packed signed 32-bit integers in a, and store ++// the unsigned results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_pi32 ++FORCE_INLINE __m64 _mm_abs_pi32(__m64 a) ++{ ++ return vreinterpret_m64_s32(vabs_s32(vreinterpret_s32_m64(a))); ++} ++ ++// Compute the absolute value of packed signed 8-bit integers in a, and store ++// the unsigned results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_pi8 ++FORCE_INLINE __m64 _mm_abs_pi8(__m64 a) ++{ ++ return vreinterpret_m64_s8(vabs_s8(vreinterpret_s8_m64(a))); ++} ++ ++// Concatenate 16-byte blocks in a and b into a 32-byte temporary result, shift ++// the result right by imm8 bytes, and store the low 16 bytes in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_alignr_epi8 ++#if defined(__GNUC__) && !defined(__clang__) ++#define _mm_alignr_epi8(a, b, imm) \ ++ __extension__({ \ ++ uint8x16_t _a = vreinterpretq_u8_m128i(a); \ ++ uint8x16_t _b = vreinterpretq_u8_m128i(b); \ ++ __m128i ret; \ ++ if (_sse2neon_unlikely((imm) & ~31)) \ ++ ret = vreinterpretq_m128i_u8(vdupq_n_u8(0)); \ ++ else if (imm >= 16) \ ++ ret = _mm_srli_si128(a, imm >= 16 ? imm - 16 : 0); \ ++ else \ ++ ret = \ ++ vreinterpretq_m128i_u8(vextq_u8(_b, _a, imm < 16 ? imm : 0)); \ ++ ret; \ ++ }) ++ ++#else ++#define _mm_alignr_epi8(a, b, imm) \ ++ _sse2neon_define2( \ ++ __m128i, a, b, uint8x16_t __a = vreinterpretq_u8_m128i(_a); \ ++ uint8x16_t __b = vreinterpretq_u8_m128i(_b); __m128i ret; \ ++ if (_sse2neon_unlikely((imm) & ~31)) ret = \ ++ vreinterpretq_m128i_u8(vdupq_n_u8(0)); \ ++ else if (imm >= 16) ret = \ ++ _mm_srli_si128(_a, imm >= 16 ? imm - 16 : 0); \ ++ else ret = \ ++ vreinterpretq_m128i_u8(vextq_u8(__b, __a, imm < 16 ? imm : 0)); \ ++ _sse2neon_return(ret);) ++ ++#endif ++ ++// Concatenate 8-byte blocks in a and b into a 16-byte temporary result, shift ++// the result right by imm8 bytes, and store the low 8 bytes in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_alignr_pi8 ++#define _mm_alignr_pi8(a, b, imm) \ ++ _sse2neon_define2( \ ++ __m64, a, b, __m64 ret; if (_sse2neon_unlikely((imm) >= 16)) { \ ++ ret = vreinterpret_m64_s8(vdup_n_s8(0)); \ ++ } else { \ ++ uint8x8_t tmp_low; \ ++ uint8x8_t tmp_high; \ ++ if ((imm) >= 8) { \ ++ const int idx = (imm) -8; \ ++ tmp_low = vreinterpret_u8_m64(_a); \ ++ tmp_high = vdup_n_u8(0); \ ++ ret = vreinterpret_m64_u8(vext_u8(tmp_low, tmp_high, idx)); \ ++ } else { \ ++ const int idx = (imm); \ ++ tmp_low = vreinterpret_u8_m64(_b); \ ++ tmp_high = vreinterpret_u8_m64(_a); \ ++ ret = vreinterpret_m64_u8(vext_u8(tmp_low, tmp_high, idx)); \ ++ } \ ++ } _sse2neon_return(ret);) ++ ++// Horizontally add adjacent pairs of 16-bit integers in a and b, and pack the ++// signed 16-bit results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_epi16 ++FORCE_INLINE __m128i _mm_hadd_epi16(__m128i _a, __m128i _b) ++{ ++ int16x8_t a = vreinterpretq_s16_m128i(_a); ++ int16x8_t b = vreinterpretq_s16_m128i(_b); ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128i_s16(vpaddq_s16(a, b)); ++#else ++ return vreinterpretq_m128i_s16( ++ vcombine_s16(vpadd_s16(vget_low_s16(a), vget_high_s16(a)), ++ vpadd_s16(vget_low_s16(b), vget_high_s16(b)))); ++#endif ++} ++ ++// Horizontally add adjacent pairs of 32-bit integers in a and b, and pack the ++// signed 32-bit results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_epi32 ++FORCE_INLINE __m128i _mm_hadd_epi32(__m128i _a, __m128i _b) ++{ ++ int32x4_t a = vreinterpretq_s32_m128i(_a); ++ int32x4_t b = vreinterpretq_s32_m128i(_b); ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128i_s32(vpaddq_s32(a, b)); ++#else ++ return vreinterpretq_m128i_s32( ++ vcombine_s32(vpadd_s32(vget_low_s32(a), vget_high_s32(a)), ++ vpadd_s32(vget_low_s32(b), vget_high_s32(b)))); ++#endif ++} ++ ++// Horizontally add adjacent pairs of 16-bit integers in a and b, and pack the ++// signed 16-bit results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_pi16 ++FORCE_INLINE __m64 _mm_hadd_pi16(__m64 a, __m64 b) ++{ ++ return vreinterpret_m64_s16( ++ vpadd_s16(vreinterpret_s16_m64(a), vreinterpret_s16_m64(b))); ++} ++ ++// Horizontally add adjacent pairs of 32-bit integers in a and b, and pack the ++// signed 32-bit results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_pi32 ++FORCE_INLINE __m64 _mm_hadd_pi32(__m64 a, __m64 b) ++{ ++ return vreinterpret_m64_s32( ++ vpadd_s32(vreinterpret_s32_m64(a), vreinterpret_s32_m64(b))); ++} ++ ++// Horizontally add adjacent pairs of signed 16-bit integers in a and b using ++// saturation, and pack the signed 16-bit results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadds_epi16 ++FORCE_INLINE __m128i _mm_hadds_epi16(__m128i _a, __m128i _b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ int16x8_t a = vreinterpretq_s16_m128i(_a); ++ int16x8_t b = vreinterpretq_s16_m128i(_b); ++ return vreinterpretq_s64_s16( ++ vqaddq_s16(vuzp1q_s16(a, b), vuzp2q_s16(a, b))); ++#else ++ int32x4_t a = vreinterpretq_s32_m128i(_a); ++ int32x4_t b = vreinterpretq_s32_m128i(_b); ++ // Interleave using vshrn/vmovn ++ // [a0|a2|a4|a6|b0|b2|b4|b6] ++ // [a1|a3|a5|a7|b1|b3|b5|b7] ++ int16x8_t ab0246 = vcombine_s16(vmovn_s32(a), vmovn_s32(b)); ++ int16x8_t ab1357 = vcombine_s16(vshrn_n_s32(a, 16), vshrn_n_s32(b, 16)); ++ // Saturated add ++ return vreinterpretq_m128i_s16(vqaddq_s16(ab0246, ab1357)); ++#endif ++} ++ ++// Horizontally add adjacent pairs of signed 16-bit integers in a and b using ++// saturation, and pack the signed 16-bit results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadds_pi16 ++FORCE_INLINE __m64 _mm_hadds_pi16(__m64 _a, __m64 _b) ++{ ++ int16x4_t a = vreinterpret_s16_m64(_a); ++ int16x4_t b = vreinterpret_s16_m64(_b); ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpret_s64_s16(vqadd_s16(vuzp1_s16(a, b), vuzp2_s16(a, b))); ++#else ++ int16x4x2_t res = vuzp_s16(a, b); ++ return vreinterpret_s64_s16(vqadd_s16(res.val[0], res.val[1])); ++#endif ++} ++ ++// Horizontally subtract adjacent pairs of 16-bit integers in a and b, and pack ++// the signed 16-bit results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsub_epi16 ++FORCE_INLINE __m128i _mm_hsub_epi16(__m128i _a, __m128i _b) ++{ ++ int16x8_t a = vreinterpretq_s16_m128i(_a); ++ int16x8_t b = vreinterpretq_s16_m128i(_b); ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128i_s16( ++ vsubq_s16(vuzp1q_s16(a, b), vuzp2q_s16(a, b))); ++#else ++ int16x8x2_t c = vuzpq_s16(a, b); ++ return vreinterpretq_m128i_s16(vsubq_s16(c.val[0], c.val[1])); ++#endif ++} ++ ++// Horizontally subtract adjacent pairs of 32-bit integers in a and b, and pack ++// the signed 32-bit results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsub_epi32 ++FORCE_INLINE __m128i _mm_hsub_epi32(__m128i _a, __m128i _b) ++{ ++ int32x4_t a = vreinterpretq_s32_m128i(_a); ++ int32x4_t b = vreinterpretq_s32_m128i(_b); ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128i_s32( ++ vsubq_s32(vuzp1q_s32(a, b), vuzp2q_s32(a, b))); ++#else ++ int32x4x2_t c = vuzpq_s32(a, b); ++ return vreinterpretq_m128i_s32(vsubq_s32(c.val[0], c.val[1])); ++#endif ++} ++ ++// Horizontally subtract adjacent pairs of 16-bit integers in a and b, and pack ++// the signed 16-bit results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsub_pi16 ++FORCE_INLINE __m64 _mm_hsub_pi16(__m64 _a, __m64 _b) ++{ ++ int16x4_t a = vreinterpret_s16_m64(_a); ++ int16x4_t b = vreinterpret_s16_m64(_b); ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpret_m64_s16(vsub_s16(vuzp1_s16(a, b), vuzp2_s16(a, b))); ++#else ++ int16x4x2_t c = vuzp_s16(a, b); ++ return vreinterpret_m64_s16(vsub_s16(c.val[0], c.val[1])); ++#endif ++} ++ ++// Horizontally subtract adjacent pairs of 32-bit integers in a and b, and pack ++// the signed 32-bit results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_hsub_pi32 ++FORCE_INLINE __m64 _mm_hsub_pi32(__m64 _a, __m64 _b) ++{ ++ int32x2_t a = vreinterpret_s32_m64(_a); ++ int32x2_t b = vreinterpret_s32_m64(_b); ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpret_m64_s32(vsub_s32(vuzp1_s32(a, b), vuzp2_s32(a, b))); ++#else ++ int32x2x2_t c = vuzp_s32(a, b); ++ return vreinterpret_m64_s32(vsub_s32(c.val[0], c.val[1])); ++#endif ++} ++ ++// Horizontally subtract adjacent pairs of signed 16-bit integers in a and b ++// using saturation, and pack the signed 16-bit results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsubs_epi16 ++FORCE_INLINE __m128i _mm_hsubs_epi16(__m128i _a, __m128i _b) ++{ ++ int16x8_t a = vreinterpretq_s16_m128i(_a); ++ int16x8_t b = vreinterpretq_s16_m128i(_b); ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128i_s16( ++ vqsubq_s16(vuzp1q_s16(a, b), vuzp2q_s16(a, b))); ++#else ++ int16x8x2_t c = vuzpq_s16(a, b); ++ return vreinterpretq_m128i_s16(vqsubq_s16(c.val[0], c.val[1])); ++#endif ++} ++ ++// Horizontally subtract adjacent pairs of signed 16-bit integers in a and b ++// using saturation, and pack the signed 16-bit results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsubs_pi16 ++FORCE_INLINE __m64 _mm_hsubs_pi16(__m64 _a, __m64 _b) ++{ ++ int16x4_t a = vreinterpret_s16_m64(_a); ++ int16x4_t b = vreinterpret_s16_m64(_b); ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpret_m64_s16(vqsub_s16(vuzp1_s16(a, b), vuzp2_s16(a, b))); ++#else ++ int16x4x2_t c = vuzp_s16(a, b); ++ return vreinterpret_m64_s16(vqsub_s16(c.val[0], c.val[1])); ++#endif ++} ++ ++// Vertically multiply each unsigned 8-bit integer from a with the corresponding ++// signed 8-bit integer from b, producing intermediate signed 16-bit integers. ++// Horizontally add adjacent pairs of intermediate signed 16-bit integers, ++// and pack the saturated results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maddubs_epi16 ++FORCE_INLINE __m128i _mm_maddubs_epi16(__m128i _a, __m128i _b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ uint8x16_t a = vreinterpretq_u8_m128i(_a); ++ int8x16_t b = vreinterpretq_s8_m128i(_b); ++ int16x8_t tl = vmulq_s16(vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(a))), ++ vmovl_s8(vget_low_s8(b))); ++ int16x8_t th = vmulq_s16(vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(a))), ++ vmovl_s8(vget_high_s8(b))); ++ return vreinterpretq_m128i_s16( ++ vqaddq_s16(vuzp1q_s16(tl, th), vuzp2q_s16(tl, th))); ++#else ++ // This would be much simpler if x86 would choose to zero extend OR sign ++ // extend, not both. This could probably be optimized better. ++ uint16x8_t a = vreinterpretq_u16_m128i(_a); ++ int16x8_t b = vreinterpretq_s16_m128i(_b); ++ ++ // Zero extend a ++ int16x8_t a_odd = vreinterpretq_s16_u16(vshrq_n_u16(a, 8)); ++ int16x8_t a_even = vreinterpretq_s16_u16(vbicq_u16(a, vdupq_n_u16(0xff00))); ++ ++ // Sign extend by shifting left then shifting right. ++ int16x8_t b_even = vshrq_n_s16(vshlq_n_s16(b, 8), 8); ++ int16x8_t b_odd = vshrq_n_s16(b, 8); ++ ++ // multiply ++ int16x8_t prod1 = vmulq_s16(a_even, b_even); ++ int16x8_t prod2 = vmulq_s16(a_odd, b_odd); ++ ++ // saturated add ++ return vreinterpretq_m128i_s16(vqaddq_s16(prod1, prod2)); ++#endif ++} ++ ++// Vertically multiply each unsigned 8-bit integer from a with the corresponding ++// signed 8-bit integer from b, producing intermediate signed 16-bit integers. ++// Horizontally add adjacent pairs of intermediate signed 16-bit integers, and ++// pack the saturated results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maddubs_pi16 ++FORCE_INLINE __m64 _mm_maddubs_pi16(__m64 _a, __m64 _b) ++{ ++ uint16x4_t a = vreinterpret_u16_m64(_a); ++ int16x4_t b = vreinterpret_s16_m64(_b); ++ ++ // Zero extend a ++ int16x4_t a_odd = vreinterpret_s16_u16(vshr_n_u16(a, 8)); ++ int16x4_t a_even = vreinterpret_s16_u16(vand_u16(a, vdup_n_u16(0xff))); ++ ++ // Sign extend by shifting left then shifting right. ++ int16x4_t b_even = vshr_n_s16(vshl_n_s16(b, 8), 8); ++ int16x4_t b_odd = vshr_n_s16(b, 8); ++ ++ // multiply ++ int16x4_t prod1 = vmul_s16(a_even, b_even); ++ int16x4_t prod2 = vmul_s16(a_odd, b_odd); ++ ++ // saturated add ++ return vreinterpret_m64_s16(vqadd_s16(prod1, prod2)); ++} ++ ++// Multiply packed signed 16-bit integers in a and b, producing intermediate ++// signed 32-bit integers. Shift right by 15 bits while rounding up, and store ++// the packed 16-bit integers in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mulhrs_epi16 ++FORCE_INLINE __m128i _mm_mulhrs_epi16(__m128i a, __m128i b) ++{ ++ // Has issues due to saturation ++ // return vreinterpretq_m128i_s16(vqrdmulhq_s16(a, b)); ++ ++ // Multiply ++ int32x4_t mul_lo = vmull_s16(vget_low_s16(vreinterpretq_s16_m128i(a)), ++ vget_low_s16(vreinterpretq_s16_m128i(b))); ++ int32x4_t mul_hi = vmull_s16(vget_high_s16(vreinterpretq_s16_m128i(a)), ++ vget_high_s16(vreinterpretq_s16_m128i(b))); ++ ++ // Rounding narrowing shift right ++ // narrow = (int16_t)((mul + 16384) >> 15); ++ int16x4_t narrow_lo = vrshrn_n_s32(mul_lo, 15); ++ int16x4_t narrow_hi = vrshrn_n_s32(mul_hi, 15); ++ ++ // Join together ++ return vreinterpretq_m128i_s16(vcombine_s16(narrow_lo, narrow_hi)); ++} ++ ++// Multiply packed signed 16-bit integers in a and b, producing intermediate ++// signed 32-bit integers. Truncate each intermediate integer to the 18 most ++// significant bits, round by adding 1, and store bits [16:1] to dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mulhrs_pi16 ++FORCE_INLINE __m64 _mm_mulhrs_pi16(__m64 a, __m64 b) ++{ ++ int32x4_t mul_extend = ++ vmull_s16((vreinterpret_s16_m64(a)), (vreinterpret_s16_m64(b))); ++ ++ // Rounding narrowing shift right ++ return vreinterpret_m64_s16(vrshrn_n_s32(mul_extend, 15)); ++} ++ ++// Shuffle packed 8-bit integers in a according to shuffle control mask in the ++// corresponding 8-bit element of b, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_epi8 ++FORCE_INLINE __m128i _mm_shuffle_epi8(__m128i a, __m128i b) ++{ ++ int8x16_t tbl = vreinterpretq_s8_m128i(a); // input a ++ uint8x16_t idx = vreinterpretq_u8_m128i(b); // input b ++ uint8x16_t idx_masked = ++ vandq_u8(idx, vdupq_n_u8(0x8F)); // avoid using meaningless bits ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128i_s8(vqtbl1q_s8(tbl, idx_masked)); ++#elif defined(__GNUC__) ++ int8x16_t ret; ++ // %e and %f represent the even and odd D registers ++ // respectively. ++ __asm__ __volatile__( ++ "vtbl.8 %e[ret], {%e[tbl], %f[tbl]}, %e[idx]\n" ++ "vtbl.8 %f[ret], {%e[tbl], %f[tbl]}, %f[idx]\n" ++ : [ret] "=&w"(ret) ++ : [tbl] "w"(tbl), [idx] "w"(idx_masked)); ++ return vreinterpretq_m128i_s8(ret); ++#else ++ // use this line if testing on aarch64 ++ int8x8x2_t a_split = {vget_low_s8(tbl), vget_high_s8(tbl)}; ++ return vreinterpretq_m128i_s8( ++ vcombine_s8(vtbl2_s8(a_split, vget_low_u8(idx_masked)), ++ vtbl2_s8(a_split, vget_high_u8(idx_masked)))); ++#endif ++} ++ ++// Shuffle packed 8-bit integers in a according to shuffle control mask in the ++// corresponding 8-bit element of b, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_pi8 ++FORCE_INLINE __m64 _mm_shuffle_pi8(__m64 a, __m64 b) ++{ ++ const int8x8_t controlMask = ++ vand_s8(vreinterpret_s8_m64(b), vdup_n_s8((int8_t) (0x1 << 7 | 0x07))); ++ int8x8_t res = vtbl1_s8(vreinterpret_s8_m64(a), controlMask); ++ return vreinterpret_m64_s8(res); ++} ++ ++// Negate packed 16-bit integers in a when the corresponding signed ++// 16-bit integer in b is negative, and store the results in dst. ++// Element in dst are zeroed out when the corresponding element ++// in b is zero. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_epi16 ++FORCE_INLINE __m128i _mm_sign_epi16(__m128i _a, __m128i _b) ++{ ++ int16x8_t a = vreinterpretq_s16_m128i(_a); ++ int16x8_t b = vreinterpretq_s16_m128i(_b); ++ ++ // signed shift right: faster than vclt ++ // (b < 0) ? 0xFFFF : 0 ++ uint16x8_t ltMask = vreinterpretq_u16_s16(vshrq_n_s16(b, 15)); ++ // (b == 0) ? 0xFFFF : 0 ++#if defined(__aarch64__) || defined(_M_ARM64) ++ int16x8_t zeroMask = vreinterpretq_s16_u16(vceqzq_s16(b)); ++#else ++ int16x8_t zeroMask = vreinterpretq_s16_u16(vceqq_s16(b, vdupq_n_s16(0))); ++#endif ++ ++ // bitwise select either a or negative 'a' (vnegq_s16(a) equals to negative ++ // 'a') based on ltMask ++ int16x8_t masked = vbslq_s16(ltMask, vnegq_s16(a), a); ++ // res = masked & (~zeroMask) ++ int16x8_t res = vbicq_s16(masked, zeroMask); ++ return vreinterpretq_m128i_s16(res); ++} ++ ++// Negate packed 32-bit integers in a when the corresponding signed ++// 32-bit integer in b is negative, and store the results in dst. ++// Element in dst are zeroed out when the corresponding element ++// in b is zero. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_epi32 ++FORCE_INLINE __m128i _mm_sign_epi32(__m128i _a, __m128i _b) ++{ ++ int32x4_t a = vreinterpretq_s32_m128i(_a); ++ int32x4_t b = vreinterpretq_s32_m128i(_b); ++ ++ // signed shift right: faster than vclt ++ // (b < 0) ? 0xFFFFFFFF : 0 ++ uint32x4_t ltMask = vreinterpretq_u32_s32(vshrq_n_s32(b, 31)); ++ ++ // (b == 0) ? 0xFFFFFFFF : 0 ++#if defined(__aarch64__) || defined(_M_ARM64) ++ int32x4_t zeroMask = vreinterpretq_s32_u32(vceqzq_s32(b)); ++#else ++ int32x4_t zeroMask = vreinterpretq_s32_u32(vceqq_s32(b, vdupq_n_s32(0))); ++#endif ++ ++ // bitwise select either a or negative 'a' (vnegq_s32(a) equals to negative ++ // 'a') based on ltMask ++ int32x4_t masked = vbslq_s32(ltMask, vnegq_s32(a), a); ++ // res = masked & (~zeroMask) ++ int32x4_t res = vbicq_s32(masked, zeroMask); ++ return vreinterpretq_m128i_s32(res); ++} ++ ++// Negate packed 8-bit integers in a when the corresponding signed ++// 8-bit integer in b is negative, and store the results in dst. ++// Element in dst are zeroed out when the corresponding element ++// in b is zero. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_epi8 ++FORCE_INLINE __m128i _mm_sign_epi8(__m128i _a, __m128i _b) ++{ ++ int8x16_t a = vreinterpretq_s8_m128i(_a); ++ int8x16_t b = vreinterpretq_s8_m128i(_b); ++ ++ // signed shift right: faster than vclt ++ // (b < 0) ? 0xFF : 0 ++ uint8x16_t ltMask = vreinterpretq_u8_s8(vshrq_n_s8(b, 7)); ++ ++ // (b == 0) ? 0xFF : 0 ++#if defined(__aarch64__) || defined(_M_ARM64) ++ int8x16_t zeroMask = vreinterpretq_s8_u8(vceqzq_s8(b)); ++#else ++ int8x16_t zeroMask = vreinterpretq_s8_u8(vceqq_s8(b, vdupq_n_s8(0))); ++#endif ++ ++ // bitwise select either a or negative 'a' (vnegq_s8(a) return negative 'a') ++ // based on ltMask ++ int8x16_t masked = vbslq_s8(ltMask, vnegq_s8(a), a); ++ // res = masked & (~zeroMask) ++ int8x16_t res = vbicq_s8(masked, zeroMask); ++ ++ return vreinterpretq_m128i_s8(res); ++} ++ ++// Negate packed 16-bit integers in a when the corresponding signed 16-bit ++// integer in b is negative, and store the results in dst. Element in dst are ++// zeroed out when the corresponding element in b is zero. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_pi16 ++FORCE_INLINE __m64 _mm_sign_pi16(__m64 _a, __m64 _b) ++{ ++ int16x4_t a = vreinterpret_s16_m64(_a); ++ int16x4_t b = vreinterpret_s16_m64(_b); ++ ++ // signed shift right: faster than vclt ++ // (b < 0) ? 0xFFFF : 0 ++ uint16x4_t ltMask = vreinterpret_u16_s16(vshr_n_s16(b, 15)); ++ ++ // (b == 0) ? 0xFFFF : 0 ++#if defined(__aarch64__) || defined(_M_ARM64) ++ int16x4_t zeroMask = vreinterpret_s16_u16(vceqz_s16(b)); ++#else ++ int16x4_t zeroMask = vreinterpret_s16_u16(vceq_s16(b, vdup_n_s16(0))); ++#endif ++ ++ // bitwise select either a or negative 'a' (vneg_s16(a) return negative 'a') ++ // based on ltMask ++ int16x4_t masked = vbsl_s16(ltMask, vneg_s16(a), a); ++ // res = masked & (~zeroMask) ++ int16x4_t res = vbic_s16(masked, zeroMask); ++ ++ return vreinterpret_m64_s16(res); ++} ++ ++// Negate packed 32-bit integers in a when the corresponding signed 32-bit ++// integer in b is negative, and store the results in dst. Element in dst are ++// zeroed out when the corresponding element in b is zero. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_pi32 ++FORCE_INLINE __m64 _mm_sign_pi32(__m64 _a, __m64 _b) ++{ ++ int32x2_t a = vreinterpret_s32_m64(_a); ++ int32x2_t b = vreinterpret_s32_m64(_b); ++ ++ // signed shift right: faster than vclt ++ // (b < 0) ? 0xFFFFFFFF : 0 ++ uint32x2_t ltMask = vreinterpret_u32_s32(vshr_n_s32(b, 31)); ++ ++ // (b == 0) ? 0xFFFFFFFF : 0 ++#if defined(__aarch64__) || defined(_M_ARM64) ++ int32x2_t zeroMask = vreinterpret_s32_u32(vceqz_s32(b)); ++#else ++ int32x2_t zeroMask = vreinterpret_s32_u32(vceq_s32(b, vdup_n_s32(0))); ++#endif ++ ++ // bitwise select either a or negative 'a' (vneg_s32(a) return negative 'a') ++ // based on ltMask ++ int32x2_t masked = vbsl_s32(ltMask, vneg_s32(a), a); ++ // res = masked & (~zeroMask) ++ int32x2_t res = vbic_s32(masked, zeroMask); ++ ++ return vreinterpret_m64_s32(res); ++} ++ ++// Negate packed 8-bit integers in a when the corresponding signed 8-bit integer ++// in b is negative, and store the results in dst. Element in dst are zeroed out ++// when the corresponding element in b is zero. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_pi8 ++FORCE_INLINE __m64 _mm_sign_pi8(__m64 _a, __m64 _b) ++{ ++ int8x8_t a = vreinterpret_s8_m64(_a); ++ int8x8_t b = vreinterpret_s8_m64(_b); ++ ++ // signed shift right: faster than vclt ++ // (b < 0) ? 0xFF : 0 ++ uint8x8_t ltMask = vreinterpret_u8_s8(vshr_n_s8(b, 7)); ++ ++ // (b == 0) ? 0xFF : 0 ++#if defined(__aarch64__) || defined(_M_ARM64) ++ int8x8_t zeroMask = vreinterpret_s8_u8(vceqz_s8(b)); ++#else ++ int8x8_t zeroMask = vreinterpret_s8_u8(vceq_s8(b, vdup_n_s8(0))); ++#endif ++ ++ // bitwise select either a or negative 'a' (vneg_s8(a) return negative 'a') ++ // based on ltMask ++ int8x8_t masked = vbsl_s8(ltMask, vneg_s8(a), a); ++ // res = masked & (~zeroMask) ++ int8x8_t res = vbic_s8(masked, zeroMask); ++ ++ return vreinterpret_m64_s8(res); ++} ++ ++/* SSE4.1 */ ++ ++// Blend packed 16-bit integers from a and b using control mask imm8, and store ++// the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blend_epi16 ++// FORCE_INLINE __m128i _mm_blend_epi16(__m128i a, __m128i b, ++// __constrange(0,255) int imm) ++#define _mm_blend_epi16(a, b, imm) \ ++ _sse2neon_define2( \ ++ __m128i, a, b, \ ++ const uint16_t _mask[8] = \ ++ _sse2neon_init(((imm) & (1 << 0)) ? (uint16_t) -1 : 0x0, \ ++ ((imm) & (1 << 1)) ? (uint16_t) -1 : 0x0, \ ++ ((imm) & (1 << 2)) ? (uint16_t) -1 : 0x0, \ ++ ((imm) & (1 << 3)) ? (uint16_t) -1 : 0x0, \ ++ ((imm) & (1 << 4)) ? (uint16_t) -1 : 0x0, \ ++ ((imm) & (1 << 5)) ? (uint16_t) -1 : 0x0, \ ++ ((imm) & (1 << 6)) ? (uint16_t) -1 : 0x0, \ ++ ((imm) & (1 << 7)) ? (uint16_t) -1 : 0x0); \ ++ uint16x8_t _mask_vec = vld1q_u16(_mask); \ ++ uint16x8_t __a = vreinterpretq_u16_m128i(_a); \ ++ uint16x8_t __b = vreinterpretq_u16_m128i(_b); _sse2neon_return( \ ++ vreinterpretq_m128i_u16(vbslq_u16(_mask_vec, __b, __a)));) ++ ++// Blend packed double-precision (64-bit) floating-point elements from a and b ++// using control mask imm8, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blend_pd ++#define _mm_blend_pd(a, b, imm) \ ++ _sse2neon_define2( \ ++ __m128d, a, b, \ ++ const uint64_t _mask[2] = \ ++ _sse2neon_init(((imm) & (1 << 0)) ? ~UINT64_C(0) : UINT64_C(0), \ ++ ((imm) & (1 << 1)) ? ~UINT64_C(0) : UINT64_C(0)); \ ++ uint64x2_t _mask_vec = vld1q_u64(_mask); \ ++ uint64x2_t __a = vreinterpretq_u64_m128d(_a); \ ++ uint64x2_t __b = vreinterpretq_u64_m128d(_b); _sse2neon_return( \ ++ vreinterpretq_m128d_u64(vbslq_u64(_mask_vec, __b, __a)));) ++ ++// Blend packed single-precision (32-bit) floating-point elements from a and b ++// using mask, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blend_ps ++FORCE_INLINE __m128 _mm_blend_ps(__m128 _a, __m128 _b, const char imm8) ++{ ++ const uint32_t ALIGN_STRUCT(16) ++ data[4] = {((imm8) & (1 << 0)) ? UINT32_MAX : 0, ++ ((imm8) & (1 << 1)) ? UINT32_MAX : 0, ++ ((imm8) & (1 << 2)) ? UINT32_MAX : 0, ++ ((imm8) & (1 << 3)) ? UINT32_MAX : 0}; ++ uint32x4_t mask = vld1q_u32(data); ++ float32x4_t a = vreinterpretq_f32_m128(_a); ++ float32x4_t b = vreinterpretq_f32_m128(_b); ++ return vreinterpretq_m128_f32(vbslq_f32(mask, b, a)); ++} ++ ++// Blend packed 8-bit integers from a and b using mask, and store the results in ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blendv_epi8 ++FORCE_INLINE __m128i _mm_blendv_epi8(__m128i _a, __m128i _b, __m128i _mask) ++{ ++ // Use a signed shift right to create a mask with the sign bit ++ uint8x16_t mask = ++ vreinterpretq_u8_s8(vshrq_n_s8(vreinterpretq_s8_m128i(_mask), 7)); ++ uint8x16_t a = vreinterpretq_u8_m128i(_a); ++ uint8x16_t b = vreinterpretq_u8_m128i(_b); ++ return vreinterpretq_m128i_u8(vbslq_u8(mask, b, a)); ++} ++ ++// Blend packed double-precision (64-bit) floating-point elements from a and b ++// using mask, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blendv_pd ++FORCE_INLINE __m128d _mm_blendv_pd(__m128d _a, __m128d _b, __m128d _mask) ++{ ++ uint64x2_t mask = ++ vreinterpretq_u64_s64(vshrq_n_s64(vreinterpretq_s64_m128d(_mask), 63)); ++#if defined(__aarch64__) || defined(_M_ARM64) ++ float64x2_t a = vreinterpretq_f64_m128d(_a); ++ float64x2_t b = vreinterpretq_f64_m128d(_b); ++ return vreinterpretq_m128d_f64(vbslq_f64(mask, b, a)); ++#else ++ uint64x2_t a = vreinterpretq_u64_m128d(_a); ++ uint64x2_t b = vreinterpretq_u64_m128d(_b); ++ return vreinterpretq_m128d_u64(vbslq_u64(mask, b, a)); ++#endif ++} ++ ++// Blend packed single-precision (32-bit) floating-point elements from a and b ++// using mask, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blendv_ps ++FORCE_INLINE __m128 _mm_blendv_ps(__m128 _a, __m128 _b, __m128 _mask) ++{ ++ // Use a signed shift right to create a mask with the sign bit ++ uint32x4_t mask = ++ vreinterpretq_u32_s32(vshrq_n_s32(vreinterpretq_s32_m128(_mask), 31)); ++ float32x4_t a = vreinterpretq_f32_m128(_a); ++ float32x4_t b = vreinterpretq_f32_m128(_b); ++ return vreinterpretq_m128_f32(vbslq_f32(mask, b, a)); ++} ++ ++// Round the packed double-precision (64-bit) floating-point elements in a up ++// to an integer value, and store the results as packed double-precision ++// floating-point elements in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_ceil_pd ++FORCE_INLINE __m128d _mm_ceil_pd(__m128d a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64(vrndpq_f64(vreinterpretq_f64_m128d(a))); ++#else ++ double *f = (double *) &a; ++ return _mm_set_pd(ceil(f[1]), ceil(f[0])); ++#endif ++} ++ ++// Round the packed single-precision (32-bit) floating-point elements in a up to ++// an integer value, and store the results as packed single-precision ++// floating-point elements in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_ceil_ps ++FORCE_INLINE __m128 _mm_ceil_ps(__m128 a) ++{ ++#if (defined(__aarch64__) || defined(_M_ARM64)) || \ ++ defined(__ARM_FEATURE_DIRECTED_ROUNDING) ++ return vreinterpretq_m128_f32(vrndpq_f32(vreinterpretq_f32_m128(a))); ++#else ++ float *f = (float *) &a; ++ return _mm_set_ps(ceilf(f[3]), ceilf(f[2]), ceilf(f[1]), ceilf(f[0])); ++#endif ++} ++ ++// Round the lower double-precision (64-bit) floating-point element in b up to ++// an integer value, store the result as a double-precision floating-point ++// element in the lower element of dst, and copy the upper element from a to the ++// upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_ceil_sd ++FORCE_INLINE __m128d _mm_ceil_sd(__m128d a, __m128d b) ++{ ++ return _mm_move_sd(a, _mm_ceil_pd(b)); ++} ++ ++// Round the lower single-precision (32-bit) floating-point element in b up to ++// an integer value, store the result as a single-precision floating-point ++// element in the lower element of dst, and copy the upper 3 packed elements ++// from a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_ceil_ss ++FORCE_INLINE __m128 _mm_ceil_ss(__m128 a, __m128 b) ++{ ++ return _mm_move_ss(a, _mm_ceil_ps(b)); ++} ++ ++// Compare packed 64-bit integers in a and b for equality, and store the results ++// in dst ++FORCE_INLINE __m128i _mm_cmpeq_epi64(__m128i a, __m128i b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128i_u64( ++ vceqq_u64(vreinterpretq_u64_m128i(a), vreinterpretq_u64_m128i(b))); ++#else ++ // ARMv7 lacks vceqq_u64 ++ // (a == b) -> (a_lo == b_lo) && (a_hi == b_hi) ++ uint32x4_t cmp = ++ vceqq_u32(vreinterpretq_u32_m128i(a), vreinterpretq_u32_m128i(b)); ++ uint32x4_t swapped = vrev64q_u32(cmp); ++ return vreinterpretq_m128i_u32(vandq_u32(cmp, swapped)); ++#endif ++} ++ ++// Sign extend packed 16-bit integers in a to packed 32-bit integers, and store ++// the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi16_epi32 ++FORCE_INLINE __m128i _mm_cvtepi16_epi32(__m128i a) ++{ ++ return vreinterpretq_m128i_s32( ++ vmovl_s16(vget_low_s16(vreinterpretq_s16_m128i(a)))); ++} ++ ++// Sign extend packed 16-bit integers in a to packed 64-bit integers, and store ++// the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi16_epi64 ++FORCE_INLINE __m128i _mm_cvtepi16_epi64(__m128i a) ++{ ++ int16x8_t s16x8 = vreinterpretq_s16_m128i(a); /* xxxx xxxx xxxx 0B0A */ ++ int32x4_t s32x4 = vmovl_s16(vget_low_s16(s16x8)); /* 000x 000x 000B 000A */ ++ int64x2_t s64x2 = vmovl_s32(vget_low_s32(s32x4)); /* 0000 000B 0000 000A */ ++ return vreinterpretq_m128i_s64(s64x2); ++} ++ ++// Sign extend packed 32-bit integers in a to packed 64-bit integers, and store ++// the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi32_epi64 ++FORCE_INLINE __m128i _mm_cvtepi32_epi64(__m128i a) ++{ ++ return vreinterpretq_m128i_s64( ++ vmovl_s32(vget_low_s32(vreinterpretq_s32_m128i(a)))); ++} ++ ++// Sign extend packed 8-bit integers in a to packed 16-bit integers, and store ++// the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi8_epi16 ++FORCE_INLINE __m128i _mm_cvtepi8_epi16(__m128i a) ++{ ++ int8x16_t s8x16 = vreinterpretq_s8_m128i(a); /* xxxx xxxx xxxx DCBA */ ++ int16x8_t s16x8 = vmovl_s8(vget_low_s8(s8x16)); /* 0x0x 0x0x 0D0C 0B0A */ ++ return vreinterpretq_m128i_s16(s16x8); ++} ++ ++// Sign extend packed 8-bit integers in a to packed 32-bit integers, and store ++// the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi8_epi32 ++FORCE_INLINE __m128i _mm_cvtepi8_epi32(__m128i a) ++{ ++ int8x16_t s8x16 = vreinterpretq_s8_m128i(a); /* xxxx xxxx xxxx DCBA */ ++ int16x8_t s16x8 = vmovl_s8(vget_low_s8(s8x16)); /* 0x0x 0x0x 0D0C 0B0A */ ++ int32x4_t s32x4 = vmovl_s16(vget_low_s16(s16x8)); /* 000D 000C 000B 000A */ ++ return vreinterpretq_m128i_s32(s32x4); ++} ++ ++// Sign extend packed 8-bit integers in the low 8 bytes of a to packed 64-bit ++// integers, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi8_epi64 ++FORCE_INLINE __m128i _mm_cvtepi8_epi64(__m128i a) ++{ ++ int8x16_t s8x16 = vreinterpretq_s8_m128i(a); /* xxxx xxxx xxxx xxBA */ ++ int16x8_t s16x8 = vmovl_s8(vget_low_s8(s8x16)); /* 0x0x 0x0x 0x0x 0B0A */ ++ int32x4_t s32x4 = vmovl_s16(vget_low_s16(s16x8)); /* 000x 000x 000B 000A */ ++ int64x2_t s64x2 = vmovl_s32(vget_low_s32(s32x4)); /* 0000 000B 0000 000A */ ++ return vreinterpretq_m128i_s64(s64x2); ++} ++ ++// Zero extend packed unsigned 16-bit integers in a to packed 32-bit integers, ++// and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu16_epi32 ++FORCE_INLINE __m128i _mm_cvtepu16_epi32(__m128i a) ++{ ++ return vreinterpretq_m128i_u32( ++ vmovl_u16(vget_low_u16(vreinterpretq_u16_m128i(a)))); ++} ++ ++// Zero extend packed unsigned 16-bit integers in a to packed 64-bit integers, ++// and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu16_epi64 ++FORCE_INLINE __m128i _mm_cvtepu16_epi64(__m128i a) ++{ ++ uint16x8_t u16x8 = vreinterpretq_u16_m128i(a); /* xxxx xxxx xxxx 0B0A */ ++ uint32x4_t u32x4 = vmovl_u16(vget_low_u16(u16x8)); /* 000x 000x 000B 000A */ ++ uint64x2_t u64x2 = vmovl_u32(vget_low_u32(u32x4)); /* 0000 000B 0000 000A */ ++ return vreinterpretq_m128i_u64(u64x2); ++} ++ ++// Zero extend packed unsigned 32-bit integers in a to packed 64-bit integers, ++// and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu32_epi64 ++FORCE_INLINE __m128i _mm_cvtepu32_epi64(__m128i a) ++{ ++ return vreinterpretq_m128i_u64( ++ vmovl_u32(vget_low_u32(vreinterpretq_u32_m128i(a)))); ++} ++ ++// Zero extend packed unsigned 8-bit integers in a to packed 16-bit integers, ++// and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu8_epi16 ++FORCE_INLINE __m128i _mm_cvtepu8_epi16(__m128i a) ++{ ++ uint8x16_t u8x16 = vreinterpretq_u8_m128i(a); /* xxxx xxxx HGFE DCBA */ ++ uint16x8_t u16x8 = vmovl_u8(vget_low_u8(u8x16)); /* 0H0G 0F0E 0D0C 0B0A */ ++ return vreinterpretq_m128i_u16(u16x8); ++} ++ ++// Zero extend packed unsigned 8-bit integers in a to packed 32-bit integers, ++// and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu8_epi32 ++FORCE_INLINE __m128i _mm_cvtepu8_epi32(__m128i a) ++{ ++ uint8x16_t u8x16 = vreinterpretq_u8_m128i(a); /* xxxx xxxx xxxx DCBA */ ++ uint16x8_t u16x8 = vmovl_u8(vget_low_u8(u8x16)); /* 0x0x 0x0x 0D0C 0B0A */ ++ uint32x4_t u32x4 = vmovl_u16(vget_low_u16(u16x8)); /* 000D 000C 000B 000A */ ++ return vreinterpretq_m128i_u32(u32x4); ++} ++ ++// Zero extend packed unsigned 8-bit integers in the low 8 bytes of a to packed ++// 64-bit integers, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu8_epi64 ++FORCE_INLINE __m128i _mm_cvtepu8_epi64(__m128i a) ++{ ++ uint8x16_t u8x16 = vreinterpretq_u8_m128i(a); /* xxxx xxxx xxxx xxBA */ ++ uint16x8_t u16x8 = vmovl_u8(vget_low_u8(u8x16)); /* 0x0x 0x0x 0x0x 0B0A */ ++ uint32x4_t u32x4 = vmovl_u16(vget_low_u16(u16x8)); /* 000x 000x 000B 000A */ ++ uint64x2_t u64x2 = vmovl_u32(vget_low_u32(u32x4)); /* 0000 000B 0000 000A */ ++ return vreinterpretq_m128i_u64(u64x2); ++} ++ ++// Conditionally multiply the packed double-precision (64-bit) floating-point ++// elements in a and b using the high 4 bits in imm8, sum the four products, and ++// conditionally store the sum in dst using the low 4 bits of imm8. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_dp_pd ++FORCE_INLINE __m128d _mm_dp_pd(__m128d a, __m128d b, const int imm) ++{ ++ // Generate mask value from constant immediate bit value ++ const int64_t bit0Mask = imm & 0x01 ? UINT64_MAX : 0; ++ const int64_t bit1Mask = imm & 0x02 ? UINT64_MAX : 0; ++#if !SSE2NEON_PRECISE_DP ++ const int64_t bit4Mask = imm & 0x10 ? UINT64_MAX : 0; ++ const int64_t bit5Mask = imm & 0x20 ? UINT64_MAX : 0; ++#endif ++ // Conditional multiplication ++#if !SSE2NEON_PRECISE_DP ++ __m128d mul = _mm_mul_pd(a, b); ++ const __m128d mulMask = ++ _mm_castsi128_pd(_mm_set_epi64x(bit5Mask, bit4Mask)); ++ __m128d tmp = _mm_and_pd(mul, mulMask); ++#else ++#if defined(__aarch64__) || defined(_M_ARM64) ++ double d0 = (imm & 0x10) ? vgetq_lane_f64(vreinterpretq_f64_m128d(a), 0) * ++ vgetq_lane_f64(vreinterpretq_f64_m128d(b), 0) ++ : 0; ++ double d1 = (imm & 0x20) ? vgetq_lane_f64(vreinterpretq_f64_m128d(a), 1) * ++ vgetq_lane_f64(vreinterpretq_f64_m128d(b), 1) ++ : 0; ++#else ++ double d0 = (imm & 0x10) ? ((double *) &a)[0] * ((double *) &b)[0] : 0; ++ double d1 = (imm & 0x20) ? ((double *) &a)[1] * ((double *) &b)[1] : 0; ++#endif ++ __m128d tmp = _mm_set_pd(d1, d0); ++#endif ++ // Sum the products ++#if defined(__aarch64__) || defined(_M_ARM64) ++ double sum = vpaddd_f64(vreinterpretq_f64_m128d(tmp)); ++#else ++ double sum = *((double *) &tmp) + *(((double *) &tmp) + 1); ++#endif ++ // Conditionally store the sum ++ const __m128d sumMask = ++ _mm_castsi128_pd(_mm_set_epi64x(bit1Mask, bit0Mask)); ++ __m128d res = _mm_and_pd(_mm_set_pd1(sum), sumMask); ++ return res; ++} ++ ++// Conditionally multiply the packed single-precision (32-bit) floating-point ++// elements in a and b using the high 4 bits in imm8, sum the four products, ++// and conditionally store the sum in dst using the low 4 bits of imm. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_dp_ps ++FORCE_INLINE __m128 _mm_dp_ps(__m128 a, __m128 b, const int imm) ++{ ++ float32x4_t elementwise_prod = _mm_mul_ps(a, b); ++ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ /* shortcuts */ ++ if (imm == 0xFF) { ++ return _mm_set1_ps(vaddvq_f32(elementwise_prod)); ++ } ++ ++ if ((imm & 0x0F) == 0x0F) { ++ if (!(imm & (1 << 4))) ++ elementwise_prod = vsetq_lane_f32(0.0f, elementwise_prod, 0); ++ if (!(imm & (1 << 5))) ++ elementwise_prod = vsetq_lane_f32(0.0f, elementwise_prod, 1); ++ if (!(imm & (1 << 6))) ++ elementwise_prod = vsetq_lane_f32(0.0f, elementwise_prod, 2); ++ if (!(imm & (1 << 7))) ++ elementwise_prod = vsetq_lane_f32(0.0f, elementwise_prod, 3); ++ ++ return _mm_set1_ps(vaddvq_f32(elementwise_prod)); ++ } ++#endif ++ ++ float s = 0.0f; ++ ++ if (imm & (1 << 4)) ++ s += vgetq_lane_f32(elementwise_prod, 0); ++ if (imm & (1 << 5)) ++ s += vgetq_lane_f32(elementwise_prod, 1); ++ if (imm & (1 << 6)) ++ s += vgetq_lane_f32(elementwise_prod, 2); ++ if (imm & (1 << 7)) ++ s += vgetq_lane_f32(elementwise_prod, 3); ++ ++ const float32_t res[4] = { ++ (imm & 0x1) ? s : 0.0f, ++ (imm & 0x2) ? s : 0.0f, ++ (imm & 0x4) ? s : 0.0f, ++ (imm & 0x8) ? s : 0.0f, ++ }; ++ return vreinterpretq_m128_f32(vld1q_f32(res)); ++} ++ ++// Extract a 32-bit integer from a, selected with imm8, and store the result in ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_epi32 ++// FORCE_INLINE int _mm_extract_epi32(__m128i a, __constrange(0,4) int imm) ++#define _mm_extract_epi32(a, imm) \ ++ vgetq_lane_s32(vreinterpretq_s32_m128i(a), (imm)) ++ ++// Extract a 64-bit integer from a, selected with imm8, and store the result in ++// dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_epi64 ++// FORCE_INLINE __int64 _mm_extract_epi64(__m128i a, __constrange(0,2) int imm) ++#define _mm_extract_epi64(a, imm) \ ++ vgetq_lane_s64(vreinterpretq_s64_m128i(a), (imm)) ++ ++// Extract an 8-bit integer from a, selected with imm8, and store the result in ++// the lower element of dst. FORCE_INLINE int _mm_extract_epi8(__m128i a, ++// __constrange(0,16) int imm) ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_epi8 ++#define _mm_extract_epi8(a, imm) vgetq_lane_u8(vreinterpretq_u8_m128i(a), (imm)) ++ ++// Extracts the selected single-precision (32-bit) floating-point from a. ++// FORCE_INLINE int _mm_extract_ps(__m128 a, __constrange(0,4) int imm) ++#define _mm_extract_ps(a, imm) vgetq_lane_s32(vreinterpretq_s32_m128(a), (imm)) ++ ++// Round the packed double-precision (64-bit) floating-point elements in a down ++// to an integer value, and store the results as packed double-precision ++// floating-point elements in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_floor_pd ++FORCE_INLINE __m128d _mm_floor_pd(__m128d a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128d_f64(vrndmq_f64(vreinterpretq_f64_m128d(a))); ++#else ++ double *f = (double *) &a; ++ return _mm_set_pd(floor(f[1]), floor(f[0])); ++#endif ++} ++ ++// Round the packed single-precision (32-bit) floating-point elements in a down ++// to an integer value, and store the results as packed single-precision ++// floating-point elements in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_floor_ps ++FORCE_INLINE __m128 _mm_floor_ps(__m128 a) ++{ ++#if (defined(__aarch64__) || defined(_M_ARM64)) || \ ++ defined(__ARM_FEATURE_DIRECTED_ROUNDING) ++ return vreinterpretq_m128_f32(vrndmq_f32(vreinterpretq_f32_m128(a))); ++#else ++ float *f = (float *) &a; ++ return _mm_set_ps(floorf(f[3]), floorf(f[2]), floorf(f[1]), floorf(f[0])); ++#endif ++} ++ ++// Round the lower double-precision (64-bit) floating-point element in b down to ++// an integer value, store the result as a double-precision floating-point ++// element in the lower element of dst, and copy the upper element from a to the ++// upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_floor_sd ++FORCE_INLINE __m128d _mm_floor_sd(__m128d a, __m128d b) ++{ ++ return _mm_move_sd(a, _mm_floor_pd(b)); ++} ++ ++// Round the lower single-precision (32-bit) floating-point element in b down to ++// an integer value, store the result as a single-precision floating-point ++// element in the lower element of dst, and copy the upper 3 packed elements ++// from a to the upper elements of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_floor_ss ++FORCE_INLINE __m128 _mm_floor_ss(__m128 a, __m128 b) ++{ ++ return _mm_move_ss(a, _mm_floor_ps(b)); ++} ++ ++// Copy a to dst, and insert the 32-bit integer i into dst at the location ++// specified by imm8. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_epi32 ++// FORCE_INLINE __m128i _mm_insert_epi32(__m128i a, int b, ++// __constrange(0,4) int imm) ++#define _mm_insert_epi32(a, b, imm) \ ++ vreinterpretq_m128i_s32( \ ++ vsetq_lane_s32((b), vreinterpretq_s32_m128i(a), (imm))) ++ ++// Copy a to dst, and insert the 64-bit integer i into dst at the location ++// specified by imm8. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_epi64 ++// FORCE_INLINE __m128i _mm_insert_epi64(__m128i a, __int64 b, ++// __constrange(0,2) int imm) ++#define _mm_insert_epi64(a, b, imm) \ ++ vreinterpretq_m128i_s64( \ ++ vsetq_lane_s64((b), vreinterpretq_s64_m128i(a), (imm))) ++ ++// Copy a to dst, and insert the lower 8-bit integer from i into dst at the ++// location specified by imm8. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_epi8 ++// FORCE_INLINE __m128i _mm_insert_epi8(__m128i a, int b, ++// __constrange(0,16) int imm) ++#define _mm_insert_epi8(a, b, imm) \ ++ vreinterpretq_m128i_s8(vsetq_lane_s8((b), vreinterpretq_s8_m128i(a), (imm))) ++ ++// Copy a to tmp, then insert a single-precision (32-bit) floating-point ++// element from b into tmp using the control in imm8. Store tmp to dst using ++// the mask in imm8 (elements are zeroed out when the corresponding bit is set). ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=insert_ps ++#define _mm_insert_ps(a, b, imm8) \ ++ _sse2neon_define2( \ ++ __m128, a, b, \ ++ float32x4_t tmp1 = \ ++ vsetq_lane_f32(vgetq_lane_f32(_b, (imm8 >> 6) & 0x3), \ ++ vreinterpretq_f32_m128(_a), 0); \ ++ float32x4_t tmp2 = \ ++ vsetq_lane_f32(vgetq_lane_f32(tmp1, 0), \ ++ vreinterpretq_f32_m128(_a), ((imm8 >> 4) & 0x3)); \ ++ const uint32_t data[4] = \ ++ _sse2neon_init(((imm8) & (1 << 0)) ? UINT32_MAX : 0, \ ++ ((imm8) & (1 << 1)) ? UINT32_MAX : 0, \ ++ ((imm8) & (1 << 2)) ? UINT32_MAX : 0, \ ++ ((imm8) & (1 << 3)) ? UINT32_MAX : 0); \ ++ uint32x4_t mask = vld1q_u32(data); \ ++ float32x4_t all_zeros = vdupq_n_f32(0); \ ++ \ ++ _sse2neon_return(vreinterpretq_m128_f32( \ ++ vbslq_f32(mask, all_zeros, vreinterpretq_f32_m128(tmp2))));) ++ ++// Compare packed signed 32-bit integers in a and b, and store packed maximum ++// values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epi32 ++FORCE_INLINE __m128i _mm_max_epi32(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s32( ++ vmaxq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); ++} ++ ++// Compare packed signed 8-bit integers in a and b, and store packed maximum ++// values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epi8 ++FORCE_INLINE __m128i _mm_max_epi8(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s8( ++ vmaxq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); ++} ++ ++// Compare packed unsigned 16-bit integers in a and b, and store packed maximum ++// values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epu16 ++FORCE_INLINE __m128i _mm_max_epu16(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u16( ++ vmaxq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); ++} ++ ++// Compare packed unsigned 32-bit integers in a and b, and store packed maximum ++// values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epu32 ++FORCE_INLINE __m128i _mm_max_epu32(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u32( ++ vmaxq_u32(vreinterpretq_u32_m128i(a), vreinterpretq_u32_m128i(b))); ++} ++ ++// Compare packed signed 32-bit integers in a and b, and store packed minimum ++// values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_epi32 ++FORCE_INLINE __m128i _mm_min_epi32(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s32( ++ vminq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); ++} ++ ++// Compare packed signed 8-bit integers in a and b, and store packed minimum ++// values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_epi8 ++FORCE_INLINE __m128i _mm_min_epi8(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s8( ++ vminq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); ++} ++ ++// Compare packed unsigned 16-bit integers in a and b, and store packed minimum ++// values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_epu16 ++FORCE_INLINE __m128i _mm_min_epu16(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u16( ++ vminq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); ++} ++ ++// Compare packed unsigned 32-bit integers in a and b, and store packed minimum ++// values in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epu32 ++FORCE_INLINE __m128i _mm_min_epu32(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u32( ++ vminq_u32(vreinterpretq_u32_m128i(a), vreinterpretq_u32_m128i(b))); ++} ++ ++// Horizontally compute the minimum amongst the packed unsigned 16-bit integers ++// in a, store the minimum and index in dst, and zero the remaining bits in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_minpos_epu16 ++FORCE_INLINE __m128i _mm_minpos_epu16(__m128i a) ++{ ++ __m128i dst; ++ uint16_t min, idx = 0; ++#if defined(__aarch64__) || defined(_M_ARM64) ++ // Find the minimum value ++ min = vminvq_u16(vreinterpretq_u16_m128i(a)); ++ ++ // Get the index of the minimum value ++ static const uint16_t idxv[] = {0, 1, 2, 3, 4, 5, 6, 7}; ++ uint16x8_t minv = vdupq_n_u16(min); ++ uint16x8_t cmeq = vceqq_u16(minv, vreinterpretq_u16_m128i(a)); ++ idx = vminvq_u16(vornq_u16(vld1q_u16(idxv), cmeq)); ++#else ++ // Find the minimum value ++ __m64 tmp; ++ tmp = vreinterpret_m64_u16( ++ vmin_u16(vget_low_u16(vreinterpretq_u16_m128i(a)), ++ vget_high_u16(vreinterpretq_u16_m128i(a)))); ++ tmp = vreinterpret_m64_u16( ++ vpmin_u16(vreinterpret_u16_m64(tmp), vreinterpret_u16_m64(tmp))); ++ tmp = vreinterpret_m64_u16( ++ vpmin_u16(vreinterpret_u16_m64(tmp), vreinterpret_u16_m64(tmp))); ++ min = vget_lane_u16(vreinterpret_u16_m64(tmp), 0); ++ // Get the index of the minimum value ++ int i; ++ for (i = 0; i < 8; i++) { ++ if (min == vgetq_lane_u16(vreinterpretq_u16_m128i(a), 0)) { ++ idx = (uint16_t) i; ++ break; ++ } ++ a = _mm_srli_si128(a, 2); ++ } ++#endif ++ // Generate result ++ dst = _mm_setzero_si128(); ++ dst = vreinterpretq_m128i_u16( ++ vsetq_lane_u16(min, vreinterpretq_u16_m128i(dst), 0)); ++ dst = vreinterpretq_m128i_u16( ++ vsetq_lane_u16(idx, vreinterpretq_u16_m128i(dst), 1)); ++ return dst; ++} ++ ++// Compute the sum of absolute differences (SADs) of quadruplets of unsigned ++// 8-bit integers in a compared to those in b, and store the 16-bit results in ++// dst. Eight SADs are performed using one quadruplet from b and eight ++// quadruplets from a. One quadruplet is selected from b starting at on the ++// offset specified in imm8. Eight quadruplets are formed from sequential 8-bit ++// integers selected from a starting at the offset specified in imm8. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mpsadbw_epu8 ++FORCE_INLINE __m128i _mm_mpsadbw_epu8(__m128i a, __m128i b, const int imm) ++{ ++ uint8x16_t _a, _b; ++ ++ switch (imm & 0x4) { ++ case 0: ++ // do nothing ++ _a = vreinterpretq_u8_m128i(a); ++ break; ++ case 4: ++ _a = vreinterpretq_u8_u32(vextq_u32(vreinterpretq_u32_m128i(a), ++ vreinterpretq_u32_m128i(a), 1)); ++ break; ++ default: ++#if defined(__GNUC__) || defined(__clang__) ++ __builtin_unreachable(); ++#elif defined(_MSC_VER) ++ __assume(0); ++#endif ++ break; ++ } ++ ++ switch (imm & 0x3) { ++ case 0: ++ _b = vreinterpretq_u8_u32( ++ vdupq_n_u32(vgetq_lane_u32(vreinterpretq_u32_m128i(b), 0))); ++ break; ++ case 1: ++ _b = vreinterpretq_u8_u32( ++ vdupq_n_u32(vgetq_lane_u32(vreinterpretq_u32_m128i(b), 1))); ++ break; ++ case 2: ++ _b = vreinterpretq_u8_u32( ++ vdupq_n_u32(vgetq_lane_u32(vreinterpretq_u32_m128i(b), 2))); ++ break; ++ case 3: ++ _b = vreinterpretq_u8_u32( ++ vdupq_n_u32(vgetq_lane_u32(vreinterpretq_u32_m128i(b), 3))); ++ break; ++ default: ++#if defined(__GNUC__) || defined(__clang__) ++ __builtin_unreachable(); ++#elif defined(_MSC_VER) ++ __assume(0); ++#endif ++ break; ++ } ++ ++ int16x8_t c04, c15, c26, c37; ++ uint8x8_t low_b = vget_low_u8(_b); ++ c04 = vreinterpretq_s16_u16(vabdl_u8(vget_low_u8(_a), low_b)); ++ uint8x16_t _a_1 = vextq_u8(_a, _a, 1); ++ c15 = vreinterpretq_s16_u16(vabdl_u8(vget_low_u8(_a_1), low_b)); ++ uint8x16_t _a_2 = vextq_u8(_a, _a, 2); ++ c26 = vreinterpretq_s16_u16(vabdl_u8(vget_low_u8(_a_2), low_b)); ++ uint8x16_t _a_3 = vextq_u8(_a, _a, 3); ++ c37 = vreinterpretq_s16_u16(vabdl_u8(vget_low_u8(_a_3), low_b)); ++#if defined(__aarch64__) || defined(_M_ARM64) ++ // |0|4|2|6| ++ c04 = vpaddq_s16(c04, c26); ++ // |1|5|3|7| ++ c15 = vpaddq_s16(c15, c37); ++ ++ int32x4_t trn1_c = ++ vtrn1q_s32(vreinterpretq_s32_s16(c04), vreinterpretq_s32_s16(c15)); ++ int32x4_t trn2_c = ++ vtrn2q_s32(vreinterpretq_s32_s16(c04), vreinterpretq_s32_s16(c15)); ++ return vreinterpretq_m128i_s16(vpaddq_s16(vreinterpretq_s16_s32(trn1_c), ++ vreinterpretq_s16_s32(trn2_c))); ++#else ++ int16x4_t c01, c23, c45, c67; ++ c01 = vpadd_s16(vget_low_s16(c04), vget_low_s16(c15)); ++ c23 = vpadd_s16(vget_low_s16(c26), vget_low_s16(c37)); ++ c45 = vpadd_s16(vget_high_s16(c04), vget_high_s16(c15)); ++ c67 = vpadd_s16(vget_high_s16(c26), vget_high_s16(c37)); ++ ++ return vreinterpretq_m128i_s16( ++ vcombine_s16(vpadd_s16(c01, c23), vpadd_s16(c45, c67))); ++#endif ++} ++ ++// Multiply the low signed 32-bit integers from each packed 64-bit element in ++// a and b, and store the signed 64-bit results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_epi32 ++FORCE_INLINE __m128i _mm_mul_epi32(__m128i a, __m128i b) ++{ ++ // vmull_s32 upcasts instead of masking, so we downcast. ++ int32x2_t a_lo = vmovn_s64(vreinterpretq_s64_m128i(a)); ++ int32x2_t b_lo = vmovn_s64(vreinterpretq_s64_m128i(b)); ++ return vreinterpretq_m128i_s64(vmull_s32(a_lo, b_lo)); ++} ++ ++// Multiply the packed 32-bit integers in a and b, producing intermediate 64-bit ++// integers, and store the low 32 bits of the intermediate integers in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mullo_epi32 ++FORCE_INLINE __m128i _mm_mullo_epi32(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_s32( ++ vmulq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); ++} ++ ++// Convert packed signed 32-bit integers from a and b to packed 16-bit integers ++// using unsigned saturation, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_packus_epi32 ++FORCE_INLINE __m128i _mm_packus_epi32(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u16( ++ vcombine_u16(vqmovun_s32(vreinterpretq_s32_m128i(a)), ++ vqmovun_s32(vreinterpretq_s32_m128i(b)))); ++} ++ ++// Round the packed double-precision (64-bit) floating-point elements in a using ++// the rounding parameter, and store the results as packed double-precision ++// floating-point elements in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_round_pd ++FORCE_INLINE_OPTNONE __m128d _mm_round_pd(__m128d a, int rounding) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ switch (rounding) { ++ case (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC): ++ return vreinterpretq_m128d_f64(vrndnq_f64(vreinterpretq_f64_m128d(a))); ++ case (_MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC): ++ return _mm_floor_pd(a); ++ case (_MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC): ++ return _mm_ceil_pd(a); ++ case (_MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC): ++ return vreinterpretq_m128d_f64(vrndq_f64(vreinterpretq_f64_m128d(a))); ++ default: //_MM_FROUND_CUR_DIRECTION ++ return vreinterpretq_m128d_f64(vrndiq_f64(vreinterpretq_f64_m128d(a))); ++ } ++#else ++ double *v_double = (double *) &a; ++ ++ if (rounding == (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC) || ++ (rounding == _MM_FROUND_CUR_DIRECTION && ++ _MM_GET_ROUNDING_MODE() == _MM_ROUND_NEAREST)) { ++ double res[2], tmp; ++ for (int i = 0; i < 2; i++) { ++ tmp = (v_double[i] < 0) ? -v_double[i] : v_double[i]; ++ double roundDown = floor(tmp); // Round down value ++ double roundUp = ceil(tmp); // Round up value ++ double diffDown = tmp - roundDown; ++ double diffUp = roundUp - tmp; ++ if (diffDown < diffUp) { ++ /* If it's closer to the round down value, then use it */ ++ res[i] = roundDown; ++ } else if (diffDown > diffUp) { ++ /* If it's closer to the round up value, then use it */ ++ res[i] = roundUp; ++ } else { ++ /* If it's equidistant between round up and round down value, ++ * pick the one which is an even number */ ++ double half = roundDown / 2; ++ if (half != floor(half)) { ++ /* If the round down value is odd, return the round up value ++ */ ++ res[i] = roundUp; ++ } else { ++ /* If the round up value is odd, return the round down value ++ */ ++ res[i] = roundDown; ++ } ++ } ++ res[i] = (v_double[i] < 0) ? -res[i] : res[i]; ++ } ++ return _mm_set_pd(res[1], res[0]); ++ } else if (rounding == (_MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC) || ++ (rounding == _MM_FROUND_CUR_DIRECTION && ++ _MM_GET_ROUNDING_MODE() == _MM_ROUND_DOWN)) { ++ return _mm_floor_pd(a); ++ } else if (rounding == (_MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC) || ++ (rounding == _MM_FROUND_CUR_DIRECTION && ++ _MM_GET_ROUNDING_MODE() == _MM_ROUND_UP)) { ++ return _mm_ceil_pd(a); ++ } ++ return _mm_set_pd(v_double[1] > 0 ? floor(v_double[1]) : ceil(v_double[1]), ++ v_double[0] > 0 ? floor(v_double[0]) : ceil(v_double[0])); ++#endif ++} ++ ++// Round the packed single-precision (32-bit) floating-point elements in a using ++// the rounding parameter, and store the results as packed single-precision ++// floating-point elements in dst. ++// software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_round_ps ++FORCE_INLINE_OPTNONE __m128 _mm_round_ps(__m128 a, int rounding) ++{ ++#if (defined(__aarch64__) || defined(_M_ARM64)) || \ ++ defined(__ARM_FEATURE_DIRECTED_ROUNDING) ++ switch (rounding) { ++ case (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC): ++ return vreinterpretq_m128_f32(vrndnq_f32(vreinterpretq_f32_m128(a))); ++ case (_MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC): ++ return _mm_floor_ps(a); ++ case (_MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC): ++ return _mm_ceil_ps(a); ++ case (_MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC): ++ return vreinterpretq_m128_f32(vrndq_f32(vreinterpretq_f32_m128(a))); ++ default: //_MM_FROUND_CUR_DIRECTION ++ return vreinterpretq_m128_f32(vrndiq_f32(vreinterpretq_f32_m128(a))); ++ } ++#else ++ float *v_float = (float *) &a; ++ ++ if (rounding == (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC) || ++ (rounding == _MM_FROUND_CUR_DIRECTION && ++ _MM_GET_ROUNDING_MODE() == _MM_ROUND_NEAREST)) { ++ uint32x4_t signmask = vdupq_n_u32(0x80000000); ++ float32x4_t half = vbslq_f32(signmask, vreinterpretq_f32_m128(a), ++ vdupq_n_f32(0.5f)); /* +/- 0.5 */ ++ int32x4_t r_normal = vcvtq_s32_f32(vaddq_f32( ++ vreinterpretq_f32_m128(a), half)); /* round to integer: [a + 0.5]*/ ++ int32x4_t r_trunc = vcvtq_s32_f32( ++ vreinterpretq_f32_m128(a)); /* truncate to integer: [a] */ ++ int32x4_t plusone = vreinterpretq_s32_u32(vshrq_n_u32( ++ vreinterpretq_u32_s32(vnegq_s32(r_trunc)), 31)); /* 1 or 0 */ ++ int32x4_t r_even = vbicq_s32(vaddq_s32(r_trunc, plusone), ++ vdupq_n_s32(1)); /* ([a] + {0,1}) & ~1 */ ++ float32x4_t delta = vsubq_f32( ++ vreinterpretq_f32_m128(a), ++ vcvtq_f32_s32(r_trunc)); /* compute delta: delta = (a - [a]) */ ++ uint32x4_t is_delta_half = ++ vceqq_f32(delta, half); /* delta == +/- 0.5 */ ++ return vreinterpretq_m128_f32( ++ vcvtq_f32_s32(vbslq_s32(is_delta_half, r_even, r_normal))); ++ } else if (rounding == (_MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC) || ++ (rounding == _MM_FROUND_CUR_DIRECTION && ++ _MM_GET_ROUNDING_MODE() == _MM_ROUND_DOWN)) { ++ return _mm_floor_ps(a); ++ } else if (rounding == (_MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC) || ++ (rounding == _MM_FROUND_CUR_DIRECTION && ++ _MM_GET_ROUNDING_MODE() == _MM_ROUND_UP)) { ++ return _mm_ceil_ps(a); ++ } ++ return _mm_set_ps(v_float[3] > 0 ? floorf(v_float[3]) : ceilf(v_float[3]), ++ v_float[2] > 0 ? floorf(v_float[2]) : ceilf(v_float[2]), ++ v_float[1] > 0 ? floorf(v_float[1]) : ceilf(v_float[1]), ++ v_float[0] > 0 ? floorf(v_float[0]) : ceilf(v_float[0])); ++#endif ++} ++ ++// Round the lower double-precision (64-bit) floating-point element in b using ++// the rounding parameter, store the result as a double-precision floating-point ++// element in the lower element of dst, and copy the upper element from a to the ++// upper element of dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_round_sd ++FORCE_INLINE __m128d _mm_round_sd(__m128d a, __m128d b, int rounding) ++{ ++ return _mm_move_sd(a, _mm_round_pd(b, rounding)); ++} ++ ++// Round the lower single-precision (32-bit) floating-point element in b using ++// the rounding parameter, store the result as a single-precision floating-point ++// element in the lower element of dst, and copy the upper 3 packed elements ++// from a to the upper elements of dst. Rounding is done according to the ++// rounding[3:0] parameter, which can be one of: ++// (_MM_FROUND_TO_NEAREST_INT |_MM_FROUND_NO_EXC) // round to nearest, and ++// suppress exceptions ++// (_MM_FROUND_TO_NEG_INF |_MM_FROUND_NO_EXC) // round down, and ++// suppress exceptions ++// (_MM_FROUND_TO_POS_INF |_MM_FROUND_NO_EXC) // round up, and suppress ++// exceptions ++// (_MM_FROUND_TO_ZERO |_MM_FROUND_NO_EXC) // truncate, and suppress ++// exceptions _MM_FROUND_CUR_DIRECTION // use MXCSR.RC; see ++// _MM_SET_ROUNDING_MODE ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_round_ss ++FORCE_INLINE __m128 _mm_round_ss(__m128 a, __m128 b, int rounding) ++{ ++ return _mm_move_ss(a, _mm_round_ps(b, rounding)); ++} ++ ++// Load 128-bits of integer data from memory into dst using a non-temporal ++// memory hint. mem_addr must be aligned on a 16-byte boundary or a ++// general-protection exception may be generated. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_load_si128 ++FORCE_INLINE __m128i _mm_stream_load_si128(__m128i *p) ++{ ++#if __has_builtin(__builtin_nontemporal_store) ++ return __builtin_nontemporal_load(p); ++#else ++ return vreinterpretq_m128i_s64(vld1q_s64((int64_t *) p)); ++#endif ++} ++ ++// Compute the bitwise NOT of a and then AND with a 128-bit vector containing ++// all 1's, and return 1 if the result is zero, otherwise return 0. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_test_all_ones ++FORCE_INLINE int _mm_test_all_ones(__m128i a) ++{ ++ return (uint64_t) (vgetq_lane_s64(a, 0) & vgetq_lane_s64(a, 1)) == ++ ~(uint64_t) 0; ++} ++ ++// Compute the bitwise AND of 128 bits (representing integer data) in a and ++// mask, and return 1 if the result is zero, otherwise return 0. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_test_all_zeros ++FORCE_INLINE int _mm_test_all_zeros(__m128i a, __m128i mask) ++{ ++ int64x2_t a_and_mask = ++ vandq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(mask)); ++ return !(vgetq_lane_s64(a_and_mask, 0) | vgetq_lane_s64(a_and_mask, 1)); ++} ++ ++// Compute the bitwise AND of 128 bits (representing integer data) in a and ++// mask, and set ZF to 1 if the result is zero, otherwise set ZF to 0. Compute ++// the bitwise NOT of a and then AND with mask, and set CF to 1 if the result is ++// zero, otherwise set CF to 0. Return 1 if both the ZF and CF values are zero, ++// otherwise return 0. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_test_mix_ones_zero ++// Note: Argument names may be wrong in the Intel intrinsics guide. ++FORCE_INLINE int _mm_test_mix_ones_zeros(__m128i a, __m128i mask) ++{ ++ uint64x2_t v = vreinterpretq_u64_m128i(a); ++ uint64x2_t m = vreinterpretq_u64_m128i(mask); ++ ++ // find ones (set-bits) and zeros (clear-bits) under clip mask ++ uint64x2_t ones = vandq_u64(m, v); ++ uint64x2_t zeros = vbicq_u64(m, v); ++ ++ // If both 128-bit variables are populated (non-zero) then return 1. ++ // For comparison purposes, first compact each var down to 32-bits. ++ uint32x2_t reduced = vpmax_u32(vqmovn_u64(ones), vqmovn_u64(zeros)); ++ ++ // if folding minimum is non-zero then both vars must be non-zero ++ return (vget_lane_u32(vpmin_u32(reduced, reduced), 0) != 0); ++} ++ ++// Compute the bitwise AND of 128 bits (representing integer data) in a and b, ++// and set ZF to 1 if the result is zero, otherwise set ZF to 0. Compute the ++// bitwise NOT of a and then AND with b, and set CF to 1 if the result is zero, ++// otherwise set CF to 0. Return the CF value. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_testc_si128 ++FORCE_INLINE int _mm_testc_si128(__m128i a, __m128i b) ++{ ++ int64x2_t s64 = ++ vbicq_s64(vreinterpretq_s64_m128i(b), vreinterpretq_s64_m128i(a)); ++ return !(vgetq_lane_s64(s64, 0) | vgetq_lane_s64(s64, 1)); ++} ++ ++// Compute the bitwise AND of 128 bits (representing integer data) in a and b, ++// and set ZF to 1 if the result is zero, otherwise set ZF to 0. Compute the ++// bitwise NOT of a and then AND with b, and set CF to 1 if the result is zero, ++// otherwise set CF to 0. Return 1 if both the ZF and CF values are zero, ++// otherwise return 0. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_testnzc_si128 ++#define _mm_testnzc_si128(a, b) _mm_test_mix_ones_zeros(a, b) ++ ++// Compute the bitwise AND of 128 bits (representing integer data) in a and b, ++// and set ZF to 1 if the result is zero, otherwise set ZF to 0. Compute the ++// bitwise NOT of a and then AND with b, and set CF to 1 if the result is zero, ++// otherwise set CF to 0. Return the ZF value. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_testz_si128 ++FORCE_INLINE int _mm_testz_si128(__m128i a, __m128i b) ++{ ++ int64x2_t s64 = ++ vandq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b)); ++ return !(vgetq_lane_s64(s64, 0) | vgetq_lane_s64(s64, 1)); ++} ++ ++/* SSE4.2 */ ++ ++static const uint16_t ALIGN_STRUCT(16) _sse2neon_cmpestr_mask16b[8] = { ++ 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, ++}; ++static const uint8_t ALIGN_STRUCT(16) _sse2neon_cmpestr_mask8b[16] = { ++ 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, ++ 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, ++}; ++ ++/* specify the source data format */ ++#define _SIDD_UBYTE_OPS 0x00 /* unsigned 8-bit characters */ ++#define _SIDD_UWORD_OPS 0x01 /* unsigned 16-bit characters */ ++#define _SIDD_SBYTE_OPS 0x02 /* signed 8-bit characters */ ++#define _SIDD_SWORD_OPS 0x03 /* signed 16-bit characters */ ++ ++/* specify the comparison operation */ ++#define _SIDD_CMP_EQUAL_ANY 0x00 /* compare equal any: strchr */ ++#define _SIDD_CMP_RANGES 0x04 /* compare ranges */ ++#define _SIDD_CMP_EQUAL_EACH 0x08 /* compare equal each: strcmp */ ++#define _SIDD_CMP_EQUAL_ORDERED 0x0C /* compare equal ordered */ ++ ++/* specify the polarity */ ++#define _SIDD_POSITIVE_POLARITY 0x00 ++#define _SIDD_MASKED_POSITIVE_POLARITY 0x20 ++#define _SIDD_NEGATIVE_POLARITY 0x10 /* negate results */ ++#define _SIDD_MASKED_NEGATIVE_POLARITY \ ++ 0x30 /* negate results only before end of string */ ++ ++/* specify the output selection in _mm_cmpXstri */ ++#define _SIDD_LEAST_SIGNIFICANT 0x00 ++#define _SIDD_MOST_SIGNIFICANT 0x40 ++ ++/* specify the output selection in _mm_cmpXstrm */ ++#define _SIDD_BIT_MASK 0x00 ++#define _SIDD_UNIT_MASK 0x40 ++ ++/* Pattern Matching for C macros. ++ * https://github.com/pfultz2/Cloak/wiki/C-Preprocessor-tricks,-tips,-and-idioms ++ */ ++ ++/* catenate */ ++#define SSE2NEON_PRIMITIVE_CAT(a, ...) a##__VA_ARGS__ ++#define SSE2NEON_CAT(a, b) SSE2NEON_PRIMITIVE_CAT(a, b) ++ ++#define SSE2NEON_IIF(c) SSE2NEON_PRIMITIVE_CAT(SSE2NEON_IIF_, c) ++/* run the 2nd parameter */ ++#define SSE2NEON_IIF_0(t, ...) __VA_ARGS__ ++/* run the 1st parameter */ ++#define SSE2NEON_IIF_1(t, ...) t ++ ++#define SSE2NEON_COMPL(b) SSE2NEON_PRIMITIVE_CAT(SSE2NEON_COMPL_, b) ++#define SSE2NEON_COMPL_0 1 ++#define SSE2NEON_COMPL_1 0 ++ ++#define SSE2NEON_DEC(x) SSE2NEON_PRIMITIVE_CAT(SSE2NEON_DEC_, x) ++#define SSE2NEON_DEC_1 0 ++#define SSE2NEON_DEC_2 1 ++#define SSE2NEON_DEC_3 2 ++#define SSE2NEON_DEC_4 3 ++#define SSE2NEON_DEC_5 4 ++#define SSE2NEON_DEC_6 5 ++#define SSE2NEON_DEC_7 6 ++#define SSE2NEON_DEC_8 7 ++#define SSE2NEON_DEC_9 8 ++#define SSE2NEON_DEC_10 9 ++#define SSE2NEON_DEC_11 10 ++#define SSE2NEON_DEC_12 11 ++#define SSE2NEON_DEC_13 12 ++#define SSE2NEON_DEC_14 13 ++#define SSE2NEON_DEC_15 14 ++#define SSE2NEON_DEC_16 15 ++ ++/* detection */ ++#define SSE2NEON_CHECK_N(x, n, ...) n ++#define SSE2NEON_CHECK(...) SSE2NEON_CHECK_N(__VA_ARGS__, 0, ) ++#define SSE2NEON_PROBE(x) x, 1, ++ ++#define SSE2NEON_NOT(x) SSE2NEON_CHECK(SSE2NEON_PRIMITIVE_CAT(SSE2NEON_NOT_, x)) ++#define SSE2NEON_NOT_0 SSE2NEON_PROBE(~) ++ ++#define SSE2NEON_BOOL(x) SSE2NEON_COMPL(SSE2NEON_NOT(x)) ++#define SSE2NEON_IF(c) SSE2NEON_IIF(SSE2NEON_BOOL(c)) ++ ++#define SSE2NEON_EAT(...) ++#define SSE2NEON_EXPAND(...) __VA_ARGS__ ++#define SSE2NEON_WHEN(c) SSE2NEON_IF(c)(SSE2NEON_EXPAND, SSE2NEON_EAT) ++ ++/* recursion */ ++/* deferred expression */ ++#define SSE2NEON_EMPTY() ++#define SSE2NEON_DEFER(id) id SSE2NEON_EMPTY() ++#define SSE2NEON_OBSTRUCT(...) __VA_ARGS__ SSE2NEON_DEFER(SSE2NEON_EMPTY)() ++#define SSE2NEON_EXPAND(...) __VA_ARGS__ ++ ++#define SSE2NEON_EVAL(...) \ ++ SSE2NEON_EVAL1(SSE2NEON_EVAL1(SSE2NEON_EVAL1(__VA_ARGS__))) ++#define SSE2NEON_EVAL1(...) \ ++ SSE2NEON_EVAL2(SSE2NEON_EVAL2(SSE2NEON_EVAL2(__VA_ARGS__))) ++#define SSE2NEON_EVAL2(...) \ ++ SSE2NEON_EVAL3(SSE2NEON_EVAL3(SSE2NEON_EVAL3(__VA_ARGS__))) ++#define SSE2NEON_EVAL3(...) __VA_ARGS__ ++ ++#define SSE2NEON_REPEAT(count, macro, ...) \ ++ SSE2NEON_WHEN(count) \ ++ (SSE2NEON_OBSTRUCT(SSE2NEON_REPEAT_INDIRECT)()( \ ++ SSE2NEON_DEC(count), macro, \ ++ __VA_ARGS__) SSE2NEON_OBSTRUCT(macro)(SSE2NEON_DEC(count), \ ++ __VA_ARGS__)) ++#define SSE2NEON_REPEAT_INDIRECT() SSE2NEON_REPEAT ++ ++#define SSE2NEON_SIZE_OF_byte 8 ++#define SSE2NEON_NUMBER_OF_LANES_byte 16 ++#define SSE2NEON_SIZE_OF_word 16 ++#define SSE2NEON_NUMBER_OF_LANES_word 8 ++ ++#define SSE2NEON_COMPARE_EQUAL_THEN_FILL_LANE(i, type) \ ++ mtx[i] = vreinterpretq_m128i_##type(vceqq_##type( \ ++ vdupq_n_##type(vgetq_lane_##type(vreinterpretq_##type##_m128i(b), i)), \ ++ vreinterpretq_##type##_m128i(a))); ++ ++#define SSE2NEON_FILL_LANE(i, type) \ ++ vec_b[i] = \ ++ vdupq_n_##type(vgetq_lane_##type(vreinterpretq_##type##_m128i(b), i)); ++ ++#define PCMPSTR_RANGES(a, b, mtx, data_type_prefix, type_prefix, size, \ ++ number_of_lanes, byte_or_word) \ ++ do { \ ++ SSE2NEON_CAT( \ ++ data_type_prefix, \ ++ SSE2NEON_CAT(size, \ ++ SSE2NEON_CAT(x, SSE2NEON_CAT(number_of_lanes, _t)))) \ ++ vec_b[number_of_lanes]; \ ++ __m128i mask = SSE2NEON_IIF(byte_or_word)( \ ++ vreinterpretq_m128i_u16(vdupq_n_u16(0xff)), \ ++ vreinterpretq_m128i_u32(vdupq_n_u32(0xffff))); \ ++ SSE2NEON_EVAL(SSE2NEON_REPEAT(number_of_lanes, SSE2NEON_FILL_LANE, \ ++ SSE2NEON_CAT(type_prefix, size))) \ ++ for (int i = 0; i < number_of_lanes; i++) { \ ++ mtx[i] = SSE2NEON_CAT(vreinterpretq_m128i_u, \ ++ size)(SSE2NEON_CAT(vbslq_u, size)( \ ++ SSE2NEON_CAT(vreinterpretq_u, \ ++ SSE2NEON_CAT(size, _m128i))(mask), \ ++ SSE2NEON_CAT(vcgeq_, SSE2NEON_CAT(type_prefix, size))( \ ++ vec_b[i], \ ++ SSE2NEON_CAT( \ ++ vreinterpretq_, \ ++ SSE2NEON_CAT(type_prefix, \ ++ SSE2NEON_CAT(size, _m128i(a))))), \ ++ SSE2NEON_CAT(vcleq_, SSE2NEON_CAT(type_prefix, size))( \ ++ vec_b[i], \ ++ SSE2NEON_CAT( \ ++ vreinterpretq_, \ ++ SSE2NEON_CAT(type_prefix, \ ++ SSE2NEON_CAT(size, _m128i(a))))))); \ ++ } \ ++ } while (0) ++ ++#define PCMPSTR_EQ(a, b, mtx, size, number_of_lanes) \ ++ do { \ ++ SSE2NEON_EVAL(SSE2NEON_REPEAT(number_of_lanes, \ ++ SSE2NEON_COMPARE_EQUAL_THEN_FILL_LANE, \ ++ SSE2NEON_CAT(u, size))) \ ++ } while (0) ++ ++#define SSE2NEON_CMP_EQUAL_ANY_IMPL(type) \ ++ static int _sse2neon_cmp_##type##_equal_any(__m128i a, int la, __m128i b, \ ++ int lb) \ ++ { \ ++ __m128i mtx[16]; \ ++ PCMPSTR_EQ(a, b, mtx, SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ ++ SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, type)); \ ++ return SSE2NEON_CAT( \ ++ _sse2neon_aggregate_equal_any_, \ ++ SSE2NEON_CAT( \ ++ SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ ++ SSE2NEON_CAT(x, SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, \ ++ type))))(la, lb, mtx); \ ++ } ++ ++#define SSE2NEON_CMP_RANGES_IMPL(type, data_type, us, byte_or_word) \ ++ static int _sse2neon_cmp_##us##type##_ranges(__m128i a, int la, __m128i b, \ ++ int lb) \ ++ { \ ++ __m128i mtx[16]; \ ++ PCMPSTR_RANGES( \ ++ a, b, mtx, data_type, us, SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ ++ SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, type), byte_or_word); \ ++ return SSE2NEON_CAT( \ ++ _sse2neon_aggregate_ranges_, \ ++ SSE2NEON_CAT( \ ++ SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ ++ SSE2NEON_CAT(x, SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, \ ++ type))))(la, lb, mtx); \ ++ } ++ ++#define SSE2NEON_CMP_EQUAL_ORDERED_IMPL(type) \ ++ static int _sse2neon_cmp_##type##_equal_ordered(__m128i a, int la, \ ++ __m128i b, int lb) \ ++ { \ ++ __m128i mtx[16]; \ ++ PCMPSTR_EQ(a, b, mtx, SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ ++ SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, type)); \ ++ return SSE2NEON_CAT( \ ++ _sse2neon_aggregate_equal_ordered_, \ ++ SSE2NEON_CAT( \ ++ SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ ++ SSE2NEON_CAT(x, \ ++ SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, type))))( \ ++ SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, type), la, lb, mtx); \ ++ } ++ ++static int _sse2neon_aggregate_equal_any_8x16(int la, int lb, __m128i mtx[16]) ++{ ++ int res = 0; ++ int m = (1 << la) - 1; ++ uint8x8_t vec_mask = vld1_u8(_sse2neon_cmpestr_mask8b); ++ uint8x8_t t_lo = vtst_u8(vdup_n_u8(m & 0xff), vec_mask); ++ uint8x8_t t_hi = vtst_u8(vdup_n_u8(m >> 8), vec_mask); ++ uint8x16_t vec = vcombine_u8(t_lo, t_hi); ++ for (int j = 0; j < lb; j++) { ++ mtx[j] = vreinterpretq_m128i_u8( ++ vandq_u8(vec, vreinterpretq_u8_m128i(mtx[j]))); ++ mtx[j] = vreinterpretq_m128i_u8( ++ vshrq_n_u8(vreinterpretq_u8_m128i(mtx[j]), 7)); ++ int tmp = _sse2neon_vaddvq_u8(vreinterpretq_u8_m128i(mtx[j])) ? 1 : 0; ++ res |= (tmp << j); ++ } ++ return res; ++} ++ ++static int _sse2neon_aggregate_equal_any_16x8(int la, int lb, __m128i mtx[16]) ++{ ++ int res = 0; ++ int m = (1 << la) - 1; ++ uint16x8_t vec = ++ vtstq_u16(vdupq_n_u16(m), vld1q_u16(_sse2neon_cmpestr_mask16b)); ++ for (int j = 0; j < lb; j++) { ++ mtx[j] = vreinterpretq_m128i_u16( ++ vandq_u16(vec, vreinterpretq_u16_m128i(mtx[j]))); ++ mtx[j] = vreinterpretq_m128i_u16( ++ vshrq_n_u16(vreinterpretq_u16_m128i(mtx[j]), 15)); ++ int tmp = _sse2neon_vaddvq_u16(vreinterpretq_u16_m128i(mtx[j])) ? 1 : 0; ++ res |= (tmp << j); ++ } ++ return res; ++} ++ ++/* clang-format off */ ++#define SSE2NEON_GENERATE_CMP_EQUAL_ANY(prefix) \ ++ prefix##IMPL(byte) \ ++ prefix##IMPL(word) ++/* clang-format on */ ++ ++SSE2NEON_GENERATE_CMP_EQUAL_ANY(SSE2NEON_CMP_EQUAL_ANY_) ++ ++static int _sse2neon_aggregate_ranges_16x8(int la, int lb, __m128i mtx[16]) ++{ ++ int res = 0; ++ int m = (1 << la) - 1; ++ uint16x8_t vec = ++ vtstq_u16(vdupq_n_u16(m), vld1q_u16(_sse2neon_cmpestr_mask16b)); ++ for (int j = 0; j < lb; j++) { ++ mtx[j] = vreinterpretq_m128i_u16( ++ vandq_u16(vec, vreinterpretq_u16_m128i(mtx[j]))); ++ mtx[j] = vreinterpretq_m128i_u16( ++ vshrq_n_u16(vreinterpretq_u16_m128i(mtx[j]), 15)); ++ __m128i tmp = vreinterpretq_m128i_u32( ++ vshrq_n_u32(vreinterpretq_u32_m128i(mtx[j]), 16)); ++ uint32x4_t vec_res = vandq_u32(vreinterpretq_u32_m128i(mtx[j]), ++ vreinterpretq_u32_m128i(tmp)); ++#if defined(__aarch64__) || defined(_M_ARM64) ++ int t = vaddvq_u32(vec_res) ? 1 : 0; ++#else ++ uint64x2_t sumh = vpaddlq_u32(vec_res); ++ int t = vgetq_lane_u64(sumh, 0) + vgetq_lane_u64(sumh, 1); ++#endif ++ res |= (t << j); ++ } ++ return res; ++} ++ ++static int _sse2neon_aggregate_ranges_8x16(int la, int lb, __m128i mtx[16]) ++{ ++ int res = 0; ++ int m = (1 << la) - 1; ++ uint8x8_t vec_mask = vld1_u8(_sse2neon_cmpestr_mask8b); ++ uint8x8_t t_lo = vtst_u8(vdup_n_u8(m & 0xff), vec_mask); ++ uint8x8_t t_hi = vtst_u8(vdup_n_u8(m >> 8), vec_mask); ++ uint8x16_t vec = vcombine_u8(t_lo, t_hi); ++ for (int j = 0; j < lb; j++) { ++ mtx[j] = vreinterpretq_m128i_u8( ++ vandq_u8(vec, vreinterpretq_u8_m128i(mtx[j]))); ++ mtx[j] = vreinterpretq_m128i_u8( ++ vshrq_n_u8(vreinterpretq_u8_m128i(mtx[j]), 7)); ++ __m128i tmp = vreinterpretq_m128i_u16( ++ vshrq_n_u16(vreinterpretq_u16_m128i(mtx[j]), 8)); ++ uint16x8_t vec_res = vandq_u16(vreinterpretq_u16_m128i(mtx[j]), ++ vreinterpretq_u16_m128i(tmp)); ++ int t = _sse2neon_vaddvq_u16(vec_res) ? 1 : 0; ++ res |= (t << j); ++ } ++ return res; ++} ++ ++#define SSE2NEON_CMP_RANGES_IS_BYTE 1 ++#define SSE2NEON_CMP_RANGES_IS_WORD 0 ++ ++/* clang-format off */ ++#define SSE2NEON_GENERATE_CMP_RANGES(prefix) \ ++ prefix##IMPL(byte, uint, u, prefix##IS_BYTE) \ ++ prefix##IMPL(byte, int, s, prefix##IS_BYTE) \ ++ prefix##IMPL(word, uint, u, prefix##IS_WORD) \ ++ prefix##IMPL(word, int, s, prefix##IS_WORD) ++/* clang-format on */ ++ ++SSE2NEON_GENERATE_CMP_RANGES(SSE2NEON_CMP_RANGES_) ++ ++#undef SSE2NEON_CMP_RANGES_IS_BYTE ++#undef SSE2NEON_CMP_RANGES_IS_WORD ++ ++static int _sse2neon_cmp_byte_equal_each(__m128i a, int la, __m128i b, int lb) ++{ ++ uint8x16_t mtx = ++ vceqq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b)); ++ int m0 = (la < lb) ? 0 : ((1 << la) - (1 << lb)); ++ int m1 = 0x10000 - (1 << la); ++ int tb = 0x10000 - (1 << lb); ++ uint8x8_t vec_mask, vec0_lo, vec0_hi, vec1_lo, vec1_hi; ++ uint8x8_t tmp_lo, tmp_hi, res_lo, res_hi; ++ vec_mask = vld1_u8(_sse2neon_cmpestr_mask8b); ++ vec0_lo = vtst_u8(vdup_n_u8(m0), vec_mask); ++ vec0_hi = vtst_u8(vdup_n_u8(m0 >> 8), vec_mask); ++ vec1_lo = vtst_u8(vdup_n_u8(m1), vec_mask); ++ vec1_hi = vtst_u8(vdup_n_u8(m1 >> 8), vec_mask); ++ tmp_lo = vtst_u8(vdup_n_u8(tb), vec_mask); ++ tmp_hi = vtst_u8(vdup_n_u8(tb >> 8), vec_mask); ++ ++ res_lo = vbsl_u8(vec0_lo, vdup_n_u8(0), vget_low_u8(mtx)); ++ res_hi = vbsl_u8(vec0_hi, vdup_n_u8(0), vget_high_u8(mtx)); ++ res_lo = vbsl_u8(vec1_lo, tmp_lo, res_lo); ++ res_hi = vbsl_u8(vec1_hi, tmp_hi, res_hi); ++ res_lo = vand_u8(res_lo, vec_mask); ++ res_hi = vand_u8(res_hi, vec_mask); ++ ++ int res = _sse2neon_vaddv_u8(res_lo) + (_sse2neon_vaddv_u8(res_hi) << 8); ++ return res; ++} ++ ++static int _sse2neon_cmp_word_equal_each(__m128i a, int la, __m128i b, int lb) ++{ ++ uint16x8_t mtx = ++ vceqq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b)); ++ int m0 = (la < lb) ? 0 : ((1 << la) - (1 << lb)); ++ int m1 = 0x100 - (1 << la); ++ int tb = 0x100 - (1 << lb); ++ uint16x8_t vec_mask = vld1q_u16(_sse2neon_cmpestr_mask16b); ++ uint16x8_t vec0 = vtstq_u16(vdupq_n_u16(m0), vec_mask); ++ uint16x8_t vec1 = vtstq_u16(vdupq_n_u16(m1), vec_mask); ++ uint16x8_t tmp = vtstq_u16(vdupq_n_u16(tb), vec_mask); ++ mtx = vbslq_u16(vec0, vdupq_n_u16(0), mtx); ++ mtx = vbslq_u16(vec1, tmp, mtx); ++ mtx = vandq_u16(mtx, vec_mask); ++ return _sse2neon_vaddvq_u16(mtx); ++} ++ ++#define SSE2NEON_AGGREGATE_EQUAL_ORDER_IS_UBYTE 1 ++#define SSE2NEON_AGGREGATE_EQUAL_ORDER_IS_UWORD 0 ++ ++#define SSE2NEON_AGGREGATE_EQUAL_ORDER_IMPL(size, number_of_lanes, data_type) \ ++ static int _sse2neon_aggregate_equal_ordered_##size##x##number_of_lanes( \ ++ int bound, int la, int lb, __m128i mtx[16]) \ ++ { \ ++ int res = 0; \ ++ int m1 = SSE2NEON_IIF(data_type)(0x10000, 0x100) - (1 << la); \ ++ uint##size##x8_t vec_mask = SSE2NEON_IIF(data_type)( \ ++ vld1_u##size(_sse2neon_cmpestr_mask##size##b), \ ++ vld1q_u##size(_sse2neon_cmpestr_mask##size##b)); \ ++ uint##size##x##number_of_lanes##_t vec1 = SSE2NEON_IIF(data_type)( \ ++ vcombine_u##size(vtst_u##size(vdup_n_u##size(m1), vec_mask), \ ++ vtst_u##size(vdup_n_u##size(m1 >> 8), vec_mask)), \ ++ vtstq_u##size(vdupq_n_u##size(m1), vec_mask)); \ ++ uint##size##x##number_of_lanes##_t vec_minusone = vdupq_n_u##size(-1); \ ++ uint##size##x##number_of_lanes##_t vec_zero = vdupq_n_u##size(0); \ ++ for (int j = 0; j < lb; j++) { \ ++ mtx[j] = vreinterpretq_m128i_u##size(vbslq_u##size( \ ++ vec1, vec_minusone, vreinterpretq_u##size##_m128i(mtx[j]))); \ ++ } \ ++ for (int j = lb; j < bound; j++) { \ ++ mtx[j] = vreinterpretq_m128i_u##size( \ ++ vbslq_u##size(vec1, vec_minusone, vec_zero)); \ ++ } \ ++ unsigned SSE2NEON_IIF(data_type)(char, short) *ptr = \ ++ (unsigned SSE2NEON_IIF(data_type)(char, short) *) mtx; \ ++ for (int i = 0; i < bound; i++) { \ ++ int val = 1; \ ++ for (int j = 0, k = i; j < bound - i && k < bound; j++, k++) \ ++ val &= ptr[k * bound + j]; \ ++ res += val << i; \ ++ } \ ++ return res; \ ++ } ++ ++/* clang-format off */ ++#define SSE2NEON_GENERATE_AGGREGATE_EQUAL_ORDER(prefix) \ ++ prefix##IMPL(8, 16, prefix##IS_UBYTE) \ ++ prefix##IMPL(16, 8, prefix##IS_UWORD) ++/* clang-format on */ ++ ++SSE2NEON_GENERATE_AGGREGATE_EQUAL_ORDER(SSE2NEON_AGGREGATE_EQUAL_ORDER_) ++ ++#undef SSE2NEON_AGGREGATE_EQUAL_ORDER_IS_UBYTE ++#undef SSE2NEON_AGGREGATE_EQUAL_ORDER_IS_UWORD ++ ++/* clang-format off */ ++#define SSE2NEON_GENERATE_CMP_EQUAL_ORDERED(prefix) \ ++ prefix##IMPL(byte) \ ++ prefix##IMPL(word) ++/* clang-format on */ ++ ++SSE2NEON_GENERATE_CMP_EQUAL_ORDERED(SSE2NEON_CMP_EQUAL_ORDERED_) ++ ++#define SSE2NEON_CMPESTR_LIST \ ++ _(CMP_UBYTE_EQUAL_ANY, cmp_byte_equal_any) \ ++ _(CMP_UWORD_EQUAL_ANY, cmp_word_equal_any) \ ++ _(CMP_SBYTE_EQUAL_ANY, cmp_byte_equal_any) \ ++ _(CMP_SWORD_EQUAL_ANY, cmp_word_equal_any) \ ++ _(CMP_UBYTE_RANGES, cmp_ubyte_ranges) \ ++ _(CMP_UWORD_RANGES, cmp_uword_ranges) \ ++ _(CMP_SBYTE_RANGES, cmp_sbyte_ranges) \ ++ _(CMP_SWORD_RANGES, cmp_sword_ranges) \ ++ _(CMP_UBYTE_EQUAL_EACH, cmp_byte_equal_each) \ ++ _(CMP_UWORD_EQUAL_EACH, cmp_word_equal_each) \ ++ _(CMP_SBYTE_EQUAL_EACH, cmp_byte_equal_each) \ ++ _(CMP_SWORD_EQUAL_EACH, cmp_word_equal_each) \ ++ _(CMP_UBYTE_EQUAL_ORDERED, cmp_byte_equal_ordered) \ ++ _(CMP_UWORD_EQUAL_ORDERED, cmp_word_equal_ordered) \ ++ _(CMP_SBYTE_EQUAL_ORDERED, cmp_byte_equal_ordered) \ ++ _(CMP_SWORD_EQUAL_ORDERED, cmp_word_equal_ordered) ++ ++enum { ++#define _(name, func_suffix) name, ++ SSE2NEON_CMPESTR_LIST ++#undef _ ++}; ++typedef int (*cmpestr_func_t)(__m128i a, int la, __m128i b, int lb); ++static cmpestr_func_t _sse2neon_cmpfunc_table[] = { ++#define _(name, func_suffix) _sse2neon_##func_suffix, ++ SSE2NEON_CMPESTR_LIST ++#undef _ ++}; ++ ++FORCE_INLINE int _sse2neon_sido_negative(int res, int lb, int imm8, int bound) ++{ ++ switch (imm8 & 0x30) { ++ case _SIDD_NEGATIVE_POLARITY: ++ res ^= 0xffffffff; ++ break; ++ case _SIDD_MASKED_NEGATIVE_POLARITY: ++ res ^= (1 << lb) - 1; ++ break; ++ default: ++ break; ++ } ++ ++ return res & ((bound == 8) ? 0xFF : 0xFFFF); ++} ++ ++FORCE_INLINE int _sse2neon_clz(unsigned int x) ++{ ++#ifdef _MSC_VER ++ unsigned long cnt = 0; ++ if (_BitScanReverse(&cnt, x)) ++ return 31 - cnt; ++ return 32; ++#else ++ return x != 0 ? __builtin_clz(x) : 32; ++#endif ++} ++ ++FORCE_INLINE int _sse2neon_ctz(unsigned int x) ++{ ++#ifdef _MSC_VER ++ unsigned long cnt = 0; ++ if (_BitScanForward(&cnt, x)) ++ return cnt; ++ return 32; ++#else ++ return x != 0 ? __builtin_ctz(x) : 32; ++#endif ++} ++ ++FORCE_INLINE int _sse2neon_ctzll(unsigned long long x) ++{ ++#ifdef _MSC_VER ++ unsigned long cnt; ++#if defined(SSE2NEON_HAS_BITSCAN64) ++ if (_BitScanForward64(&cnt, x)) ++ return (int) (cnt); ++#else ++ if (_BitScanForward(&cnt, (unsigned long) (x))) ++ return (int) cnt; ++ if (_BitScanForward(&cnt, (unsigned long) (x >> 32))) ++ return (int) (cnt + 32); ++#endif /* SSE2NEON_HAS_BITSCAN64 */ ++ return 64; ++#else /* assume GNU compatible compilers */ ++ return x != 0 ? __builtin_ctzll(x) : 64; ++#endif ++} ++ ++#define SSE2NEON_MIN(x, y) (x) < (y) ? (x) : (y) ++ ++#define SSE2NEON_CMPSTR_SET_UPPER(var, imm) \ ++ const int var = (imm & 0x01) ? 8 : 16 ++ ++#define SSE2NEON_CMPESTRX_LEN_PAIR(a, b, la, lb) \ ++ int tmp1 = la ^ (la >> 31); \ ++ la = tmp1 - (la >> 31); \ ++ int tmp2 = lb ^ (lb >> 31); \ ++ lb = tmp2 - (lb >> 31); \ ++ la = SSE2NEON_MIN(la, bound); \ ++ lb = SSE2NEON_MIN(lb, bound) ++ ++// Compare all pairs of character in string a and b, ++// then aggregate the result. ++// As the only difference of PCMPESTR* and PCMPISTR* is the way to calculate the ++// length of string, we use SSE2NEON_CMP{I,E}STRX_GET_LEN to get the length of ++// string a and b. ++#define SSE2NEON_COMP_AGG(a, b, la, lb, imm8, IE) \ ++ SSE2NEON_CMPSTR_SET_UPPER(bound, imm8); \ ++ SSE2NEON_##IE##_LEN_PAIR(a, b, la, lb); \ ++ int r2 = (_sse2neon_cmpfunc_table[imm8 & 0x0f])(a, la, b, lb); \ ++ r2 = _sse2neon_sido_negative(r2, lb, imm8, bound) ++ ++#define SSE2NEON_CMPSTR_GENERATE_INDEX(r2, bound, imm8) \ ++ return (r2 == 0) ? bound \ ++ : ((imm8 & 0x40) ? (31 - _sse2neon_clz(r2)) \ ++ : _sse2neon_ctz(r2)) ++ ++#define SSE2NEON_CMPSTR_GENERATE_MASK(dst) \ ++ __m128i dst = vreinterpretq_m128i_u8(vdupq_n_u8(0)); \ ++ if (imm8 & 0x40) { \ ++ if (bound == 8) { \ ++ uint16x8_t tmp = vtstq_u16(vdupq_n_u16(r2), \ ++ vld1q_u16(_sse2neon_cmpestr_mask16b)); \ ++ dst = vreinterpretq_m128i_u16(vbslq_u16( \ ++ tmp, vdupq_n_u16(-1), vreinterpretq_u16_m128i(dst))); \ ++ } else { \ ++ uint8x16_t vec_r2 = \ ++ vcombine_u8(vdup_n_u8(r2), vdup_n_u8(r2 >> 8)); \ ++ uint8x16_t tmp = \ ++ vtstq_u8(vec_r2, vld1q_u8(_sse2neon_cmpestr_mask8b)); \ ++ dst = vreinterpretq_m128i_u8( \ ++ vbslq_u8(tmp, vdupq_n_u8(-1), vreinterpretq_u8_m128i(dst))); \ ++ } \ ++ } else { \ ++ if (bound == 16) { \ ++ dst = vreinterpretq_m128i_u16( \ ++ vsetq_lane_u16(r2 & 0xffff, vreinterpretq_u16_m128i(dst), 0)); \ ++ } else { \ ++ dst = vreinterpretq_m128i_u8( \ ++ vsetq_lane_u8(r2 & 0xff, vreinterpretq_u8_m128i(dst), 0)); \ ++ } \ ++ } \ ++ return dst ++ ++// Compare packed strings in a and b with lengths la and lb using the control ++// in imm8, and returns 1 if b did not contain a null character and the ++// resulting mask was zero, and 0 otherwise. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestra ++FORCE_INLINE int _mm_cmpestra(__m128i a, ++ int la, ++ __m128i b, ++ int lb, ++ const int imm8) ++{ ++ int lb_cpy = lb; ++ SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPESTRX); ++ return !r2 & (lb_cpy > bound); ++} ++ ++// Compare packed strings in a and b with lengths la and lb using the control in ++// imm8, and returns 1 if the resulting mask was non-zero, and 0 otherwise. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestrc ++FORCE_INLINE int _mm_cmpestrc(__m128i a, ++ int la, ++ __m128i b, ++ int lb, ++ const int imm8) ++{ ++ SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPESTRX); ++ return r2 != 0; ++} ++ ++// Compare packed strings in a and b with lengths la and lb using the control ++// in imm8, and store the generated index in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestri ++FORCE_INLINE int _mm_cmpestri(__m128i a, ++ int la, ++ __m128i b, ++ int lb, ++ const int imm8) ++{ ++ SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPESTRX); ++ SSE2NEON_CMPSTR_GENERATE_INDEX(r2, bound, imm8); ++} ++ ++// Compare packed strings in a and b with lengths la and lb using the control ++// in imm8, and store the generated mask in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestrm ++FORCE_INLINE __m128i ++_mm_cmpestrm(__m128i a, int la, __m128i b, int lb, const int imm8) ++{ ++ SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPESTRX); ++ SSE2NEON_CMPSTR_GENERATE_MASK(dst); ++} ++ ++// Compare packed strings in a and b with lengths la and lb using the control in ++// imm8, and returns bit 0 of the resulting bit mask. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestro ++FORCE_INLINE int _mm_cmpestro(__m128i a, ++ int la, ++ __m128i b, ++ int lb, ++ const int imm8) ++{ ++ SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPESTRX); ++ return r2 & 1; ++} ++ ++// Compare packed strings in a and b with lengths la and lb using the control in ++// imm8, and returns 1 if any character in a was null, and 0 otherwise. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestrs ++FORCE_INLINE int _mm_cmpestrs(__m128i a, ++ int la, ++ __m128i b, ++ int lb, ++ const int imm8) ++{ ++ (void) a; ++ (void) b; ++ (void) lb; ++ SSE2NEON_CMPSTR_SET_UPPER(bound, imm8); ++ return la <= (bound - 1); ++} ++ ++// Compare packed strings in a and b with lengths la and lb using the control in ++// imm8, and returns 1 if any character in b was null, and 0 otherwise. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestrz ++FORCE_INLINE int _mm_cmpestrz(__m128i a, ++ int la, ++ __m128i b, ++ int lb, ++ const int imm8) ++{ ++ (void) a; ++ (void) b; ++ (void) la; ++ SSE2NEON_CMPSTR_SET_UPPER(bound, imm8); ++ return lb <= (bound - 1); ++} ++ ++#define SSE2NEON_CMPISTRX_LENGTH(str, len, imm8) \ ++ do { \ ++ if (imm8 & 0x01) { \ ++ uint16x8_t equal_mask_##str = \ ++ vceqq_u16(vreinterpretq_u16_m128i(str), vdupq_n_u16(0)); \ ++ uint8x8_t res_##str = vshrn_n_u16(equal_mask_##str, 4); \ ++ uint64_t matches_##str = \ ++ vget_lane_u64(vreinterpret_u64_u8(res_##str), 0); \ ++ len = _sse2neon_ctzll(matches_##str) >> 3; \ ++ } else { \ ++ uint16x8_t equal_mask_##str = vreinterpretq_u16_u8( \ ++ vceqq_u8(vreinterpretq_u8_m128i(str), vdupq_n_u8(0))); \ ++ uint8x8_t res_##str = vshrn_n_u16(equal_mask_##str, 4); \ ++ uint64_t matches_##str = \ ++ vget_lane_u64(vreinterpret_u64_u8(res_##str), 0); \ ++ len = _sse2neon_ctzll(matches_##str) >> 2; \ ++ } \ ++ } while (0) ++ ++#define SSE2NEON_CMPISTRX_LEN_PAIR(a, b, la, lb) \ ++ int la, lb; \ ++ do { \ ++ SSE2NEON_CMPISTRX_LENGTH(a, la, imm8); \ ++ SSE2NEON_CMPISTRX_LENGTH(b, lb, imm8); \ ++ } while (0) ++ ++// Compare packed strings with implicit lengths in a and b using the control in ++// imm8, and returns 1 if b did not contain a null character and the resulting ++// mask was zero, and 0 otherwise. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistra ++FORCE_INLINE int _mm_cmpistra(__m128i a, __m128i b, const int imm8) ++{ ++ SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPISTRX); ++ return !r2 & (lb >= bound); ++} ++ ++// Compare packed strings with implicit lengths in a and b using the control in ++// imm8, and returns 1 if the resulting mask was non-zero, and 0 otherwise. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistrc ++FORCE_INLINE int _mm_cmpistrc(__m128i a, __m128i b, const int imm8) ++{ ++ SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPISTRX); ++ return r2 != 0; ++} ++ ++// Compare packed strings with implicit lengths in a and b using the control in ++// imm8, and store the generated index in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistri ++FORCE_INLINE int _mm_cmpistri(__m128i a, __m128i b, const int imm8) ++{ ++ SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPISTRX); ++ SSE2NEON_CMPSTR_GENERATE_INDEX(r2, bound, imm8); ++} ++ ++// Compare packed strings with implicit lengths in a and b using the control in ++// imm8, and store the generated mask in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistrm ++FORCE_INLINE __m128i _mm_cmpistrm(__m128i a, __m128i b, const int imm8) ++{ ++ SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPISTRX); ++ SSE2NEON_CMPSTR_GENERATE_MASK(dst); ++} ++ ++// Compare packed strings with implicit lengths in a and b using the control in ++// imm8, and returns bit 0 of the resulting bit mask. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistro ++FORCE_INLINE int _mm_cmpistro(__m128i a, __m128i b, const int imm8) ++{ ++ SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPISTRX); ++ return r2 & 1; ++} ++ ++// Compare packed strings with implicit lengths in a and b using the control in ++// imm8, and returns 1 if any character in a was null, and 0 otherwise. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistrs ++FORCE_INLINE int _mm_cmpistrs(__m128i a, __m128i b, const int imm8) ++{ ++ (void) b; ++ SSE2NEON_CMPSTR_SET_UPPER(bound, imm8); ++ int la; ++ SSE2NEON_CMPISTRX_LENGTH(a, la, imm8); ++ return la <= (bound - 1); ++} ++ ++// Compare packed strings with implicit lengths in a and b using the control in ++// imm8, and returns 1 if any character in b was null, and 0 otherwise. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistrz ++FORCE_INLINE int _mm_cmpistrz(__m128i a, __m128i b, const int imm8) ++{ ++ (void) a; ++ SSE2NEON_CMPSTR_SET_UPPER(bound, imm8); ++ int lb; ++ SSE2NEON_CMPISTRX_LENGTH(b, lb, imm8); ++ return lb <= (bound - 1); ++} ++ ++// Compares the 2 signed 64-bit integers in a and the 2 signed 64-bit integers ++// in b for greater than. ++FORCE_INLINE __m128i _mm_cmpgt_epi64(__m128i a, __m128i b) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ return vreinterpretq_m128i_u64( ++ vcgtq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); ++#else ++ return vreinterpretq_m128i_s64(vshrq_n_s64( ++ vqsubq_s64(vreinterpretq_s64_m128i(b), vreinterpretq_s64_m128i(a)), ++ 63)); ++#endif ++} ++ ++// Starting with the initial value in crc, accumulates a CRC32 value for ++// unsigned 16-bit integer v, and stores the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_crc32_u16 ++FORCE_INLINE uint32_t _mm_crc32_u16(uint32_t crc, uint16_t v) ++{ ++#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) ++ __asm__ __volatile__("crc32ch %w[c], %w[c], %w[v]\n\t" ++ : [c] "+r"(crc) ++ : [v] "r"(v)); ++#elif ((__ARM_ARCH == 8) && defined(__ARM_FEATURE_CRC32)) || \ ++ (defined(_M_ARM64) && !defined(__clang__)) ++ crc = __crc32ch(crc, v); ++#else ++ crc = _mm_crc32_u8(crc, v & 0xff); ++ crc = _mm_crc32_u8(crc, (v >> 8) & 0xff); ++#endif ++ return crc; ++} ++ ++// Starting with the initial value in crc, accumulates a CRC32 value for ++// unsigned 32-bit integer v, and stores the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_crc32_u32 ++FORCE_INLINE uint32_t _mm_crc32_u32(uint32_t crc, uint32_t v) ++{ ++#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) ++ __asm__ __volatile__("crc32cw %w[c], %w[c], %w[v]\n\t" ++ : [c] "+r"(crc) ++ : [v] "r"(v)); ++#elif ((__ARM_ARCH == 8) && defined(__ARM_FEATURE_CRC32)) || \ ++ (defined(_M_ARM64) && !defined(__clang__)) ++ crc = __crc32cw(crc, v); ++#else ++ crc = _mm_crc32_u16(crc, v & 0xffff); ++ crc = _mm_crc32_u16(crc, (v >> 16) & 0xffff); ++#endif ++ return crc; ++} ++ ++// Starting with the initial value in crc, accumulates a CRC32 value for ++// unsigned 64-bit integer v, and stores the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_crc32_u64 ++FORCE_INLINE uint64_t _mm_crc32_u64(uint64_t crc, uint64_t v) ++{ ++#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) ++ __asm__ __volatile__("crc32cx %w[c], %w[c], %x[v]\n\t" ++ : [c] "+r"(crc) ++ : [v] "r"(v)); ++#elif (defined(_M_ARM64) && !defined(__clang__)) ++ crc = __crc32cd((uint32_t) crc, v); ++#else ++ crc = _mm_crc32_u32((uint32_t) (crc), v & 0xffffffff); ++ crc = _mm_crc32_u32((uint32_t) (crc), (v >> 32) & 0xffffffff); ++#endif ++ return crc; ++} ++ ++// Starting with the initial value in crc, accumulates a CRC32 value for ++// unsigned 8-bit integer v, and stores the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_crc32_u8 ++FORCE_INLINE uint32_t _mm_crc32_u8(uint32_t crc, uint8_t v) ++{ ++#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) ++ __asm__ __volatile__("crc32cb %w[c], %w[c], %w[v]\n\t" ++ : [c] "+r"(crc) ++ : [v] "r"(v)); ++#elif ((__ARM_ARCH == 8) && defined(__ARM_FEATURE_CRC32)) || \ ++ (defined(_M_ARM64) && !defined(__clang__)) ++ crc = __crc32cb(crc, v); ++#else ++ crc ^= v; ++#if defined(__ARM_FEATURE_CRYPTO) ++ // Adapted from: https://mary.rs/lab/crc32/ ++ // Barrent reduction ++ uint64x2_t orig = ++ vcombine_u64(vcreate_u64((uint64_t) (crc) << 24), vcreate_u64(0x0)); ++ uint64x2_t tmp = orig; ++ ++ // Polynomial P(x) of CRC32C ++ uint64_t p = 0x105EC76F1; ++ // Barrett Reduction (in bit-reflected form) constant mu_{64} = \lfloor ++ // 2^{64} / P(x) \rfloor = 0x11f91caf6 ++ uint64_t mu = 0x1dea713f1; ++ ++ // Multiply by mu_{64} ++ tmp = _sse2neon_vmull_p64(vget_low_u64(tmp), vcreate_u64(mu)); ++ // Divide by 2^{64} (mask away the unnecessary bits) ++ tmp = ++ vandq_u64(tmp, vcombine_u64(vcreate_u64(0xFFFFFFFF), vcreate_u64(0x0))); ++ // Multiply by P(x) (shifted left by 1 for alignment reasons) ++ tmp = _sse2neon_vmull_p64(vget_low_u64(tmp), vcreate_u64(p)); ++ // Subtract original from result ++ tmp = veorq_u64(tmp, orig); ++ ++ // Extract the 'lower' (in bit-reflected sense) 32 bits ++ crc = vgetq_lane_u32(vreinterpretq_u32_u64(tmp), 1); ++#else // Fall back to the generic table lookup approach ++ // Adapted from: https://create.stephan-brumme.com/crc32/ ++ // Apply half-byte comparison algorithm for the best ratio between ++ // performance and lookup table. ++ ++ // The lookup table just needs to store every 16th entry ++ // of the standard look-up table. ++ static const uint32_t crc32_half_byte_tbl[] = { ++ 0x00000000, 0x105ec76f, 0x20bd8ede, 0x30e349b1, 0x417b1dbc, 0x5125dad3, ++ 0x61c69362, 0x7198540d, 0x82f63b78, 0x92a8fc17, 0xa24bb5a6, 0xb21572c9, ++ 0xc38d26c4, 0xd3d3e1ab, 0xe330a81a, 0xf36e6f75, ++ }; ++ ++ crc = (crc >> 4) ^ crc32_half_byte_tbl[crc & 0x0F]; ++ crc = (crc >> 4) ^ crc32_half_byte_tbl[crc & 0x0F]; ++#endif ++#endif ++ return crc; ++} ++ ++/* AES */ ++ ++#if !defined(__ARM_FEATURE_CRYPTO) && (!defined(_M_ARM64) || defined(__clang__)) ++/* clang-format off */ ++#define SSE2NEON_AES_SBOX(w) \ ++ { \ ++ w(0x63), w(0x7c), w(0x77), w(0x7b), w(0xf2), w(0x6b), w(0x6f), \ ++ w(0xc5), w(0x30), w(0x01), w(0x67), w(0x2b), w(0xfe), w(0xd7), \ ++ w(0xab), w(0x76), w(0xca), w(0x82), w(0xc9), w(0x7d), w(0xfa), \ ++ w(0x59), w(0x47), w(0xf0), w(0xad), w(0xd4), w(0xa2), w(0xaf), \ ++ w(0x9c), w(0xa4), w(0x72), w(0xc0), w(0xb7), w(0xfd), w(0x93), \ ++ w(0x26), w(0x36), w(0x3f), w(0xf7), w(0xcc), w(0x34), w(0xa5), \ ++ w(0xe5), w(0xf1), w(0x71), w(0xd8), w(0x31), w(0x15), w(0x04), \ ++ w(0xc7), w(0x23), w(0xc3), w(0x18), w(0x96), w(0x05), w(0x9a), \ ++ w(0x07), w(0x12), w(0x80), w(0xe2), w(0xeb), w(0x27), w(0xb2), \ ++ w(0x75), w(0x09), w(0x83), w(0x2c), w(0x1a), w(0x1b), w(0x6e), \ ++ w(0x5a), w(0xa0), w(0x52), w(0x3b), w(0xd6), w(0xb3), w(0x29), \ ++ w(0xe3), w(0x2f), w(0x84), w(0x53), w(0xd1), w(0x00), w(0xed), \ ++ w(0x20), w(0xfc), w(0xb1), w(0x5b), w(0x6a), w(0xcb), w(0xbe), \ ++ w(0x39), w(0x4a), w(0x4c), w(0x58), w(0xcf), w(0xd0), w(0xef), \ ++ w(0xaa), w(0xfb), w(0x43), w(0x4d), w(0x33), w(0x85), w(0x45), \ ++ w(0xf9), w(0x02), w(0x7f), w(0x50), w(0x3c), w(0x9f), w(0xa8), \ ++ w(0x51), w(0xa3), w(0x40), w(0x8f), w(0x92), w(0x9d), w(0x38), \ ++ w(0xf5), w(0xbc), w(0xb6), w(0xda), w(0x21), w(0x10), w(0xff), \ ++ w(0xf3), w(0xd2), w(0xcd), w(0x0c), w(0x13), w(0xec), w(0x5f), \ ++ w(0x97), w(0x44), w(0x17), w(0xc4), w(0xa7), w(0x7e), w(0x3d), \ ++ w(0x64), w(0x5d), w(0x19), w(0x73), w(0x60), w(0x81), w(0x4f), \ ++ w(0xdc), w(0x22), w(0x2a), w(0x90), w(0x88), w(0x46), w(0xee), \ ++ w(0xb8), w(0x14), w(0xde), w(0x5e), w(0x0b), w(0xdb), w(0xe0), \ ++ w(0x32), w(0x3a), w(0x0a), w(0x49), w(0x06), w(0x24), w(0x5c), \ ++ w(0xc2), w(0xd3), w(0xac), w(0x62), w(0x91), w(0x95), w(0xe4), \ ++ w(0x79), w(0xe7), w(0xc8), w(0x37), w(0x6d), w(0x8d), w(0xd5), \ ++ w(0x4e), w(0xa9), w(0x6c), w(0x56), w(0xf4), w(0xea), w(0x65), \ ++ w(0x7a), w(0xae), w(0x08), w(0xba), w(0x78), w(0x25), w(0x2e), \ ++ w(0x1c), w(0xa6), w(0xb4), w(0xc6), w(0xe8), w(0xdd), w(0x74), \ ++ w(0x1f), w(0x4b), w(0xbd), w(0x8b), w(0x8a), w(0x70), w(0x3e), \ ++ w(0xb5), w(0x66), w(0x48), w(0x03), w(0xf6), w(0x0e), w(0x61), \ ++ w(0x35), w(0x57), w(0xb9), w(0x86), w(0xc1), w(0x1d), w(0x9e), \ ++ w(0xe1), w(0xf8), w(0x98), w(0x11), w(0x69), w(0xd9), w(0x8e), \ ++ w(0x94), w(0x9b), w(0x1e), w(0x87), w(0xe9), w(0xce), w(0x55), \ ++ w(0x28), w(0xdf), w(0x8c), w(0xa1), w(0x89), w(0x0d), w(0xbf), \ ++ w(0xe6), w(0x42), w(0x68), w(0x41), w(0x99), w(0x2d), w(0x0f), \ ++ w(0xb0), w(0x54), w(0xbb), w(0x16) \ ++ } ++#define SSE2NEON_AES_RSBOX(w) \ ++ { \ ++ w(0x52), w(0x09), w(0x6a), w(0xd5), w(0x30), w(0x36), w(0xa5), \ ++ w(0x38), w(0xbf), w(0x40), w(0xa3), w(0x9e), w(0x81), w(0xf3), \ ++ w(0xd7), w(0xfb), w(0x7c), w(0xe3), w(0x39), w(0x82), w(0x9b), \ ++ w(0x2f), w(0xff), w(0x87), w(0x34), w(0x8e), w(0x43), w(0x44), \ ++ w(0xc4), w(0xde), w(0xe9), w(0xcb), w(0x54), w(0x7b), w(0x94), \ ++ w(0x32), w(0xa6), w(0xc2), w(0x23), w(0x3d), w(0xee), w(0x4c), \ ++ w(0x95), w(0x0b), w(0x42), w(0xfa), w(0xc3), w(0x4e), w(0x08), \ ++ w(0x2e), w(0xa1), w(0x66), w(0x28), w(0xd9), w(0x24), w(0xb2), \ ++ w(0x76), w(0x5b), w(0xa2), w(0x49), w(0x6d), w(0x8b), w(0xd1), \ ++ w(0x25), w(0x72), w(0xf8), w(0xf6), w(0x64), w(0x86), w(0x68), \ ++ w(0x98), w(0x16), w(0xd4), w(0xa4), w(0x5c), w(0xcc), w(0x5d), \ ++ w(0x65), w(0xb6), w(0x92), w(0x6c), w(0x70), w(0x48), w(0x50), \ ++ w(0xfd), w(0xed), w(0xb9), w(0xda), w(0x5e), w(0x15), w(0x46), \ ++ w(0x57), w(0xa7), w(0x8d), w(0x9d), w(0x84), w(0x90), w(0xd8), \ ++ w(0xab), w(0x00), w(0x8c), w(0xbc), w(0xd3), w(0x0a), w(0xf7), \ ++ w(0xe4), w(0x58), w(0x05), w(0xb8), w(0xb3), w(0x45), w(0x06), \ ++ w(0xd0), w(0x2c), w(0x1e), w(0x8f), w(0xca), w(0x3f), w(0x0f), \ ++ w(0x02), w(0xc1), w(0xaf), w(0xbd), w(0x03), w(0x01), w(0x13), \ ++ w(0x8a), w(0x6b), w(0x3a), w(0x91), w(0x11), w(0x41), w(0x4f), \ ++ w(0x67), w(0xdc), w(0xea), w(0x97), w(0xf2), w(0xcf), w(0xce), \ ++ w(0xf0), w(0xb4), w(0xe6), w(0x73), w(0x96), w(0xac), w(0x74), \ ++ w(0x22), w(0xe7), w(0xad), w(0x35), w(0x85), w(0xe2), w(0xf9), \ ++ w(0x37), w(0xe8), w(0x1c), w(0x75), w(0xdf), w(0x6e), w(0x47), \ ++ w(0xf1), w(0x1a), w(0x71), w(0x1d), w(0x29), w(0xc5), w(0x89), \ ++ w(0x6f), w(0xb7), w(0x62), w(0x0e), w(0xaa), w(0x18), w(0xbe), \ ++ w(0x1b), w(0xfc), w(0x56), w(0x3e), w(0x4b), w(0xc6), w(0xd2), \ ++ w(0x79), w(0x20), w(0x9a), w(0xdb), w(0xc0), w(0xfe), w(0x78), \ ++ w(0xcd), w(0x5a), w(0xf4), w(0x1f), w(0xdd), w(0xa8), w(0x33), \ ++ w(0x88), w(0x07), w(0xc7), w(0x31), w(0xb1), w(0x12), w(0x10), \ ++ w(0x59), w(0x27), w(0x80), w(0xec), w(0x5f), w(0x60), w(0x51), \ ++ w(0x7f), w(0xa9), w(0x19), w(0xb5), w(0x4a), w(0x0d), w(0x2d), \ ++ w(0xe5), w(0x7a), w(0x9f), w(0x93), w(0xc9), w(0x9c), w(0xef), \ ++ w(0xa0), w(0xe0), w(0x3b), w(0x4d), w(0xae), w(0x2a), w(0xf5), \ ++ w(0xb0), w(0xc8), w(0xeb), w(0xbb), w(0x3c), w(0x83), w(0x53), \ ++ w(0x99), w(0x61), w(0x17), w(0x2b), w(0x04), w(0x7e), w(0xba), \ ++ w(0x77), w(0xd6), w(0x26), w(0xe1), w(0x69), w(0x14), w(0x63), \ ++ w(0x55), w(0x21), w(0x0c), w(0x7d) \ ++ } ++/* clang-format on */ ++ ++/* X Macro trick. See https://en.wikipedia.org/wiki/X_Macro */ ++#define SSE2NEON_AES_H0(x) (x) ++static const uint8_t _sse2neon_sbox[256] = SSE2NEON_AES_SBOX(SSE2NEON_AES_H0); ++static const uint8_t _sse2neon_rsbox[256] = SSE2NEON_AES_RSBOX(SSE2NEON_AES_H0); ++#undef SSE2NEON_AES_H0 ++ ++/* x_time function and matrix multiply function */ ++#if !defined(__aarch64__) && !defined(_M_ARM64) ++#define SSE2NEON_XT(x) (((x) << 1) ^ ((((x) >> 7) & 1) * 0x1b)) ++#define SSE2NEON_MULTIPLY(x, y) \ ++ (((y & 1) * x) ^ ((y >> 1 & 1) * SSE2NEON_XT(x)) ^ \ ++ ((y >> 2 & 1) * SSE2NEON_XT(SSE2NEON_XT(x))) ^ \ ++ ((y >> 3 & 1) * SSE2NEON_XT(SSE2NEON_XT(SSE2NEON_XT(x)))) ^ \ ++ ((y >> 4 & 1) * SSE2NEON_XT(SSE2NEON_XT(SSE2NEON_XT(SSE2NEON_XT(x)))))) ++#endif ++ ++// In the absence of crypto extensions, implement aesenc using regular NEON ++// intrinsics instead. See: ++// https://www.workofard.com/2017/01/accelerated-aes-for-the-arm64-linux-kernel/ ++// https://www.workofard.com/2017/07/ghash-for-low-end-cores/ and ++// for more information. ++FORCE_INLINE __m128i _mm_aesenc_si128(__m128i a, __m128i RoundKey) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ static const uint8_t shift_rows[] = { ++ 0x0, 0x5, 0xa, 0xf, 0x4, 0x9, 0xe, 0x3, ++ 0x8, 0xd, 0x2, 0x7, 0xc, 0x1, 0x6, 0xb, ++ }; ++ static const uint8_t ror32by8[] = { ++ 0x1, 0x2, 0x3, 0x0, 0x5, 0x6, 0x7, 0x4, ++ 0x9, 0xa, 0xb, 0x8, 0xd, 0xe, 0xf, 0xc, ++ }; ++ ++ uint8x16_t v; ++ uint8x16_t w = vreinterpretq_u8_m128i(a); ++ ++ /* shift rows */ ++ w = vqtbl1q_u8(w, vld1q_u8(shift_rows)); ++ ++ /* sub bytes */ ++ // Here, we separate the whole 256-bytes table into 4 64-bytes tables, and ++ // look up each of the table. After each lookup, we load the next table ++ // which locates at the next 64-bytes. In the meantime, the index in the ++ // table would be smaller than it was, so the index parameters of ++ // `vqtbx4q_u8()` need to be added the same constant as the loaded tables. ++ v = vqtbl4q_u8(_sse2neon_vld1q_u8_x4(_sse2neon_sbox), w); ++ // 'w-0x40' equals to 'vsubq_u8(w, vdupq_n_u8(0x40))' ++ v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x40), w - 0x40); ++ v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x80), w - 0x80); ++ v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0xc0), w - 0xc0); ++ ++ /* mix columns */ ++ w = (v << 1) ^ (uint8x16_t) (((int8x16_t) v >> 7) & 0x1b); ++ w ^= (uint8x16_t) vrev32q_u16((uint16x8_t) v); ++ w ^= vqtbl1q_u8(v ^ w, vld1q_u8(ror32by8)); ++ ++ /* add round key */ ++ return vreinterpretq_m128i_u8(w) ^ RoundKey; ++ ++#else /* ARMv7-A implementation for a table-based AES */ ++#define SSE2NEON_AES_B2W(b0, b1, b2, b3) \ ++ (((uint32_t) (b3) << 24) | ((uint32_t) (b2) << 16) | \ ++ ((uint32_t) (b1) << 8) | (uint32_t) (b0)) ++// multiplying 'x' by 2 in GF(2^8) ++#define SSE2NEON_AES_F2(x) ((x << 1) ^ (((x >> 7) & 1) * 0x011b /* WPOLY */)) ++// multiplying 'x' by 3 in GF(2^8) ++#define SSE2NEON_AES_F3(x) (SSE2NEON_AES_F2(x) ^ x) ++#define SSE2NEON_AES_U0(p) \ ++ SSE2NEON_AES_B2W(SSE2NEON_AES_F2(p), p, p, SSE2NEON_AES_F3(p)) ++#define SSE2NEON_AES_U1(p) \ ++ SSE2NEON_AES_B2W(SSE2NEON_AES_F3(p), SSE2NEON_AES_F2(p), p, p) ++#define SSE2NEON_AES_U2(p) \ ++ SSE2NEON_AES_B2W(p, SSE2NEON_AES_F3(p), SSE2NEON_AES_F2(p), p) ++#define SSE2NEON_AES_U3(p) \ ++ SSE2NEON_AES_B2W(p, p, SSE2NEON_AES_F3(p), SSE2NEON_AES_F2(p)) ++ ++ // this generates a table containing every possible permutation of ++ // shift_rows() and sub_bytes() with mix_columns(). ++ static const uint32_t ALIGN_STRUCT(16) aes_table[4][256] = { ++ SSE2NEON_AES_SBOX(SSE2NEON_AES_U0), ++ SSE2NEON_AES_SBOX(SSE2NEON_AES_U1), ++ SSE2NEON_AES_SBOX(SSE2NEON_AES_U2), ++ SSE2NEON_AES_SBOX(SSE2NEON_AES_U3), ++ }; ++#undef SSE2NEON_AES_B2W ++#undef SSE2NEON_AES_F2 ++#undef SSE2NEON_AES_F3 ++#undef SSE2NEON_AES_U0 ++#undef SSE2NEON_AES_U1 ++#undef SSE2NEON_AES_U2 ++#undef SSE2NEON_AES_U3 ++ ++ uint32_t x0 = _mm_cvtsi128_si32(a); // get a[31:0] ++ uint32_t x1 = ++ _mm_cvtsi128_si32(_mm_shuffle_epi32(a, 0x55)); // get a[63:32] ++ uint32_t x2 = ++ _mm_cvtsi128_si32(_mm_shuffle_epi32(a, 0xAA)); // get a[95:64] ++ uint32_t x3 = ++ _mm_cvtsi128_si32(_mm_shuffle_epi32(a, 0xFF)); // get a[127:96] ++ ++ // finish the modulo addition step in mix_columns() ++ __m128i out = _mm_set_epi32( ++ (aes_table[0][x3 & 0xff] ^ aes_table[1][(x0 >> 8) & 0xff] ^ ++ aes_table[2][(x1 >> 16) & 0xff] ^ aes_table[3][x2 >> 24]), ++ (aes_table[0][x2 & 0xff] ^ aes_table[1][(x3 >> 8) & 0xff] ^ ++ aes_table[2][(x0 >> 16) & 0xff] ^ aes_table[3][x1 >> 24]), ++ (aes_table[0][x1 & 0xff] ^ aes_table[1][(x2 >> 8) & 0xff] ^ ++ aes_table[2][(x3 >> 16) & 0xff] ^ aes_table[3][x0 >> 24]), ++ (aes_table[0][x0 & 0xff] ^ aes_table[1][(x1 >> 8) & 0xff] ^ ++ aes_table[2][(x2 >> 16) & 0xff] ^ aes_table[3][x3 >> 24])); ++ ++ return _mm_xor_si128(out, RoundKey); ++#endif ++} ++ ++// Perform one round of an AES decryption flow on data (state) in a using the ++// round key in RoundKey, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesdec_si128 ++FORCE_INLINE __m128i _mm_aesdec_si128(__m128i a, __m128i RoundKey) ++{ ++#if defined(__aarch64__) ++ static const uint8_t inv_shift_rows[] = { ++ 0x0, 0xd, 0xa, 0x7, 0x4, 0x1, 0xe, 0xb, ++ 0x8, 0x5, 0x2, 0xf, 0xc, 0x9, 0x6, 0x3, ++ }; ++ static const uint8_t ror32by8[] = { ++ 0x1, 0x2, 0x3, 0x0, 0x5, 0x6, 0x7, 0x4, ++ 0x9, 0xa, 0xb, 0x8, 0xd, 0xe, 0xf, 0xc, ++ }; ++ ++ uint8x16_t v; ++ uint8x16_t w = vreinterpretq_u8_m128i(a); ++ ++ // inverse shift rows ++ w = vqtbl1q_u8(w, vld1q_u8(inv_shift_rows)); ++ ++ // inverse sub bytes ++ v = vqtbl4q_u8(_sse2neon_vld1q_u8_x4(_sse2neon_rsbox), w); ++ v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0x40), w - 0x40); ++ v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0x80), w - 0x80); ++ v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0xc0), w - 0xc0); ++ ++ // inverse mix columns ++ // multiplying 'v' by 4 in GF(2^8) ++ w = (v << 1) ^ (uint8x16_t) (((int8x16_t) v >> 7) & 0x1b); ++ w = (w << 1) ^ (uint8x16_t) (((int8x16_t) w >> 7) & 0x1b); ++ v ^= w; ++ v ^= (uint8x16_t) vrev32q_u16((uint16x8_t) w); ++ ++ w = (v << 1) ^ (uint8x16_t) (((int8x16_t) v >> 7) & ++ 0x1b); // multiplying 'v' by 2 in GF(2^8) ++ w ^= (uint8x16_t) vrev32q_u16((uint16x8_t) v); ++ w ^= vqtbl1q_u8(v ^ w, vld1q_u8(ror32by8)); ++ ++ // add round key ++ return vreinterpretq_m128i_u8(w) ^ RoundKey; ++ ++#else /* ARMv7-A NEON implementation */ ++ /* FIXME: optimized for NEON */ ++ uint8_t i, e, f, g, h, v[4][4]; ++ uint8_t *_a = (uint8_t *) &a; ++ for (i = 0; i < 16; ++i) { ++ v[((i / 4) + (i % 4)) % 4][i % 4] = _sse2neon_rsbox[_a[i]]; ++ } ++ ++ // inverse mix columns ++ for (i = 0; i < 4; ++i) { ++ e = v[i][0]; ++ f = v[i][1]; ++ g = v[i][2]; ++ h = v[i][3]; ++ ++ v[i][0] = SSE2NEON_MULTIPLY(e, 0x0e) ^ SSE2NEON_MULTIPLY(f, 0x0b) ^ ++ SSE2NEON_MULTIPLY(g, 0x0d) ^ SSE2NEON_MULTIPLY(h, 0x09); ++ v[i][1] = SSE2NEON_MULTIPLY(e, 0x09) ^ SSE2NEON_MULTIPLY(f, 0x0e) ^ ++ SSE2NEON_MULTIPLY(g, 0x0b) ^ SSE2NEON_MULTIPLY(h, 0x0d); ++ v[i][2] = SSE2NEON_MULTIPLY(e, 0x0d) ^ SSE2NEON_MULTIPLY(f, 0x09) ^ ++ SSE2NEON_MULTIPLY(g, 0x0e) ^ SSE2NEON_MULTIPLY(h, 0x0b); ++ v[i][3] = SSE2NEON_MULTIPLY(e, 0x0b) ^ SSE2NEON_MULTIPLY(f, 0x0d) ^ ++ SSE2NEON_MULTIPLY(g, 0x09) ^ SSE2NEON_MULTIPLY(h, 0x0e); ++ } ++ ++ return vreinterpretq_m128i_u8(vld1q_u8((uint8_t *) v)) ^ RoundKey; ++#endif ++} ++ ++// Perform the last round of an AES encryption flow on data (state) in a using ++// the round key in RoundKey, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesenclast_si128 ++FORCE_INLINE __m128i _mm_aesenclast_si128(__m128i a, __m128i RoundKey) ++{ ++#if defined(__aarch64__) ++ static const uint8_t shift_rows[] = { ++ 0x0, 0x5, 0xa, 0xf, 0x4, 0x9, 0xe, 0x3, ++ 0x8, 0xd, 0x2, 0x7, 0xc, 0x1, 0x6, 0xb, ++ }; ++ ++ uint8x16_t v; ++ uint8x16_t w = vreinterpretq_u8_m128i(a); ++ ++ // shift rows ++ w = vqtbl1q_u8(w, vld1q_u8(shift_rows)); ++ ++ // sub bytes ++ v = vqtbl4q_u8(_sse2neon_vld1q_u8_x4(_sse2neon_sbox), w); ++ v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x40), w - 0x40); ++ v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x80), w - 0x80); ++ v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0xc0), w - 0xc0); ++ ++ // add round key ++ return vreinterpretq_m128i_u8(v) ^ RoundKey; ++ ++#else /* ARMv7-A implementation */ ++ uint8_t v[16] = { ++ _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 0)], ++ _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 5)], ++ _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 10)], ++ _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 15)], ++ _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 4)], ++ _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 9)], ++ _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 14)], ++ _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 3)], ++ _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 8)], ++ _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 13)], ++ _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 2)], ++ _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 7)], ++ _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 12)], ++ _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 1)], ++ _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 6)], ++ _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 11)], ++ }; ++ ++ return vreinterpretq_m128i_u8(vld1q_u8(v)) ^ RoundKey; ++#endif ++} ++ ++// Perform the last round of an AES decryption flow on data (state) in a using ++// the round key in RoundKey, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesdeclast_si128 ++FORCE_INLINE __m128i _mm_aesdeclast_si128(__m128i a, __m128i RoundKey) ++{ ++#if defined(__aarch64__) ++ static const uint8_t inv_shift_rows[] = { ++ 0x0, 0xd, 0xa, 0x7, 0x4, 0x1, 0xe, 0xb, ++ 0x8, 0x5, 0x2, 0xf, 0xc, 0x9, 0x6, 0x3, ++ }; ++ ++ uint8x16_t v; ++ uint8x16_t w = vreinterpretq_u8_m128i(a); ++ ++ // inverse shift rows ++ w = vqtbl1q_u8(w, vld1q_u8(inv_shift_rows)); ++ ++ // inverse sub bytes ++ v = vqtbl4q_u8(_sse2neon_vld1q_u8_x4(_sse2neon_rsbox), w); ++ v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0x40), w - 0x40); ++ v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0x80), w - 0x80); ++ v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0xc0), w - 0xc0); ++ ++ // add round key ++ return vreinterpretq_m128i_u8(v) ^ RoundKey; ++ ++#else /* ARMv7-A NEON implementation */ ++ /* FIXME: optimized for NEON */ ++ uint8_t v[4][4]; ++ uint8_t *_a = (uint8_t *) &a; ++ for (int i = 0; i < 16; ++i) { ++ v[((i / 4) + (i % 4)) % 4][i % 4] = _sse2neon_rsbox[_a[i]]; ++ } ++ ++ return vreinterpretq_m128i_u8(vld1q_u8((uint8_t *) v)) ^ RoundKey; ++#endif ++} ++ ++// Perform the InvMixColumns transformation on a and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesimc_si128 ++FORCE_INLINE __m128i _mm_aesimc_si128(__m128i a) ++{ ++#if defined(__aarch64__) ++ static const uint8_t ror32by8[] = { ++ 0x1, 0x2, 0x3, 0x0, 0x5, 0x6, 0x7, 0x4, ++ 0x9, 0xa, 0xb, 0x8, 0xd, 0xe, 0xf, 0xc, ++ }; ++ uint8x16_t v = vreinterpretq_u8_m128i(a); ++ uint8x16_t w; ++ ++ // multiplying 'v' by 4 in GF(2^8) ++ w = (v << 1) ^ (uint8x16_t) (((int8x16_t) v >> 7) & 0x1b); ++ w = (w << 1) ^ (uint8x16_t) (((int8x16_t) w >> 7) & 0x1b); ++ v ^= w; ++ v ^= (uint8x16_t) vrev32q_u16((uint16x8_t) w); ++ ++ // multiplying 'v' by 2 in GF(2^8) ++ w = (v << 1) ^ (uint8x16_t) (((int8x16_t) v >> 7) & 0x1b); ++ w ^= (uint8x16_t) vrev32q_u16((uint16x8_t) v); ++ w ^= vqtbl1q_u8(v ^ w, vld1q_u8(ror32by8)); ++ return vreinterpretq_m128i_u8(w); ++ ++#else /* ARMv7-A NEON implementation */ ++ uint8_t i, e, f, g, h, v[4][4]; ++ vst1q_u8((uint8_t *) v, vreinterpretq_u8_m128i(a)); ++ for (i = 0; i < 4; ++i) { ++ e = v[i][0]; ++ f = v[i][1]; ++ g = v[i][2]; ++ h = v[i][3]; ++ ++ v[i][0] = SSE2NEON_MULTIPLY(e, 0x0e) ^ SSE2NEON_MULTIPLY(f, 0x0b) ^ ++ SSE2NEON_MULTIPLY(g, 0x0d) ^ SSE2NEON_MULTIPLY(h, 0x09); ++ v[i][1] = SSE2NEON_MULTIPLY(e, 0x09) ^ SSE2NEON_MULTIPLY(f, 0x0e) ^ ++ SSE2NEON_MULTIPLY(g, 0x0b) ^ SSE2NEON_MULTIPLY(h, 0x0d); ++ v[i][2] = SSE2NEON_MULTIPLY(e, 0x0d) ^ SSE2NEON_MULTIPLY(f, 0x09) ^ ++ SSE2NEON_MULTIPLY(g, 0x0e) ^ SSE2NEON_MULTIPLY(h, 0x0b); ++ v[i][3] = SSE2NEON_MULTIPLY(e, 0x0b) ^ SSE2NEON_MULTIPLY(f, 0x0d) ^ ++ SSE2NEON_MULTIPLY(g, 0x09) ^ SSE2NEON_MULTIPLY(h, 0x0e); ++ } ++ ++ return vreinterpretq_m128i_u8(vld1q_u8((uint8_t *) v)); ++#endif ++} ++ ++// Assist in expanding the AES cipher key by computing steps towards generating ++// a round key for encryption cipher using data from a and an 8-bit round ++// constant specified in imm8, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aeskeygenassist_si128 ++// ++// Emits the Advanced Encryption Standard (AES) instruction aeskeygenassist. ++// This instruction generates a round key for AES encryption. See ++// https://kazakov.life/2017/11/01/cryptocurrency-mining-on-ios-devices/ ++// for details. ++FORCE_INLINE __m128i _mm_aeskeygenassist_si128(__m128i a, const int rcon) ++{ ++#if defined(__aarch64__) ++ uint8x16_t _a = vreinterpretq_u8_m128i(a); ++ uint8x16_t v = vqtbl4q_u8(_sse2neon_vld1q_u8_x4(_sse2neon_sbox), _a); ++ v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x40), _a - 0x40); ++ v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x80), _a - 0x80); ++ v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0xc0), _a - 0xc0); ++ ++ uint32x4_t v_u32 = vreinterpretq_u32_u8(v); ++ uint32x4_t ror_v = vorrq_u32(vshrq_n_u32(v_u32, 8), vshlq_n_u32(v_u32, 24)); ++ uint32x4_t ror_xor_v = veorq_u32(ror_v, vdupq_n_u32(rcon)); ++ ++ return vreinterpretq_m128i_u32(vtrn2q_u32(v_u32, ror_xor_v)); ++ ++#else /* ARMv7-A NEON implementation */ ++ uint32_t X1 = _mm_cvtsi128_si32(_mm_shuffle_epi32(a, 0x55)); ++ uint32_t X3 = _mm_cvtsi128_si32(_mm_shuffle_epi32(a, 0xFF)); ++ for (int i = 0; i < 4; ++i) { ++ ((uint8_t *) &X1)[i] = _sse2neon_sbox[((uint8_t *) &X1)[i]]; ++ ((uint8_t *) &X3)[i] = _sse2neon_sbox[((uint8_t *) &X3)[i]]; ++ } ++ return _mm_set_epi32(((X3 >> 8) | (X3 << 24)) ^ rcon, X3, ++ ((X1 >> 8) | (X1 << 24)) ^ rcon, X1); ++#endif ++} ++#undef SSE2NEON_AES_SBOX ++#undef SSE2NEON_AES_RSBOX ++ ++#if defined(__aarch64__) ++#undef SSE2NEON_XT ++#undef SSE2NEON_MULTIPLY ++#endif ++ ++#else /* __ARM_FEATURE_CRYPTO */ ++// Implements equivalent of 'aesenc' by combining AESE (with an empty key) and ++// AESMC and then manually applying the real key as an xor operation. This ++// unfortunately means an additional xor op; the compiler should be able to ++// optimize this away for repeated calls however. See ++// https://blog.michaelbrase.com/2018/05/08/emulating-x86-aes-intrinsics-on-armv8-a ++// for more details. ++FORCE_INLINE __m128i _mm_aesenc_si128(__m128i a, __m128i b) ++{ ++ return vreinterpretq_m128i_u8(veorq_u8( ++ vaesmcq_u8(vaeseq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0))), ++ vreinterpretq_u8_m128i(b))); ++} ++ ++// Perform one round of an AES decryption flow on data (state) in a using the ++// round key in RoundKey, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesdec_si128 ++FORCE_INLINE __m128i _mm_aesdec_si128(__m128i a, __m128i RoundKey) ++{ ++ return vreinterpretq_m128i_u8(veorq_u8( ++ vaesimcq_u8(vaesdq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0))), ++ vreinterpretq_u8_m128i(RoundKey))); ++} ++ ++// Perform the last round of an AES encryption flow on data (state) in a using ++// the round key in RoundKey, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesenclast_si128 ++FORCE_INLINE __m128i _mm_aesenclast_si128(__m128i a, __m128i RoundKey) ++{ ++ return _mm_xor_si128(vreinterpretq_m128i_u8(vaeseq_u8( ++ vreinterpretq_u8_m128i(a), vdupq_n_u8(0))), ++ RoundKey); ++} ++ ++// Perform the last round of an AES decryption flow on data (state) in a using ++// the round key in RoundKey, and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesdeclast_si128 ++FORCE_INLINE __m128i _mm_aesdeclast_si128(__m128i a, __m128i RoundKey) ++{ ++ return vreinterpretq_m128i_u8( ++ veorq_u8(vaesdq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0)), ++ vreinterpretq_u8_m128i(RoundKey))); ++} ++ ++// Perform the InvMixColumns transformation on a and store the result in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesimc_si128 ++FORCE_INLINE __m128i _mm_aesimc_si128(__m128i a) ++{ ++ return vreinterpretq_m128i_u8(vaesimcq_u8(vreinterpretq_u8_m128i(a))); ++} ++ ++// Assist in expanding the AES cipher key by computing steps towards generating ++// a round key for encryption cipher using data from a and an 8-bit round ++// constant specified in imm8, and store the result in dst." ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aeskeygenassist_si128 ++FORCE_INLINE __m128i _mm_aeskeygenassist_si128(__m128i a, const int rcon) ++{ ++ // AESE does ShiftRows and SubBytes on A ++ uint8x16_t u8 = vaeseq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0)); ++ ++#ifndef _MSC_VER ++ uint8x16_t dest = { ++ // Undo ShiftRows step from AESE and extract X1 and X3 ++ u8[0x4], u8[0x1], u8[0xE], u8[0xB], // SubBytes(X1) ++ u8[0x1], u8[0xE], u8[0xB], u8[0x4], // ROT(SubBytes(X1)) ++ u8[0xC], u8[0x9], u8[0x6], u8[0x3], // SubBytes(X3) ++ u8[0x9], u8[0x6], u8[0x3], u8[0xC], // ROT(SubBytes(X3)) ++ }; ++ uint32x4_t r = {0, (unsigned) rcon, 0, (unsigned) rcon}; ++ return vreinterpretq_m128i_u8(dest) ^ vreinterpretq_m128i_u32(r); ++#else ++ // We have to do this hack because MSVC is strictly adhering to the CPP ++ // standard, in particular C++03 8.5.1 sub-section 15, which states that ++ // unions must be initialized by their first member type. ++ ++ // As per the Windows ARM64 ABI, it is always little endian, so this works ++ __n128 dest{ ++ ((uint64_t) u8.n128_u8[0x4] << 0) | ((uint64_t) u8.n128_u8[0x1] << 8) | ++ ((uint64_t) u8.n128_u8[0xE] << 16) | ++ ((uint64_t) u8.n128_u8[0xB] << 24) | ++ ((uint64_t) u8.n128_u8[0x1] << 32) | ++ ((uint64_t) u8.n128_u8[0xE] << 40) | ++ ((uint64_t) u8.n128_u8[0xB] << 48) | ++ ((uint64_t) u8.n128_u8[0x4] << 56), ++ ((uint64_t) u8.n128_u8[0xC] << 0) | ((uint64_t) u8.n128_u8[0x9] << 8) | ++ ((uint64_t) u8.n128_u8[0x6] << 16) | ++ ((uint64_t) u8.n128_u8[0x3] << 24) | ++ ((uint64_t) u8.n128_u8[0x9] << 32) | ++ ((uint64_t) u8.n128_u8[0x6] << 40) | ++ ((uint64_t) u8.n128_u8[0x3] << 48) | ++ ((uint64_t) u8.n128_u8[0xC] << 56)}; ++ ++ dest.n128_u32[1] = dest.n128_u32[1] ^ rcon; ++ dest.n128_u32[3] = dest.n128_u32[3] ^ rcon; ++ ++ return dest; ++#endif ++} ++#endif ++ ++/* Others */ ++ ++// Perform a carry-less multiplication of two 64-bit integers, selected from a ++// and b according to imm8, and store the results in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_clmulepi64_si128 ++FORCE_INLINE __m128i _mm_clmulepi64_si128(__m128i _a, __m128i _b, const int imm) ++{ ++ uint64x2_t a = vreinterpretq_u64_m128i(_a); ++ uint64x2_t b = vreinterpretq_u64_m128i(_b); ++ switch (imm & 0x11) { ++ case 0x00: ++ return vreinterpretq_m128i_u64( ++ _sse2neon_vmull_p64(vget_low_u64(a), vget_low_u64(b))); ++ case 0x01: ++ return vreinterpretq_m128i_u64( ++ _sse2neon_vmull_p64(vget_high_u64(a), vget_low_u64(b))); ++ case 0x10: ++ return vreinterpretq_m128i_u64( ++ _sse2neon_vmull_p64(vget_low_u64(a), vget_high_u64(b))); ++ case 0x11: ++ return vreinterpretq_m128i_u64( ++ _sse2neon_vmull_p64(vget_high_u64(a), vget_high_u64(b))); ++ default: ++ abort(); ++ } ++} ++ ++FORCE_INLINE unsigned int _sse2neon_mm_get_denormals_zero_mode(void) ++{ ++ union { ++ fpcr_bitfield field; ++#if defined(__aarch64__) || defined(_M_ARM64) ++ uint64_t value; ++#else ++ uint32_t value; ++#endif ++ } r; ++ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ r.value = _sse2neon_get_fpcr(); ++#else ++ __asm__ __volatile__("vmrs %0, FPSCR" : "=r"(r.value)); /* read */ ++#endif ++ ++ return r.field.bit24 ? _MM_DENORMALS_ZERO_ON : _MM_DENORMALS_ZERO_OFF; ++} ++ ++// Count the number of bits set to 1 in unsigned 32-bit integer a, and ++// return that count in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_popcnt_u32 ++FORCE_INLINE int _mm_popcnt_u32(unsigned int a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++#if __has_builtin(__builtin_popcount) ++ return __builtin_popcount(a); ++#elif defined(_MSC_VER) ++ return _CountOneBits(a); ++#else ++ return (int) vaddlv_u8(vcnt_u8(vcreate_u8((uint64_t) a))); ++#endif ++#else ++ uint32_t count = 0; ++ uint8x8_t input_val, count8x8_val; ++ uint16x4_t count16x4_val; ++ uint32x2_t count32x2_val; ++ ++ input_val = vld1_u8((uint8_t *) &a); ++ count8x8_val = vcnt_u8(input_val); ++ count16x4_val = vpaddl_u8(count8x8_val); ++ count32x2_val = vpaddl_u16(count16x4_val); ++ ++ vst1_u32(&count, count32x2_val); ++ return count; ++#endif ++} ++ ++// Count the number of bits set to 1 in unsigned 64-bit integer a, and ++// return that count in dst. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_popcnt_u64 ++FORCE_INLINE int64_t _mm_popcnt_u64(uint64_t a) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++#if __has_builtin(__builtin_popcountll) ++ return __builtin_popcountll(a); ++#elif defined(_MSC_VER) ++ return _CountOneBits64(a); ++#else ++ return (int64_t) vaddlv_u8(vcnt_u8(vcreate_u8(a))); ++#endif ++#else ++ uint64_t count = 0; ++ uint8x8_t input_val, count8x8_val; ++ uint16x4_t count16x4_val; ++ uint32x2_t count32x2_val; ++ uint64x1_t count64x1_val; ++ ++ input_val = vld1_u8((uint8_t *) &a); ++ count8x8_val = vcnt_u8(input_val); ++ count16x4_val = vpaddl_u8(count8x8_val); ++ count32x2_val = vpaddl_u16(count16x4_val); ++ count64x1_val = vpaddl_u32(count32x2_val); ++ vst1_u64(&count, count64x1_val); ++ return count; ++#endif ++} ++ ++FORCE_INLINE void _sse2neon_mm_set_denormals_zero_mode(unsigned int flag) ++{ ++ // AArch32 Advanced SIMD arithmetic always uses the Flush-to-zero setting, ++ // regardless of the value of the FZ bit. ++ union { ++ fpcr_bitfield field; ++#if defined(__aarch64__) || defined(_M_ARM64) ++ uint64_t value; ++#else ++ uint32_t value; ++#endif ++ } r; ++ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ r.value = _sse2neon_get_fpcr(); ++#else ++ __asm__ __volatile__("vmrs %0, FPSCR" : "=r"(r.value)); /* read */ ++#endif ++ ++ r.field.bit24 = (flag & _MM_DENORMALS_ZERO_MASK) == _MM_DENORMALS_ZERO_ON; ++ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ _sse2neon_set_fpcr(r.value); ++#else ++ __asm__ __volatile__("vmsr FPSCR, %0" ::"r"(r)); /* write */ ++#endif ++} ++ ++// Return the current 64-bit value of the processor's time-stamp counter. ++// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=rdtsc ++FORCE_INLINE uint64_t _rdtsc(void) ++{ ++#if defined(__aarch64__) || defined(_M_ARM64) ++ uint64_t val; ++ ++ /* According to ARM DDI 0487F.c, from Armv8.0 to Armv8.5 inclusive, the ++ * system counter is at least 56 bits wide; from Armv8.6, the counter ++ * must be 64 bits wide. So the system counter could be less than 64 ++ * bits wide and it is attributed with the flag 'cap_user_time_short' ++ * is true. ++ */ ++#if defined(_MSC_VER) ++ val = _ReadStatusReg(ARM64_SYSREG(3, 3, 14, 0, 2)); ++#else ++ __asm__ __volatile__("mrs %0, cntvct_el0" : "=r"(val)); ++#endif ++ ++ return val; ++#else ++ uint32_t pmccntr, pmuseren, pmcntenset; ++ // Read the user mode Performance Monitoring Unit (PMU) ++ // User Enable Register (PMUSERENR) access permissions. ++ __asm__ __volatile__("mrc p15, 0, %0, c9, c14, 0" : "=r"(pmuseren)); ++ if (pmuseren & 1) { // Allows reading PMUSERENR for user mode code. ++ __asm__ __volatile__("mrc p15, 0, %0, c9, c12, 1" : "=r"(pmcntenset)); ++ if (pmcntenset & 0x80000000UL) { // Is it counting? ++ __asm__ __volatile__("mrc p15, 0, %0, c9, c13, 0" : "=r"(pmccntr)); ++ // The counter is set up to count every 64th cycle ++ return (uint64_t) (pmccntr) << 6; ++ } ++ } ++ ++ // Fallback to syscall as we can't enable PMUSERENR in user mode. ++ struct timeval tv; ++ gettimeofday(&tv, NULL); ++ return (uint64_t) (tv.tv_sec) * 1000000 + tv.tv_usec; ++#endif ++} ++ ++#if defined(__GNUC__) || defined(__clang__) ++#pragma pop_macro("ALIGN_STRUCT") ++#pragma pop_macro("FORCE_INLINE") ++#pragma pop_macro("FORCE_INLINE_OPTNONE") ++#endif ++ ++#if defined(__GNUC__) && !defined(__clang__) ++#pragma GCC pop_options ++#endif ++ ++#endif diff --git a/recipes/hifiasm_meta/meta.yaml b/recipes/hifiasm_meta/meta.yaml index d60ba6ffffe8d..9fa17cc01bedc 100644 --- a/recipes/hifiasm_meta/meta.yaml +++ b/recipes/hifiasm_meta/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "hamtv0.3.1" %} +{% set version = "hamtv0.3.2" %} package: name: hifiasm_meta @@ -6,10 +6,14 @@ package: source: url: https://github.com/xfengnefx/hifiasm-meta/archive/refs/tags/{{ version }}.tar.gz - sha256: 2da34f01b7ce555ad9038961331ff38786c4e9f10f5aafb3daccc24b3c6f5d4a + sha256: f295998b2dee6ab99ac86ee797bf41f927b12371608ef42da2b3db20e05d2e93 + patches: + - hifiasm_meta-aarch64.patch # [arm64 or aarch64] build: - number: 2 + number: 1 + run_exports: + - {{ pin_subpackage('hifiasm_meta', max_pin="x") }} requirements: build: @@ -30,3 +34,7 @@ about: license: MIT summary: 'Metagenome assembler for Hifi reads, based on hifiasm.' +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 diff --git a/recipes/hiphase/meta.yaml b/recipes/hiphase/meta.yaml index c54d31da8d085..6bc4d755dcf4b 100644 --- a/recipes/hiphase/meta.yaml +++ b/recipes/hiphase/meta.yaml @@ -1,6 +1,6 @@ {% set name = "hiphase" %} -{% set version = "1.4.4" %} -{% set hiphase_sha256 = "3fdff37542c0447e936525684a7e431430994ee810d60a43f319ae260a9161b0" %} +{% set version = "1.4.5" %} +{% set hiphase_sha256 = "144ed18b56873856073d27bb7daea757ab5cfe857685c033a64e331075107a04" %} package: name: {{ name }} diff --git a/recipes/hmftools-amber/meta.yaml b/recipes/hmftools-amber/meta.yaml index 2d94241f2796a..611231aa4b18e 100644 --- a/recipes/hmftools-amber/meta.yaml +++ b/recipes/hmftools-amber/meta.yaml @@ -1,12 +1,12 @@ -{% set version = "4.0.1" %} -{% set sha256 = "ab4934e503d5916413677471d8cd36519e25efbaa250fef14106f1a49a889203" %} +{% set version = "4.1_beta" %} +{% set sha256 = "ceef94ee067848bc57751f16e967f0bcc7f2a1fcb33ecfa326b65f6f3db198c6" %} package: name: hmftools-amber version: '{{ version }}' source: - url: https://github.com/hartwigmedical/hmftools/releases/download/amber-v{{ version }}/amber_v{{ version }}.jar + url: https://github.com/hartwigmedical/hmftools/releases/download/amber-v{{ version|replace("_beta", "") }}/amber_v{{ version }}.jar sha256: '{{ sha256 }}' build: diff --git a/recipes/hmftools-bam-tools/meta.yaml b/recipes/hmftools-bam-tools/meta.yaml index 68e1d104b1102..d100a90546b64 100644 --- a/recipes/hmftools-bam-tools/meta.yaml +++ b/recipes/hmftools-bam-tools/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "1.2.1" %} -{% set sha256 = "3be174019a397a0ff7049be60c9abf8826c59b58b0a3b416fce26cf2a8c12695" %} +{% set version = "1.3_beta" %} +{% set sha256 = "28ae70c74426cad9142f7d96b18a8b8bf287fb1d3099cf03e706970593f56e0a" %} package: name: hmftools-bam-tools diff --git a/recipes/hmftools-chord/LICENSE b/recipes/hmftools-chord/LICENSE new file mode 100644 index 0000000000000..2aa0f78dd40e9 --- /dev/null +++ b/recipes/hmftools-chord/LICENSE @@ -0,0 +1,624 @@ +Copyright (C) 2016-2024 hartwigmedical + +GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + diff --git a/recipes/hmftools-chord/build.sh b/recipes/hmftools-chord/build.sh new file mode 100644 index 0000000000000..a1a96f8a03b8b --- /dev/null +++ b/recipes/hmftools-chord/build.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +TGT="$PREFIX/share/$PKG_NAME-$PKG_VERSION-$PKG_BUILDNUM" +[ -d "$TGT" ] || mkdir -p $TGT +[ -d "${PREFIX}/bin" ] || mkdir -p "${PREFIX}/bin" + +cd "${SRC_DIR}" +mv jar/chord*.jar $TGT/chord.jar +${R} CMD INSTALL --build src/chord/src/main/R/mutSigExtractor +${R} CMD INSTALL --build src/chord/src/main/R/CHORD + +cp $RECIPE_DIR/chord.sh $TGT/chord +ln -s $TGT/chord ${PREFIX}/bin/ diff --git a/recipes/hmftools-chord/chord.sh b/recipes/hmftools-chord/chord.sh new file mode 100755 index 0000000000000..4bfae1df1839a --- /dev/null +++ b/recipes/hmftools-chord/chord.sh @@ -0,0 +1,69 @@ +#!/bin/bash +# hmftools CHORD executable shell script +# https://github.com/hartwigmedical/hmftools/tree/master/chord +set -eu -o pipefail + +export LC_ALL=en_US.UTF-8 + +# Find original directory of bash script, resolving symlinks +# http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in/246128#246128 +SOURCE="${BASH_SOURCE[0]}" +while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink + DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + SOURCE="$(readlink "$SOURCE")" + [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located +done +DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + +JAR_DIR=$DIR +ENV_PREFIX="$(dirname $(dirname $DIR))" +# Use Java installed with Anaconda to ensure correct version +java="$ENV_PREFIX/bin/java" + +# if JAVA_HOME is set (non-empty), use it. Otherwise keep "java" +if [ -n "${JAVA_HOME:=}" ]; then + if [ -e "$JAVA_HOME/bin/java" ]; then + java="$JAVA_HOME/bin/java" + fi +fi + +# extract memory and system property Java arguments from the list of provided arguments +# http://java.dzone.com/articles/better-java-shell-script +default_jvm_mem_opts="-Xms512m -Xmx1g" +jvm_mem_opts="" +jvm_prop_opts="" +pass_args="" +for arg in "$@"; do + case $arg in + '-D'*) + jvm_prop_opts="$jvm_prop_opts $arg" + ;; + '-XX'*) + jvm_prop_opts="$jvm_prop_opts $arg" + ;; + '-Xm'*) + jvm_mem_opts="$jvm_mem_opts $arg" + ;; + *) + if [[ ${pass_args} == '' ]] #needed to avoid preceeding space on first arg e.g. ' MarkDuplicates' + then + pass_args="$arg" + else + pass_args="$pass_args \"$arg\"" #quotes later arguments to avoid problem with ()s in MarkDuplicates regex arg + fi + ;; + esac +done + +if [ "$jvm_mem_opts" == "" ]; then + jvm_mem_opts="$default_jvm_mem_opts" +fi + +pass_arr=($pass_args) +if [[ ${pass_arr[0]:=} == com.hartwig.* ]] +then + eval "$java" $jvm_mem_opts $jvm_prop_opts -cp "$JAR_DIR/chord.jar" $pass_args +else + eval "$java" $jvm_mem_opts $jvm_prop_opts -jar "$JAR_DIR/chord.jar" $pass_args +fi +exit diff --git a/recipes/hmftools-chord/meta.yaml b/recipes/hmftools-chord/meta.yaml new file mode 100644 index 0000000000000..cb5e88a813be6 --- /dev/null +++ b/recipes/hmftools-chord/meta.yaml @@ -0,0 +1,51 @@ +{% set version = "2.1.0_beta" %} +{% set sha256_jar = "26d0a40e20635c4b797d28e0c7819b1653c9f8fa28180b9a556215d22387968c" %} +{% set sha256_src = "ed039e7b405130a1e52df71c3535c6a5ed8aab0f80724bc83df88ae14aeaa257" %} + +package: + name: hmftools-chord + version: '{{ version }}' + +source: + - folder: jar + url: https://github.com/hartwigmedical/hmftools/releases/download/chord-v{{ version }}/chord-{{ version }}.jar + sha256: '{{ sha256_jar }}' + - folder: src + url: https://github.com/hartwigmedical/hmftools/archive/refs/tags/chord-v{{ version }}.tar.gz + sha256: '{{ sha256_src }}' + +build: + noarch: generic + number: 0 + run_exports: + - {{ pin_subpackage("hmftools-chord", max_pin="x.x") }} + +requirements: + host: + - r-base + - r-randomforest + - r-stringr + - bioconductor-bsgenome + - bioconductor-bsgenome.hsapiens.ucsc.hg19 + - bioconductor-bsgenome.hsapiens.ucsc.hg38 + run: + - openjdk >=8 + - r-base + - r-randomforest + - r-stringr + - bioconductor-bsgenome + - bioconductor-bsgenome.hsapiens.ucsc.hg19 + - bioconductor-bsgenome.hsapiens.ucsc.hg38 + +test: + commands: + - $R -e "library('CHORD')" + - $R -e "library('mutSigExtractor')" + - 'chord com.hartwig.hmftools.chord.ChordRunner -version | grep CHORD' + +about: + home: https://github.com/hartwigmedical/hmftools/blob/master/chord/ + license: GPL-3.0-only + license_family: GPL3 + license_file: LICENSE + summary: Predict HRD using somatic mutations contexts diff --git a/recipes/hmftools-cobalt/meta.yaml b/recipes/hmftools-cobalt/meta.yaml index 1819596469f37..f82c869772fad 100644 --- a/recipes/hmftools-cobalt/meta.yaml +++ b/recipes/hmftools-cobalt/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "1.16" %} -{% set sha256 = "9fe1d0f3a1f4270d354b6d3e4a6fa7a556dfbcb2e06775cd6328e1f5dba7a77c" %} +{% set version = "2.0_beta" %} +{% set sha256 = "ea00d4322804dfe2ab8d55b43c60289a83e2de1883687a345f86d667a4f7eb7a" %} package: name: hmftools-cobalt diff --git a/recipes/hmftools-cuppa/meta.yaml b/recipes/hmftools-cuppa/meta.yaml index 0b3ed8f2b8aa6..840622e449152 100644 --- a/recipes/hmftools-cuppa/meta.yaml +++ b/recipes/hmftools-cuppa/meta.yaml @@ -1,6 +1,6 @@ -{% set version = "2.2.1" %} -{% set sha256_jar = "38669b46befd678059426342b9c71ec3a2b007d850174e132e42ec7cd13e8752" %} -{% set sha256_src = "eb27b92670999bd8825305496508df63da56d59569e8eb64ed93bd814e6d35c3" %} +{% set version = "2.3.0_beta" %} +{% set sha256_jar = "69f94a54f232a2a22927dce165120d1f166d4931bfb8f299515edaa577607c7c" %} +{% set sha256_src = "65a2070e78243fed975b8738d2ce79dfead1a5702c2bc91e26488c806e25d158" %} package: name: hmftools-cuppa @@ -8,7 +8,7 @@ package: source: - folder: jar - url: https://github.com/hartwigmedical/hmftools/releases/download/cuppa-v{{ version }}/cuppa_v{{ version }}.jar + url: https://github.com/hartwigmedical/hmftools/releases/download/cuppa-v{{ version }}/cuppa-{{ version|replace(".0", "") }}.jar sha256: '{{ sha256_jar }}' - folder: src url: https://github.com/hartwigmedical/hmftools/archive/refs/tags/cuppa-v{{ version }}.tar.gz diff --git a/recipes/hmftools-orange/meta.yaml b/recipes/hmftools-orange/meta.yaml index 3289d58f61584..6db3361d5da0b 100644 --- a/recipes/hmftools-orange/meta.yaml +++ b/recipes/hmftools-orange/meta.yaml @@ -1,12 +1,12 @@ -{% set version = "3.7.0" %} -{% set sha256 = "5eefa9acb4040361ba4f56ec5670ccdcd0ac18e8b13e3bdbd6a6e6241104dfd1" %} +{% set version = "3.7.1_beta" %} +{% set sha256 = "1592dacf6a75c7d82fbb865b85e17cbb5b04d1acda8cdf5fb61c4a5cf9868929" %} package: name: hmftools-orange version: '{{ version }}' source: - url: 'https://github.com/hartwigmedical/hmftools/releases/download/orange-v{{ version }}/orange_v{{ version }}.jar' + url: https://github.com/hartwigmedical/hmftools/releases/download/orange-v{{ version }}/orange_v{{ version }}.jar sha256: '{{ sha256 }}' build: @@ -22,7 +22,7 @@ requirements: test: commands: - - 'orange 2>&1 | grep -q "ORANGE"' + - 'orange -version | grep Orange' about: home: https://github.com/hartwigmedical/hmftools/blob/master/orange/README.md diff --git a/recipes/hmftools-pave/meta.yaml b/recipes/hmftools-pave/meta.yaml index 84156f65d0e6f..8d3d58bc78dd7 100644 --- a/recipes/hmftools-pave/meta.yaml +++ b/recipes/hmftools-pave/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "1.6" %} -{% set sha256 = "c553b5224dae4f61958030d2b544ad990aca6fde145ee03f43214856f3dbf634" %} +{% set version = "1.7_beta" %} +{% set sha256 = "b6e67aa0bb96db3b50429afe4a6c6fad168660bf220f61b638e06b0c643969ab" %} package: name: hmftools-pave diff --git a/recipes/hmftools-peach/build.sh b/recipes/hmftools-peach/build.sh new file mode 100644 index 0000000000000..1d520e988c639 --- /dev/null +++ b/recipes/hmftools-peach/build.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +TGT="$PREFIX/share/$PKG_NAME-$PKG_VERSION-$PKG_BUILDNUM" +[ -d "$TGT" ] || mkdir -p "$TGT" +[ -d "${PREFIX}/bin" ] || mkdir -p "${PREFIX}/bin" + +cd "${SRC_DIR}" +mv peach*.jar $TGT/peach.jar + +cp $RECIPE_DIR/peach.sh $TGT/peach +ln -s $TGT/peach $PREFIX/bin +chmod 0755 "${PREFIX}/bin/peach" diff --git a/recipes/hmftools-peach/meta.yaml b/recipes/hmftools-peach/meta.yaml new file mode 100644 index 0000000000000..63ad9b011a668 --- /dev/null +++ b/recipes/hmftools-peach/meta.yaml @@ -0,0 +1,30 @@ +{% set version = "2.0.0" %} +{% set sha256 = "52ffd5dc9bd6018adc5854cbe10cdb2cc364e99099af2f9c8dbc7fdd80fab83e" %} + +package: + name: hmftools-peach + version: '{{ version }}' + +source: + url: https://github.com/hartwigmedical/hmftools/releases/download/peach-v{{ version }}/peach_v{{ version }}.jar + sha256: '{{ sha256 }}' + +build: + noarch: generic + number: 0 + run_exports: + - {{ pin_subpackage("hmftools-peach", max_pin="x.x") }} + +requirements: + run: + - openjdk >=8 + +test: + commands: + - 'peach -version | grep Peach' + +about: + home: https://github.com/hartwigmedical/hmftools/blob/master/peach/README.md + license: GPL-3.0-only + license_family: GPL3 + summary: Infer haplotypes for interpretation in a pharmacogenomic context diff --git a/recipes/hmftools-peach/peach.sh b/recipes/hmftools-peach/peach.sh new file mode 100755 index 0000000000000..4173740827fef --- /dev/null +++ b/recipes/hmftools-peach/peach.sh @@ -0,0 +1,69 @@ +#!/bin/bash +# hmftools PEACH executable shell script +# https://github.com/hartwigmedical/hmftools/tree/master/peach +set -eu -o pipefail + +export LC_ALL=en_US.UTF-8 + +# Find original directory of bash script, resolving symlinks +# http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in/246128#246128 +SOURCE="${BASH_SOURCE[0]}" +while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink + DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + SOURCE="$(readlink "$SOURCE")" + [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located +done +DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + +JAR_DIR=$DIR +ENV_PREFIX="$(dirname $(dirname $DIR))" +# Use Java installed with Anaconda to ensure correct version +java="$ENV_PREFIX/bin/java" + +# if JAVA_HOME is set (non-empty), use it. Otherwise keep "java" +if [ -n "${JAVA_HOME:=}" ]; then + if [ -e "$JAVA_HOME/bin/java" ]; then + java="$JAVA_HOME/bin/java" + fi +fi + +# extract memory and system property Java arguments from the list of provided arguments +# http://java.dzone.com/articles/better-java-shell-script +default_jvm_mem_opts="-Xms512m -Xmx1g" +jvm_mem_opts="" +jvm_prop_opts="" +pass_args="" +for arg in "$@"; do + case $arg in + '-D'*) + jvm_prop_opts="$jvm_prop_opts $arg" + ;; + '-XX'*) + jvm_prop_opts="$jvm_prop_opts $arg" + ;; + '-Xm'*) + jvm_mem_opts="$jvm_mem_opts $arg" + ;; + *) + if [[ ${pass_args} == '' ]] #needed to avoid preceeding space on first arg e.g. ' MarkDuplicates' + then + pass_args="$arg" + else + pass_args="$pass_args \"$arg\"" #quotes later arguments to avoid problem with ()s in MarkDuplicates regex arg + fi + ;; + esac +done + +if [ "$jvm_mem_opts" == "" ]; then + jvm_mem_opts="$default_jvm_mem_opts" +fi + +pass_arr=($pass_args) +if [[ ${pass_arr[0]:=} == org* ]] +then + eval "$java" $jvm_mem_opts $jvm_prop_opts -cp "$JAR_DIR/peach.jar" $pass_args +else + eval "$java" $jvm_mem_opts $jvm_prop_opts -jar "$JAR_DIR/peach.jar" $pass_args +fi +exit diff --git a/recipes/hmftools-redux/build.sh b/recipes/hmftools-redux/build.sh new file mode 100644 index 0000000000000..f60a91ef79fbf --- /dev/null +++ b/recipes/hmftools-redux/build.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +TGT="$PREFIX/share/$PKG_NAME-$PKG_VERSION-$PKG_BUILDNUM" +[ -d "$TGT" ] || mkdir -p "$TGT" +[ -d "${PREFIX}/bin" ] || mkdir -p "${PREFIX}/bin" + +cd "${SRC_DIR}" +mv redux*.jar $TGT/redux.jar + +cp $RECIPE_DIR/redux.sh $TGT/redux +ln -s $TGT/redux $PREFIX/bin +chmod 0755 "${PREFIX}/bin/redux" diff --git a/recipes/hmftools-redux/meta.yaml b/recipes/hmftools-redux/meta.yaml new file mode 100644 index 0000000000000..4cb7214af925a --- /dev/null +++ b/recipes/hmftools-redux/meta.yaml @@ -0,0 +1,31 @@ +{% set version = "1.0_beta" %} +{% set sha256 = "40caa3f1f493a1eb3c0e029f084f3c7d52456dbd9bbc72f118015b525ea9d467" %} + +package: + name: hmftools-redux + version: '{{ version }}' + +source: + url: https://github.com/hartwigmedical/hmftools/releases/download/redux-v{{ version }}/redux_v{{ version }}.jar + sha256: '{{ sha256 }}' + +build: + noarch: generic + number: 0 + run_exports: + - {{ pin_subpackage('hmftools-redux', max_pin="x.x") }} + +requirements: + run: + - openjdk >=8 + - sambamba >=1.0.1 + +test: + commands: + - 'redux -version | grep Redux' + +about: + home: https://github.com/hartwigmedical/hmftools/tree/master/redux + license: GPL-3.0-only + license_family: GPL + summary: Post-processing read alignments to control sequencing errors and biases diff --git a/recipes/hmftools-redux/redux.sh b/recipes/hmftools-redux/redux.sh new file mode 100755 index 0000000000000..14035447632af --- /dev/null +++ b/recipes/hmftools-redux/redux.sh @@ -0,0 +1,69 @@ +#!/bin/bash +# hmftools REDUX executable shell script +# https://github.com/hartwigmedical/hmftools/tree/master/redux +set -eu -o pipefail + +export LC_ALL=en_US.UTF-8 + +# Find original directory of bash script, resolving symlinks +# http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in/246128#246128 +SOURCE="${BASH_SOURCE[0]}" +while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink + DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + SOURCE="$(readlink "$SOURCE")" + [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located +done +DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + +JAR_DIR=$DIR +ENV_PREFIX="$(dirname $(dirname $DIR))" +# Use Java installed with Anaconda to ensure correct version +java="$ENV_PREFIX/bin/java" + +# if JAVA_HOME is set (non-empty), use it. Otherwise keep "java" +if [ -n "${JAVA_HOME:=}" ]; then + if [ -e "$JAVA_HOME/bin/java" ]; then + java="$JAVA_HOME/bin/java" + fi +fi + +# extract memory and system property Java arguments from the list of provided arguments +# http://java.dzone.com/articles/better-java-shell-script +default_jvm_mem_opts="-Xms512m -Xmx1g" +jvm_mem_opts="" +jvm_prop_opts="" +pass_args="" +for arg in "$@"; do + case $arg in + '-D'*) + jvm_prop_opts="$jvm_prop_opts $arg" + ;; + '-XX'*) + jvm_prop_opts="$jvm_prop_opts $arg" + ;; + '-Xm'*) + jvm_mem_opts="$jvm_mem_opts $arg" + ;; + *) + if [[ ${pass_args} == '' ]] #needed to avoid preceeding space on first arg e.g. ' MarkDuplicates' + then + pass_args="$arg" + else + pass_args="$pass_args \"$arg\"" #quotes later arguments to avoid problem with ()s in MarkDuplicates regex arg + fi + ;; + esac +done + +if [ "$jvm_mem_opts" == "" ]; then + jvm_mem_opts="$default_jvm_mem_opts" +fi + +pass_arr=($pass_args) +if [[ ${pass_arr[0]:=} == com.hartwig.* ]] +then + eval "$java" $jvm_mem_opts $jvm_prop_opts -cp "$JAR_DIR/redux.jar" $pass_args +else + eval "$java" $jvm_mem_opts $jvm_prop_opts -jar "$JAR_DIR/redux.jar" $pass_args +fi +exit diff --git a/recipes/hmftools-sage/meta.yaml b/recipes/hmftools-sage/meta.yaml index eb21a0fa7e6e5..14d85d65a3c30 100644 --- a/recipes/hmftools-sage/meta.yaml +++ b/recipes/hmftools-sage/meta.yaml @@ -1,17 +1,18 @@ -{% set version = "3.4.4" %} -{% set sha256 = "6fd6af086bb215b370a15de5f08d931175e6cab163e021757168d99e2babb8d7" %} +{% set version = "4.0_beta" %} +{% set beta_suffix = ".1" %} +{% set sha256 = "22a3495f4ebe425114af4b9ba472860b3e2fe16395e3223827d0b6eccba27eb3" %} package: name: hmftools-sage version: '{{ version }}' source: - url: https://github.com/hartwigmedical/hmftools/releases/download/sage-v{{ version }}/sage_v{{ version }}.jar + url: https://github.com/hartwigmedical/hmftools/releases/download/sage-v{{ version }}/sage_v{{ version }}{{ beta_suffix }}.jar sha256: '{{ sha256 }}' build: noarch: generic - number: 0 + number: 1 run_exports: - {{ pin_subpackage('hmftools-sage', max_pin="x") }} @@ -24,6 +25,7 @@ requirements: - r-dplyr - r-tidyr - r-ggplot2 + - r-patchwork - xorg-libxt - font-ttf-dejavu diff --git a/recipes/hmftools-virus-interpreter/meta.yaml b/recipes/hmftools-virus-interpreter/meta.yaml index d667dc1e799d2..8b993183d464c 100644 --- a/recipes/hmftools-virus-interpreter/meta.yaml +++ b/recipes/hmftools-virus-interpreter/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "1.3" %} -{% set sha256 = "b2abfcd2526e0de335455fa687fae0bfeda2f9358c53c7aa0a07bb765ea50545" %} +{% set version = "3.7_beta" %} +{% set sha256 = "a72eec16f2fea85b7f49fb1944427c7e5939d760ec388d324f9078a915875719" %} package: name: hmftools-virus-interpreter @@ -21,7 +21,7 @@ requirements: test: commands: - - 'virusinterpreter | grep "Virus Interpreter"' + - 'virusinterpreter -version | grep VirusInterpreter' about: home: https://github.com/hartwigmedical/hmftools/blob/master/virus-interpreter/README.md diff --git a/recipes/hopla/meta.yaml b/recipes/hopla/meta.yaml index c628b8c8f198e..4dd3e825901cd 100644 --- a/recipes/hopla/meta.yaml +++ b/recipes/hopla/meta.yaml @@ -10,8 +10,10 @@ source: sha256: {{ hash }} build: - number: 0 + number: 1 noarch: generic + run_exports: + - {{ pin_subpackage("hopla", max_pin="x") }} requirements: run: @@ -26,7 +28,7 @@ requirements: - bioconductor-genomicranges >=1.42.0 - bioconductor-dnacopy >=1.64.0 - merlin 1.1.2.* # [not osx] - - pandoc >=2.* + - pandoc >=3.1.5 test: commands: diff --git a/recipes/hsdecipher/meta.yaml b/recipes/hsdecipher/meta.yaml new file mode 100644 index 0000000000000..a17618e11af73 --- /dev/null +++ b/recipes/hsdecipher/meta.yaml @@ -0,0 +1,34 @@ +{% set name = "HSDecipher" %} +{% set version = "1.1.2" %} + +package: + name: {{ name|lower }} + version: {{ version }} + +source: + url: https://github.com/zx0223winner/{{name|lower}}_conda/archive/refs/tags/v{{version}}.tar.gz + sha256: de199452e123255f2a2dd574900593c9ca6d9c91722c6f150b70f633d6a31af5 + +build: + number: 0 + noarch: python + script: bash conda_build_package.sh + run_exports: + - {{ pin_subpackage(name|lower, max_pin="x") }} + +requirements: + run: + - python >=3.7 + - pandas + - seaborn + - matplotlib-base +test: + commands: + - hsdecipher -h +about: + home: https://github.com/zx0223winner/HSDecipher + summary: Pipeline for the downstream analysis of highly similar duplicate genes + description: "Many tools have been developed to measure the degree of similarity between gene duplicates within and between species.Here, we present HSDecipher, a bioinformatics pipeline to assist users in the analysis and visualization of highly similar duplicate genes (HSDs). We describe the steps for analysis of HSDs statistics, expanding HSD gene set, and visualizing the results of comparative genomic analyses. HSDecipher represents a useful tool for researchers exploring the evolution of duplicate genes in select eukaryotic species." + license: GPL-3.0-or-later + license_file: license + diff --git a/recipes/hsdfinder/meta.yaml b/recipes/hsdfinder/meta.yaml new file mode 100644 index 0000000000000..78c91f35e2d72 --- /dev/null +++ b/recipes/hsdfinder/meta.yaml @@ -0,0 +1,32 @@ +{% set name = "HSDFinder" %} +{% set version = "1.1.1" %} +{% set sha256 = "2e578bc3161290ff64dfd3e24c91199b562d117d2d3f2aa45dde47142899478c" %} + +package: + name: {{ name|lower }} + version: {{ version }} + +source: + url: https://github.com/zx0223winner/hsdfinder_conda/archive/refs/tags/{{ name|lower }}.tar.gz + sha256: {{ sha256 }} + +build: + noarch: python + number: 0 + script: bash conda_build_package.sh + run_exports: + - {{ pin_subpackage(name|lower, max_pin="x") }} + +requirements: + run: + - python >=3.7 + - pandas +test: + commands: + - hsdfinder -h + - hsd_to_kegg -h +about: + home: https://github.com/zx0223winner/HSDFinder + summary: a tool to predict highly similar duplicates (HSDs) in eukaryotes + license: MIT + license_file: LICENSE.md diff --git a/recipes/hybracter/meta.yaml b/recipes/hybracter/meta.yaml index 2df2be7c1872a..d4752768e5416 100644 --- a/recipes/hybracter/meta.yaml +++ b/recipes/hybracter/meta.yaml @@ -1,5 +1,5 @@ {% set name = "hybracter" %} -{% set version = "0.9.0" %} +{% set version = "0.9.1" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/hybracter-{{ version }}.tar.gz - sha256: 5b0d928520d1ead9d3007b48903f6a895a44243324f6b71276de08c896b16ae0 + sha256: e5f71934901552d4c26a3be0cae71982001ed866af0c27fe2da8432b08d395ad build: number: 0 diff --git a/recipes/igv-reports/meta.yaml b/recipes/igv-reports/meta.yaml index b0f83dc28f9e0..3dad6f0d57606 100644 --- a/recipes/igv-reports/meta.yaml +++ b/recipes/igv-reports/meta.yaml @@ -1,5 +1,5 @@ {% set name = "igv-reports" %} -{% set version = "1.14.0" %} +{% set version = "1.14.1" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz - sha256: 988852796d260dbd715406605f901aca571c51035526412c74e1b49ff27bee5a + sha256: edc03797c90b91dc0ac35b8352b316b11dc71c380f94ff3802e784baa971b19a build: noarch: python diff --git a/recipes/impg/build.sh b/recipes/impg/build.sh index d70db500fe871..0b47a91666337 100644 --- a/recipes/impg/build.sh +++ b/recipes/impg/build.sh @@ -1,8 +1,6 @@ #!/bin/bash -euo -# Add workaround for SSH-based Git connections from Rust/cargo. See https://github.com/rust-lang/cargo/issues/2078 for details. -# We set CARGO_HOME because we don't pass on HOME to conda-build, thus rendering the default "${HOME}/.cargo" defunct. -export CARGO_NET_GIT_FETCH_WITH_CLI=true CARGO_HOME="${BUILD_PREFIX}/.cargo" +set -xe # build statically linked binary with Rust RUST_BACKTRACE=1 diff --git a/recipes/impg/meta.yaml b/recipes/impg/meta.yaml index 04999b4407314..0d323eb9e9ac2 100644 --- a/recipes/impg/meta.yaml +++ b/recipes/impg/meta.yaml @@ -1,5 +1,5 @@ {% set name = "impg" %} -{% set version = "0.2.0" %} +{% set version = "0.2.1" %} package: name: {{ name|lower }} @@ -7,10 +7,10 @@ package: source: url: https://github.com/pangenome/{{ name }}/archive/refs/tags/v{{ version }}.tar.gz - sha256: ad2f4f4ea68e0c3feb5ecef5b408bb8649c4a67f5203ca7320434ed9a070c7ee + sha256: 6b7a8786c1bfcc663c5154b11965d7b5fe31454a6363f6448a07ae935ea8c085 build: - number: 0 + number: 1 run_exports: - {{ pin_subpackage(name, max_pin='x.x') }} @@ -31,5 +31,8 @@ about: dev_url: https://github.com/pangenome/{{ name }} extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 recipe-maintainers: - AndreaGuarracino diff --git a/recipes/infernal/build.sh b/recipes/infernal/build.sh index 96e0f326ebabc..712789d396a1e 100644 --- a/recipes/infernal/build.sh +++ b/recipes/infernal/build.sh @@ -2,9 +2,13 @@ set -ex +export M4="${BUILD_PREFIX}/bin/m4" +export INCLUDE_PATH="${PREFIX}/include" +export LDFLAGS="${LDFLAGS} -L${PREFIX}/lib" + grep -l -r "/usr/bin/perl" . | xargs sed -i.bak -e 's/usr\/bin\/perl/usr\/bin\/env perl/g' -autoreconf -i +autoreconf -if case $(uname -m) in "x86_64") @@ -19,6 +23,6 @@ case $(uname -m) in ;; esac -./configure --prefix="${PREFIX}" "${ARCH_OPTS}" +./configure --prefix="${PREFIX}" CC="${CC}" CFLAGS="${CFLAGS} -O3 -L${PREFIX}/lib" "${ARCH_OPTS}" make -j${CPU_COUNT} make install diff --git a/recipes/infernal/meta.yaml b/recipes/infernal/meta.yaml index 0bb3322d57752..78a8740143bd8 100644 --- a/recipes/infernal/meta.yaml +++ b/recipes/infernal/meta.yaml @@ -10,7 +10,7 @@ source: sha256: ad4ddae02f924ca7c85bc8c4a79c9f875af8df96aeb726702fa985cbe752497f build: - number: 2 + number: 3 run_exports: - {{ pin_subpackage(name, max_pin="x") }} @@ -26,6 +26,9 @@ requirements: - libgomp # [linux] - llvm-openmp # [osx] - wget + run: + - libgomp # [linux] + - llvm-openmp # [osx] test: commands: @@ -41,18 +44,19 @@ test: - cmstat -h about: - home: http://eddylab.org/infernal - license: BSD-3-Clause + home: 'http://eddylab.org/infernal' + license: "BSD-3-Clause" license_family: BSD license_file: LICENSE - summary: Infernal is for searching DNA sequence databases for RNA structure and sequence similarities. - description: Infernal ("INFERence of RNA ALignment") is for searching DNA sequence databases for RNA structure and sequence similarities. - doc_url: http://eddylab.org/infernal/Userguide.pdf - dev_url: https://github.com/EddyRivasLab/infernal + summary: "Infernal is for searching DNA sequence databases for RNA structure and sequence similarities." + description: "Infernal (INFERence of RNA ALignment) is for searching DNA sequence databases for RNA structure and sequence similarities." + doc_url: "http://eddylab.org/infernal/Userguide.pdf" + dev_url: "https://github.com/EddyRivasLab/infernal" extra: additional-platforms: - linux-aarch64 + - osx-arm64 identifiers: - doi:10.1093/bioinformatics/btt509 - biotools:infernal diff --git a/recipes/intarna/meta.yaml b/recipes/intarna/meta.yaml index 2fd80c6850890..534cc11818644 100644 --- a/recipes/intarna/meta.yaml +++ b/recipes/intarna/meta.yaml @@ -1,5 +1,5 @@ -{% set INTARNA_VERSION = "3.4.0" %} -{% set INTARNA_SHA256 = "4b0c53472dad49f3fbe6f0d3b1613d22d7b438bf650936da6a351a25fa9d535c" %} +{% set INTARNA_VERSION = "3.4.1" %} +{% set INTARNA_SHA256 = "4fd338a9a7a62f4398a27f41783120abaad9bccdecd39387c436adb0601f0ed8" %} {% set VRNA_VERSION = "2.4.14" %} package: @@ -12,7 +12,7 @@ about: summary: Efficient RNA-RNA interaction prediction incorporating seeding and accessibility of interacting sites build: - number: 2 + number: 0 run_exports: - {{ pin_subpackage('intarna', max_pin="x.x") }} diff --git a/recipes/iseq/meta.yaml b/recipes/iseq/meta.yaml index 2d579ced77195..193270e7e7cef 100644 --- a/recipes/iseq/meta.yaml +++ b/recipes/iseq/meta.yaml @@ -1,5 +1,5 @@ {% set name = "iSeq" %} -{% set version = "1.0.0" %} +{% set version = "1.1.0" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://github.com/BioOmics/{{ name }}/releases/download/v{{ version }}/{{ name }}-v{{ version }}.tar.gz - sha256: a7209fa37eaa95c1beef471a494d82d56bc4313c801d05fb7478cfa3e745a67e + sha256: de0b9f1e06842a14f0a112023b989a38f6d422d860d44b19d3ec717d3c00bc34 build: noarch: generic diff --git a/recipes/isoquant/meta.yaml b/recipes/isoquant/meta.yaml index f727f0b87a4ae..ee3930be3b942 100644 --- a/recipes/isoquant/meta.yaml +++ b/recipes/isoquant/meta.yaml @@ -1,6 +1,6 @@ {% set name = "IsoQuant" %} -{% set version = "3.6.0" %} -{% set sha256 = "510d12cb1f1edf7dbe4ba433681d2f5c3c1c15bc70711a24758884a08ef2d68b" %} +{% set version = "3.6.1" %} +{% set sha256 = "6d16e47e9ca45f9a0d029940d5b84e03038d9ba3d640945e3a5087acfd7ed56d" %} package: name: {{ name | lower }} diff --git a/recipes/itsxpress/meta.yaml b/recipes/itsxpress/meta.yaml index 2ecd49b405f60..cbef171ed668d 100644 --- a/recipes/itsxpress/meta.yaml +++ b/recipes/itsxpress/meta.yaml @@ -1,8 +1,8 @@ {% set name = "itsxpress" %} -{% set version = "2.1.0" %} +{% set version = "2.1.2" %} {% set file_ext = "tar.gz" %} {% set hash_type = "sha256" %} -{% set hash_value = "608e5c55526d4c084f8ea552c7bd2d232505ae83751fc517c8ceabb2eb483aed" %} +{% set hash_value = "5a19ef9333ac4acacfa1da9c27ff3f713d7521661fbfe7541c58221c2ce2d08f" %} package: name: '{{ name|lower }}' diff --git a/recipes/jalview/meta.yaml b/recipes/jalview/meta.yaml index 54db0fb5834b3..d6bf758f6eb2f 100644 --- a/recipes/jalview/meta.yaml +++ b/recipes/jalview/meta.yaml @@ -1,5 +1,5 @@ {% set name = "jalview" %} -{% set version = "2.11.3.3" %} +{% set version = "2.11.4.0" %} package: name: {{ name|lower }} @@ -13,7 +13,7 @@ build: source: url: https://www.jalview.org/source/jalview_{{ version|replace(".", "_") }}.tar.gz - sha256: "e41bcbb8d8e46eaed125f5bdac9f16ef443a804bb5b6c1310abd9489a862fa79" + sha256: "a128b70eb51228a02ecd47c93fa74140ffd905fbe5bf184fe405c39e78390a6d" requirements: build: diff --git a/recipes/jbrowse2/meta.yaml b/recipes/jbrowse2/meta.yaml index a0480822b3d1e..821dfee562371 100644 --- a/recipes/jbrowse2/meta.yaml +++ b/recipes/jbrowse2/meta.yaml @@ -1,12 +1,12 @@ # When updating, check the @jbrowse/cli version in build.sh too -{% set version = "2.15.1" %} +{% set version = "2.15.4" %} package: name: jbrowse2 version: {{ version }} source: - sha256: bce0b5dba2dbbd4fa6d6f909865a18290c5878870304eb539ece90f2e882a4ef + sha256: fa0a6163dab65d1705c1968cc41adc0f6b035a8fbc572b7ddff12721b5b58642 url: https://github.com/GMOD/jbrowse-components/releases/download/v{{ version }}/jbrowse-web-v{{ version }}.zip build: diff --git a/recipes/k8/build.sh b/recipes/k8/build.sh index 164078d31402a..96edeaf676cde 100644 --- a/recipes/k8/build.sh +++ b/recipes/k8/build.sh @@ -1,18 +1,30 @@ -#!/usr/bin/env bash +#!/bin/bash set -x +export LDFLAGS="${LDFLAGS} -L${PREFIX}/lib" + DEFAULT_LINUX_VERSION="cos7" # * k8 is only compatible with Node.js v18.x, not more recent node versions # * node-18.19.x can be compiled on CentOS 7, but not on macOS with clang # * node-18.20.x can be compiled on MacOS but not on CentOS 7 because it # includes an updated c-ares library which is incompatible with glibc on CentOS 7 -if [ "$(uname)" == "Darwin" ]; then - NODE_VERSION="18.20.4" +if [[ "$(uname)" == "Darwin" ]]; then + NODE_VERSION="18.20.4" + export LDFLAGS="${LDFLAGS} -Wl,-rpath,${PREFIX}/lib" else - NODE_VERSION="18.19.1" + NODE_VERSION="18.19.1" fi +case $(uname -m) in + x86_64) + THREADS="-j2" + ;; + *) + THREADS="-j3" + ;; +esac + wget -O- https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}.tar.gz | tar -zxf - pushd node-v${NODE_VERSION} @@ -25,16 +37,18 @@ patch -p0 < ${RECIPE_DIR}/nodejs-x86_64.patch # The provided configure script is a sh/python hybrid which boils down to one line of Python python -c "import configure" --without-node-snapshot --without-etw --without-npm --without-inspector --without-dtrace -make -j3 +make "${THREADS}" popd # make it possible to set conda build's CXXFLAGS and point to the Node sources sed -i.bak 's/CXXFLAGS=/CXXFLAGS?=/' Makefile sed -i.bak 's/NODE_SRC=/NODE_SRC?=/' Makefile sed -i.bak 's/LIBS=/LIBS?=/' Makefile +rm -rf *.bak # Then compile k8 NODE_SRC="node-v${NODE_VERSION}" CXXFLAGS="${CXXFLAGS} -std=c++17 -g -O3 -Wall" LIBS="${LDFLAGS} -pthread" make mkdir -p $PREFIX/bin -cp -f k8 $PREFIX/bin/k8 +chmod 0755 k8 +cp -f k8 $PREFIX/bin/ diff --git a/recipes/k8/meta.yaml b/recipes/k8/meta.yaml index 690b3631745dd..98f026709acd1 100644 --- a/recipes/k8/meta.yaml +++ b/recipes/k8/meta.yaml @@ -10,8 +10,8 @@ source: sha256: 4157aa86066eb0a7874de194893c4544ac772d009cc1148377c9c346f9fc6d07 build: - number: 2 - skip: True # [x86_64] + number: 3 + skip: True # [osx and x86_64] run_exports: - {{ pin_subpackage('k8', max_pin="x") }} @@ -21,7 +21,8 @@ requirements: - make - sysroot_linux-64 >=2.17 # [linux and x86_64] host: - - python ==3.8 + - python >=3.8 + - setuptools - zlib - wget - tar @@ -39,8 +40,9 @@ about: license: MIT license_family: MIT license_file: "LICENSE.txt" - summary: "Lightweight JavaScript shell based on Google's V8 JavaScript engine" + summary: "Lightweight JavaScript shell based on Google's V8 JavaScript engine." dev_url: "https://github.com/attractivechaos/k8" + doc_url: "https://github.com/attractivechaos/k8/blob/v{{ version }}/README.md" extra: additional-platforms: diff --git a/recipes/kalamari/meta.yaml b/recipes/kalamari/meta.yaml index ec2367f994cd2..86fd246313eeb 100644 --- a/recipes/kalamari/meta.yaml +++ b/recipes/kalamari/meta.yaml @@ -1,5 +1,5 @@ {% set name = "Kalamari" %} -{% set version = "5.7.0" %} +{% set version = "5.7.1" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://github.com/lskatz/{{ name }}/archive/refs/tags/v{{ version }}.tar.gz - sha256: d8d67bde9e4bbff75ae63c705f6c2ecdc6e2a378f71318744fc24f8420b78e68 + sha256: 41a70037424da3658e6c92e3faca335d4cf02301fc74a5b5b27cd2611aef5681 build: number: 0 diff --git a/recipes/kallisto/build.sh b/recipes/kallisto/build.sh index 99c91effdd6c4..5f7b7f92b140d 100644 --- a/recipes/kallisto/build.sh +++ b/recipes/kallisto/build.sh @@ -1,13 +1,38 @@ #!/bin/bash +mkdir -p "${PREFIX}/bin" +export M4="${BUILD_PREFIX}/bin/m4" + cd ext/htslib || exit 1 -export M4=${BUILD_PREFIX}/bin/m4 autoreconf --force --install --verbose ./configure cd ../.. || exit 1 -mkdir -p "${PREFIX}/bin" -mkdir -p build -cd build || exit 1 -cmake -DCMAKE_INSTALL_PREFIX:PATH="$PREFIX" .. -DUSE_HDF5=ON -make -make install + +case $(uname -m) in + x86_64) + ARCH_OPTS="-DENABLE_AVX2=OFF -DCOMPILATION_ARCH=OFF" + ;; + aarch64) + ARCH_OPTS="-DCOMPILATION_ARCH=OFF" + ;; + arm64) + ARCH_OPTS="-DENABLE_AVX2=OFF -DCOMPILATION_ARCH=OFF" + ;; + *) + ;; +esac + +if [[ `uname` == "Darwin" ]]; then + export CONFIG_ARGS="-DCMAKE_FIND_FRAMEWORK=NEVER -DCMAKE_FIND_APPBUNDLE=NEVER" +else + export CONFIG_ARGS="" +fi + +cmake -S. -B build -DCMAKE_INSTALL_PREFIX="${PREFIX}" \ + -DUSE_HDF5=ON -DUSE_BAM=ON -DBUILD_FUNCTESTING=ON -DMAX_KMER_SIZE=64 \ + -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER="${CXX}" \ + -DCMAKE_CXX_FLAGS="${CXXFLAGS} -O3 -I${PREFIX}/include" \ + "${ARCH_OPTS}" \ + "${CONFIG_ARGS}" + +cmake --build build --target install -v diff --git a/recipes/kallisto/meta.yaml b/recipes/kallisto/meta.yaml index 489c0d5c2a274..49b6ca8115b6e 100644 --- a/recipes/kallisto/meta.yaml +++ b/recipes/kallisto/meta.yaml @@ -1,12 +1,13 @@ -{% set version = "0.51.0" %} +{% set name = "kallisto" %} +{% set version = "0.51.1" %} package: - name: kallisto + name: {{ name }} version: {{ version }} source: - url: https://github.com/pachterlab/kallisto/archive/V{{ version }}.tar.gz - sha256: efeb0191c1a6a0d6de69111fb66f4bda51ff31fb40c513280f072bd44556f80d + url: https://github.com/pachterlab/kallisto/archive/refs/tags/v{{ version }}.tar.gz + sha256: a8bcc23bca6ac758f15e30bb77e9e169e628beff2da3be2e34a53e1d42253516 build: number: 0 @@ -21,36 +22,34 @@ requirements: - autoconf - automake host: + - libcurl - bzip2 - hdf5 - xz - zlib run: - - bzip2 - hdf5 - - xz - - zlib test: commands: - kallisto cite about: - home: "http://pachterlab.github.io/kallisto" - license: BSD-2-Clause + home: "https://pachterlab.github.io/kallisto" + license: "BSD-2-Clause" license_family: BSD - summary: Quantifying abundances of transcripts from RNA-Seq data, or more generally of target sequences using high-throughput sequencing reads. - dev_url: https://github.com/pachterlab/kallisto + summary: "Quantifying abundances of transcripts from RNA-Seq data, or more generally of target sequences using high-throughput sequencing reads." + dev_url: "https://github.com/pachterlab/kallisto" doc_url: "https://pachterlab.github.io/kallisto/manual.html" extra: identifiers: - biotools:kallisto - doi:10.1038/nbt.3519 + - usegalaxy-eu:kallisto_pseudo + - usegalaxy-eu:kallisto_quant recipe-maintainers: - mjsteinbaugh - skip-lints: - - missing_tests additional-platforms: - linux-aarch64 - osx-arm64 diff --git a/recipes/kleborate/meta.yaml b/recipes/kleborate/meta.yaml index 8f40f1665c01c..b1c2fad6fee70 100644 --- a/recipes/kleborate/meta.yaml +++ b/recipes/kleborate/meta.yaml @@ -1,5 +1,5 @@ {% set name = "kleborate" %} -{% set version = "3.0.9" %} +{% set version = "3.1.0" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/kleborate-{{ version }}.tar.gz" - sha256: 9c1757aa4994a9bb5f3b7356cc8f0d54b99a2d633f33531d35d9137b835e5db2 + sha256: efb249d5b402502ae325d9b189c425464de930a0e455c5060d8aeea35dbbc920 build: number: 0 @@ -41,13 +41,13 @@ test: - kleborate --help about: - home: "https://kleboratemodular.readthedocs.io" - dev_url: "https://github.com/klebgenomics/KleborateModular" + home: "https://kleborate.readthedocs.io/" + dev_url: "https://github.com/klebgenomics/Kleborate" summary: "Kleborate: a tool for typing and screening pathogen genome assemblies" license: "GPL-3.0-or-later" license_family: GPL3 license_file: LICENSE - doc_url: "https://kleboratemodular.readthedocs.io" + doc_url: "https://kleborate.readthedocs.io/" extra: recipe-maintainers: diff --git a/recipes/kmc/build.sh b/recipes/kmc/build.sh index 2b3e4f0ef50b6..709b8d1dde013 100644 --- a/recipes/kmc/build.sh +++ b/recipes/kmc/build.sh @@ -4,7 +4,7 @@ mkdir -p ${PREFIX}/bin mkdir -p ${PREFIX}/lib mkdir -p ${PREFIX}/include -if [ "$(uname)" == "Darwin" ]; then +if [[ "$(uname)" == "Darwin" ]]; then mv bin/kmc ${PREFIX}/bin mv bin/kmc_tools ${PREFIX}/bin mv bin/kmc_dump ${PREFIX}/bin diff --git a/recipes/kmc/meta.yaml b/recipes/kmc/meta.yaml index bde88e12d619b..bd6b7d6c5e889 100644 --- a/recipes/kmc/meta.yaml +++ b/recipes/kmc/meta.yaml @@ -4,8 +4,10 @@ {% set sha256 = "158f2084f8d928b3f33b8aaf7d1220fee4183bf46837787e5e6b16bbdf54d31d" %} # [linux and x86_64] {% set url = "https://github.com/refresh-bio/KMC/releases/download/v3.2.4/KMC3.2.4.linux.arm64.tar.gz" %} # [linux and aarch64] {% set sha256 = "3049745a71c4219fb05cf003a53b03a9f434e8afacb79c710488f1aefae0a9c8" %} # [linux and aarch64] -{% set url = "https://github.com/refresh-bio/KMC/releases/download/v3.2.4/KMC3.2.4.mac.x64.tar.gz" %} # [osx] -{% set sha256 = "70d66545d5802cf116469e41acb2a04631271feac81ff5c4d1c299e9407ca326" %} # [osx] +{% set url = "https://github.com/refresh-bio/KMC/releases/download/v3.2.4/KMC3.2.4.mac.x64.tar.gz" %} # [osx and x86_64] +{% set sha256 = "70d66545d5802cf116469e41acb2a04631271feac81ff5c4d1c299e9407ca326" %} # [osx and x86_64] +{% set url = "https://github.com/refresh-bio/KMC/releases/download/v3.2.4/KMC3.2.4.mac.arm64.tar.gz" %} # [osx and arm64] +{% set sha256 = "a84b07bc2097e71ee7d23588a58070d1dc8ae37d1f63d3daf79cb518cc6b66ae" %} # [osx and arm64] package: name: {{ name }} @@ -16,7 +18,7 @@ source: sha256: {{ sha256 }} build: - number: 1 + number: 2 run_exports: - {{ pin_subpackage("kmc", max_pin="x") }} @@ -27,13 +29,10 @@ requirements: host: - zlib - bzip2 - run: - - zlib - - bzip2 test: commands: - - kmc --help # [not aarch64] + - kmc --help # [not aarch64] about: home: https://github.com/refresh-bio/kmc @@ -41,14 +40,15 @@ about: description: | KMC is a utility designed for counting k-mers (sequences of consecutive k symbols) in a set of DNA sequences. KMC tools allow performing various operations on k-mers sets. - license: GPL-3 + license: "GPL-3.0-or-later" license_family: GPL3 - license_file: gpl-3.0.txt + license_file: "gpl-3.0.txt" dev_url: https://github.com/refresh-bio/kmc extra: additional-platforms: - linux-aarch64 + - osx-arm64 identifiers: - biotools:kmc - doi:10.1093/bioinformatics/btx304 diff --git a/recipes/kmer-db/build.sh b/recipes/kmer-db/build.sh deleted file mode 100644 index 6a8bc644b0283..0000000000000 --- a/recipes/kmer-db/build.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - - -CFLAGS="$CFLAGS -I${PREFIX}/include" -LDFLAGS="$LDFLAGS -L${PREFIX}/lib" - -make CC="${CXX}" -install -d "${PREFIX}/bin" -install kmer-db "${PREFIX}/bin" diff --git a/recipes/kmer-db/meta.yaml b/recipes/kmer-db/meta.yaml index f8fca76dc2efc..96e4c9045fe3d 100644 --- a/recipes/kmer-db/meta.yaml +++ b/recipes/kmer-db/meta.yaml @@ -1,5 +1,14 @@ -{% set version = "1.11.1" %} -{% set sha256 = "63886057a752a890f492bf4ca7ec97435eceebb4ac5ecb5664c69ae2736eaa80" %} +{% set version = "2.2.2" %} + +{% set system = "x64_linux" %} # [linux and x86_64] +{% set system = "x64_mac" %} # [osx and x86_64] +{% set system = "arm64_linux" %} # [linux and aarch64] +{% set system = "arm64_mac" %} # [osx and arm64] + +{% set sha256 = "e4bccee6380b7c0bfb4746285d36af52a9874b1cf66d62a8862e8579097b5e77" %} # [linux and x86_64] +{% set sha256 = "bfb22576eef88293af4695d297b0b6d3cddc726a882e09ef29bd4684a705977f" %} # [osx and x86_64] +{% set sha256 = "62055ecaf81fac76cfc05a8cd64eba958d2c45350312556777dc4db7355a802a" %} # [linux and aarch64] +{% set sha256 = "6ba58753b1141a005e8a97bf581c1eada5cec6713a1f516518167f1da71b820b" %} # [osx and arm64] package: @@ -7,22 +16,18 @@ package: version: {{ version }} build: - number: 2 + number: 0 + run_exports: + - {{ pin_subpackage('kmer-db', max_pin='x') }} + script: | + mkdir -p "${PREFIX}/bin" + cp -v kmer-db "${PREFIX}/bin/" || { echo "Error: Failed to copy kmer-db binary"; exit 1; } + source: - url: https://github.com/refresh-bio/kmer-db/archive/v{{ version }}.tar.gz + url: https://github.com/refresh-bio/kmer-db/releases/download/v{{ version }}/kmer-db-v{{ version }}-{{ system }}.tar.gz sha256: {{ sha256 }} -requirements: - build: - - make - - {{ compiler('cxx') }} - - make - host: - - zlib - run: - - zlib - about: home: https://github.com/refresh-bio/kmer-db summary: "Kmer-db is a fast and memory-efficient tool for estimating evolutionary distances." @@ -33,3 +38,13 @@ about: test: commands: - kmer-db > /dev/null + - kmer-db -help + +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 + skip-lints: + - should_be_noarch_generic + - should_not_be_noarch_source + diff --git a/recipes/kmercamel/build.sh b/recipes/kmercamel/build.sh new file mode 100644 index 0000000000000..c307c32663a4b --- /dev/null +++ b/recipes/kmercamel/build.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +set -xe + +make -j ${CPU_COUNT} CXX="${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS}" +install -d "${PREFIX}/bin" +install kmercamel "${PREFIX}/bin/" diff --git a/recipes/kmercamel/meta.yaml b/recipes/kmercamel/meta.yaml new file mode 100644 index 0000000000000..051d2eae13cd8 --- /dev/null +++ b/recipes/kmercamel/meta.yaml @@ -0,0 +1,42 @@ +{% set version = "1.0.2" %} +{% set sha256 = "b37449ef3f5d1bb6a45e24e4eba8102c40e689aa4e3eccc119d30a998b5790fa" %} + +package: + name: kmercamel + version: {{ version }} + +source: + url: https://github.com/OndrejSladky/kmercamel/archive/v{{ version }}.tar.gz + sha256: {{ sha256 }} + +build: + number: 1 + run_exports: + - {{ pin_subpackage('kmercamel', max_pin="x") }} + + +requirements: + build: + - make + - {{ compiler('cxx') }} + host: + - zlib + - glpk + run: + - zlib + - glpk + +test: + commands: + - kmercamel -h 2>&1 | grep "KmerCamel" + +about: + home: https://github.com/OndrejSladky/kmercamel/ + license: MIT + license_file: LICENSE.txt + summary: KmerCamel🐫 - compressing k-mer sets using masked superstrings + +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 diff --git a/recipes/kmertools/meta.yaml b/recipes/kmertools/meta.yaml index 2ead57a35b7be..f8b6450da96f0 100644 --- a/recipes/kmertools/meta.yaml +++ b/recipes/kmertools/meta.yaml @@ -1,6 +1,6 @@ -{% set version = "0.1.3" %} +{% set version = "0.1.4" %} {% set name = "kmertools" %} -{% set sha256 = "02892ce148db4043bede10267f390c9fea14d49f65b43e1f05092153939bd5e0" %} +{% set sha256 = "457ffdbe2cc34b9faf63d06124d6d68ffc9b8c83825fc800d171899dc3a8b0d9" %} package: name: {{ name }} diff --git a/recipes/kraken2/build.sh b/recipes/kraken2/build.sh index c526a455c2265..3cb65dd41091f 100644 --- a/recipes/kraken2/build.sh +++ b/recipes/kraken2/build.sh @@ -15,10 +15,13 @@ if [[ "$(uname)" == Darwin ]]; then fi ./install_kraken2.sh "${outdir}/libexec" -for bin in kraken2 kraken2-build kraken2-inspect; do +for bin in kraken2 kraken2-build kraken2-inspect k2; do chmod +x "${outdir}/libexec/$bin" ln -s "${outdir}/libexec/$bin" "${PREFIX}/bin/$bin" # Change from double quotes to single in case of special chars - sed -i.bak "s#my \$KRAKEN_DIR = \"${outdir}/libexec\";#my \$KRAKEN_DIR = '${outdir}/libexec';#g" "${outdir}/libexec/${bin}" - rm -rf "${outdir}/libexec/${bin}.bak" + # we don't do the following for the k2 binariy + if [[ $bin != "k2" ]]; then + sed -i.bak "s#my \$KRAKEN_DIR = \"${outdir}/libexec\";#my \$KRAKEN_DIR = '${outdir}/libexec';#g" "${outdir}/libexec/${bin}" + rm -rf "${outdir}/libexec/${bin}.bak" + fi done diff --git a/recipes/kraken2/meta.yaml b/recipes/kraken2/meta.yaml index f772a6e069e1b..8d2baa946852b 100644 --- a/recipes/kraken2/meta.yaml +++ b/recipes/kraken2/meta.yaml @@ -13,8 +13,9 @@ source: - Makefile.patch build: - number: 1 - run_exports: '{{ pin_subpackage("kraken2", max_pin="x.x") }}' + number: 2 + run_exports: + - '{{ pin_subpackage(name, max_pin="x.x") }}' requirements: build: @@ -35,12 +36,14 @@ requirements: - tar - rsync - zlib + - python test: commands: - kraken2 --version - kraken2-build --version - kraken2-inspect --version + - k2 --help about: home: "https://ccb.jhu.edu/software/kraken2/" diff --git a/recipes/leviosam2/build.sh b/recipes/leviosam2/build.sh index 03747c4c0a3e9..a752a5cf3518c 100644 --- a/recipes/leviosam2/build.sh +++ b/recipes/leviosam2/build.sh @@ -1,5 +1,22 @@ -mkdir -p build; -cd build; -cmake -DCMAKE_INSTALL_PREFIX=${PREFIX} ${SRC_DIR} -make; -make install +#!/bin/bash + +export INCLUDES="-I{PREFIX}/include" +export LIBPATH="-L${PREFIX}/lib" +export LDFLAGS="${LDFLAGS} -L${PREFIX}/lib" +export CXXFLAGS="${CXXFLAGS} -O3 -I${PREFIX}/include" + +if [[ `uname` == "Darwin" ]]; then + export CONFIG_ARGS="-DCMAKE_FIND_FRAMEWORK=NEVER -DCMAKE_FIND_APPBUNDLE=NEVER" +else + export CONFIG_ARGS="" +fi + +cmake -S . -B build -DCMAKE_INSTALL_PREFIX="${PREFIX}" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_LIBRARY_PATH="${PREFIX}/lib" \ + -DCMAKE_INCLUDE_PATH="${PREFIX}/include" \ + -DCMAKE_CXX_COMPILER="${CXX}" \ + -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ + "${CONFIG_ARGS}" + +cmake --build build --target install -j "${CPU_COUNT}" -v diff --git a/recipes/leviosam2/meta.yaml b/recipes/leviosam2/meta.yaml index b039512101d06..d833f8fd73168 100644 --- a/recipes/leviosam2/meta.yaml +++ b/recipes/leviosam2/meta.yaml @@ -1,12 +1,13 @@ -{% set version = "0.4.2" %} +{% set name = "leviosam2" %} +{% set version = "0.5.0" %} package: - name: leviosam2 + name: {{ name }} version: {{ version }} source: - url: https://github.com/milkschen/leviosam2/archive/refs/tags/v{{ version }}.tar.gz - sha256: c0901f7e78e092058116a0b013286d4c452caeeaee778a24eb13301d08e56e30 + url: https://github.com/milkschen/{{ name }}/archive/refs/tags/v{{ version }}.tar.gz + sha256: 5829b1565702887aefab78aaba06687724fb229e27e5d7f1244746d9e1744163 build: number: 0 @@ -21,6 +22,7 @@ requirements: host: - htslib >=1.11 - sdsl-lite >=2.1.1 + - zlib >=1.2.11,<1.3.0a0 run: - python >=3.6 - htslib >=1.11 @@ -29,16 +31,20 @@ requirements: test: commands: - - leviosam2 -h + - leviosam2 -h + about: home: "https://github.com/milkschen/leviosam2" license: MIT license_family: MIT license_file: LICENSE - summary: "Fast and accurate coordinate conversion between assemblies" - doc_url: "https://github.com/milkschen/leviosam2/blob/main/workflow/README.md" + summary: "Fast and accurate coordinate conversion between assemblies." + doc_url: "https://github.com/milkschen/leviosam2/blob/v{{ version }}/README.md" + dev_url: "https://github.com/milkschen/leviosam2" extra: identifiers: - doi:10.1093/bioinformatics/btab396 - doi:10.1101/2022.04.27.489683 + additional-platforms: + - linux-aarch64 diff --git a/recipes/libcifpp/meta.yaml b/recipes/libcifpp/meta.yaml index 25da881803280..e81459934f2a9 100644 --- a/recipes/libcifpp/meta.yaml +++ b/recipes/libcifpp/meta.yaml @@ -1,6 +1,6 @@ {% set name = "libcifpp" %} -{% set version = "7.0.5" %} -{% set sha256 = "5de29b28e422c27464f346dc2dd238e514b06dd588590af7ec4139f03817f5a0" %} +{% set version = "7.0.7" %} +{% set sha256 = "0e88805b4704d4a899aeee6df5aaace1d6b47d8ccb3a3f39b35bc5a3997c09ac" %} package: name: {{ name|lower }} diff --git a/recipes/lighter/build.sh b/recipes/lighter/build.sh index a4d8ba8f7756a..40d3816a1b704 100644 --- a/recipes/lighter/build.sh +++ b/recipes/lighter/build.sh @@ -2,6 +2,16 @@ mkdir -p ${PREFIX}/bin +case $(uname -m) in + aarch64) + export CXXFLAGS="${CXXFLAGS} -Wno-narrowing" + ;; + *) + export CXXFLAGS="${CXXFLAGS}" + ;; +esac + make CXX="${CXX}" CXXFLAGS="${CXXFLAGS} -O3 -I${PREFIX}/include" LDFLAGS="${LDFLAGS} -L${PREFIX}/lib" +chmod 0755 lighter cp -f lighter ${PREFIX}/bin diff --git a/recipes/lighter/meta.yaml b/recipes/lighter/meta.yaml index b33f35505bc38..d53e24e3298d2 100644 --- a/recipes/lighter/meta.yaml +++ b/recipes/lighter/meta.yaml @@ -13,7 +13,7 @@ source: - 0001-makefile.patch build: - number: 0 + number: 1 run_exports: - {{ pin_subpackage('lighter', max_pin="x") }} @@ -30,15 +30,19 @@ test: - {{ name|lower }} -v | grep '{{ version }}' about: - home: https://github.com/mourisl/Lighter - license: GPL-3.0-or-later + home: "https://github.com/mourisl/Lighter" + license: "GPL-3.0-or-later" license_family: GPL3 license_file: LICENSE - summary: Lighter is a kmer-based error correction method for whole genome sequencing data - dev_url: https://github.com/mourisl/Lighter + summary: "Lighter is a kmer-based error correction method for whole genome sequencing data." + dev_url: "https://github.com/mourisl/Lighter" + doc_url: "https://github.com/mourisl/Lighter/blob/v{{ version }}/README.md" extra: identifiers: - biotools:{{ name }} - doi:10.1186/s13059-014-0509-9 - usegalaxy-eu:lighter + additional-platforms: + - linux-aarch64 + - osx-arm64 diff --git a/recipes/locityper/meta.yaml b/recipes/locityper/meta.yaml index b2b848ee455bd..c9c450090f4ed 100644 --- a/recipes/locityper/meta.yaml +++ b/recipes/locityper/meta.yaml @@ -1,5 +1,5 @@ {% set name = "locityper" %} -{% set version = "0.16.11" %} +{% set version = "0.16.12" %} package: name: {{ name }} @@ -7,7 +7,7 @@ package: source: url: https://github.com/tprodanov/locityper/archive/refs/tags/v{{ version }}.tar.gz - sha256: 616e7f38c77b9680ac61238d896b80011860dab70ee5986b5aefb5b7f16455c6 + sha256: 0bd3a82c1df6de921ed477edfca4ffb5017cf194807e358e482b49afba867dd7 build: number: 0 diff --git a/recipes/longreadsum/build_failure.linux-64.yaml b/recipes/longreadsum/build_failure.linux-64.yaml deleted file mode 100644 index 89d60e8b8f6d6..0000000000000 --- a/recipes/longreadsum/build_failure.linux-64.yaml +++ /dev/null @@ -1,104 +0,0 @@ -recipe_sha: 1402c0604195b26d66240c3c13d5f69a81727223e92946e08a9864a051389291 # The hash of the recipe's meta.yaml at which this recipe failed to build. -skiplist: true # Set to true to skiplist this recipe so that it will be ignored as long as its latest commit is the one given above. -log: |2- - libgcc-ng: 13.2.0-h77fa898_7 conda-forge - libgomp: 13.2.0-h77fa898_7 conda-forge - libsanitizer: 12.3.0-hb8811af_7 conda-forge - libstdcxx-devel_linux-64: 12.3.0-h0223996_107 conda-forge - libstdcxx-ng: 13.2.0-hc0a3c3a_7 conda-forge - make: 4.3-hd18ef5c_1 conda-forge - sysroot_linux-64: 2.12-he073ed8_17 conda-forge - - Preparing transaction: ...working... done - Verifying transaction: ...working... done - Executing transaction: ...working... done - Source cache directory is: /opt/conda/conda-bld/src_cache - Downloading source to cache: v1.3.1_eb4c7677d4.tar.gz - Downloading https://github.com/WGLab/LongReadSum/archive/refs/tags/v1.3.1.tar.gz - Success - Extracting download - source tree in: /opt/conda/conda-bld/longreadsum_1717711017947/work - export PREFIX=/opt/conda/conda-bld/longreadsum_1717711017947/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_p - export BUILD_PREFIX=/opt/conda/conda-bld/longreadsum_1717711017947/_build_env - export SRC_DIR=/opt/conda/conda-bld/longreadsum_1717711017947/work - INFO: activate-binutils_linux-64.sh made the following environmental changes: - ADDR2LINE=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-addr2line - AR=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-ar - AS=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-as - CXXFILT=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-cfilt - ELFEDIT=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-elfedit - GPROF=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-gprof - LD=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-ld - LD_GOLD=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-ld.gold - NM=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-nm - OBJCOPY=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-objcopy - OBJDUMP=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-objdump - RANLIB=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-ranlib - READELF=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-readelf - SIZE=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-size - STRINGS=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-strings - STRIP=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-strip - INFO: activate-gcc_linux-64.sh made the following environmental changes: - BUILD=x86_64-conda-linux-gnu - CC=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-cc - CC_FOR_BUILD=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-cc - CFLAGS=-march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/longreadsum-1.3.1 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix - CMAKE_ARGS=-DCMAKE_AR=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-ar -DCMAKE_CXX_COMPILER_AR=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-gcc-ar -DCMAKE_C_COMPILER_AR=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-gcc-ar -DCMAKE_RANLIB=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-ranlib -DCMAKE_CXX_COMPILER_RANLIB=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-gcc-ranlib -DCMAKE_C_COMPILER_RANLIB=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-gcc-ranlib -DCMAKE_LINKER=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-ld -DCMAKE_STRIP=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-strip -DCMAKE_BUILD_TYPE=Release -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY -DCMAKE_FIND_ROOT_PATH=$PREFIX;$BUILD_PREFIX/x86_64-conda-linux-gnu/sysroot -DCMAKE_INSTALL_PREFIX=$PREFIX -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_PROGRAM_PATH=$BUILD_PREFIX/bin;$PREFIX/bin - CMAKE_PREFIX_PATH=$PREFIX:$BUILD_PREFIX/x86_64-conda-linux-gnu/sysroot/usr - CONDA_BUILD_SYSROOT=$BUILD_PREFIX/x86_64-conda-linux-gnu/sysroot - CONDA_TOOLCHAIN_BUILD=x86_64-conda-linux-gnu - CONDA_TOOLCHAIN_HOST=x86_64-conda-linux-gnu - CPP=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-cpp - CPPFLAGS=-DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem $PREFIX/include - DEBUG_CFLAGS=-march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-all -fno-plt -Og -g -Wall -Wextra -fvar-tracking-assignments -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/longreadsum-1.3.1 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix - DEBUG_CPPFLAGS=-D_DEBUG -D_FORTIFY_SOURCE=2 -Og -isystem $PREFIX/include - GCC=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-gcc - GCC_AR=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-gcc-ar - GCC_NM=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-gcc-nm - GCC_RANLIB=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-gcc-ranlib - HOST=x86_64-conda-linux-gnu - LDFLAGS=-Wl,-O2 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,--disable-new-dtags -Wl,--gc-sections -Wl,--allow-shlib-undefined -Wl,-rpath,$PREFIX/lib -Wl,-rpath-link,$PREFIX/lib -L$PREFIX/lib - MESON_ARGS=--buildtype release --prefix=$PREFIX -Dlibdir=lib - _CONDA_PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata_x86_64_conda_cos6_linux_gnu - build_alias=x86_64-conda-linux-gnu - host_alias=x86_64-conda-linux-gnu - -BUILD=x86_64-conda_cos6-linux-gnu - -CONDA_BUILD_SYSROOT= - INFO: activate-gxx_linux-64.sh made the following environmental changes: - CXX=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-c - CXXFLAGS=-fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/longreadsum-1.3.1 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix - CXX_FOR_BUILD=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-c - DEBUG_CXXFLAGS=-fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-all -fno-plt -Og -g -Wall -Wextra -fvar-tracking-assignments -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/longreadsum-1.3.1 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix - GXX=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-g - Running setup.py... - running build_ext - building '_lrst' extension - creating build - creating build/temp.linux-x86_64-cpython-312 - creating build/temp.linux-x86_64-cpython-312/src - $BUILD_PREFIX/bin/x86_64-conda-linux-gnu-cc -fno-strict-overflow -DNDEBUG -O2 -Wall -fPIC -O2 -isystem $PREFIX/include -fPIC -O2 -isystem $PREFIX/include -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/longreadsum-1.3.1 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem $PREFIX/include -fPIC -Iinclude -I$PREFIX/include/python3.12 -Iinclude -I$PREFIX/include/python3.12 -c src/bam_module.cpp -o build/temp.linux-x86_64-cpython-312/src/bam_module.o -std=c11 - $BUILD_PREFIX/bin/x86_64-conda-linux-gnu-cc -fno-strict-overflow -DNDEBUG -O2 -Wall -fPIC -O2 -isystem $PREFIX/include -fPIC -O2 -isystem $PREFIX/include -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/longreadsum-1.3.1 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem $PREFIX/include -fPIC -Iinclude -I$PREFIX/include/python3.12 -Iinclude -I$PREFIX/include/python3.12 -c src/basic_statistics.cpp -o build/temp.linux-x86_64-cpython-312/src/basic_statistics.o -std=c11 - $BUILD_PREFIX/bin/x86_64-conda-linux-gnu-cc -fno-strict-overflow -DNDEBUG -O2 -Wall -fPIC -O2 -isystem $PREFIX/include -fPIC -O2 -isystem $PREFIX/include -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/longreadsum-1.3.1 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem $PREFIX/include -fPIC -Iinclude -I$PREFIX/include/python3.12 -Iinclude -I$PREFIX/include/python3.12 -c src/fast5_module.cpp -o build/temp.linux-x86_64-cpython-312/src/fast5_module.o -std=c11 - $BUILD_PREFIX/bin/x86_64-conda-linux-gnu-cc -fno-strict-overflow -DNDEBUG -O2 -Wall -fPIC -O2 -isystem $PREFIX/include -fPIC -O2 -isystem $PREFIX/include -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/longreadsum-1.3.1 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem $PREFIX/include -fPIC -Iinclude -I$PREFIX/include/python3.12 -Iinclude -I$PREFIX/include/python3.12 -c src/fasta_module.cpp -o build/temp.linux-x86_64-cpython-312/src/fasta_module.o -std=c11 - src/fasta_module.cpp:7:10: fatal error: zlib.h: No such file or directory - 7 | #include - | ^~~~~~~~ - compilation terminated. - error: command '/opt/conda/conda-bld/longreadsum_1717711017947/_build_env/bin/x86_64-conda-linux-gnu-cc' failed with exit code 1 - Traceback (most recent call last): - File "/opt/conda/bin/conda-build", line 11, in - sys.exit(execute()) - File "/opt/conda/lib/python3.10/site-packages/conda_build/cli/main_build.py", line 590, in execute - api.build( - File "/opt/conda/lib/python3.10/site-packages/conda_build/api.py", line 250, in build - return build_tree( - File "/opt/conda/lib/python3.10/site-packages/conda_build/build.py", line 3638, in build_tree - packages_from_this = build( - File "/opt/conda/lib/python3.10/site-packages/conda_build/build.py", line 2506, in build - utils.check_call_env( - File "/opt/conda/lib/python3.10/site-packages/conda_build/utils.py", line 405, in check_call_env - return _func_defaulting_env_to_os_environ("call", *popenargs, **kwargs) - File "/opt/conda/lib/python3.10/site-packages/conda_build/utils.py", line 381, in _func_defaulting_env_to_os_environ - raise subprocess.CalledProcessError(proc.returncode, _args) - subprocess.CalledProcessError: Command '['/bin/bash', '-o', 'errexit', '/opt/conda/conda-bld/longreadsum_1717711017947/work/conda_build.sh']' returned non-zero exit status 1. -# Last 100 lines of the build log. diff --git a/recipes/longreadsum/build_failure.osx-64.yaml b/recipes/longreadsum/build_failure.osx-64.yaml deleted file mode 100644 index a865a88b873f4..0000000000000 --- a/recipes/longreadsum/build_failure.osx-64.yaml +++ /dev/null @@ -1,104 +0,0 @@ -recipe_sha: 1402c0604195b26d66240c3c13d5f69a81727223e92946e08a9864a051389291 # The hash of the recipe's meta.yaml at which this recipe failed to build. -skiplist: true # Set to true to skiplist this recipe so that it will be ignored as long as its latest commit is the one given above. -log: |2- - clangxx_impl_osx-64: 16.0.6-h6d92fbe_15 conda-forge - clangxx_osx-64: 16.0.6-hb91bd55_15 conda-forge - compiler-rt: 16.0.6-ha38d28d_2 conda-forge - compiler-rt_osx-64: 16.0.6-ha38d28d_2 conda-forge - icu: 73.2-hf5e326d_0 conda-forge - ld64_osx-64: 711-ha20a434_0 conda-forge - libclang-cpp16: 16.0.6-default_h4c8afb6_7 conda-forge - libcxx: 17.0.6-h88467a6_0 conda-forge - libiconv: 1.17-hd75f5a5_2 conda-forge - libllvm16: 16.0.6-hbedff68_3 conda-forge - libxml2: 2.12.7-h3e169fe_1 conda-forge - libzlib: 1.3.1-h87427d6_1 conda-forge - llvm-tools: 16.0.6-hbedff68_3 conda-forge - make: 4.3-h22f3db7_1 conda-forge - openssl: 3.3.1-h87427d6_0 conda-forge - sigtool: 0.1.3-h88f4db0_0 conda-forge - tapi: 1100.0.11-h9ce4665_0 conda-forge - xz: 5.2.6-h775f41a_0 conda-forge - zstd: 1.5.6-h915ae27_0 conda-forge - - Preparing transaction: ...working... done - Verifying transaction: ...working... done - Executing transaction: ...working... done - Source cache directory is: /opt/mambaforge/envs/bioconda/conda-bld/src_cache - Downloading source to cache: v1.3.1_eb4c7677d4.tar.gz - Downloading https://github.com/WGLab/LongReadSum/archive/refs/tags/v1.3.1.tar.gz - Success - Traceback (most recent call last): - File "setup.py", line 8, in - import setuptools - ModuleNotFoundError: No module named 'setuptools' - Extracting download - Traceback (most recent call last): - File "/opt/mambaforge/envs/bioconda/bin/conda-build", line 11, in - source tree in: /opt/mambaforge/envs/bioconda/conda-bld/longreadsum_1717632276742/work - export PREFIX=/opt/mambaforge/envs/bioconda/conda-bld/longreadsum_1717632276742/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl - export BUILD_PREFIX=/opt/mambaforge/envs/bioconda/conda-bld/longreadsum_1717632276742/_build_env - export SRC_DIR=/opt/mambaforge/envs/bioconda/conda-bld/longreadsum_1717632276742/work - INFO: activate_clang_osx-64.sh made the following environmental changes: - AR=x86_64-apple-darwin13.4.0-ar - AS=x86_64-apple-darwin13.4.0-as - CC=x86_64-apple-darwin13.4.0-clang - sys.exit(execute()) - CC_FOR_BUILD=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-clang - CFLAGS=-march=core2 -mtune=haswell -mssse3 -ftree-vectorize -fPIC -fstack-protector-strong -O2 -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/longreadsum-1.3.1 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix - CHECKSYMS=x86_64-apple-darwin13.4.0-checksyms - CLANG=x86_64-apple-darwin13.4.0-clang - File "/opt/mambaforge/envs/bioconda/lib/python3.10/site-packages/conda_build/cli/main_build.py", line 590, in execute - CMAKE_ARGS=-DCMAKE_AR=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-ar -DCMAKE_CXX_COMPILER_AR=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-ar -DCMAKE_C_COMPILER_AR=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-ar -DCMAKE_RANLIB=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-ranlib -DCMAKE_CXX_COMPILER_RANLIB=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-ranlib -DCMAKE_C_COMPILER_RANLIB=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-ranlib -DCMAKE_LINKER=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-ld -DCMAKE_STRIP=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-strip -DCMAKE_INSTALL_NAME_TOOL=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-install_name_tool -DCMAKE_LIBTOOL=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-libtool -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_SYSROOT=/Applications/Xcode_15.0.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -DCMAKE_FIND_FRAMEWORK=LAST -DCMAKE_FIND_APPBUNDLE=LAST -DCMAKE_INSTALL_PREFIX=$PREFIX -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_PROGRAM_PATH=$BUILD_PREFIX/bin;$PREFIX/bin - CMAKE_PREFIX_PATH=:$PREFIX - CONDA_TOOLCHAIN_BUILD=x86_64-apple-darwin13.4.0 - api.build( - File "/opt/mambaforge/envs/bioconda/lib/python3.10/site-packages/conda_build/api.py", line 250, in build - return build_tree( - File "/opt/mambaforge/envs/bioconda/lib/python3.10/site-packages/conda_build/build.py", line 3638, in build_tree - packages_from_this = build( - File "/opt/mambaforge/envs/bioconda/lib/python3.10/site-packages/conda_build/build.py", line 2506, in build - utils.check_call_env( - File "/opt/mambaforge/envs/bioconda/lib/python3.10/site-packages/conda_build/utils.py", line 405, in check_call_env - return _func_defaulting_env_to_os_environ("call", *popenargs, **kwargs) - File "/opt/mambaforge/envs/bioconda/lib/python3.10/site-packages/conda_build/utils.py", line 381, in _func_defaulting_env_to_os_environ - raise subprocess.CalledProcessError(proc.returncode, _args) - subprocess.CalledProcessError: Command '['/bin/bash', '-o', 'errexit', '/opt/mambaforge/envs/bioconda/conda-bld/longreadsum_1717632276742/work/conda_build.sh']' returned non-zero exit status 1. - CONDA_TOOLCHAIN_HOST=x86_64-apple-darwin13.4.0 - CPPFLAGS=-D_FORTIFY_SOURCE=2 -isystem $PREFIX/include -mmacosx-version-min=10.9 - DEBUG_CFLAGS=-march=core2 -mtune=haswell -mssse3 -ftree-vectorize -fPIC -fstack-protector-strong -O2 -pipe -Og -g -Wall -Wextra -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/longreadsum-1.3.1 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix - HOST=x86_64-apple-darwin13.4.0 - INSTALL_NAME_TOOL=x86_64-apple-darwin13.4.0-install_name_tool - LD=x86_64-apple-darwin13.4.0-ld - LDFLAGS=-Wl,-headerpad_max_install_names -Wl,-dead_strip_dylibs -Wl,-rpath,$PREFIX/lib -L$PREFIX/lib - LDFLAGS_LD=-headerpad_max_install_names -dead_strip_dylibs -rpath $PREFIX/lib -L$PREFIX/lib - LIBTOOL=x86_64-apple-darwin13.4.0-libtool - LIPO=x86_64-apple-darwin13.4.0-lipo - MESON_ARGS=--buildtype release --prefix=$PREFIX -Dlibdir=lib - NM=x86_64-apple-darwin13.4.0-nm - NMEDIT=x86_64-apple-darwin13.4.0-nmedit - OBJC=x86_64-apple-darwin13.4.0-clang - OBJC_FOR_BUILD=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-clang - OTOOL=x86_64-apple-darwin13.4.0-otool - PAGESTUFF=x86_64-apple-darwin13.4.0-pagestuff - RANLIB=x86_64-apple-darwin13.4.0-ranlib - REDO_PREBINDING=x86_64-apple-darwin13.4.0-redo_prebinding - SDKROOT=/Applications/Xcode_15.0.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk - SEGEDIT=x86_64-apple-darwin13.4.0-segedit - SEG_ADDR_TABLE=x86_64-apple-darwin13.4.0-seg_addr_table - SEG_HACK=x86_64-apple-darwin13.4.0-seg_hack - SIZE=x86_64-apple-darwin13.4.0-size - STRINGS=x86_64-apple-darwin13.4.0-strings - STRIP=x86_64-apple-darwin13.4.0-strip - _CONDA_PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata_x86_64_apple_darwin13_4_0 - ac_cv_func_malloc_0_nonnull=yes - ac_cv_func_realloc_0_nonnull=yes - build_alias=x86_64-apple-darwin13.4.0 - host_alias=x86_64-apple-darwin13.4.0 - INFO: activate_clangxx_osx-64.sh made the following environmental changes: - CLANGXX=x86_64-apple-darwin13.4.0-clang - CXX=x86_64-apple-darwin13.4.0-clang - CXXFLAGS=-march=core2 -mtune=haswell -mssse3 -ftree-vectorize -fPIC -fstack-protector-strong -O2 -pipe -stdlib=libc -fvisibility-inlines-hidden -fmessage-length=0 -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/longreadsum-1.3.1 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix - CXX_FOR_BUILD=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-clang - DEBUG_CXXFLAGS=-march=core2 -mtune=haswell -mssse3 -ftree-vectorize -fPIC -fstack-protector-strong -O2 -pipe -stdlib=libc -fvisibility-inlines-hidden -fmessage-length=0 -Og -g -Wall -Wextra -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/longreadsum-1.3.1 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -# Last 100 lines of the build log. diff --git a/recipes/longreadsum/meta.yaml b/recipes/longreadsum/meta.yaml index c544cc30edc58..b8059e7edc4e3 100644 --- a/recipes/longreadsum/meta.yaml +++ b/recipes/longreadsum/meta.yaml @@ -10,8 +10,7 @@ source: sha256: '{{ sha256 }}' build: - number: 1 - skip: true # [py2k] + number: 2 entry_points: - longreadsum = entry_point:main run_exports: @@ -26,6 +25,8 @@ requirements: - swig - hdf5 - htslib + - zlib + - setuptools run: - python - numpy @@ -45,3 +46,8 @@ about: A fast and flexible QC tool for long read sequencing data. dev_url: https://github.com/WGLab/LongReadSum doc_url: https://github.com/WGLab/LongReadSum#readme + +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 diff --git a/recipes/lz-ani/meta.yaml b/recipes/lz-ani/meta.yaml new file mode 100644 index 0000000000000..adbcd793326c1 --- /dev/null +++ b/recipes/lz-ani/meta.yaml @@ -0,0 +1,46 @@ +{% set version = "1.2.0" %} + +{% set system = "x64_linux" %} # [linux and x86_64] +{% set system = "x64_mac" %} # [osx and x86_64] +{% set system = "arm64_linux" %} # [linux and aarch64] +{% set system = "arm64_mac" %} # [osx and arm64] + +{% set sha256 = "2d07cf3d06a5b9bc992858f699ef9a0d9a4d12473248e0080e6806ea8e734862" %} # [linux and x86_64] +{% set sha256 = "f6b5a0fe00688181e0486621942bc0adc58454e90c2f40c12e5ec874c7b4051a" %} # [osx and x86_64] +{% set sha256 = "e25fddd286778d0a9da3914858613406a3f5436d4a4a3306f613ea1cd07ad96b" %} # [linux and aarch64] +{% set sha256 = "fe27390f36e1c0719d0774bebd47ec96374f46f04b3bde8ae5be96b698c5a0dc" %} # [osx and arm64] +package: + name: lz-ani + version: {{ version }} + +build: + number: 0 + run_exports: + - {{ pin_subpackage('lz-ani', max_pin='x') }} + script: | + mkdir -p "${PREFIX}/bin" + cp -v lz-ani "${PREFIX}/bin/" || { echo "Error: Failed to copy lz-ani binary"; exit 1; } + +source: + url: https://github.com/refresh-bio/lz-ani/releases/download/v{{ version }}/lz-ani-v{{ version }}-{{ system }}.tar.gz + sha256: {{ sha256 }} + + +about: + home: https://github.com/refresh-bio/lz-ani + summary: "Fast and accurate tool for calculating Average Nucleotide Identity (ANI) among virus and bacteria genomes" + license: GPL-3.0-or-later + license_family: GPL3 + license_file: LICENSE + +test: + commands: + - lz-ani > /dev/null + +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 + skip-lints: + - should_be_noarch_generic + - should_not_be_noarch_source \ No newline at end of file diff --git a/recipes/macrel/meta.yaml b/recipes/macrel/meta.yaml index 9c9a48f2f5a66..7df1b4dc7941c 100644 --- a/recipes/macrel/meta.yaml +++ b/recipes/macrel/meta.yaml @@ -1,6 +1,6 @@ {% set name = "macrel" %} -{% set version = "1.4.0" %} -{% set sha256 = "323d21a43965af912ca2165a28aa5c0f25851afbc4dc32ecf805b3da5e265376" %} +{% set version = "1.5.0" %} +{% set sha256 = "d2a4e3ba756af530f0fb66e95530a6e29c0c4074c40c7e55246dec0fc68c5296" %} package: name: {{ name }} diff --git a/recipes/macs3/meta.yaml b/recipes/macs3/meta.yaml index 844a8d9e8a0e7..7fcee4f154187 100644 --- a/recipes/macs3/meta.yaml +++ b/recipes/macs3/meta.yaml @@ -1,21 +1,21 @@ {% set name = "MACS3" %} -{% set version = "3.0.1" %} -{% set sha256 = "9e1a63685629852e6128a3270d264f990790538f48610aac7fd2fd139ef8fe12" %} +{% set version = "3.0.2" %} +{% set sha256 = "1605d11dc2470516c070deab4e32b60e6d06e02d1be93d1e4c40981a404b8f40" %} package: name: {{ name|lower }} version: {{ version }} source: - git_url: https://github.com/macs3-project/MACS.git - git_rev: 34f9a81398ec2af78317cd0b128f3a1e52a68f17 + url: https://pypi.org/packages/source/{{ name[0] }}/{{ name }}/macs3-{{ version }}.tar.gz + sha256: {{ sha256 }} build: - number: 3 + number: 1 skip: True # [py < 39] - script: {{ PYTHON }} -m pip install . --no-deps --no-build-isolation -vvv + script: {{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir -vvv run_exports: - - {{ pin_subpackage('macs3', max_pin="x.x") }} + - {{ pin_subpackage('macs3', max_pin="x") }} requirements: build: @@ -27,14 +27,14 @@ requirements: - numpy >=1.25 - scipy >=1.12 - cython >=3.0 - - hmmlearn 0.3 + - hmmlearn >=0.3.2 - scikit-learn >=1.3 - cykhash >=2.0,<3.0 run: - python - numpy >=1.25 - scipy >=1.12 - - hmmlearn 0.3 + - hmmlearn >=0.3.2 - scikit-learn >=1.3 - cykhash >=2.0,<3.0 @@ -45,19 +45,28 @@ test: - macs3 -h about: - dev_url: https://github.com/macs3-project/MACS/ - doc_url: https://macs3-project.github.io/MACS/ - home: https://pypi.org/project/MACS3/ + dev_url: "https://github.com/macs3-project/MACS" + doc_url: "https://macs3-project.github.io/MACS" + home: "https://github.com/macs3-project/MACS" license: BSD-3-Clause license_family: BSD license_file: LICENSE - summary: Model Based Analysis for ChIP-Seq data + summary: "Model Based Analysis for ChIP-Seq data." extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 identifiers: - biotools:macs - doi:10.1186/gb-2008-9-9-r137 - usegalaxy-eu:peakcalling_macs - skip-lints: - - uses_vcs_url - - missing_hash + - usegalaxy-eu:macs2_bdgbroadcall + - usegalaxy-eu:macs2_bdgcmp + - usegalaxy-eu:macs2_bdgdiff + - usegalaxy-eu:macs2_bdgpeakcall + - usegalaxy-eu:macs2_callpeak + - usegalaxy-eu:macs2_filterdup + - usegalaxy-eu:macs2_predictd + - usegalaxy-eu:macs2_randsample + - usegalaxy-eu:macs2_refinepeak diff --git a/recipes/mashmap/build.sh b/recipes/mashmap/build.sh index 1be34f0a90f3c..0fbd417425877 100644 --- a/recipes/mashmap/build.sh +++ b/recipes/mashmap/build.sh @@ -1,14 +1,16 @@ #!/bin/bash +set -xe export CFLAGS="-I$PREFIX/include" export LDFLAGS="-L$PREFIX/lib" export LD_LIBRARY_PATH="${PREFIX}/lib" export CPATH=${PREFIX}/include -# if [[ ${HOST} =~ .*darwin.* ]]; then -# export MACOSX_DEPLOYMENT_TARGET=10.15 # Required to use std::filesystem -# fi +if [[ ${HOST} =~ .*darwin.* ]]; then + export MACOSX_DEPLOYMENT_TARGET=10.15 # Required to use std::filesystem + export CXXFLAGS="${CXXFLAGS} -D_LIBCPP_DISABLE_AVAILABILITY" +fi -cmake -H. -B${PREFIX} -DCMAKE_BUILD_TYPE=Release -DCMAKE_VERBOSE_MAKEFILE=1 -DOPTIMIZE_FOR_NATIVE=0 -DUSE_HTSLIB=1 -cmake --build ${PREFIX} +cmake -H. -B${PREFIX} -DCMAKE_BUILD_TYPE=Release -DCMAKE_VERBOSE_MAKEFILE=1 -DOPTIMIZE_FOR_NATIVE=0 -DUSE_HTSLIB=1 -DCMAKE_CXX_FLAGS="${CXXFLAGS}" +cmake --build ${PREFIX} -j ${CPU_COUNT} diff --git a/recipes/mashmap/meta.yaml b/recipes/mashmap/meta.yaml index 86acff531bec5..9ecfaf5ecbd42 100644 --- a/recipes/mashmap/meta.yaml +++ b/recipes/mashmap/meta.yaml @@ -10,7 +10,7 @@ source: sha256: 7719dd6b3c25e650e16218252eaae7dbf424a10890d717ec3ad0920b102fd05a build: - number: 0 + number: 1 run_exports: - {{ pin_subpackage("mashmap", max_pin="x.x") }} @@ -46,6 +46,8 @@ about: summary: A fast approximate aligner for long DNA sequences. extra: + additional-platforms: + - linux-aarch64 recipe-maintainers: - bkille - mjsteinbaugh diff --git a/recipes/maxit/Makefile.patch b/recipes/maxit/Makefile.patch new file mode 100644 index 0000000000000..33e09e35f883a --- /dev/null +++ b/recipes/maxit/Makefile.patch @@ -0,0 +1,26 @@ +diff --git a/Makefile b/Makefile +index e821782..7282d03 100644 +--- a/Makefile ++++ b/Makefile +@@ -22,9 +22,9 @@ LIBDIRS = common-v4.5 \ + all: compile + + binary: compile +- @sh -c './binary.sh' +- @./bin/DictToSdb -ddlFile ./data/ascii/mmcif_ddl.dic -dictFile ./data/ascii/mmcif_pdbx.dic -dictSdbFile mmcif_pdbx.sdb +- @mv mmcif_pdbx.sdb ./data/binary ++ @sh -c 'if [ `uname -m` = "x86_64" ]; then tar Jxvf ./data-binary_linux-x86_64.tar.xz; fi' ++ @sh -c 'if [ `uname -m` = "aarch64" ]; then tar Jxvf ./data-binary_linux-aarch64.tar.xz; fi' ++ @sh -c 'mv ./binary/* ./data/binary' + @rm -f ./bin/DictToSdb ./bin/cif2bin ./bin/connect_main + @sh -c 'if [ -e ./mmcif_pdbx.dic-parser.log ]; then rm -rf ./mmcif_pdbx.dic-parser.log; fi' + +@@ -48,7 +48,7 @@ debug: + (cd $$libdir && $(MAKE) -f $(MAKEFILE) "OPT=-g" install) || exit 1; \ + done + # +-clean: ++clean: + @for libdir in $(LIBDIRS); do \ + echo cleaning $$libdir; \ + (cd $$libdir && $(MAKE) -f $(MAKEFILE) clean) || exit 1; \ diff --git a/recipes/maxit/binary.csh.patch b/recipes/maxit/binary.csh.patch new file mode 100644 index 0000000000000..b3b5121376543 --- /dev/null +++ b/recipes/maxit/binary.csh.patch @@ -0,0 +1,10 @@ +diff --git a/connect-v3.3/src/binary.csh b/connect-v3.3/src/binary.csh +index 132f735..d5346ae 100755 +--- a/connect-v3.3/src/binary.csh ++++ b/connect-v3.3/src/binary.csh +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh -f + # + if ( ! ( -d data ) ) then + ln -s data-stl data diff --git a/recipes/maxit/build.sh b/recipes/maxit/build.sh index ba58162b48c94..45c2fe040e676 100644 --- a/recipes/maxit/build.sh +++ b/recipes/maxit/build.sh @@ -5,29 +5,15 @@ set -exo pipefail # Disable parallel build export CPU_COUNT=1 -export RCSBROOT="${SRC_DIR}" - -# To pass CI test on Linux-x86_64 platform -if [[ "$(uname -s)" == "Linux" && "$(uname -m)" == "x86_64" ]]; then - ulimit -v 2097152 -fi - ln -s "${CC_FOR_BUILD}" "${BUILD_PREFIX}/bin/gcc" ln -s "${CXX_FOR_BUILD}" "${BUILD_PREFIX}/bin/g++" -cd ${SRC_DIR}/maxit-v10.1/src && \ -sed -i.bak "s|rcsbroot = getenv(\"RCSBROOT\")|rcsbroot = \"${RCSBROOT}\"|g" maxit.C process_entry.C generate_assembly_cif_file.C - -cd "${SRC_DIR}/cifparse-obj-v7.0" && sed -i.bak 's|mv |cp |g' Makefile -cd "${SRC_DIR}" && sed -i.bak "s|./data/binary|${RCSBROOT}/data/binary|g" binary.sh -cd "${SRC_DIR}" && make binary -j${CPU_COUNT} +make binary "-j${CPU_COUNT}" unlink "${BUILD_PREFIX}/bin/gcc" unlink "${BUILD_PREFIX}/bin/g++" install -d "${PREFIX}/bin" install ${SRC_DIR}/bin/* "${PREFIX}/bin" +cp -r "${SRC_DIR}/data" "${PREFIX}/data" -install -d "${PREFIX}/data" -find "${SRC_DIR}/data" -type d -exec install -d "${PREFIX}/data/{}" \; -find "${SRC_DIR}/data" -type f -exec install -m 644 "{}" "${PREFIX}/data/{}" \; diff --git a/recipes/maxit/data-binary_linux-x86_64.tar.xz b/recipes/maxit/data-binary_linux-x86_64.tar.xz new file mode 100644 index 0000000000000..02fdced44170c Binary files /dev/null and b/recipes/maxit/data-binary_linux-x86_64.tar.xz differ diff --git a/recipes/maxit/generate_assembly_cif_file.C.patch b/recipes/maxit/generate_assembly_cif_file.C.patch new file mode 100644 index 0000000000000..8930a926f2fc5 --- /dev/null +++ b/recipes/maxit/generate_assembly_cif_file.C.patch @@ -0,0 +1,205 @@ +diff --git a/maxit-v10.1/src/generate_assembly_cif_file.C b/maxit-v10.1/src/generate_assembly_cif_file.C +index 46887ee..2802c5a 100644 +--- a/maxit-v10.1/src/generate_assembly_cif_file.C ++++ b/maxit-v10.1/src/generate_assembly_cif_file.C +@@ -30,64 +30,64 @@ not limited to, any and all claims alleging products liability. + /* + RCSB PDB SOFTWARE LICENSE AGREEMENT + +-BY CLICKING THE ACCEPTANCE BUTTON OR INSTALLING OR USING +-THIS "SOFTWARE, THE INDIVIDUAL OR ENTITY LICENSING THE +-SOFTWARE ("LICENSEE") IS CONSENTING TO BE BOUND BY AND IS +-BECOMING A PARTY TO THIS AGREEMENT. IF LICENSEE DOES NOT ++BY CLICKING THE ACCEPTANCE BUTTON OR INSTALLING OR USING ++THIS "SOFTWARE, THE INDIVIDUAL OR ENTITY LICENSING THE ++SOFTWARE ("LICENSEE") IS CONSENTING TO BE BOUND BY AND IS ++BECOMING A PARTY TO THIS AGREEMENT. IF LICENSEE DOES NOT + AGREE TO ALL OF THE TERMS OF THIS AGREEMENT + THE LICENSEE MUST NOT INSTALL OR USE THE SOFTWARE. + + 1. LICENSE AGREEMENT + +-This is a license between you ("Licensee") and the Protein Data Bank (PDB) +-at Rutgers, The State University of New Jersey (hereafter referred to +-as "RUTGERS"). The software is owned by RUTGERS and protected by +-copyright laws, and some elements are protected by laws governing +-trademarks, trade dress and trade secrets, and may be protected by +-patent laws. ++This is a license between you ("Licensee") and the Protein Data Bank (PDB) ++at Rutgers, The State University of New Jersey (hereafter referred to ++as "RUTGERS"). The software is owned by RUTGERS and protected by ++copyright laws, and some elements are protected by laws governing ++trademarks, trade dress and trade secrets, and may be protected by ++patent laws. + + 2. LICENSE GRANT + +-RUTGERS grants you, and you hereby accept, non-exclusive, royalty-free +-perpetual license to install, use, modify, prepare derivative works, +-incorporate into other computer software, and distribute in binary +-and source code format, or any derivative work thereof, together with +-any associated media, printed materials, and on-line or electronic +-documentation (if any) provided by RUTGERS (collectively, the "SOFTWARE"), +-subject to the following terms and conditions: (i) any distribution +-of the SOFTWARE shall bind the receiver to the terms and conditions +-of this Agreement; (ii) any distribution of the SOFTWARE in modified +-form shall clearly state that the SOFTWARE has been modified from +-the version originally obtained from RUTGERS. +- +-2. COPYRIGHT; RETENTION OF RIGHTS. +- +-The above license grant is conditioned on the following: (i) you must +-reproduce all copyright notices and other proprietary notices on any +-copies of the SOFTWARE and you must not remove such notices; (ii) in +-the event you compile the SOFTWARE, you will include the copyright +-notice with the binary in such a manner as to allow it to be easily +-viewable; (iii) if you incorporate the SOFTWARE into other code, you +-must provide notice that the code contains the SOFTWARE and include +-a copy of the copyright notices and other proprietary notices. All +-copies of the SOFTWARE shall be subject to the terms of this Agreement. +- +-3. NO MAINTENANCE OR SUPPORT; TREATMENT OF ENHANCEMENTS +- +-RUTGERS is under no obligation whatsoever to: (i) provide maintenance +-or support for the SOFTWARE; or (ii) to notify you of bug fixes, patches, +-or upgrades to the features, functionality or performance of the +-SOFTWARE ("Enhancements") (if any), whether developed by RUTGERS +-or third parties. If, in its sole discretion, RUTGERS makes an +-Enhancement available to you and RUTGERS does not separately enter +-into a written license agreement with you relating to such bug fix, +-patch or upgrade, then it shall be deemed incorporated into the SOFTWARE +-and subject to this Agreement. You are under no obligation whatsoever +-to provide any Enhancements to RUTGERS or the public that you may +-develop over time; however, if you choose to provide your Enhancements +-to RUTGERS, or if you choose to otherwise publish or distribute your +-Enhancements, in source code form without contemporaneously requiring +-end users or RUTGERS to enter into a separate written license agreement ++RUTGERS grants you, and you hereby accept, non-exclusive, royalty-free ++perpetual license to install, use, modify, prepare derivative works, ++incorporate into other computer software, and distribute in binary ++and source code format, or any derivative work thereof, together with ++any associated media, printed materials, and on-line or electronic ++documentation (if any) provided by RUTGERS (collectively, the "SOFTWARE"), ++subject to the following terms and conditions: (i) any distribution ++of the SOFTWARE shall bind the receiver to the terms and conditions ++of this Agreement; (ii) any distribution of the SOFTWARE in modified ++form shall clearly state that the SOFTWARE has been modified from ++the version originally obtained from RUTGERS. ++ ++2. COPYRIGHT; RETENTION OF RIGHTS. ++ ++The above license grant is conditioned on the following: (i) you must ++reproduce all copyright notices and other proprietary notices on any ++copies of the SOFTWARE and you must not remove such notices; (ii) in ++the event you compile the SOFTWARE, you will include the copyright ++notice with the binary in such a manner as to allow it to be easily ++viewable; (iii) if you incorporate the SOFTWARE into other code, you ++must provide notice that the code contains the SOFTWARE and include ++a copy of the copyright notices and other proprietary notices. All ++copies of the SOFTWARE shall be subject to the terms of this Agreement. ++ ++3. NO MAINTENANCE OR SUPPORT; TREATMENT OF ENHANCEMENTS ++ ++RUTGERS is under no obligation whatsoever to: (i) provide maintenance ++or support for the SOFTWARE; or (ii) to notify you of bug fixes, patches, ++or upgrades to the features, functionality or performance of the ++SOFTWARE ("Enhancements") (if any), whether developed by RUTGERS ++or third parties. If, in its sole discretion, RUTGERS makes an ++Enhancement available to you and RUTGERS does not separately enter ++into a written license agreement with you relating to such bug fix, ++patch or upgrade, then it shall be deemed incorporated into the SOFTWARE ++and subject to this Agreement. You are under no obligation whatsoever ++to provide any Enhancements to RUTGERS or the public that you may ++develop over time; however, if you choose to provide your Enhancements ++to RUTGERS, or if you choose to otherwise publish or distribute your ++Enhancements, in source code form without contemporaneously requiring ++end users or RUTGERS to enter into a separate written license agreement + for such Enhancements, then you hereby grant RUTGERS a non-exclusive, + royalty-free perpetual license to install, use, modify, prepare + derivative works, incorporate into the SOFTWARE or other computer +@@ -105,37 +105,37 @@ and conditions. Upon termination, Licensee shall destroy all + copies of the SOFTWARE. + + 6. PROPRIETARY RIGHTS. Title, ownership rights, and intellectual +-property rights in the Product shall remain with RUTGERS. Licensee +-acknowledges such ownership and intellectual property rights and will +-not take any action to jeopardize, limit or interfere in any manner +-with RUTGERS' ownership of or rights with respect to the SOFTWARE. +-The SOFTWARE is protected by copyright and other intellectual +-property laws and by international treaties. Title and related +-rights in the content accessed through the SOFTWARE is the property +-of the applicable content owner and is protected by applicable law. ++property rights in the Product shall remain with RUTGERS. Licensee ++acknowledges such ownership and intellectual property rights and will ++not take any action to jeopardize, limit or interfere in any manner ++with RUTGERS' ownership of or rights with respect to the SOFTWARE. ++The SOFTWARE is protected by copyright and other intellectual ++property laws and by international treaties. Title and related ++rights in the content accessed through the SOFTWARE is the property ++of the applicable content owner and is protected by applicable law. + The license granted under this Agreement gives Licensee no rights to such + content. + +-7. DISCLAIMER OF WARRANTY. THE SOFTWARE IS PROVIDED FREE OF +-CHARGE, AND, THEREFORE, ON AN "AS IS" BASIS, WITHOUT WARRANTY OF +-ANY KIND, INCLUDING WITHOUT LIMITATION THE WARRANTIES THAT IT +-IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +-OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND +-PERFORMANCE OF THE SOFTWARE IS BORNE BY LICENSEE. SHOULD THE +-SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, THE LICENSEE AND NOT +-LICENSOR ASSUMES THE ENTIRE COST OF ANY SERVICE AND REPAIR. +-THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF +-THIS AGREEMENT. NO USE OF THE PRODUCT IS AUTHORIZED HEREUNDER ++7. DISCLAIMER OF WARRANTY. THE SOFTWARE IS PROVIDED FREE OF ++CHARGE, AND, THEREFORE, ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ++ANY KIND, INCLUDING WITHOUT LIMITATION THE WARRANTIES THAT IT ++IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE ++OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND ++PERFORMANCE OF THE SOFTWARE IS BORNE BY LICENSEE. SHOULD THE ++SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, THE LICENSEE AND NOT ++LICENSOR ASSUMES THE ENTIRE COST OF ANY SERVICE AND REPAIR. ++THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF ++THIS AGREEMENT. NO USE OF THE PRODUCT IS AUTHORIZED HEREUNDER + EXCEPT UNDER THIS DISCLAIMER. + + 8. LIMITATION OF LIABILITY. TO THE MAXIMUM EXTENT PERMITTED BY +-APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE FOR ANY +-INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +-OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE, INCLUDING, +-WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK +-STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL ++APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE FOR ANY ++INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING ++OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE, INCLUDING, ++WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK ++STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL + OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF ADVISED OF THE +-POSSIBILITY THEREOF. ++POSSIBILITY THEREOF. + */ + #include + #include +@@ -164,11 +164,11 @@ int main(int argc, char **argv) + if (p != std::string::npos) logfile = logfile.substr(p + 1); + LogUtil logutil(logfile); + +- char* rcsbroot = getenv("RCSBROOT"); ++ char* rcsbroot = getenv("CONDA_PREFIX"); + + if (rcsbroot == NULL) { +- logutil.messageWarning("Environment variable 'RCSBROOT' not defined"); +- fprintf(stdout, "Environment variable 'RCSBROOT' not defined\n"); ++ logutil.messageWarning("Environment variable 'CONDA_PREFIX' not defined"); ++ fprintf(stdout, "Environment variable 'CONDA_PREFIX' not defined\n"); + return 0; + } + +@@ -229,7 +229,7 @@ int main(int argc, char **argv) + SgCenter::Read(rcsbroot); + SpaceGroup::Read(logutil, rcsbroot); + CategoryMapping::Read(logutil, rcsbroot); +- ++ + ConnectDic ccDic; + ccDic.setRCSBROOT(rcsbroot); + if (!ccDic.OpenFile()) { diff --git a/recipes/maxit/make.platform.gnu8.patch b/recipes/maxit/make.platform.gnu8.patch new file mode 100644 index 0000000000000..a6d4ea374e07b --- /dev/null +++ b/recipes/maxit/make.platform.gnu8.patch @@ -0,0 +1,66 @@ +diff --git a/etc/make.platform.gnu8 b/etc/make.platform.gnu8 +index 64ed481..72bece3 100644 +--- a/etc/make.platform.gnu8 ++++ b/etc/make.platform.gnu8 +@@ -27,14 +27,14 @@ YACCFLAGS=-d -v -l + ## ABI + ## This part defines an application binary interface to be used with the + ## compiler suite. +-ABI= ++ABI= + + ## Warnings flags + ## This part defines warnings related flags + + # WARNINGS_AS_ERRORS defines flags to instruct all compilers to treat all + # warnings as errors. +-WARNINGS_AS_ERRORS=-Werror ++WARNINGS_AS_ERRORS= + + # ALL_WARNINGS defines flags to instruct all compilers to report all + # warnings. +@@ -54,10 +54,10 @@ WARNINGS=$(WARNINGS_AS_ERRORS) $(ALL_WARNINGS) + # Should be defined only for big endian platforms. Otherwise + # it must be left undefined, which indicates little endian platform. + #ENDIANESS=-DBIG_ENDIAN_PLATFORM +- ++ + # OS indicator. Should be defined only if SunOS is the platform + #PLATFORM_OS=-DSUN_OS +- ++ + # Collect all platform related flags + PLATFORM=$(ENDIANESS) $(PLATFORM_OS) + +@@ -90,11 +90,11 @@ GDEFINES=$(PLATFORM) $(COMPILER) + DEFINES=$(GDEFINES) $(LDEFINES) + + ## Global include directories +-GINCLUDES= ++GINCLUDES= + + # Collect all include directories from global include directories and + # include directories specified in module makefile +-INCLUDES=$(LINCLUDES) $(GINCLUDES) ++INCLUDES=$(LINCLUDES) $(GINCLUDES) + + ## C compiler + ## This part defines C compiler information +@@ -109,7 +109,7 @@ C_WARNINGS=$(WARNINGS) + + # C compiler flags + CFLAGS=$(OPT) $(ABI) $(PIC) $(ANSI_C_FLAG) $(C_WARNINGS) $(DEFINES) $(INCLUDES) +-CFLAGS_NONANSI=$(OPT) $(ABI) $(PIC) $(NON_ANSI_C_FLAG) $(DEFINES) $(INCLUDES) ++CFLAGS_NONANSI=$(OPT) $(ABI) $(PIC) $(NON_ANSI_C_FLAG) $(DEFINES) $(INCLUDES) + + ## C++ compiler + ## This part defines C++ compiler information +@@ -192,7 +192,7 @@ RANLIB=true + #-----Installer----------------------------------------------------------# + + INSTALL=../etc/cifinstall +-INSTALLOPTS=-m 0444 ++INSTALLOPTS=-m 0444 + + #------------------------------------------------------------------------# + diff --git a/recipes/maxit/maxit.C.patch b/recipes/maxit/maxit.C.patch new file mode 100644 index 0000000000000..a5bf4ca59e54d --- /dev/null +++ b/recipes/maxit/maxit.C.patch @@ -0,0 +1,205 @@ +diff --git a/maxit-v10.1/src/maxit.C b/maxit-v10.1/src/maxit.C +index 30bc877..e11cf9a 100644 +--- a/maxit-v10.1/src/maxit.C ++++ b/maxit-v10.1/src/maxit.C +@@ -30,64 +30,64 @@ not limited to, any and all claims alleging products liability. + /* + RCSB PDB SOFTWARE LICENSE AGREEMENT + +-BY CLICKING THE ACCEPTANCE BUTTON OR INSTALLING OR USING +-THIS "SOFTWARE, THE INDIVIDUAL OR ENTITY LICENSING THE +-SOFTWARE ("LICENSEE") IS CONSENTING TO BE BOUND BY AND IS +-BECOMING A PARTY TO THIS AGREEMENT. IF LICENSEE DOES NOT ++BY CLICKING THE ACCEPTANCE BUTTON OR INSTALLING OR USING ++THIS "SOFTWARE, THE INDIVIDUAL OR ENTITY LICENSING THE ++SOFTWARE ("LICENSEE") IS CONSENTING TO BE BOUND BY AND IS ++BECOMING A PARTY TO THIS AGREEMENT. IF LICENSEE DOES NOT + AGREE TO ALL OF THE TERMS OF THIS AGREEMENT + THE LICENSEE MUST NOT INSTALL OR USE THE SOFTWARE. + + 1. LICENSE AGREEMENT + +-This is a license between you ("Licensee") and the Protein Data Bank (PDB) +-at Rutgers, The State University of New Jersey (hereafter referred to +-as "RUTGERS"). The software is owned by RUTGERS and protected by +-copyright laws, and some elements are protected by laws governing +-trademarks, trade dress and trade secrets, and may be protected by +-patent laws. ++This is a license between you ("Licensee") and the Protein Data Bank (PDB) ++at Rutgers, The State University of New Jersey (hereafter referred to ++as "RUTGERS"). The software is owned by RUTGERS and protected by ++copyright laws, and some elements are protected by laws governing ++trademarks, trade dress and trade secrets, and may be protected by ++patent laws. + + 2. LICENSE GRANT + +-RUTGERS grants you, and you hereby accept, non-exclusive, royalty-free +-perpetual license to install, use, modify, prepare derivative works, +-incorporate into other computer software, and distribute in binary +-and source code format, or any derivative work thereof, together with +-any associated media, printed materials, and on-line or electronic +-documentation (if any) provided by RUTGERS (collectively, the "SOFTWARE"), +-subject to the following terms and conditions: (i) any distribution +-of the SOFTWARE shall bind the receiver to the terms and conditions +-of this Agreement; (ii) any distribution of the SOFTWARE in modified +-form shall clearly state that the SOFTWARE has been modified from +-the version originally obtained from RUTGERS. +- +-2. COPYRIGHT; RETENTION OF RIGHTS. +- +-The above license grant is conditioned on the following: (i) you must +-reproduce all copyright notices and other proprietary notices on any +-copies of the SOFTWARE and you must not remove such notices; (ii) in +-the event you compile the SOFTWARE, you will include the copyright +-notice with the binary in such a manner as to allow it to be easily +-viewable; (iii) if you incorporate the SOFTWARE into other code, you +-must provide notice that the code contains the SOFTWARE and include +-a copy of the copyright notices and other proprietary notices. All +-copies of the SOFTWARE shall be subject to the terms of this Agreement. +- +-3. NO MAINTENANCE OR SUPPORT; TREATMENT OF ENHANCEMENTS +- +-RUTGERS is under no obligation whatsoever to: (i) provide maintenance +-or support for the SOFTWARE; or (ii) to notify you of bug fixes, patches, +-or upgrades to the features, functionality or performance of the +-SOFTWARE ("Enhancements") (if any), whether developed by RUTGERS +-or third parties. If, in its sole discretion, RUTGERS makes an +-Enhancement available to you and RUTGERS does not separately enter +-into a written license agreement with you relating to such bug fix, +-patch or upgrade, then it shall be deemed incorporated into the SOFTWARE +-and subject to this Agreement. You are under no obligation whatsoever +-to provide any Enhancements to RUTGERS or the public that you may +-develop over time; however, if you choose to provide your Enhancements +-to RUTGERS, or if you choose to otherwise publish or distribute your +-Enhancements, in source code form without contemporaneously requiring +-end users or RUTGERS to enter into a separate written license agreement ++RUTGERS grants you, and you hereby accept, non-exclusive, royalty-free ++perpetual license to install, use, modify, prepare derivative works, ++incorporate into other computer software, and distribute in binary ++and source code format, or any derivative work thereof, together with ++any associated media, printed materials, and on-line or electronic ++documentation (if any) provided by RUTGERS (collectively, the "SOFTWARE"), ++subject to the following terms and conditions: (i) any distribution ++of the SOFTWARE shall bind the receiver to the terms and conditions ++of this Agreement; (ii) any distribution of the SOFTWARE in modified ++form shall clearly state that the SOFTWARE has been modified from ++the version originally obtained from RUTGERS. ++ ++2. COPYRIGHT; RETENTION OF RIGHTS. ++ ++The above license grant is conditioned on the following: (i) you must ++reproduce all copyright notices and other proprietary notices on any ++copies of the SOFTWARE and you must not remove such notices; (ii) in ++the event you compile the SOFTWARE, you will include the copyright ++notice with the binary in such a manner as to allow it to be easily ++viewable; (iii) if you incorporate the SOFTWARE into other code, you ++must provide notice that the code contains the SOFTWARE and include ++a copy of the copyright notices and other proprietary notices. All ++copies of the SOFTWARE shall be subject to the terms of this Agreement. ++ ++3. NO MAINTENANCE OR SUPPORT; TREATMENT OF ENHANCEMENTS ++ ++RUTGERS is under no obligation whatsoever to: (i) provide maintenance ++or support for the SOFTWARE; or (ii) to notify you of bug fixes, patches, ++or upgrades to the features, functionality or performance of the ++SOFTWARE ("Enhancements") (if any), whether developed by RUTGERS ++or third parties. If, in its sole discretion, RUTGERS makes an ++Enhancement available to you and RUTGERS does not separately enter ++into a written license agreement with you relating to such bug fix, ++patch or upgrade, then it shall be deemed incorporated into the SOFTWARE ++and subject to this Agreement. You are under no obligation whatsoever ++to provide any Enhancements to RUTGERS or the public that you may ++develop over time; however, if you choose to provide your Enhancements ++to RUTGERS, or if you choose to otherwise publish or distribute your ++Enhancements, in source code form without contemporaneously requiring ++end users or RUTGERS to enter into a separate written license agreement + for such Enhancements, then you hereby grant RUTGERS a non-exclusive, + royalty-free perpetual license to install, use, modify, prepare + derivative works, incorporate into the SOFTWARE or other computer +@@ -105,37 +105,37 @@ and conditions. Upon termination, Licensee shall destroy all + copies of the SOFTWARE. + + 6. PROPRIETARY RIGHTS. Title, ownership rights, and intellectual +-property rights in the Product shall remain with RUTGERS. Licensee +-acknowledges such ownership and intellectual property rights and will +-not take any action to jeopardize, limit or interfere in any manner +-with RUTGERS' ownership of or rights with respect to the SOFTWARE. +-The SOFTWARE is protected by copyright and other intellectual +-property laws and by international treaties. Title and related +-rights in the content accessed through the SOFTWARE is the property +-of the applicable content owner and is protected by applicable law. ++property rights in the Product shall remain with RUTGERS. Licensee ++acknowledges such ownership and intellectual property rights and will ++not take any action to jeopardize, limit or interfere in any manner ++with RUTGERS' ownership of or rights with respect to the SOFTWARE. ++The SOFTWARE is protected by copyright and other intellectual ++property laws and by international treaties. Title and related ++rights in the content accessed through the SOFTWARE is the property ++of the applicable content owner and is protected by applicable law. + The license granted under this Agreement gives Licensee no rights to such + content. + +-7. DISCLAIMER OF WARRANTY. THE SOFTWARE IS PROVIDED FREE OF +-CHARGE, AND, THEREFORE, ON AN "AS IS" BASIS, WITHOUT WARRANTY OF +-ANY KIND, INCLUDING WITHOUT LIMITATION THE WARRANTIES THAT IT +-IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +-OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND +-PERFORMANCE OF THE SOFTWARE IS BORNE BY LICENSEE. SHOULD THE +-SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, THE LICENSEE AND NOT +-LICENSOR ASSUMES THE ENTIRE COST OF ANY SERVICE AND REPAIR. +-THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF +-THIS AGREEMENT. NO USE OF THE PRODUCT IS AUTHORIZED HEREUNDER ++7. DISCLAIMER OF WARRANTY. THE SOFTWARE IS PROVIDED FREE OF ++CHARGE, AND, THEREFORE, ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ++ANY KIND, INCLUDING WITHOUT LIMITATION THE WARRANTIES THAT IT ++IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE ++OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND ++PERFORMANCE OF THE SOFTWARE IS BORNE BY LICENSEE. SHOULD THE ++SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, THE LICENSEE AND NOT ++LICENSOR ASSUMES THE ENTIRE COST OF ANY SERVICE AND REPAIR. ++THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF ++THIS AGREEMENT. NO USE OF THE PRODUCT IS AUTHORIZED HEREUNDER + EXCEPT UNDER THIS DISCLAIMER. + + 8. LIMITATION OF LIABILITY. TO THE MAXIMUM EXTENT PERMITTED BY +-APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE FOR ANY +-INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +-OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE, INCLUDING, +-WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK +-STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL ++APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE FOR ANY ++INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING ++OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE, INCLUDING, ++WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK ++STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL + OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF ADVISED OF THE +-POSSIBILITY THEREOF. ++POSSIBILITY THEREOF. + */ + #include + #include +@@ -172,11 +172,11 @@ int main(int argc, char **argv) + if (p != std::string::npos) logfile = logfile.substr(p + 1); + LogUtil logutil(logfile); + +- char* rcsbroot = getenv("RCSBROOT"); ++ char* rcsbroot = getenv("CONDA_PREFIX"); + + if (rcsbroot == NULL) { +- logutil.messageWarning("Environment variable 'RCSBROOT' not defined"); +- fprintf(stdout, "Environment variable 'RCSBROOT' not defined\n"); ++ logutil.messageWarning("Environment variable 'CONDA_PREFIX' not defined"); ++ fprintf(stdout, "Environment variable 'CONDA_PREFIX' not defined\n"); + return 0; + } + +@@ -250,7 +250,7 @@ int main(int argc, char **argv) + SgCenter::Read(rcsbroot); + SpaceGroup::Read(logutil, rcsbroot); + CategoryMapping::Read(logutil, rcsbroot); +- ++ + ConnectDic ccDic; + ccDic.setRCSBROOT(rcsbroot); + if (!ccDic.OpenFile()) { diff --git a/recipes/maxit/meta.yaml b/recipes/maxit/meta.yaml index 6ad2a788c5d33..69b9d593ddd0d 100644 --- a/recipes/maxit/meta.yaml +++ b/recipes/maxit/meta.yaml @@ -6,13 +6,22 @@ package: version: {{ version }} source: - url: https://sw-tools.rcsb.org/apps/{{ name }}/{{ name|lower }}-v{{ version }}-prod-src.tar.gz - sha256: 658e236c6310cf7e55218a0500f82050ef86074f5d5b3f61d2a161b04a38cc39 - patches: - - platform.sh.patch # [osx] + - url: https://sw-tools.rcsb.org/apps/{{ name }}/{{ name|lower }}-v{{ version }}-prod-src.tar.gz + sha256: 658e236c6310cf7e55218a0500f82050ef86074f5d5b3f61d2a161b04a38cc39 + patches: + - platform.sh.patch + - generate_assembly_cif_file.C.patch + - maxit.C.patch + - process_entry.C.patch + - make.platform.gnu8.patch # [linux] + - binary.csh.patch # [linux] + - system-util.C.patch # [linux] + - Makefile.patch # [linux] + - path: ./data-binary_linux-x86_64.tar.xz # [linux and x86_64] + sha256: 44a626b2f082a91c8dcdf110a0a0779dbb0e9aaa72b128a7dbd523f1456bb0be # [linux and x86_64] build: - number: 0 + number: 1 run_exports: - {{ pin_subpackage(name|lower, max_pin="x") }} @@ -24,10 +33,19 @@ requirements: - bison - flex - coreutils + host: + - tcsh # [linux] + run: + - tcsh # [linux] test: + requires: + - wget commands: - - output=$(maxit 2>&1 || true) && echo ${output} | grep -q 'maxit -input inputfile' + - wget https://files.rcsb.org/view/7KNT.pdb + - maxit -input 7KNT.pdb -output 7KNT.cif -o 1 + - cat maxit.log + - test -f 7KNT.cif about: home: https://sw-tools.rcsb.org/apps/MAXIT @@ -37,17 +55,16 @@ about: summary: "MAXIT assists in the processing and curation of macromolecular structure data." description: | MAXIT assists in the processing and curation of macromolecular structure data. MAXIT can: - - Read and write PDB and mmCIF format files, and translate between file formats. - - Perform consistency checks on coordinates, sequence, and crystal data. - - Automatically construct, transform, and merge information between formats - - Align residue numbering in the coordinates with the sequence - - Reorder and rename atoms in standard and nonstandard residues and ligands according to the Chemical Component Dictionary - - Assign ligands the same chain IDs as the adjacent polymers - - Detect missing or additional atoms + - Read and write PDB and mmCIF format files, and translate between file formats. + - Perform consistency checks on coordinates, sequence, and crystal data. + - Automatically construct, transform, and merge information between formats + - Align residue numbering in the coordinates with the sequence + - Reorder and rename atoms in standard and nonstandard residues and ligands according to the Chemical Component Dictionary + - Assign ligands the same chain IDs as the adjacent polymers + - Detect missing or additional atoms extra: recipe-maintainers: - eunos-1128 additional-platforms: - - linux-aarch64 - osx-arm64 diff --git a/recipes/maxit/platform.sh.patch b/recipes/maxit/platform.sh.patch index 4cedc77a96aae..bf6ae0199fd59 100644 --- a/recipes/maxit/platform.sh.patch +++ b/recipes/maxit/platform.sh.patch @@ -1,5 +1,5 @@ diff --git a/etc/platform.sh b/etc/platform.sh -index 1607685..e5f3573 100755 +index 1607685..7f18f47 100755 --- a/etc/platform.sh +++ b/etc/platform.sh @@ -6,7 +6,7 @@ @@ -25,7 +25,7 @@ index 1607685..e5f3573 100755 sysid="darwin4" else # Check if it is GCC version 4.x -@@ -61,7 +61,7 @@ case $(uname -s) in +@@ -61,13 +61,28 @@ case $(uname -s) in # It is GCC version 4.x sysid="darwin4" fi @@ -34,7 +34,29 @@ index 1607685..e5f3573 100755 ;; # Check if it is a Linux platform -@@ -85,11 +85,11 @@ case $(uname -s) in + Linux) ++# Check if it is GCC version 14.x ++ gcc_ver=$(gcc --version | grep -e " 14\.") ++# Check if it is GCC version 13.x ++ if [ -z "$gcc_ver" ] ++ then ++ gcc_ver=$(gcc --version | grep -e " 13\.") ++ fi ++# Check if it is GCC version 12.x ++ if [ -z "$gcc_ver" ] ++ then ++ gcc_ver=$(gcc --version | grep -e " 12\.") ++ fi + # Check if it is GCC version 11.x +- gcc_ver=$(gcc --version | grep -e " 11\.") ++ if [ -z "$gcc_ver" ] ++ then ++ gcc_ver=$(gcc --version | grep -e " 11\.") ++ fi + # Check if it is GCC version 10.x + if [ -z "$gcc_ver" ] + then +@@ -85,11 +100,11 @@ case $(uname -s) in fi # if [ -z "$gcc_ver" ] @@ -48,3 +70,13 @@ index 1607685..e5f3573 100755 # If not GCC version 5.x gcc_ver=$(gcc --version | grep -e " 4\.") if [ -z "$gcc_ver" ] +@@ -127,6 +142,9 @@ case $(uname -s) in + sysid="gnu5" + fi + else ++ # GCC 14.x ++ # GCC 13.x ++ # GCC 12.x + # GCC 11.x + # GCC 10.x + # GCC 9.x diff --git a/recipes/maxit/process_entry.C.patch b/recipes/maxit/process_entry.C.patch new file mode 100644 index 0000000000000..060fd126fc5d3 --- /dev/null +++ b/recipes/maxit/process_entry.C.patch @@ -0,0 +1,205 @@ +diff --git a/maxit-v10.1/src/process_entry.C b/maxit-v10.1/src/process_entry.C +index 60ac5f8..ca94c9c 100644 +--- a/maxit-v10.1/src/process_entry.C ++++ b/maxit-v10.1/src/process_entry.C +@@ -30,64 +30,64 @@ not limited to, any and all claims alleging products liability. + /* + RCSB PDB SOFTWARE LICENSE AGREEMENT + +-BY CLICKING THE ACCEPTANCE BUTTON OR INSTALLING OR USING +-THIS "SOFTWARE, THE INDIVIDUAL OR ENTITY LICENSING THE +-SOFTWARE ("LICENSEE") IS CONSENTING TO BE BOUND BY AND IS +-BECOMING A PARTY TO THIS AGREEMENT. IF LICENSEE DOES NOT ++BY CLICKING THE ACCEPTANCE BUTTON OR INSTALLING OR USING ++THIS "SOFTWARE, THE INDIVIDUAL OR ENTITY LICENSING THE ++SOFTWARE ("LICENSEE") IS CONSENTING TO BE BOUND BY AND IS ++BECOMING A PARTY TO THIS AGREEMENT. IF LICENSEE DOES NOT + AGREE TO ALL OF THE TERMS OF THIS AGREEMENT + THE LICENSEE MUST NOT INSTALL OR USE THE SOFTWARE. + + 1. LICENSE AGREEMENT + +-This is a license between you ("Licensee") and the Protein Data Bank (PDB) +-at Rutgers, The State University of New Jersey (hereafter referred to +-as "RUTGERS"). The software is owned by RUTGERS and protected by +-copyright laws, and some elements are protected by laws governing +-trademarks, trade dress and trade secrets, and may be protected by +-patent laws. ++This is a license between you ("Licensee") and the Protein Data Bank (PDB) ++at Rutgers, The State University of New Jersey (hereafter referred to ++as "RUTGERS"). The software is owned by RUTGERS and protected by ++copyright laws, and some elements are protected by laws governing ++trademarks, trade dress and trade secrets, and may be protected by ++patent laws. + + 2. LICENSE GRANT + +-RUTGERS grants you, and you hereby accept, non-exclusive, royalty-free +-perpetual license to install, use, modify, prepare derivative works, +-incorporate into other computer software, and distribute in binary +-and source code format, or any derivative work thereof, together with +-any associated media, printed materials, and on-line or electronic +-documentation (if any) provided by RUTGERS (collectively, the "SOFTWARE"), +-subject to the following terms and conditions: (i) any distribution +-of the SOFTWARE shall bind the receiver to the terms and conditions +-of this Agreement; (ii) any distribution of the SOFTWARE in modified +-form shall clearly state that the SOFTWARE has been modified from +-the version originally obtained from RUTGERS. +- +-2. COPYRIGHT; RETENTION OF RIGHTS. +- +-The above license grant is conditioned on the following: (i) you must +-reproduce all copyright notices and other proprietary notices on any +-copies of the SOFTWARE and you must not remove such notices; (ii) in +-the event you compile the SOFTWARE, you will include the copyright +-notice with the binary in such a manner as to allow it to be easily +-viewable; (iii) if you incorporate the SOFTWARE into other code, you +-must provide notice that the code contains the SOFTWARE and include +-a copy of the copyright notices and other proprietary notices. All +-copies of the SOFTWARE shall be subject to the terms of this Agreement. +- +-3. NO MAINTENANCE OR SUPPORT; TREATMENT OF ENHANCEMENTS +- +-RUTGERS is under no obligation whatsoever to: (i) provide maintenance +-or support for the SOFTWARE; or (ii) to notify you of bug fixes, patches, +-or upgrades to the features, functionality or performance of the +-SOFTWARE ("Enhancements") (if any), whether developed by RUTGERS +-or third parties. If, in its sole discretion, RUTGERS makes an +-Enhancement available to you and RUTGERS does not separately enter +-into a written license agreement with you relating to such bug fix, +-patch or upgrade, then it shall be deemed incorporated into the SOFTWARE +-and subject to this Agreement. You are under no obligation whatsoever +-to provide any Enhancements to RUTGERS or the public that you may +-develop over time; however, if you choose to provide your Enhancements +-to RUTGERS, or if you choose to otherwise publish or distribute your +-Enhancements, in source code form without contemporaneously requiring +-end users or RUTGERS to enter into a separate written license agreement ++RUTGERS grants you, and you hereby accept, non-exclusive, royalty-free ++perpetual license to install, use, modify, prepare derivative works, ++incorporate into other computer software, and distribute in binary ++and source code format, or any derivative work thereof, together with ++any associated media, printed materials, and on-line or electronic ++documentation (if any) provided by RUTGERS (collectively, the "SOFTWARE"), ++subject to the following terms and conditions: (i) any distribution ++of the SOFTWARE shall bind the receiver to the terms and conditions ++of this Agreement; (ii) any distribution of the SOFTWARE in modified ++form shall clearly state that the SOFTWARE has been modified from ++the version originally obtained from RUTGERS. ++ ++2. COPYRIGHT; RETENTION OF RIGHTS. ++ ++The above license grant is conditioned on the following: (i) you must ++reproduce all copyright notices and other proprietary notices on any ++copies of the SOFTWARE and you must not remove such notices; (ii) in ++the event you compile the SOFTWARE, you will include the copyright ++notice with the binary in such a manner as to allow it to be easily ++viewable; (iii) if you incorporate the SOFTWARE into other code, you ++must provide notice that the code contains the SOFTWARE and include ++a copy of the copyright notices and other proprietary notices. All ++copies of the SOFTWARE shall be subject to the terms of this Agreement. ++ ++3. NO MAINTENANCE OR SUPPORT; TREATMENT OF ENHANCEMENTS ++ ++RUTGERS is under no obligation whatsoever to: (i) provide maintenance ++or support for the SOFTWARE; or (ii) to notify you of bug fixes, patches, ++or upgrades to the features, functionality or performance of the ++SOFTWARE ("Enhancements") (if any), whether developed by RUTGERS ++or third parties. If, in its sole discretion, RUTGERS makes an ++Enhancement available to you and RUTGERS does not separately enter ++into a written license agreement with you relating to such bug fix, ++patch or upgrade, then it shall be deemed incorporated into the SOFTWARE ++and subject to this Agreement. You are under no obligation whatsoever ++to provide any Enhancements to RUTGERS or the public that you may ++develop over time; however, if you choose to provide your Enhancements ++to RUTGERS, or if you choose to otherwise publish or distribute your ++Enhancements, in source code form without contemporaneously requiring ++end users or RUTGERS to enter into a separate written license agreement + for such Enhancements, then you hereby grant RUTGERS a non-exclusive, + royalty-free perpetual license to install, use, modify, prepare + derivative works, incorporate into the SOFTWARE or other computer +@@ -105,37 +105,37 @@ and conditions. Upon termination, Licensee shall destroy all + copies of the SOFTWARE. + + 6. PROPRIETARY RIGHTS. Title, ownership rights, and intellectual +-property rights in the Product shall remain with RUTGERS. Licensee +-acknowledges such ownership and intellectual property rights and will +-not take any action to jeopardize, limit or interfere in any manner +-with RUTGERS' ownership of or rights with respect to the SOFTWARE. +-The SOFTWARE is protected by copyright and other intellectual +-property laws and by international treaties. Title and related +-rights in the content accessed through the SOFTWARE is the property +-of the applicable content owner and is protected by applicable law. ++property rights in the Product shall remain with RUTGERS. Licensee ++acknowledges such ownership and intellectual property rights and will ++not take any action to jeopardize, limit or interfere in any manner ++with RUTGERS' ownership of or rights with respect to the SOFTWARE. ++The SOFTWARE is protected by copyright and other intellectual ++property laws and by international treaties. Title and related ++rights in the content accessed through the SOFTWARE is the property ++of the applicable content owner and is protected by applicable law. + The license granted under this Agreement gives Licensee no rights to such + content. + +-7. DISCLAIMER OF WARRANTY. THE SOFTWARE IS PROVIDED FREE OF +-CHARGE, AND, THEREFORE, ON AN "AS IS" BASIS, WITHOUT WARRANTY OF +-ANY KIND, INCLUDING WITHOUT LIMITATION THE WARRANTIES THAT IT +-IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +-OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND +-PERFORMANCE OF THE SOFTWARE IS BORNE BY LICENSEE. SHOULD THE +-SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, THE LICENSEE AND NOT +-LICENSOR ASSUMES THE ENTIRE COST OF ANY SERVICE AND REPAIR. +-THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF +-THIS AGREEMENT. NO USE OF THE PRODUCT IS AUTHORIZED HEREUNDER ++7. DISCLAIMER OF WARRANTY. THE SOFTWARE IS PROVIDED FREE OF ++CHARGE, AND, THEREFORE, ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ++ANY KIND, INCLUDING WITHOUT LIMITATION THE WARRANTIES THAT IT ++IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE ++OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND ++PERFORMANCE OF THE SOFTWARE IS BORNE BY LICENSEE. SHOULD THE ++SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, THE LICENSEE AND NOT ++LICENSOR ASSUMES THE ENTIRE COST OF ANY SERVICE AND REPAIR. ++THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF ++THIS AGREEMENT. NO USE OF THE PRODUCT IS AUTHORIZED HEREUNDER + EXCEPT UNDER THIS DISCLAIMER. + + 8. LIMITATION OF LIABILITY. TO THE MAXIMUM EXTENT PERMITTED BY +-APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE FOR ANY +-INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +-OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE, INCLUDING, +-WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK +-STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL ++APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE FOR ANY ++INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING ++OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE, INCLUDING, ++WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK ++STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL + OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF ADVISED OF THE +-POSSIBILITY THEREOF. ++POSSIBILITY THEREOF. + */ + #include + #include +@@ -164,11 +164,11 @@ int main(int argc, char **argv) + if (p != std::string::npos) logfile = logfile.substr(p + 1); + LogUtil logutil(logfile); + +- char* rcsbroot = getenv("RCSBROOT"); ++ char* rcsbroot = getenv("CONDA_PREFIX"); + + if (rcsbroot == NULL) { +- logutil.messageWarning("Environment variable 'RCSBROOT' not defined"); +- fprintf(stdout, "Environment variable 'RCSBROOT' not defined\n"); ++ logutil.messageWarning("Environment variable 'CONDA_PREFIX' not defined"); ++ fprintf(stdout, "Environment variable 'CONDA_PREFIX' not defined\n"); + return 0; + } + +@@ -260,7 +260,7 @@ int main(int argc, char **argv) + SgCenter::Read(rcsbroot); + SpaceGroup::Read(logutil, rcsbroot); + CategoryMapping::Read(logutil, rcsbroot); +- ++ + ConnectDic ccDic; + ccDic.setRCSBROOT(rcsbroot); + if (!ccDic.OpenFile()) { diff --git a/recipes/maxit/system-util.C.patch b/recipes/maxit/system-util.C.patch new file mode 100644 index 0000000000000..31cb4566ef712 --- /dev/null +++ b/recipes/maxit/system-util.C.patch @@ -0,0 +1,199 @@ +diff --git a/utillib-v1.1/src/system-util.C b/utillib-v1.1/src/system-util.C +index 920a90d..a2d22db 100644 +--- a/utillib-v1.1/src/system-util.C ++++ b/utillib-v1.1/src/system-util.C +@@ -30,64 +30,64 @@ not limited to, any and all claims alleging products liability. + /* + RCSB PDB SOFTWARE LICENSE AGREEMENT + +-BY CLICKING THE ACCEPTANCE BUTTON OR INSTALLING OR USING +-THIS "SOFTWARE, THE INDIVIDUAL OR ENTITY LICENSING THE +-SOFTWARE ("LICENSEE") IS CONSENTING TO BE BOUND BY AND IS +-BECOMING A PARTY TO THIS AGREEMENT. IF LICENSEE DOES NOT ++BY CLICKING THE ACCEPTANCE BUTTON OR INSTALLING OR USING ++THIS "SOFTWARE, THE INDIVIDUAL OR ENTITY LICENSING THE ++SOFTWARE ("LICENSEE") IS CONSENTING TO BE BOUND BY AND IS ++BECOMING A PARTY TO THIS AGREEMENT. IF LICENSEE DOES NOT + AGREE TO ALL OF THE TERMS OF THIS AGREEMENT + THE LICENSEE MUST NOT INSTALL OR USE THE SOFTWARE. + + 1. LICENSE AGREEMENT + +-This is a license between you ("Licensee") and the Protein Data Bank (PDB) +-at Rutgers, The State University of New Jersey (hereafter referred to +-as "RUTGERS"). The software is owned by RUTGERS and protected by +-copyright laws, and some elements are protected by laws governing +-trademarks, trade dress and trade secrets, and may be protected by +-patent laws. ++This is a license between you ("Licensee") and the Protein Data Bank (PDB) ++at Rutgers, The State University of New Jersey (hereafter referred to ++as "RUTGERS"). The software is owned by RUTGERS and protected by ++copyright laws, and some elements are protected by laws governing ++trademarks, trade dress and trade secrets, and may be protected by ++patent laws. + + 2. LICENSE GRANT + +-RUTGERS grants you, and you hereby accept, non-exclusive, royalty-free +-perpetual license to install, use, modify, prepare derivative works, +-incorporate into other computer software, and distribute in binary +-and source code format, or any derivative work thereof, together with +-any associated media, printed materials, and on-line or electronic +-documentation (if any) provided by RUTGERS (collectively, the "SOFTWARE"), +-subject to the following terms and conditions: (i) any distribution +-of the SOFTWARE shall bind the receiver to the terms and conditions +-of this Agreement; (ii) any distribution of the SOFTWARE in modified +-form shall clearly state that the SOFTWARE has been modified from +-the version originally obtained from RUTGERS. +- +-2. COPYRIGHT; RETENTION OF RIGHTS. +- +-The above license grant is conditioned on the following: (i) you must +-reproduce all copyright notices and other proprietary notices on any +-copies of the SOFTWARE and you must not remove such notices; (ii) in +-the event you compile the SOFTWARE, you will include the copyright +-notice with the binary in such a manner as to allow it to be easily +-viewable; (iii) if you incorporate the SOFTWARE into other code, you +-must provide notice that the code contains the SOFTWARE and include +-a copy of the copyright notices and other proprietary notices. All +-copies of the SOFTWARE shall be subject to the terms of this Agreement. +- +-3. NO MAINTENANCE OR SUPPORT; TREATMENT OF ENHANCEMENTS +- +-RUTGERS is under no obligation whatsoever to: (i) provide maintenance +-or support for the SOFTWARE; or (ii) to notify you of bug fixes, patches, +-or upgrades to the features, functionality or performance of the +-SOFTWARE ("Enhancements") (if any), whether developed by RUTGERS +-or third parties. If, in its sole discretion, RUTGERS makes an +-Enhancement available to you and RUTGERS does not separately enter +-into a written license agreement with you relating to such bug fix, +-patch or upgrade, then it shall be deemed incorporated into the SOFTWARE +-and subject to this Agreement. You are under no obligation whatsoever +-to provide any Enhancements to RUTGERS or the public that you may +-develop over time; however, if you choose to provide your Enhancements +-to RUTGERS, or if you choose to otherwise publish or distribute your +-Enhancements, in source code form without contemporaneously requiring +-end users or RUTGERS to enter into a separate written license agreement ++RUTGERS grants you, and you hereby accept, non-exclusive, royalty-free ++perpetual license to install, use, modify, prepare derivative works, ++incorporate into other computer software, and distribute in binary ++and source code format, or any derivative work thereof, together with ++any associated media, printed materials, and on-line or electronic ++documentation (if any) provided by RUTGERS (collectively, the "SOFTWARE"), ++subject to the following terms and conditions: (i) any distribution ++of the SOFTWARE shall bind the receiver to the terms and conditions ++of this Agreement; (ii) any distribution of the SOFTWARE in modified ++form shall clearly state that the SOFTWARE has been modified from ++the version originally obtained from RUTGERS. ++ ++2. COPYRIGHT; RETENTION OF RIGHTS. ++ ++The above license grant is conditioned on the following: (i) you must ++reproduce all copyright notices and other proprietary notices on any ++copies of the SOFTWARE and you must not remove such notices; (ii) in ++the event you compile the SOFTWARE, you will include the copyright ++notice with the binary in such a manner as to allow it to be easily ++viewable; (iii) if you incorporate the SOFTWARE into other code, you ++must provide notice that the code contains the SOFTWARE and include ++a copy of the copyright notices and other proprietary notices. All ++copies of the SOFTWARE shall be subject to the terms of this Agreement. ++ ++3. NO MAINTENANCE OR SUPPORT; TREATMENT OF ENHANCEMENTS ++ ++RUTGERS is under no obligation whatsoever to: (i) provide maintenance ++or support for the SOFTWARE; or (ii) to notify you of bug fixes, patches, ++or upgrades to the features, functionality or performance of the ++SOFTWARE ("Enhancements") (if any), whether developed by RUTGERS ++or third parties. If, in its sole discretion, RUTGERS makes an ++Enhancement available to you and RUTGERS does not separately enter ++into a written license agreement with you relating to such bug fix, ++patch or upgrade, then it shall be deemed incorporated into the SOFTWARE ++and subject to this Agreement. You are under no obligation whatsoever ++to provide any Enhancements to RUTGERS or the public that you may ++develop over time; however, if you choose to provide your Enhancements ++to RUTGERS, or if you choose to otherwise publish or distribute your ++Enhancements, in source code form without contemporaneously requiring ++end users or RUTGERS to enter into a separate written license agreement + for such Enhancements, then you hereby grant RUTGERS a non-exclusive, + royalty-free perpetual license to install, use, modify, prepare + derivative works, incorporate into the SOFTWARE or other computer +@@ -105,37 +105,37 @@ and conditions. Upon termination, Licensee shall destroy all + copies of the SOFTWARE. + + 6. PROPRIETARY RIGHTS. Title, ownership rights, and intellectual +-property rights in the Product shall remain with RUTGERS. Licensee +-acknowledges such ownership and intellectual property rights and will +-not take any action to jeopardize, limit or interfere in any manner +-with RUTGERS' ownership of or rights with respect to the SOFTWARE. +-The SOFTWARE is protected by copyright and other intellectual +-property laws and by international treaties. Title and related +-rights in the content accessed through the SOFTWARE is the property +-of the applicable content owner and is protected by applicable law. ++property rights in the Product shall remain with RUTGERS. Licensee ++acknowledges such ownership and intellectual property rights and will ++not take any action to jeopardize, limit or interfere in any manner ++with RUTGERS' ownership of or rights with respect to the SOFTWARE. ++The SOFTWARE is protected by copyright and other intellectual ++property laws and by international treaties. Title and related ++rights in the content accessed through the SOFTWARE is the property ++of the applicable content owner and is protected by applicable law. + The license granted under this Agreement gives Licensee no rights to such + content. + +-7. DISCLAIMER OF WARRANTY. THE SOFTWARE IS PROVIDED FREE OF +-CHARGE, AND, THEREFORE, ON AN "AS IS" BASIS, WITHOUT WARRANTY OF +-ANY KIND, INCLUDING WITHOUT LIMITATION THE WARRANTIES THAT IT +-IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +-OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND +-PERFORMANCE OF THE SOFTWARE IS BORNE BY LICENSEE. SHOULD THE +-SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, THE LICENSEE AND NOT +-LICENSOR ASSUMES THE ENTIRE COST OF ANY SERVICE AND REPAIR. +-THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF +-THIS AGREEMENT. NO USE OF THE PRODUCT IS AUTHORIZED HEREUNDER ++7. DISCLAIMER OF WARRANTY. THE SOFTWARE IS PROVIDED FREE OF ++CHARGE, AND, THEREFORE, ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ++ANY KIND, INCLUDING WITHOUT LIMITATION THE WARRANTIES THAT IT ++IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE ++OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND ++PERFORMANCE OF THE SOFTWARE IS BORNE BY LICENSEE. SHOULD THE ++SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, THE LICENSEE AND NOT ++LICENSOR ASSUMES THE ENTIRE COST OF ANY SERVICE AND REPAIR. ++THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF ++THIS AGREEMENT. NO USE OF THE PRODUCT IS AUTHORIZED HEREUNDER + EXCEPT UNDER THIS DISCLAIMER. + + 8. LIMITATION OF LIABILITY. TO THE MAXIMUM EXTENT PERMITTED BY +-APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE FOR ANY +-INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +-OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE, INCLUDING, +-WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK +-STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL ++APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE FOR ANY ++INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING ++OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE, INCLUDING, ++WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK ++STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL + OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF ADVISED OF THE +-POSSIBILITY THEREOF. ++POSSIBILITY THEREOF. + */ + #include + #include +@@ -168,7 +168,7 @@ int wsystem(const char *cmdstring, const char *path, const int time_limit) + strcat(cmdstr1, "limit filesize unlimited >& /dev/null; "); + strcat(cmdstr1, "limit memoryuse unlimited >& /dev/null; "); + strcat(cmdstr1, "limit vmemoryuse unlimited >& /dev/null; "); +- ++ + strcat(cmdstr1, cmdstring); + + fdout = -1; +@@ -187,7 +187,7 @@ int wsystem(const char *cmdstring, const char *path, const int time_limit) + if (pid == 0) { + if (fderr > 0) dup2(fderr, STDERR_FILENO); + if (fdout > 0) dup2(fdout, STDOUT_FILENO); +- execl("/bin/tcsh", "tcsh", "-c", cmdstr1, (char *) 0); ++ execl("/usr/bin/env", "tcsh", "-c", cmdstr1, (char *) 0); + _exit(1); + } + while (wait(&status) != pid) ; diff --git a/recipes/mbgc/asmlib_off.patch b/recipes/mbgc/asmlib_off.patch new file mode 100644 index 0000000000000..5877af25ad840 --- /dev/null +++ b/recipes/mbgc/asmlib_off.patch @@ -0,0 +1,113 @@ +Subject: [PATCH] turned off asmlib for mac to avoid build problems +--- +Index: mbgccoder/MBGC_Encoder.cpp +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/mbgccoder/MBGC_Encoder.cpp b/mbgccoder/MBGC_Encoder.cpp +--- a/mbgccoder/MBGC_Encoder.cpp (revision 3f75674bef8463fbfb38e5c13b2760001c82db2a) ++++ b/mbgccoder/MBGC_Encoder.cpp (date 1728303373036) +@@ -15,7 +15,7 @@ + ( params->checkIfDNAisWellFormed ? (seq->dnaLineLen == DNA_NOT_WELLFORMED ? 0 : seq->dnaLineLen ) \ + : seq->maxLastDnaLineLen ) : 0) + +-#if !defined(__arm__) && !defined(__aarch64__) && !defined(__ARM_ARCH) ++#if false + #include "../libs/asmlib.h" + #endif + #include "../coders/PropsLibrary.h" +Index: matching/SlidingWindowSparseEMMatcher.cpp +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/matching/SlidingWindowSparseEMMatcher.cpp b/matching/SlidingWindowSparseEMMatcher.cpp +--- a/matching/SlidingWindowSparseEMMatcher.cpp (revision 3f75674bef8463fbfb38e5c13b2760001c82db2a) ++++ b/matching/SlidingWindowSparseEMMatcher.cpp (date 1728303373000) +@@ -28,7 +28,7 @@ + * ================================================================= */ + + #include "SlidingWindowSparseEMMatcher.h" +-#if !defined(__arm__) && !defined(__aarch64__) && !defined(__ARM_ARCH) ++#if false + #include "../libs/asmlib.h" + #endif + #include +Index: mbgccoder/MBGC_Decoder.cpp +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/mbgccoder/MBGC_Decoder.cpp b/mbgccoder/MBGC_Decoder.cpp +--- a/mbgccoder/MBGC_Decoder.cpp (revision 3f75674bef8463fbfb38e5c13b2760001c82db2a) ++++ b/mbgccoder/MBGC_Decoder.cpp (date 1728303418036) +@@ -1,7 +1,7 @@ + #include "MBGC_Decoder.h" + + #include "../coders/CodersLib.h" +-#if !defined(__arm__) && !defined(__aarch64__) && !defined(__ARM_ARCH) ++#if false + #include "../libs/asmlib.h" + #endif + #include "../matching/SimpleSequenceMatcher.h" +Index: utils/helper.h +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/utils/helper.h b/utils/helper.h +--- a/utils/helper.h (revision 3f75674bef8463fbfb38e5c13b2760001c82db2a) ++++ b/utils/helper.h (date 1728303373072) +@@ -338,7 +338,7 @@ + + } + +-#if defined(__arm__) || defined(__aarch64__) || defined(__ARM_ARCH) ++#if true + + void A_memcpy(void *dest, const void *src, size_t n); + +Index: utils/helper.cpp +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/utils/helper.cpp b/utils/helper.cpp +--- a/utils/helper.cpp (revision 3f75674bef8463fbfb38e5c13b2760001c82db2a) ++++ b/utils/helper.cpp (date 1728303373058) +@@ -582,7 +582,7 @@ + #endif + } + +-#if defined(__arm__) || defined(__aarch64__) || defined(__ARM_ARCH) ++#if true + + void A_memcpy(void *dest, const void *src, size_t n) { + memcpy(dest, src, n); +Index: CMakeLists.txt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/CMakeLists.txt b/CMakeLists.txt +--- a/CMakeLists.txt (revision 3f75674bef8463fbfb38e5c13b2760001c82db2a) ++++ b/CMakeLists.txt (date 1728303558182) +@@ -99,17 +99,6 @@ + set(CMAKE_BUILD_TYPE Release) + endif() + +-if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64|AMD64)") +- if(CYGWIN OR MINGW) +- set(ASM_LIB ${CMAKE_SOURCE_DIR}/libs/libacof64.lib) +- elseif(UNIX AND NOT APPLE) +- set(ASM_LIB ${CMAKE_SOURCE_DIR}/libs/libaelf64.a) +- elseif(APPLE) +- set(ASM_LIB ${CMAKE_SOURCE_DIR}/libs/libamac64.a) +- endif() +- link_libraries(${ASM_LIB}) +-endif() +- + link_libraries(pthread) + + if(CYGWIN OR MINGW) diff --git a/recipes/mbgc/build.sh b/recipes/mbgc/build.sh index 5ba02c5655448..a2defe37bec12 100644 --- a/recipes/mbgc/build.sh +++ b/recipes/mbgc/build.sh @@ -1,18 +1,22 @@ -#! /bin/bash +#!/bin/bash mkdir -p $PREFIX/bin -mkdir build -cd build -export CPATH=${BUILD_PREFIX}/include -export CXXPATH=${BUILD_PREFIX}/include -export CFLAGS="$CFLAGS -I$BUILD_PREFIX/include" -export CXXFLAGS="$CFLAGS -I$BUILD_PREFIX/include" -export LDFLAGS="$LDFLAGS -L$BUILD_PREFIX/lib" -cmake .. -if [[ "$(uname)" == "Linux" ]]; then - make mbgc -else - make mbgc-noavx - mv mbgc-noavx mbgc -fi -cp mbgc $PREFIX/bin + +export INCLUDES="-I${PREFIX}/include" +export LIBPATH="-L${PREFIX}/lib" +export CXXFLAGS="${CXXFLAGS} -I${PREFIX}/include" +export LDFLAGS="${LDFLAGS} -L${PREFIX}/lib" + +if [[ `uname` == "Darwin" ]]; then + export CONFIG_ARGS="-DCMAKE_FIND_FRAMEWORK=NEVER -DCMAKE_FIND_APPBUNDLE=NEVER" +else + export CONFIG_ARGS="" +fi + +cmake -S . -B build -DCMAKE_INSTALL_PREFIX="${PREFIX}" \ + -DCMAKE_BUILD_TYPE=Release \ + "${CONFIG_ARGS}" +cmake --build build --target mbgc -j "${CPU_COUNT}" -v + +chmod 0755 build/mbgc +cp -rf build/mbgc $PREFIX/bin diff --git a/recipes/mbgc/meta.yaml b/recipes/mbgc/meta.yaml index 12643af3c5da8..a84733a119b9f 100644 --- a/recipes/mbgc/meta.yaml +++ b/recipes/mbgc/meta.yaml @@ -5,13 +5,15 @@ package: version: {{ version }} build: - number: 0 + number: 1 run_exports: - {{ pin_subpackage('mbgc', max_pin="x") }} source: url: https://github.com/kowallus/mbgc/archive/refs/tags/v{{ version }}.tar.gz - sha256: fb422fc89aa95d82dab0b1431b7f220d5f4cdab2dfc1141218e74668461fa530 + sha256: fb422fc89aa95d82dab0b1431b7f220d5f4cdab2dfc1141218e74668461fa530 + patches: + - asmlib_off.patch # [osx and x86_64] requirements: build: @@ -20,21 +22,28 @@ requirements: - make host: - llvm-openmp # [osx] + - libgomp # [linux] run: - - llvm-openmp # [osx] - + - llvm-openmp # [osx] + - libgomp # [linux] + test: commands: - mbgc -v 2>&1 | grep -F {{ version }} about: home: https://github.com/kowallus/mbgc - license: GPL3 + license: "GPL-3.0-or-later" license_file: LICENSE - license_family: GPL - summary: A tool for compressing collection of genomes in FASTA format + license_family: GPL3 + summary: "A tool for compressing collection of genomes in FASTA format." + dev_url: https://github.com/kowallus/mbgc extra: - maintainers: + additional-platforms: + - linux-aarch64 + - osx-arm64 + recipe-maintainers: - kowallus - + identifiers: + - doi:10.1093/gigascience/giab099 diff --git a/recipes/merquryfk/meta.yaml b/recipes/merquryfk/meta.yaml index 09f7118cbb63f..b9b8a27e24ca9 100644 --- a/recipes/merquryfk/meta.yaml +++ b/recipes/merquryfk/meta.yaml @@ -1,6 +1,6 @@ {% set name = "MERQURYFK" %} -{% set version = "1.0.0" %} -{% set sha256 = "dac0c8426b491eaf38888ea9bb8abfdbb47702df3fc6b18692eaf55aa02a425f" %} +{% set version = "1.1.0" %} +{% set sha256 = "2af9dd265d10d79dceba495f8ef2469e5f832783b5824ab554e1efcb6ffe660c" %} package: name: {{ name|lower }} @@ -13,7 +13,7 @@ source: - patch build: - number: 1 + number: 0 skip: True # [osx] run_exports: - {{ pin_subpackage("merquryfk", max_pin="x") }} diff --git a/recipes/metabolabpy/meta.yaml b/recipes/metabolabpy/meta.yaml index 738dbbfb7fdea..1ebc73d558377 100644 --- a/recipes/metabolabpy/meta.yaml +++ b/recipes/metabolabpy/meta.yaml @@ -1,6 +1,6 @@ {% set name = "metabolabpy" %} -{% set version = "0.9.46" %} -{% set sha256 = "e48ae83d423f290e4e55d64fbea97032e3f7a1c0e8942d177a5da755cabff7fa" %} +{% set version = "0.9.53" %} +{% set sha256 = "33a3b653bc876908948578abb0354d146ab796cb234640a90a7ec1cadee19427" %} package: name: {{ name|lower }} diff --git a/recipes/metabolights-utils/meta.yaml b/recipes/metabolights-utils/meta.yaml index 3f6837d779541..f12e37a1a9786 100644 --- a/recipes/metabolights-utils/meta.yaml +++ b/recipes/metabolights-utils/meta.yaml @@ -1,5 +1,5 @@ {% set name = "metabolights-utils" %} -{% set version = "1.1.8" %} +{% set version = "1.1.10" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/metabolights_utils-{{ version }}.tar.gz - sha256: c808269f610d8fa4b019c5d5a39114f4cfaea4d490d0c31eb41cfa513aaa6efa + sha256: 1e50774a4d4ab15d47e8274773f400fec3c09fc508bddd16dd30fb9c2626716c build: entry_points: diff --git a/recipes/metabuli/meta.yaml b/recipes/metabuli/meta.yaml index 0d6ed66393dbf..474fe1ebaeca8 100644 --- a/recipes/metabuli/meta.yaml +++ b/recipes/metabuli/meta.yaml @@ -1,12 +1,12 @@ -{% set version = "1.0.5" %} -{% set sha256 = "c84a4e2436904f0cbea7126abf2a5f665a870735c8af786883e10f3f872bda28" %} +{% set version = "1.0.8" %} +{% set sha256 = "cc7e496ff82f00b56ef59aa2a04fa572a2025225b0558e0df144f166fade82d4" %} package: name: metabuli version: {{ version }} build: - number: 2 + number: 0 run_exports: - {{ pin_subpackage('metabuli', max_pin="x") }} diff --git a/recipes/metacache/build.sh b/recipes/metacache/build.sh index d598c1db19aeb..148f16909d068 100644 --- a/recipes/metacache/build.sh +++ b/recipes/metacache/build.sh @@ -1,6 +1,6 @@ #!/bin/bash -set -e +set -xe export CPATH=${PREFIX}/include export CXXPATH=${PREFIX}/include @@ -11,7 +11,7 @@ sed -i.bak "s|LDFLAGS = -pthread|LDFLAGS = -pthread -L$PREFIX/lib|" mkdir -p $PREFIX/bin -make +make -j ${CPU_COUNT} chmod +x metacache download-ncbi-genomes download-ncbi-taxmaps download-ncbi-taxonomy metacache-build-refseq metacache-db-info metacache-partition-genomes summarize-results mv metacache $PREFIX/bin mv download-ncbi-genomes $PREFIX/bin diff --git a/recipes/metacache/meta.yaml b/recipes/metacache/meta.yaml index f37fdf17c598b..c2067924f2f8b 100644 --- a/recipes/metacache/meta.yaml +++ b/recipes/metacache/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "2.4.2" %} +{% set version = "2.4.3" %} package: name: metacache @@ -6,7 +6,7 @@ package: source: url: https://github.com/muellan/metacache/archive/refs/tags/v{{ version }}.tar.gz - sha256: 2062de4c13cc9ed3962c8903b81dca05ccabd5820305362229bc446c11c9b111 + sha256: 2b43aa1ac051d6cbaa4d29c3ed7d9593e226e7e2b35cdd0b2e513e465456a7b2 build: number: 1 @@ -39,6 +39,10 @@ test: about: home: https://github.com/muellan/metacache - license: GPL-3.0 + license: GPL-3.0-or-later license_file: LICENSE summary: MetaCache is a classification system for mapping genomic sequences (short reads, long reads, contigs, ...) from metagenomic samples to their most likely taxon of origin. + +extra: + additional-platforms: + - linux-aarch64 diff --git a/recipes/metacoag/meta.yaml b/recipes/metacoag/meta.yaml index 1f40236ed4268..0ca99928a9650 100644 --- a/recipes/metacoag/meta.yaml +++ b/recipes/metacoag/meta.yaml @@ -1,5 +1,5 @@ {% set name = "MetaCoAG" %} -{% set version = "1.2.1" %} +{% set version = "1.2.2" %} package: name: "{{ name|lower }}" @@ -7,11 +7,10 @@ package: source: url: "https://github.com/metagentools/{{ name }}/archive/v{{ version }}.tar.gz" - sha256: 5962a92e49842f55db50b7a7bede8dc33b9508a08d395a796b3f4fa78fed70b9 + sha256: 1a8d91cb02fdad9ba15c636eeaf167e34f118bc4d12f57366e107ebf160781c7 build: number: 0 - noarch: python entry_points: - metacoag = metacoag.cli:main - combine_cov = metacoag.metacoag_utils.support.combine_cov:main @@ -56,6 +55,8 @@ about: dev_url: "https://github.com/metagentools/MetaCoAG" extra: + skip-lints: + - should_be_noarch_generic recipe-maintainers: - Vini2 identifiers: diff --git a/recipes/methylartist/meta.yaml b/recipes/methylartist/meta.yaml index 13807dcfdbdd1..f26e3db2fa3b5 100644 --- a/recipes/methylartist/meta.yaml +++ b/recipes/methylartist/meta.yaml @@ -1,5 +1,5 @@ {% set name = "methylartist" %} -{% set version = "1.3.0" %} +{% set version = "1.3.1" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: 955f2ca5b0ba0d2c28e7421140e90555a8ef867ecedb41788c83132b29410329 + sha256: a720ca9367edcb9e2b7cd7980064f6c814235e41e057f7f78567d27f04d95884 build: noarch: python diff --git a/recipes/mgatk/meta.yaml b/recipes/mgatk/meta.yaml index 3a641253df822..a7f891da24de7 100644 --- a/recipes/mgatk/meta.yaml +++ b/recipes/mgatk/meta.yaml @@ -10,7 +10,7 @@ source: sha256: f42f5eb8fcfd38dd6ef3db853764071311cb70d841a73ff2f40f0a0c9e9d7de9 build: - number: 1 + number: 2 noarch: python entry_points: - mgatk = mgatk.cli:main @@ -36,7 +36,7 @@ requirements: - pandas - optparse-pretty - regex - - ruamel.yaml + - ruamel.yaml 0.16.12 - openjdk - picard-slim - r-base diff --git a/recipes/mgikit/meta.yaml b/recipes/mgikit/meta.yaml index c519032f8deb4..e8ec1141a2616 100644 --- a/recipes/mgikit/meta.yaml +++ b/recipes/mgikit/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "0.1.6" %} +{% set version = "0.1.7" %} package: name: mgikit @@ -11,7 +11,7 @@ build: source: url: https://github.com/sagc-bioinformatics/mgikit/archive/refs/tags/v{{ version }}.tar.gz - sha256: 6f94322108cb8ac62a7dbd213d95949b6ac82eddb6ff07221e62820461be3d9d + sha256: d8ad7f468d2fa1004f4499b40e190b6a0b2b5165d66e6400bb8f987770375647 requirements: build: diff --git a/recipes/mgnify-pipelines-toolkit/meta.yaml b/recipes/mgnify-pipelines-toolkit/meta.yaml index 7be89ec5a1ba8..eae9441d91acc 100644 --- a/recipes/mgnify-pipelines-toolkit/meta.yaml +++ b/recipes/mgnify-pipelines-toolkit/meta.yaml @@ -1,5 +1,5 @@ {% set name = "mgnify-pipelines-toolkit" %} -{% set version = "0.1.6" %} +{% set version = "0.1.7" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/mgnify_pipelines_toolkit-{{ version }}.tar.gz - sha256: a89ad126b2b3e57552dddd1ddd935ed5a269376cd351328712eb30fb92006fc9 + sha256: 506eb725d226ff33ceaf8001502a0ab97bcaf41ac84ce011f98a2ccb892389ed build: entry_points: diff --git a/recipes/mhcflurry/meta.yaml b/recipes/mhcflurry/meta.yaml index cf51e883c801f..768e19e92eb7b 100644 --- a/recipes/mhcflurry/meta.yaml +++ b/recipes/mhcflurry/meta.yaml @@ -1,5 +1,5 @@ {% set name = "mhcflurry" %} -{% set version = "2.1.2" %} +{% set version = "2.1.4" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: 95f7b23abde2838118190307096d84c795f373646d231ddf07969cdb4a5138de + sha256: 5f8a4e743bf6e5a17ad4e6fe79be7755b45a5005d048fbf3d8eb90762236c68e build: number: 0 diff --git a/recipes/mini3di/meta.yaml b/recipes/mini3di/meta.yaml new file mode 100644 index 0000000000000..06fc809f1eb9a --- /dev/null +++ b/recipes/mini3di/meta.yaml @@ -0,0 +1,40 @@ +{% set name = "mini3di" %} +{% set version = "0.2.1" %} + +package: + name: "{{ name|lower }}" + version: "{{ version }}" + +source: + url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz + sha256: dfc4a63aaba175b05e9cc1f260e1bfcd2832ff3235537146a334b6a2179f8a96 + +build: + noarch: python + number: 0 + script: "{{ PYTHON }} -m pip install . --no-deps --ignore-installed -vvv " + run_exports: + - {{ pin_subpackage(name, max_pin="x.x") }} + +requirements: + host: + - python + - pip + - setuptools + run: + - python + - numpy + +test: + imports: + - {{ name }} + +about: + home: https://github.com/althonos/mini3di + license: BSD-3-Clause + license_file: COPYING + summary: "A NumPy port of the foldseek code for encoding protein structures to 3di." + +extra: + recipe-maintainers: + - althonos diff --git a/recipes/minimizers/meta.yaml b/recipes/minimizers/meta.yaml new file mode 100644 index 0000000000000..eaba48148df54 --- /dev/null +++ b/recipes/minimizers/meta.yaml @@ -0,0 +1,49 @@ +{% set name = "minimizers" %} +{% set version = "0.1.2" %} + +package: + name: {{ name|lower }} + version: {{ version }} + +source: + url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz + sha256: 41757d81ec6a2872f947ec568eb521bdd40170832bee21b748d48b1778f817bf + +build: + number: 0 + noarch: python + entry_points: + - minimizers=minimizers.minimizers:main + run_exports: + - {{ pin_subpackage('minimizers', max_pin="x.x") }} + script: {{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir -vvv + +requirements: + host: + - pip + - python >=3.6 + - bio + run: + - biopython >=1.83 + - python >=3.6 + - bio + +test: + imports: + - minimizers + commands: + - minimizers --version + +about: + home: https://github.com/cumbof/minimizers + license: MIT + license_family: MIT + license_file: LICENSE + summary: "Minimizers extraction from fasta files." + description: | + A Python package for extracting minimizers from fasta files + dev_url: https://github.com/cumbof/minimizers + +extra: + recipe-maintainers: + - cumbof diff --git a/recipes/moni/build.sh b/recipes/moni/build.sh new file mode 100644 index 0000000000000..455d5bf7c0861 --- /dev/null +++ b/recipes/moni/build.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +set -xe + +export CPATH=$PREFIX/include:$CPATH +export LIBRARY_PATH=$PREFIX/lib:$LIBRARY_PATH +export LD_LIBRARY_PATH=$PREFIX/lib:$LD_LIBRARY_PATH + +mkdir build +cd build +cmake -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DCMAKE_PREFIX_PATH=$PREFIX \ + -DCMAKE_INCLUDE_PATH=$PREFIX/include \ + -DCMAKE_LIBRARY_PATH=$PREFIX/lib \ + -DZLIB_ROOT=$PREFIX \ + .. +make -j ${CPU_COUNT} VERBOSE=1 +make install diff --git a/recipes/moni/conda_build_config.yaml b/recipes/moni/conda_build_config.yaml new file mode 100644 index 0000000000000..f62708b887406 --- /dev/null +++ b/recipes/moni/conda_build_config.yaml @@ -0,0 +1,5 @@ +c_compiler_version: + - 9.3.0 # [linux] + +cxx_compiler_version: + - 9.3.0 # [linux] diff --git a/recipes/moni/meta.yaml b/recipes/moni/meta.yaml new file mode 100644 index 0000000000000..b5da94ad049f8 --- /dev/null +++ b/recipes/moni/meta.yaml @@ -0,0 +1,54 @@ +{% set name = "moni" %} +{% set version = "0.2.2" %} + +package: + name: {{ name|lower }} + version: {{ version }} + +source: + url: https://github.com/maxrossi91/{{ name }}/archive/refs/tags/v{{ version }}.tar.gz + sha256: 638cd590e0c91218a9c7c0bf5aac6289d445a5a1b3ad91aa0cf62d7ff57ce0ce + +build: + skip: True # [osx] + number: 0 + run_exports: + - {{ pin_subpackage(name, max_pin='x.x') }} + +requirements: + build: + - {{ compiler('cxx') }} + - cmake + - make + - git + host: + - zlib + - python + run: + - zlib + - python + +test: + commands: + - moni -h + - moni build -h + - moni ms -h + - moni mems -h + - moni extend -h + +about: + home: https://github.com/maxrossi91/moni + license: MIT + license_family: MIT + license_file: LICENSE + summary: 'A Pangenomics Index for Finding MEMs' + description: | + MONI (Multi) is a Pangenomics Index for Finding Maximal Exact Matches (MEMs). + It uses the prefix-free parsing of the text to build the Burrows-Wheeler Transform (BWT) + of the reference genomes, the suffix array (SA) samples at the beginning and at the end + of each run of the BWT, and the threshold positions. + +extra: + recipe-maintainers: + - AndreaGuarracino + - maxrossi91 \ No newline at end of file diff --git a/recipes/ms2deepscore/meta.yaml b/recipes/ms2deepscore/meta.yaml index 6389bdadf0716..af3102cc3571f 100644 --- a/recipes/ms2deepscore/meta.yaml +++ b/recipes/ms2deepscore/meta.yaml @@ -1,6 +1,6 @@ {% set name = "ms2deepscore" %} -{% set version = "2.0.0" %} -{% set sha256 = "50b700319a07461a0ac2be0a6f67c1cf1b23a681cb76b8c4488d948f8976f5b2" %} +{% set version = "2.1.0" %} +{% set sha256 = "ba844b923a6e1fb61c8dc24c8ea507ed5e502a81e8f675710ba76574498e5c9c" %} package: name: {{ name|lower }} @@ -13,7 +13,7 @@ source: build: number: 0 noarch: python - script: {{ PYTHON }} -m pip install . --no-deps --no-build-isolation -vvv + script: {{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir -vvv run_exports: - {{ pin_subpackage('ms2deepscore', max_pin="x") }} @@ -29,6 +29,8 @@ requirements: - numpy >=1.20.3 - pandas - pytorch + - tensorboard + - torchvision - scikit-learn - tqdm diff --git a/recipes/msisensor-pro/build.sh b/recipes/msisensor-pro/build.sh index 8c7cabd77d629..1651e36191fd5 100644 --- a/recipes/msisensor-pro/build.sh +++ b/recipes/msisensor-pro/build.sh @@ -1,2 +1,7 @@ -make -C cpp CC=$CC CXX=$CXX -cp cpp/msisensor-pro $PREFIX/bin +#!/bin/bash + +mkdir -p ${PREFIX}/bin + +make -C cpp CC="${CC}" CXX="${CXX}" -j"${CPU_COUNT}" +chmod 0755 cpp/msisensor-pro +mv cpp/msisensor-pro ${PREFIX}/bin diff --git a/recipes/msisensor-pro/build_failure.linux-64.yaml b/recipes/msisensor-pro/build_failure.linux-64.yaml deleted file mode 100644 index 966f52c6572e2..0000000000000 --- a/recipes/msisensor-pro/build_failure.linux-64.yaml +++ /dev/null @@ -1,104 +0,0 @@ -recipe_sha: 78ea6e46bf2985f75436cac4d34088dd710099309f3507510a45d90f36f68972 # The hash of the recipe's meta.yaml at which this recipe failed to build. -skiplist: true # Set to true to skiplist this recipe so that it will be ignored as long as its latest commit is the one given above. -log: |- - patching file cpp/makefile - Patch analysis gives: - [[ RA-MD1LOVE ]] - [[ buildfixes.patch ]] - - Key: - - R :: Reversible A :: Applicable - Y :: Build-prefix patch in use M :: Minimal, non-amalgamated - D :: Dry-runnable N :: Patch level (1 is preferred) - L :: Patch level not-ambiguous O :: Patch applies without offsets - V :: Patch applies without fuzz E :: Patch applies without emitting to stderr - - source tree in: /opt/conda/conda-bld/msisensor-pro_1717781420099/work - export PREFIX=/opt/conda/conda-bld/msisensor-pro_1717781420099/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold - export BUILD_PREFIX=/opt/conda/conda-bld/msisensor-pro_1717781420099/_build_env - export SRC_DIR=/opt/conda/conda-bld/msisensor-pro_1717781420099/work - INFO: activate-binutils_linux-64.sh made the following environmental changes: - ADDR2LINE=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-addr2line - AR=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-ar - AS=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-as - CXXFILT=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-cfilt - ELFEDIT=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-elfedit - GPROF=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-gprof - LD=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-ld - LD_GOLD=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-ld.gold - NM=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-nm - OBJCOPY=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-objcopy - OBJDUMP=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-objdump - RANLIB=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-ranlib - READELF=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-readelf - SIZE=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-size - STRINGS=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-strings - STRIP=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-strip - INFO: activate-gcc_linux-64.sh made the following environmental changes: - BUILD=x86_64-conda-linux-gnu - CC=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-cc - CC_FOR_BUILD=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-cc - CFLAGS=-march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/msisensor-pro-1.2.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix - CMAKE_ARGS=-DCMAKE_AR=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-ar -DCMAKE_CXX_COMPILER_AR=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-gcc-ar -DCMAKE_C_COMPILER_AR=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-gcc-ar -DCMAKE_RANLIB=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-ranlib -DCMAKE_CXX_COMPILER_RANLIB=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-gcc-ranlib -DCMAKE_C_COMPILER_RANLIB=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-gcc-ranlib -DCMAKE_LINKER=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-ld -DCMAKE_STRIP=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-strip -DCMAKE_BUILD_TYPE=Release -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY -DCMAKE_FIND_ROOT_PATH=$PREFIX;$BUILD_PREFIX/x86_64-conda-linux-gnu/sysroot -DCMAKE_INSTALL_PREFIX=$PREFIX -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_PROGRAM_PATH=$BUILD_PREFIX/bin;$PREFIX/bin - CMAKE_PREFIX_PATH=$PREFIX:$BUILD_PREFIX/x86_64-conda-linux-gnu/sysroot/usr - CONDA_BUILD_SYSROOT=$BUILD_PREFIX/x86_64-conda-linux-gnu/sysroot - CONDA_TOOLCHAIN_BUILD=x86_64-conda-linux-gnu - CONDA_TOOLCHAIN_HOST=x86_64-conda-linux-gnu - CPP=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-cpp - CPPFLAGS=-DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem $PREFIX/include - DEBUG_CFLAGS=-march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-all -fno-plt -Og -g -Wall -Wextra -fvar-tracking-assignments -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/msisensor-pro-1.2.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix - DEBUG_CPPFLAGS=-D_DEBUG -D_FORTIFY_SOURCE=2 -Og -isystem $PREFIX/include - GCC=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-gcc - GCC_AR=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-gcc-ar - GCC_NM=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-gcc-nm - GCC_RANLIB=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-gcc-ranlib - HOST=x86_64-conda-linux-gnu - LDFLAGS=-Wl,-O2 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,--disable-new-dtags -Wl,--gc-sections -Wl,--allow-shlib-undefined -Wl,-rpath,$PREFIX/lib -Wl,-rpath-link,$PREFIX/lib -L$PREFIX/lib - MESON_ARGS=--buildtype release --prefix=$PREFIX -Dlibdir=lib - _CONDA_PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata_x86_64_conda_cos6_linux_gnu - build_alias=x86_64-conda-linux-gnu - host_alias=x86_64-conda-linux-gnu - -BUILD=x86_64-conda_cos6-linux-gnu - -CONDA_BUILD_SYSROOT= - INFO: activate-gxx_linux-64.sh made the following environmental changes: - CXX=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-c - CXXFLAGS=-fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/msisensor-pro-1.2.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix - CXX_FOR_BUILD=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-c - DEBUG_CXXFLAGS=-fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-all -fno-plt -Og -g -Wall -Wextra -fvar-tracking-assignments -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/msisensor-pro-1.2.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix - GXX=$BUILD_PREFIX/bin/x86_64-conda-linux-gnu-g - make: Entering directory '$SRC_DIR/cpp' - $BUILD_PREFIX/bin/x86_64-conda-linux-gnu-c -std=c11 -fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/msisensor-pro-1.2.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -O2 -fopenmp -c cmds.cpp -o cmds.o - $BUILD_PREFIX/bin/x86_64-conda-linux-gnu-c -std=c11 -fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/msisensor-pro-1.2.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -O2 -fopenmp -c scan.cpp -o scan.o - $BUILD_PREFIX/bin/x86_64-conda-linux-gnu-c -std=c11 -fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/msisensor-pro-1.2.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -O2 -fopenmp -c distribution.cpp -o distribution.o - $BUILD_PREFIX/bin/x86_64-conda-linux-gnu-c -std=c11 -fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/msisensor-pro-1.2.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -O2 -fopenmp -c refseq.cpp -o refseq.o - $BUILD_PREFIX/bin/x86_64-conda-linux-gnu-c -std=c11 -fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/msisensor-pro-1.2.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -O2 -fopenmp -c polyscan.cpp -o polyscan.o - $BUILD_PREFIX/bin/x86_64-conda-linux-gnu-c -std=c11 -fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/msisensor-pro-1.2.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -O2 -fopenmp -c param.cpp -o param.o - $BUILD_PREFIX/bin/x86_64-conda-linux-gnu-c -std=c11 -fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/msisensor-pro-1.2.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -O2 -fopenmp -c utilities.cpp -o utilities.o - $BUILD_PREFIX/bin/x86_64-conda-linux-gnu-c -std=c11 -fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/msisensor-pro-1.2.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -O2 -fopenmp -c homo.cpp -o homo.o - $BUILD_PREFIX/bin/x86_64-conda-linux-gnu-c -std=c11 -fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/msisensor-pro-1.2.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -O2 -fopenmp -c window.cpp -o window.o - $BUILD_PREFIX/bin/x86_64-conda-linux-gnu-c -std=c11 -fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/msisensor-pro-1.2.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -O2 -fopenmp -c bamreader.cpp -o bamreader.o - $BUILD_PREFIX/bin/x86_64-conda-linux-gnu-c -std=c11 -fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/msisensor-pro-1.2.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -O2 -fopenmp -c sample.cpp -o sample.o - $BUILD_PREFIX/bin/x86_64-conda-linux-gnu-c -std=c11 -fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/msisensor-pro-1.2.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -O2 -fopenmp -c chi.cpp -o chi.o - $BUILD_PREFIX/bin/x86_64-conda-linux-gnu-c -std=c11 -fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/msisensor-pro-1.2.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -O2 -fopenmp -c somatic.cpp -o somatic.o - $BUILD_PREFIX/bin/x86_64-conda-linux-gnu-c -std=c11 cmds.o scan.o distribution.o refseq.o polyscan.o param.o utilities.o homo.o window.o bamreader.o sample.o chi.o somatic.o -fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/msisensor-pro-1.2.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -O2 -fopenmp -Wl,-O2 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,--disable-new-dtags -Wl,--gc-sections -Wl,--allow-shlib-undefined -Wl,-rpath,$PREFIX/lib -Wl,-rpath-link,$PREFIX/lib -L$PREFIX/lib -lm -lz -lpthread -lhts -o msisensor-pro - /opt/conda/conda-bld/msisensor-pro_1717781420099/_build_env/bin/../lib/gcc/x86_64-conda-linux-gnu/12.3.0/../../../../x86_64-conda-linux-gnu/bin/ld: cannot find -lz: No such file or directory - collect2: error: ld returned 1 exit status - make: *** [makefile:27: msisensor-pro] Error 1 - make: Leaving directory '$SRC_DIR/cpp' - Traceback (most recent call last): - File "/opt/conda/bin/conda-build", line 11, in - sys.exit(execute()) - File "/opt/conda/lib/python3.10/site-packages/conda_build/cli/main_build.py", line 590, in execute - api.build( - File "/opt/conda/lib/python3.10/site-packages/conda_build/api.py", line 250, in build - return build_tree( - File "/opt/conda/lib/python3.10/site-packages/conda_build/build.py", line 3638, in build_tree - packages_from_this = build( - File "/opt/conda/lib/python3.10/site-packages/conda_build/build.py", line 2506, in build - utils.check_call_env( - File "/opt/conda/lib/python3.10/site-packages/conda_build/utils.py", line 405, in check_call_env - return _func_defaulting_env_to_os_environ("call", *popenargs, **kwargs) - File "/opt/conda/lib/python3.10/site-packages/conda_build/utils.py", line 381, in _func_defaulting_env_to_os_environ - raise subprocess.CalledProcessError(proc.returncode, _args) - subprocess.CalledProcessError: Command '['/bin/bash', '-o', 'errexit', '/opt/conda/conda-bld/msisensor-pro_1717781420099/work/conda_build.sh']' returned non-zero exit status 2. -# Last 100 lines of the build log. diff --git a/recipes/msisensor-pro/buildfixes.patch b/recipes/msisensor-pro/buildfixes.patch index 2bffe10bdc6e3..f72ef3a7c4e7f 100644 --- a/recipes/msisensor-pro/buildfixes.patch +++ b/recipes/msisensor-pro/buildfixes.patch @@ -4,24 +4,31 @@ index 321a56b..dc541fc 100755 +++ b/cpp/bamreader.cpp @@ -27,6 +27,7 @@ unsigned int g_CloseMappedPlus = 0; unsigned int g_CloseMappedMinus = 0; - + //init hash/maps for read pairing on the fly +#define register KSORT_INIT_GENERIC(uint32_t) KHASH_MAP_INIT_STR(read_name, bam1_t *) struct fetch_func_data_SR { diff --git a/cpp/makefile b/cpp/makefile -index 78da629..98daf27 100755 +index 88639e1..c1f6bb6 100644 --- a/cpp/makefile +++ b/cpp/makefile -@@ -6,8 +6,8 @@ HTSLIB=$(realpath ../vendor/htslib-1.11) +@@ -1,13 +1,13 @@ +-CXX=g++ ++CXX=${CXX} + + HTSLIB=$(realpath ../vendor/htslib-1.11) + # HTSLIB_CPPFLAGS=-I$(realpath $(HTSLIB_ROOT)) + # echo $(HTSLIB_CPPFLAGS) # HTSLIB_LDFLAGS=-L/mnt/project/Project_Pindel/pindel_update/pindel/htslib/ -Wl,-rpath CPP_ROOT=cpp - CXXFLAGS+= -O2 -fopenmp +-CXXFLAGS+= -O2 -fopenmp -LDFLAGS+= -L${HTSLIB} -INCLUDES+= -I${HTSLIB} -+LDFLAGS+= -+INCLUDES+= ++CXXFLAGS+= -O3 -fopenmp -I${PREFIX}/include ++LDFLAGS+= -L${PREFIX}/lib ++INCLUDES+= -I${PREFIX}/include LIBS+= -lm -lz -lpthread -lhts LD_LIBRARY_PATH+= -L${HTSLIB} export LD_LIBRARY_PATH=${HTSLIB_ROOT} @@ -30,7 +37,7 @@ index 78da629..98daf27 100755 %.o:%.cpp - $(CXX) -L ${HTSLIB} -std=c++11 $(CXXFLAGS) $(INCLUDES) -c $< -o $@ -+ $(CXX) -std=c++11 $(CXXFLAGS) $(INCLUDES) -c $< -o $@ ++ $(CXX) -std=c++14 $(CXXFLAGS) $(INCLUDES) -c $< -o $@ -all: htsfile msisensor-pro +all: msisensor-pro @@ -40,7 +47,7 @@ index 78da629..98daf27 100755 msisensor-pro: $(OBJS) - $(CXX) -std=c++11 $^ $(CXXFLAGS) $(LDFLAGS) $(LIBS) -Wl,-rpath=${HTSLIB} -o $@ -+ $(CXX) -std=c++11 $^ $(CXXFLAGS) $(LDFLAGS) $(LIBS) -o $@ - # $(CXX) -std=c++11 $^ $(CXXFLAGS) $(INCLUDES) $(LDFLAGS) $(LIBS) -o $@ ++ $(CXX) -std=c++14 $^ $(CXXFLAGS) $(LDFLAGS) $(LIBS) -o $@ + # $(CXX) -std=c++11 $^ $(CXXFLAGS) $(INCLUDES) $(LDFLAGS) $(LIBS) -o $@ clean: diff --git a/recipes/msisensor-pro/meta.yaml b/recipes/msisensor-pro/meta.yaml index 66291f742cde5..fd05528df5614 100644 --- a/recipes/msisensor-pro/meta.yaml +++ b/recipes/msisensor-pro/meta.yaml @@ -1,34 +1,42 @@ -{% set version = "1.2.0" %} +{% set name = "msisensor-pro" %} +{% set version = "1.3.0" %} package: - name: msisensor-pro + name: {{ name }} version: "{{ version }}" -build: - number: 7 - source: - url: https://github.com/xjtu-omics/msisensor-pro/archive/v{{ version }}.tar.gz - sha256: 0b6de043bf7ee7322814a8c805f8abdc19ac746cba9f0dbe0d687b556c473f25 + url: https://github.com/xjtu-omics/{{ name }}/archive/v{{ version }}.tar.gz + sha256: 30d03841abfe12daee57984bb97687222534b18aeaa17ff7f4d1116dc31cc9c1 patches: - buildfixes.patch +build: + number: 0 + run_exports: + - {{ pin_subpackage('msisensor-pro', max_pin="x") }} + requirements: build: - - {{ compiler('c') }} - {{ compiler('cxx') }} - make - - llvm-openmp # [osx] - - libgomp # [linux] host: - htslib + - llvm-openmp # [osx] + - libgomp # [linux] + - libcurl + - bzip2 + - zlib run: - htslib + about: - home: https://github.com/xjtu-omics/msisensor-pro + home: "https://github.com/xjtu-omics/msisensor-pro" license: "Custom Licence" license_file: LICENSE - summary: Microsatellite Instability (MSI) detection using high-throughput sequencing data. + summary: "Microsatellite Instability (MSI) detection using high-throughput sequencing data." + dev_url: "https://github.com/xjtu-omics/msisensor-pro" + doc_url: "https://github.com/xjtu-omics/msisensor-pro/wiki" test: commands: @@ -36,3 +44,11 @@ test: - "msisensor-pro baseline -h 2>&1 | grep Usage" - "msisensor-pro pro -h 2>&1 | grep Usage" - "msisensor-pro msi -h 2>&1 | grep Usage" + +extra: + identifiers: + - biotools:msisensor-pro + - doi:10.1016/j.gpb.2020.02.001 + additional-platforms: + - linux-aarch64 + - osx-arm64 diff --git a/recipes/msisensor-rna/meta.yaml b/recipes/msisensor-rna/meta.yaml new file mode 100644 index 0000000000000..015cb396c6e46 --- /dev/null +++ b/recipes/msisensor-rna/meta.yaml @@ -0,0 +1,47 @@ +{% set name = "msisensor-rna" %} +{% set version = "0.1.6" %} + +package: + name: {{ name|lower }} + version: {{ version }} + +source: + url: https://github.com/xjtu-omics/msisensor-rna/archive/{{ version }}.tar.gz + sha256: 69a420f5850aa412244d252451cc98071a4a410e51ff40e5cf676e7560f89d0c + +build: + number: 0 + noarch: python + entry_points: + - msisensor-rna = msisensor_rna.msisensor_rna:main + script: {{ PYTHON }} -m pip install . -vvv --no-deps --no-build-isolation --no-cache-dir + run_exports: + - {{ pin_subpackage('msisensor-rna', max_pin="x.x") }} + +requirements: + host: + - python >=3.6 + - pip + run: + - python >=3.6 + - pandas >=1.0 + - numpy >=1.16 + - scikit-learn >=0.24 + - imbalanced-learn >=0.8.0 + +test: + imports: + - msisensor_rna + commands: + - msisensor-rna --help + +about: + home: https://github.com/xjtu-omics/msisensor-rna + summary: "MSIsensor-RNA: Microsatellite instability detection using RNA sequencing data." + license: Community-Spec-1.0 + license_file: LICENSE + dev_url: https://github.com/xjtu-omics/msisensor-rna + +extra: + identifiers: + - doi:10.1093/gpbjnl/qzae004 diff --git a/recipes/mtgrasp/meta.yaml b/recipes/mtgrasp/meta.yaml index 54505ac7d9a39..5f957b450f1ba 100644 --- a/recipes/mtgrasp/meta.yaml +++ b/recipes/mtgrasp/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "1.1.5" %} +{% set version = "1.1.6" %} {% set name = "mtGrasp" %} package: @@ -7,7 +7,7 @@ package: source: url: https://github.com/bcgsc/{{ name }}/releases/download/v{{ version }}/{{ name }}-v{{ version }}.tar.gz - sha256: 1f9f055af060c7762baf9d4bd7fa5fa51d1ae8de209bcce8be50fdf6038ca3b6 + sha256: 07c558d607df8d250e181439f08a4d13e2930afc566a060ea5b11b59e18c721a build: number: 0 diff --git a/recipes/multiqc/meta.yaml b/recipes/multiqc/meta.yaml index 2584e243ac4f0..1dea0f11dda30 100644 --- a/recipes/multiqc/meta.yaml +++ b/recipes/multiqc/meta.yaml @@ -1,5 +1,5 @@ {% set name = "multiqc" %} -{% set version = "1.25" %} +{% set version = "1.25.1" %} package: name: {{ name }} @@ -7,7 +7,7 @@ package: source: url: https://github.com/MultiQC/MultiQC/archive/v{{ version }}.tar.gz - sha256: 5522c820708af2c4fd5975df0f8077f78f8a3b5435c785ab8081e8fca065a5fb + sha256: 829a08f44e0183224ef1d8c0ecb163c6acc54f1a1d85445ed62857f5603ee7cb build: number: 0 diff --git a/recipes/mutamr/LICENSE b/recipes/mutamr/LICENSE new file mode 100644 index 0000000000000..f288702d2fa16 --- /dev/null +++ b/recipes/mutamr/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/recipes/mutamr/meta.yaml b/recipes/mutamr/meta.yaml new file mode 100644 index 0000000000000..56dc87f5b1c3e --- /dev/null +++ b/recipes/mutamr/meta.yaml @@ -0,0 +1,52 @@ +{% set name = "mutamr" %} +{% set version = "0.0.1" %} +{% set sha256 = "6ab552dc1087bd88b1dcd58c71e52a33f3338e4cf28ffc39d9e096c060075816" %} + +package: + name: "{{ name }}" + version: "{{ version }}" + +source: + url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" + sha256: "{{ sha256 }}" + +build: + noarch: python + number: 0 + entry_points: + - mutamr=mutamr.mutamr:main + run_exports: + - {{ pin_subpackage('mutamr', max_pin="x.x") }} + script: "{{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir -vvv" + +requirements: + host: + - python >=3.10 + - pip + run: + - python >=3.10 + - bwa =0.7.18 + - delly =1.2.8 + - freebayes =1.3.8 + - bcftools =1.20 + - samtools =1.20 + - samclip =0.4.0 + - snpeff =5.2 + +test: + imports: + - mutamr + commands: + - mutamr --help + +about: + home: "https://github.com/MDU-PHL/mutamr" + license: GPL-3.0-or-later + license_file: LICENSE + license_family: "GPL3" + summary: "Stripped down tool for generation of annotated vcf from paired-end reads in a CPHL." + dev_url: "https://github.com/MDU-PHL/mutamr" + +extra: + recipe-maintainers: + - kristyhoran diff --git a/recipes/mutmap/meta.yaml b/recipes/mutmap/meta.yaml index 6405db4f798fc..4101005f5733b 100644 --- a/recipes/mutmap/meta.yaml +++ b/recipes/mutmap/meta.yaml @@ -1,6 +1,6 @@ {% set name = "mutmap" %} -{% set version = "2.3.4" %} -{% set sha256 = "3e5dcb81bc91a28002e7e2c1eae3079dddcd93c50b98e25db64371b9b9325936" %} +{% set version = "2.3.6" %} +{% set sha256 = "74db0af6b2c3c83767d13509a9098ebb5fbb7170455770b056916ba48876ddb7" %} package: name: {{ name|lower }} diff --git a/recipes/mview/build.sh b/recipes/mview/build.sh new file mode 100644 index 0000000000000..6b9c4344b742e --- /dev/null +++ b/recipes/mview/build.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +set -exuo pipefail + +sed -i.bak \ + -e "s|\$MVIEW_HOME = \"/home/brown/HOME/work/MView/dev\";|\$MVIEW_HOME = \$ENV{'CONDA_PREFIX'} if exists \$ENV{'CONDA_PREFIX'};|" \ + -e 's|$MVIEW_LIB = "$MVIEW_HOME/lib";|$MVIEW_LIB = "$MVIEW_HOME/lib/mview'${PKG_VERSION}'";|' \ + ${SRC_DIR}/bin/mview + +LIB_INSTALL_DIR=${PREFIX}/lib/mview${PKG_VERSION} + +mkdir -p ${LIB_INSTALL_DIR}/Bio +cp -r ${SRC_DIR}/lib/Bio/{MView,Parse,Util} ${LIB_INSTALL_DIR}/Bio/ + +install -D -m 755 ${SRC_DIR}/bin/mview ${PREFIX}/bin/ diff --git a/recipes/mview/meta.yaml b/recipes/mview/meta.yaml new file mode 100644 index 0000000000000..0704c98853b8e --- /dev/null +++ b/recipes/mview/meta.yaml @@ -0,0 +1,57 @@ +{% set name = "MView" %} +{% set version = "1.68" %} +{% set author = "desmid" %} + +package: + name: {{ name|lower }} + version: {{ version }} + +source: + url: https://github.com/{{ author }}/{{ name|lower }}/archive/refs/tags/v{{ version }}.tar.gz + sha256: 4c3c75ba7f3cead82e641a83f3ad43b38169fef16aa8b9c8414e35f1eb1081c7 + +build: + number: 0 + run_exports: + - {{ pin_subpackage(name|lower, max_pin="x") }} + noarch: generic + + +requirements: + host: + - perl >=5.0,<6.0 + run: + - perl >=5.0,<6.0 + +test: + requires: + - wget + commands: + - wget https://rest.uniprot.org/uniprotkb/Q16602.fasta + - mview -in fasta Q16602.fasta -width 77 + +about: + home: https://{{ author }}.github.io/{{ name|lower }} + doc_url: https://{{ author }}.github.io/{{ name|lower }}/contents.html + dev_url: https://github.com/{{ author }}/{{ name|lower }} + license: GPL-2.0-or-later + license_family: GPL2 + license_file: LICENSE.md + summary: "MView extracts and reformats the results of a sequence database search or multiple alignment." + description: | + MView is a command line utility that extracts and reformats the results of a sequence database search or a multiple alignment, + optionally adding HTML markup for web page layout. It can also be used as a filter to extract and convert searches or alignments to common formats. + + Inputs: + - Sequence database search: BLAST, FASTA suites. + - Multiple sequence alignment: CLUSTAL, HSSP, MSF, FASTA, PIR, MAF. + + Outputs: + - HTML, FASTA, CLUSTAL, MSF, PIR, RDB (tab-separated). + + The tool is used in molecular biology and biomedical research for data analyses and as a component in various bioinformatics web services. + Research papers citing MView are indexed on [Google Scholar](https://scholar.google.com/citations?user=4ughzM0AAAAJ&hl=en). + +extra: + recipe-maintainers: + - eunos-1128 diff --git a/recipes/mycotools/meta.yaml b/recipes/mycotools/meta.yaml index f9bf6feda90fb..e67804eb73353 100644 --- a/recipes/mycotools/meta.yaml +++ b/recipes/mycotools/meta.yaml @@ -1,5 +1,5 @@ {% set name = "mycotools" %} -{% set version = "0.32.1" %} +{% set version = "0.32.3" %} package: name: {{ name|lower }} @@ -7,10 +7,10 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/mycotools-{{ version }}.tar.gz - sha256: 346fa5ea6e5efa4de4ddea342a125857351c9d24738be8284e83974cf0ffadb6 + sha256: 598caafca226eeb485759c88ff9ab3c05c0d9803e900c2cea7c191cb4df7c77e build: - number: 1 + number: 0 noarch: python script: {{ PYTHON }} -m pip install . -vvv --no-deps --no-build-isolation --no-cache-dir entry_points: diff --git a/recipes/nanomotif/meta.yaml b/recipes/nanomotif/meta.yaml index 5d47a1df0d838..a1aa81d780824 100644 --- a/recipes/nanomotif/meta.yaml +++ b/recipes/nanomotif/meta.yaml @@ -1,5 +1,5 @@ {% set name = "nanomotif" %} -{% set version = "0.4.12" %} +{% set version = "0.4.14" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/nanomotif-{{ version }}.tar.gz - sha256: 9dc1df33f9e9c38ef9d47eadccd58bbfc012ff65ee73f7cd30e61bb05df5f4db + sha256: 87dba57f2c2468c09605eddd9ead58bb0187d36dea67546df2ab52df94fdb75d build: entry_points: diff --git a/recipes/nanosim/build.sh b/recipes/nanosim/build.sh index 2ec175e3408de..fdeb10cd57daf 100644 --- a/recipes/nanosim/build.sh +++ b/recipes/nanosim/build.sh @@ -3,6 +3,7 @@ set -eu -o pipefail mkdir -p ${PREFIX}/bin cp -rf src/*.py ${PREFIX}/bin/ +cp -rf src/*lua ${PREFIX}/bin/ chmod 0755 "${PREFIX}/bin/read_analysis.py" chmod 0755 "${PREFIX}/bin/simulator.py" diff --git a/recipes/nanosim/meta.yaml b/recipes/nanosim/meta.yaml index a131f6b768fde..266bf00b35b28 100644 --- a/recipes/nanosim/meta.yaml +++ b/recipes/nanosim/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "3.2.1" %} -{% set sha256 = "49a0608e9fa8ce78b497b2fbe08b82194f5b4e6670e4b2275baccf4e7b3017d8" %} +{% set version = "3.2.2" %} +{% set sha256 = "d307907ca02145c9479be2930efb08a820e22dc41bb84f3d72654fbe17d66bc8" %} package: name: nanosim diff --git a/recipes/nanovar/meta.yaml b/recipes/nanovar/meta.yaml index ec3526daa2127..1e0dbbfc3bd97 100644 --- a/recipes/nanovar/meta.yaml +++ b/recipes/nanovar/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "1.5.1" %} +{% set version = "1.8.1" %} package: name: nanovar @@ -6,11 +6,11 @@ package: source: url: https://pypi.io/packages/source/n/nanovar/nanovar-{{ version }}.tar.gz - sha256: 5b189ff18958be0e7406752f7700e0c70d464ae64b70ed278fd32a2fe61280a4 + sha256: c75159f86a4043f5ba37c4ea16b9c5953e44d7a1c1dd854de7928464bed83bc9 build: skip: True # [py2k or osx or py > 39] - number: 1 + number: 0 script: {{ PYTHON }} -m pip install . --ignore-installed --no-deps -vv run_exports: - {{ pin_subpackage('nanovar', max_pin="x") }} @@ -23,18 +23,18 @@ requirements: - python run: - python - - biopython >=1.78 + - numpy >=1.17.3, <2.0.0 + - scipy >=1.2.1 + - biopython >=1.82 + - pybedtools >=0.8.2 - matplotlib-base >=2.2.3 + - tensorflow-cpu >=2.0.0, <=2.15.1 - natsort >=6.2.0 - - numpy >=1.17.3 - - progress >=1.4 - - pybedtools >=0.8.2 - - scipy >=1.2.1 - - tensorflow-mkl >=2.0.0 + - pysam >=0.15.3 + - bs4 >=0.0.2 - bedtools >=2.26.0 - minimap2 >=2.17 - samtools >=1.3 - - pysam >=0.15.3 test: imports: diff --git a/recipes/neat/meta.yaml b/recipes/neat/meta.yaml index d79c967a7fb41..0387300d88ae8 100644 --- a/recipes/neat/meta.yaml +++ b/recipes/neat/meta.yaml @@ -1,5 +1,5 @@ {% set name = "NEAT" %} -{% set version = "4.2.3" %} +{% set version = "4.2.5" %} package: name: '{{ name|lower }}' @@ -7,7 +7,7 @@ package: source: url: https://github.com/ncsa/{{ name }}/archive/{{ version }}.tar.gz - sha256: 915d297842d4f775a79f59f37aac729ade742676f37473dbdbbedab64e81a046 + sha256: ba3ef6233f236a89fd41af8a52a922e04b48c596d8573675c52da2682aaa4752 build: diff --git a/recipes/nf-core/meta.yaml b/recipes/nf-core/meta.yaml index 873585fe97504..f257af18e9f4d 100644 --- a/recipes/nf-core/meta.yaml +++ b/recipes/nf-core/meta.yaml @@ -1,6 +1,6 @@ {% set name = "nf-core" %} -{% set version = "2.14.1" %} -{% set sha256 = "35bd8d73ecca4eb87443fada31bc7b2562429de3a4bfbf7261db348d14bf54bb" %} +{% set version = "3.0.1" %} +{% set sha256 = "2ae884ac4d4ff200bd21a69a8c44d4b50e13c16a13474ed570e91955b335c2d7" %} package: name: {{ name|lower }} @@ -12,7 +12,7 @@ source: build: noarch: python - number: 1 + number: 0 script: "touch requirements.txt && {{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir -vvv" entry_points: - nf-core=nf_core.__main__:run_nf_core @@ -23,33 +23,35 @@ requirements: host: - python >=3.8 - pip - - twine + - setuptools run: - python >=3.8 - click - filetype - - galaxy-tool-util - git - gitpython + - pygithub - jinja2 - - jsonschema >=3.0 + - jsonschema >=4.0 - markdown >=3.3 - packaging - pillow + #- pdiff - pre-commit - - prompt_toolkit >=3.0.3 - - pytest >=7.0.0 - - pytest-workflow >=1.6.0 + - prompt_toolkit >=3.0.36 + - pydantic >=2.2.1 - pyyaml - - questionary >=1.8.0 + - questionary >=2.0.1 - refgenie - requests - requests-cache - rich >=13.3.1 - - rich-click >=1.6.1 + - rich-click ==1.8.* + - ruamel.yaml - tabulate + - textual ==0.71.0 - trogon - - nextflow >=23.04.0 + - nextflow >=24.04.4 - nf-test test: @@ -59,13 +61,18 @@ test: - nf-test version about: - home: http://nf-co.re/ + home: "https://nf-co.re" license: MIT license_family: MIT + license_file: LICENSE summary: 'Python package with helper tools for the nf-core community.' + dev_url: "https://github.com/nf-core/tools" + doc_url: "https://nf-co.re" extra: container: # click requires a unicode locale when used with Python 3 # extended-base generates en_US.UTF-8 locale and sets LC_ALL, LANG properly - extended-base: true + extended-base: True + identifiers: + - doi:10.1038/s41587-020-0439-x diff --git a/recipes/ngs-tools/meta.yaml b/recipes/ngs-tools/meta.yaml index 8bd5ac25b52c8..ce09a4ec7d205 100644 --- a/recipes/ngs-tools/meta.yaml +++ b/recipes/ngs-tools/meta.yaml @@ -1,5 +1,5 @@ {% set name = "ngs-tools" %} -{% set version = "1.8.5" %} +{% set version = "1.8.6" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: "380e236a101c5b1ac3c0fcdbcc908a210179b6ef2a93fbea9f4eb0ec2edc1de0" + sha256: "ffb59cdebb5c9cc6ee39ad52a14930e493e870d48303821c6f97563a50f4bb3c" build: number: 0 diff --git a/recipes/nohuman/build.sh b/recipes/nohuman/build.sh index 98067b0d04217..29a06029e6302 100644 --- a/recipes/nohuman/build.sh +++ b/recipes/nohuman/build.sh @@ -1,17 +1,8 @@ #!/bin/bash set -ex -RUST_BACKTRACE=full +cargo-bundle-licenses --format yaml --output THIRDPARTY.yml -if [ "$(uname)" == "Darwin" ]; then - # apparently the HOME variable isn't set correctly, and circle ci output indicates the following as the home directory - export HOME="/Users/distiller" - export HOME=`pwd` - echo "HOME is $HOME" +RUST_BACKTRACE=full cargo install -v --locked --no-track --root "$PREFIX" --path . - # according to https://github.com/rust-lang/cargo/issues/2422#issuecomment-198458960 removing circle ci default configuration solves cargo trouble downloading crates - #git config --global --unset url.ssh://git@github.com.insteadOf -fi - -cargo install -v --locked --root "$PREFIX" --path . "$STRIP" "$PREFIX/bin/nohuman" \ No newline at end of file diff --git a/recipes/nohuman/meta.yaml b/recipes/nohuman/meta.yaml index f084e962a765c..faca6ca3f3f18 100644 --- a/recipes/nohuman/meta.yaml +++ b/recipes/nohuman/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "0.1.1" %} +{% set version = "0.3.0" %} {% set name = "nohuman" %} package: @@ -7,7 +7,7 @@ package: source: url: https://github.com/mbhall88/{{ name }}/archive/{{ version }}.tar.gz - sha256: 73a79909e487e0669e1604407024c8f1db1a3a0adf2fb3d76d80987823d85fd2 + sha256: 3503a0e8b6fcbf92832fe4bfcfb3d5a071536a8ebe3230cac1ee4e053de3cf6a build: number: 0 @@ -17,22 +17,23 @@ build: requirements: build: - {{ compiler('c') }} - host: - - rust >=1.70 - - openssl + - {{ compiler('rust') }} + - cargo-bundle-licenses run: - kraken2 =2.1 test: commands: - nohuman --help + - nohuman --check about: home: https://github.com/mbhall88/nohuman license: MIT - license_family: MIT + license_file: + - LICENSE + - THIRDPARTY.yml summary: Remove human reads from a sequencing run - license_file: LICENSE extra: recipe-maintainers: diff --git a/recipes/ntedit/meta.yaml b/recipes/ntedit/meta.yaml index 0c4fd19bd40e6..381a1d7165671 100644 --- a/recipes/ntedit/meta.yaml +++ b/recipes/ntedit/meta.yaml @@ -1,18 +1,18 @@ {% set name = "ntedit" %} -{% set version = "2.0.2" %} +{% set version = "2.0.3" %} package: name: {{ name|lower }} version: {{ version }} build: - number: 2 + number: 0 run_exports: - {{ pin_subpackage(name, max_pin="x") }} source: url: https://github.com/bcgsc/ntEdit/releases/download/v{{ version }}/ntEdit-{{ version }}.tar.gz - sha256: 314bc1a39c2d382786ee64d83a1b8c4519e5c9feb0203b1b7f4ab0d9087cf6c5 + sha256: fc4ee277a66bd90fd5fce8806c394efc07bb955499acea7591973e60df2399ea requirements: build: diff --git a/recipes/ntroot/meta.yaml b/recipes/ntroot/meta.yaml index ab1636a060e4c..2227aa091d3e1 100644 --- a/recipes/ntroot/meta.yaml +++ b/recipes/ntroot/meta.yaml @@ -1,5 +1,5 @@ {% set name = "ntRoot" %} -{% set version = "1.1.3" %} +{% set version = "1.1.4" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://github.com/bcgsc/ntRoot/releases/download/v{{ version }}/{{ name }}-{{ version }}.tar.gz - sha256: 0b1cfb7008e1bb7efeea400fab9da4f73e297357ee83ae23904b21d9a91d5c81 + sha256: 455aca749834edf866fd159dfbf9facc7769edc74f932cea611c4401cde4f6d5 build: number: 0 diff --git a/recipes/oakvar/LICENSE b/recipes/oakvar/LICENSE deleted file mode 100644 index 3d6f444550029..0000000000000 --- a/recipes/oakvar/LICENSE +++ /dev/null @@ -1,38 +0,0 @@ -OakVar Dual License - -Copyright (c) 2023 Oak Bioinformatics, LLC - -This program is dual licensed under the Affero GPL-3.0 or later for open source -use, and a commercial license, which is available for purchase, for commercial -use. - -For commercial use, please contact Oak Bioinformatics, LLC for obtaining a -commercial license. OakVar commercial license does not impose the Affero GPL -open-source licensing terms, conditions, and limitations. To obtain a -commercial-use license of OakVar, please visit our website at -https://oakbioinformatics.com or contact us at info@oakbioinformatics.com for -more information. - -================ - -MIT License - -Copyright (c) 2021 KarchinLab - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/recipes/oakvar/meta.yaml b/recipes/oakvar/meta.yaml index 021ea4f7df913..1c79b821bf1a9 100644 --- a/recipes/oakvar/meta.yaml +++ b/recipes/oakvar/meta.yaml @@ -1,6 +1,6 @@ {% set name = "OakVar" %} -{% set version = "2.11.9" %} -{% set sha256 = "9721f4a3383b7e4354058b6755dcffdf753fb86fcb0a83a5dd8b81acf5aeb4e0" %} +{% set version = "2.11.11" %} +{% set sha256 = "16ac185b5e26e422111f7d7e568bd602e972ac2a91feeb4ee61a2193d47cd9a7" %} package: name: {{ name|lower }} @@ -13,7 +13,7 @@ source: build: number: 0 noarch: python - script: {{ PYTHON }} -m pip install . --no-deps --no-build-isolation -vvv + script: {{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir -vvv entry_points: - ov=oakvar.__main__:main run_exports: @@ -23,6 +23,7 @@ requirements: host: - python >=3.8 - pip + - setuptools run: - python >=3.8 - requests @@ -49,6 +50,8 @@ requirements: - connectorx - pyarrow - multiprocess + - pysimplegui + - ujson - mpmath - twobitreader - intervaltree @@ -63,7 +66,7 @@ test: about: home: 'https://github.com/rkimoakbioinformatics/oakvar' summary: "OakVar - Genomic Variant Analysis Platform" - dev_url: 'https://pypi.org/project/oakvar/' + dev_url: 'https://github.com/rkimoakbioinformatics/oakvar' license: 'AGPL-3.0-or-later' license_family: AGPL license_file: LICENSE diff --git a/recipes/olivar/meta.yaml b/recipes/olivar/meta.yaml index 9deb6d02f8971..76c2f242c2d65 100644 --- a/recipes/olivar/meta.yaml +++ b/recipes/olivar/meta.yaml @@ -1,5 +1,5 @@ {% set name = "olivar" %} -{% set version = "1.2.0" %} +{% set version = "1.2.1" %} package: name: {{ name }} @@ -7,7 +7,7 @@ package: source: url: https://github.com/treangenlab/Olivar/archive/refs/tags/v{{version}}.tar.gz - sha256: af21ffda47078a743b71ec42569ddb3324bcb21ed74ba65c78b02f72b16459c2 + sha256: 51940193397a97950fe6d8c0076bfe9cc891fbe048d952fe73ed9cef67d2c03f build: number: 0 diff --git a/recipes/ont-modkit/meta.yaml b/recipes/ont-modkit/meta.yaml index 9f45eb5a76e54..f6a36fb5d4699 100644 --- a/recipes/ont-modkit/meta.yaml +++ b/recipes/ont-modkit/meta.yaml @@ -1,6 +1,6 @@ {% set name = "ont-modkit" %} -{% set version = "0.4.0" %} -{% set sha256 = "a4a304f00f350074b50fb3c71ab8756df0344e0f77a55c443aa48a91c42195bf" %} +{% set version = "0.4.1" %} +{% set sha256 = "45cd7d4ee69092db7412a15f02799c3118bf5fa4e40e193e30e8c65c4f762f79" %} package: name: {{ name }} diff --git a/recipes/open-cravat/meta.yaml b/recipes/open-cravat/meta.yaml index 25f02e804c642..7d59bcaab5edc 100644 --- a/recipes/open-cravat/meta.yaml +++ b/recipes/open-cravat/meta.yaml @@ -1,5 +1,5 @@ {% set name = "open-cravat" %} -{% set version = "2.8.0" %} +{% set version = "2.9.1" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: 14759157660f2c46fd235947489cf73952a82e2340c9f588eb112190b415e18d + sha256: 816484cd30196659d85b0e4705815ae06749f13f9524eb48ac07942b3ed92f08 build: number: 0 diff --git a/recipes/openms-meta/build.sh b/recipes/openms-meta/build.sh index 54dd40136fce4..82f6b8c86d1f9 100644 --- a/recipes/openms-meta/build.sh +++ b/recipes/openms-meta/build.sh @@ -46,6 +46,6 @@ cmake .. \ -DBUILD_EXAMPLES=OFF # limit concurrent build jobs due to memory usage on CI -make -j2 OpenMS TOPP +make -j1 OpenMS TOPP # The subpackages will do the installing of the parts #make install diff --git a/recipes/openms-meta/meta.yaml b/recipes/openms-meta/meta.yaml index cbc167c08c8cc..32c28922e024f 100644 --- a/recipes/openms-meta/meta.yaml +++ b/recipes/openms-meta/meta.yaml @@ -1,5 +1,5 @@ {% set name = "OpenMS" %} -{% set version = "3.1.0" %} # if ends with 'dev' it is considered a development release and pulled from GitHub +{% set version = "3.2.0" %} # if ends with 'dev' it is considered a development release and pulled from GitHub package: name: {{ name|lower }}-meta version: {{ version }} @@ -11,8 +11,8 @@ source: git_depth: 1 # (Defaults to -1/not shallow) {% else %} source: - url: https://github.com/OpenMS/OpenMS/releases/download/Release{{ version }}/OpenMS-{{ version }}-src.tar.gz - md5: 6a60ef1a95c7ce915cc3a02e5bccd593 + url: https://github.com/OpenMS/OpenMS/releases/download/release%2F3.2.0/OpenMS-3.2.tar.gz # since we discarded the trailing 0 during the GHA we have to hard code this, fix it next release + md5: 60ebfe8a45f7e1fb5566d21231b460e8 {% endif %} build: @@ -46,6 +46,7 @@ requirements: - libsvm - coinmp - sysroot_linux-64 =2.17 # [linux] + - yaml-cpp test: commands: @@ -77,6 +78,8 @@ outputs: - libsvm - coinmp - sysroot_linux-64 =2.17 # [linux] + - yaml-cpp + build: run_exports: - {{ pin_compatible('llvm-openmp', max_pin='x.x') }} # [osx] @@ -118,6 +121,8 @@ outputs: - libsvm - coinmp - sysroot_linux-64 =2.17 # [linux] + - yaml-cpp + run: - {{ pin_subpackage('libopenms', exact=True) }} - {{ pin_compatible('llvm-openmp', max_pin='x.x') }} # [osx] diff --git a/recipes/orthanq/meta.yaml b/recipes/orthanq/meta.yaml index 4b7782c61727f..bf9c98d9a23da 100644 --- a/recipes/orthanq/meta.yaml +++ b/recipes/orthanq/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "1.7.8" %} +{% set version = "1.7.9" %} package: name: orthanq @@ -12,7 +12,7 @@ build: source: url: https://github.com/orthanq/orthanq/archive/v{{ version }}.tar.gz - sha256: bc4036a3d058263c8a49319573d1ef926e807a1d6b4bf845d09d686556c0d893 + sha256: 101f3b82aaae6bd6f50cce04cee14478236384677300e7441c88da08ca975554 requirements: build: diff --git a/recipes/orthofinder/build.sh b/recipes/orthofinder/build.sh index b82ab906ef423..500e4718f4ff8 100644 --- a/recipes/orthofinder/build.sh +++ b/recipes/orthofinder/build.sh @@ -12,10 +12,17 @@ sed -i.bak 's/raxmlHPC-AVX/raxmlHPC-AVX2/g' scripts_of/config.json cp scripts_of/config.json $PREFIX/bin/scripts_of/config.json cp tools/convert_orthofinder_tree_ids.py $PREFIX/bin/ +cp tools/create_files_for_hogs.py $PREFIX/bin/ cp tools/make_ultrametric.py $PREFIX/bin/ +cp tools/orthogroup_gene_count.py $PREFIX/bin/ cp tools/primary_transcript.py $PREFIX/bin/ chmod a+x $PREFIX/bin/orthofinder chmod a+x $PREFIX/bin/convert_orthofinder_tree_ids.py +chmod a+x $PREFIX/bin/create_files_for_hogs.py chmod a+x $PREFIX/bin/make_ultrametric.py +chmod a+x $PREFIX/bin/orthogroup_gene_count.py chmod a+x $PREFIX/bin/primary_transcript.py + +mkdir -p $PREFIX/share/orthofinder/ +cp -r ExampleData $PREFIX/share/orthofinder/ \ No newline at end of file diff --git a/recipes/orthofinder/meta.yaml b/recipes/orthofinder/meta.yaml index d55ffefa16324..28617f0071f7a 100644 --- a/recipes/orthofinder/meta.yaml +++ b/recipes/orthofinder/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "2.5.5" %} -{% set sha256 = "43d034a66a13adba8872a0d4a76e32c25305a7fae638754adb61c37a3f957bd9" %} +{% set version = "3.0.1b1" %} +{% set sha256 = "0252560f7ee2303ac3400f130e9eb81b3f6419062aa677642a7258659b43a68c" %} package: name: orthofinder @@ -7,7 +7,7 @@ package: build: noarch: generic - number: 2 + number: 0 run_exports: - {{ pin_subpackage('orthofinder', max_pin="x") }} @@ -17,7 +17,7 @@ source: requirements: run: - - python >=3.7 + - python >=3.7,<3.12 - scipy - blast # https://github.com/davidemms/OrthoFinder/issues/826 https://github.com/bbuchfink/diamond/issues/707 @@ -32,6 +32,9 @@ requirements: - iqtree - bzip2 - mmseqs2 + - scikit-learn + - biopython + - aster test: commands: @@ -42,3 +45,6 @@ about: summary: Accurate inference of orthogroups, orthologues, gene trees and rooted species tree made easy! license: GPLv3 license_file: License.md + +files: + - ExampleData diff --git a/recipes/orthologer/meta.yaml b/recipes/orthologer/meta.yaml index 029292417924b..8279dbe399fc0 100644 --- a/recipes/orthologer/meta.yaml +++ b/recipes/orthologer/meta.yaml @@ -1,6 +1,6 @@ {% set name = "orthologer" %} -{% set version = "3.4.1" %} -{% set sha256 = "b4d6504ea75899d3e13facc4232efdfe79c66283cccfe5d5ea8996f7905f346d" %} +{% set version = "3.5.0" %} +{% set sha256 = "76bd68cd73d5989d658a6ba0ecefec84e674f85878b75904c76fa557ce5dd2b5" %} package: name: {{ name }} @@ -41,6 +41,7 @@ requirements: - diamond - biopython - numpy + - busco >=5.7.0 test: commands: @@ -48,11 +49,11 @@ test: about: home: https://orthologer.ezlab.org - license: MIT - license_family: MIT + license: GPL3 + license_family: GPL3 license_file: LICENSE - summary: "Assessment of assembly completeness using Universal Single Copy Orthologs." - description: compute orthology + summary: Establish orthology among fasta files. + description: Map genes to OrthoDB as well as finding orthology among a set of fasta files. dev_url: https://gitlab.com/ezlab/orthologer_container doc_url: https://orthologer.ezlab.org/#on-orthodb-data @@ -64,5 +65,7 @@ extra: extended-base: True identifiers: - biotools:orthologer + - doi:10.1093/nar/gkac996 + - PMID:36350662 recipe-maintainers: - ftegenfe diff --git a/recipes/panacus/build.sh b/recipes/panacus/build.sh index f2c10555de8f5..76104b6f15c94 100644 --- a/recipes/panacus/build.sh +++ b/recipes/panacus/build.sh @@ -1,7 +1,7 @@ #!/bin/bash -euo -RUST_BACKTRACE=1 CARGO_HOME="${BUILD_PREFIX}/.cargo" cargo build --release - mkdir -p $PREFIX/bin -cp target/release/panacus $PREFIX/bin + +RUST_BACKTRACE=1 cargo install --no-track --verbose --root "${PREFIX}" --path . + cp scripts/panacus-visualize.py $PREFIX/bin/panacus-visualize diff --git a/recipes/panacus/meta.yaml b/recipes/panacus/meta.yaml index d5ada5ff55534..af5bddd58cb9b 100644 --- a/recipes/panacus/meta.yaml +++ b/recipes/panacus/meta.yaml @@ -1,5 +1,5 @@ {% set name = "panacus" %} -{% set version = "0.2.3" %} +{% set version = "0.2.4" %} package: name: {{ name|lower }} @@ -7,17 +7,19 @@ package: source: url: https://github.com/marschall-lab/{{ name }}/archive/refs/tags/{{ version }}.tar.gz - sha256: 969eaed515a9679f5a74632986240f7afd0558b2a2914281dc783ac1fa1b6f9e + sha256: e4709c5e3e4b5c445789406a0ebf06a2052e24bc5fcc3b540cacf8064c2ab478 build: - number: 0 + number: 2 run_exports: - {{ pin_subpackage(name, max_pin="x.x") }} requirements: build: - {{ compiler('c') }} - - rust >=1.68 + - {{ compiler('rust') }} + - cmake + - make run: - python - matplotlib-base @@ -25,7 +27,7 @@ requirements: - pandas - scikit-learn - scipy - - seaborn + - seaborn-base test: commands: @@ -37,8 +39,13 @@ about: license: MIT license_family: MIT license_file: LICENSE - summary: panacus is a tool for computing counting statistics for GFA files + summary: "panacus is a tool for computing counting statistics for GFA files." + dev_url: https://github.com/marschall-lab/{{ name }} extra: + additional-platforms: + - osx-arm64 + - linux-aarch64 recipe-maintainers: - danydoerr + - heringerp diff --git a/recipes/panaroo/meta.yaml b/recipes/panaroo/meta.yaml index 1a459568ac0be..48717830cfd15 100644 --- a/recipes/panaroo/meta.yaml +++ b/recipes/panaroo/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "1.5.0" %} +{% set version = "1.5.1" %} {% set name = "panaroo" %} package: @@ -7,7 +7,7 @@ package: source: url: https://github.com/gtonkinhill/{{ name|lower }}/archive/v{{ version }}.tar.gz - sha256: 0a80f87cde8ee3d59cd62cdae434341979a03dfdeb07142c2f9ff3b54dc0477a + sha256: 870e09f206e5c2076aff106d19fb3e9183a56be9c9b8bca0bd0ad7a5c43030ca build: number: 0 diff --git a/recipes/pango-designation/meta.yaml b/recipes/pango-designation/meta.yaml index 8f8eef806262b..8c9f30d0327ae 100644 --- a/recipes/pango-designation/meta.yaml +++ b/recipes/pango-designation/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "1.29" %} +{% set version = "1.30" %} package: name: pango-designation @@ -6,7 +6,7 @@ package: source: url: https://github.com/cov-lineages/pango-designation/archive/refs/tags/v{{ version }}.tar.gz - sha256: 884b4de47169323f711d02f9801ddb31bb3e383ac1b4eab93aed9d435cb15c6a + sha256: 835075a7410d4d3a59003105a993358ce20f4ee744231f9728092756a8f2e8d6 build: number: 0 diff --git a/recipes/pangolin-data/meta.yaml b/recipes/pangolin-data/meta.yaml index d1b23dc48e60a..2e6b8d042674d 100644 --- a/recipes/pangolin-data/meta.yaml +++ b/recipes/pangolin-data/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "1.29" %} +{% set version = "1.30" %} package: name: pangolin-data @@ -6,7 +6,7 @@ package: source: url: https://github.com/cov-lineages/pangolin-data/archive/refs/tags/v{{ version }}.tar.gz - sha256: 9f0e8ebab54ff1933f9abffb60cbc577df79b0d0ebfa51b8265b7d72720802d6 + sha256: e289ee774c133238294aa2bfa5d331ed89047ffc67af8e3614c01a51ffd46b43 build: number: 0 diff --git a/recipes/pantax/build.sh b/recipes/pantax/build.sh new file mode 100644 index 0000000000000..05c8b8d582b46 --- /dev/null +++ b/recipes/pantax/build.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +if [ "$(uname)" == "Darwin" ]; then + cp -rf $SRC_DIR $PREFIX +else + cd ${SRC_DIR}/scripts + chmod +x pantax + chmod +x data_preprocessing + cp ${SRC_DIR}/scripts/pantax ${SRC_DIR}/scripts/data_preprocessing ${PREFIX}/bin + cp ${SRC_DIR}/scripts/*py ${PREFIX}/bin + + cd ${SRC_DIR}/tools/fastix + RUST_BACKTRACE=1 cargo install --verbose --locked --no-track --root ${PREFIX} --path . +fi diff --git a/recipes/pantax/meta.yaml b/recipes/pantax/meta.yaml new file mode 100644 index 0000000000000..d0d4ea45d5a37 --- /dev/null +++ b/recipes/pantax/meta.yaml @@ -0,0 +1,52 @@ +{% set name = "pantax" %} +{% set version = "1.0.2" %} + +package: + name: {{ name }} + version: {{ version }} + +source: + - url: https://github.com/LuoGroup2023/PanTax/releases/download/v{{ version }}/{{ name }}.tar.gz + sha256: 9433f3d6c5ca6870de4aa0d92cfc591973fda5f8620f5a8e9befa01f954b8dfb + +build: + skip: True # [osx] + number: 0 + run_exports: + - {{ pin_subpackage(name, max_pin="x") }} + +requirements: + build: + - {{ compiler('rust') }} + host: + - python ==3.10 + - pip + run: + - python =3.10 + - samtools =1.19.2 + - bcftools =1.19 + - htslib =1.19.1 + - pggb =0.6.0 + - vg + - graphaligner =1.0.17 + - h5py =3.10.0 + - pandas =2.2.0 + - tqdm + - numpy =1.26.3 + - networkx =3.2.1 + - pyarrow =14.0.2 + +test: + commands: + - pantax -h + +about: + home: https://github.com/LuoGroup2023/PanTax + license: GPL-3.0-or-later + license_file: LICENSE + license_family: GPL3 + summary: Strain-level taxonomic classification of metagenomic data using pangenome graphs + +extra: + skip-lints: + - should_be_noarch_python diff --git a/recipes/parebrick/meta.yaml b/recipes/parebrick/meta.yaml index 48a2aafc98026..d7c766ce46019 100644 --- a/recipes/parebrick/meta.yaml +++ b/recipes/parebrick/meta.yaml @@ -1,5 +1,5 @@ {% set name = "PaReBrick" %} -{% set version = "0.5.5" %} +{% set version = "0.5.7" %} package: name: {{ name|lower }} @@ -7,29 +7,31 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/PaReBrick-{{ version }}.tar.gz - sha256: f7d2525dbd96d6bbb633a96e2781e67b1b7c40f2e41da0f2f05d3453e7e9ef45 + sha256: 87aea585e0bc340abad2a4a37d532b5be75872284cabf3c9ad0be83ef372f0e4 build: + run_exports: + - {{ pin_subpackage(name|lower, max_pin='x.x') }} entry_points: - PaReBrick=parebrick.main:main - parebrick=parebrick.main:main - PaReBrick-Charts=parebrick.drawer:main - parebrick-charts=parebrick.drawer:main noarch: python - script: {{ PYTHON }} -m pip install . -vv + script: {{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir -vvv number: 0 requirements: host: - pip - - python >=3.6,<4.0 + - python >=3.6,<3.9 run: - bg - ete3 - pyqt - - python >=3.6,<4.0 + - python >=3.6,<3.9 - scikit-learn - - seaborn >=0.11.0 + - seaborn-base >=0.11.0 test: imports: @@ -42,10 +44,11 @@ test: about: home: https://github.com/ctlab/parallel-rearrangements - summary: A bioinf tool for finding genome rearrangements in bacterial genomes + summary: "A bioinf tool for finding genome rearrangements in bacterial genomes." license: MIT + license_family: MIT license_file: LICENSE - + dev_url: https://github.com/ctlab/parallel-rearrangements extra: container: diff --git a/recipes/parsnp/meta.yaml b/recipes/parsnp/meta.yaml index d99dc6f3bfb79..893029bbcf967 100644 --- a/recipes/parsnp/meta.yaml +++ b/recipes/parsnp/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "2.0.5" %} +{% set version = "2.0.6" %} package: name: parsnp @@ -6,7 +6,7 @@ package: source: url: "https://github.com/marbl/parsnp/archive/refs/tags/v{{version}}.tar.gz" - sha256: 1d23695d0d624fa17e02c43b1d730200e526c17a48615593f75ee8fc35402489 + sha256: cde5fb488418764e87942afa747002d01d35e80d7c3a44a71bb2d1bd4d69ed0c build: number: 0 diff --git a/recipes/pastml/meta.yaml b/recipes/pastml/meta.yaml index 8dbd1a80f9a9e..e985066b7448c 100644 --- a/recipes/pastml/meta.yaml +++ b/recipes/pastml/meta.yaml @@ -1,5 +1,5 @@ {% set name = "pastml" %} -{% set version = "1.9.48" %} +{% set version = "1.9.49" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: eb7821555498a0535e4a9a7415b2bdb98695cf85787380664886717f22f7e6d4 + sha256: 421f3be11dd0bd09615aeaba0026b8cc749115c7d72b87576c55e652ac943949 build: number: 0 diff --git a/recipes/patchify/meta.yaml b/recipes/patchify/meta.yaml new file mode 100644 index 0000000000000..6f3d4d0c196f1 --- /dev/null +++ b/recipes/patchify/meta.yaml @@ -0,0 +1,45 @@ +{% set name = "patchify" %} +{% set version = "0.2.3" %} + +package: + name: {{ name|lower }} + version: {{ version }} + +source: + url: https://pypi.org/packages/source/{{ name[0] }}/{{ name }}/patchify-{{ version }}.tar.gz + sha256: 6cc409124f34ceee672f1931d818923f88f5116f323ac7bb9be7e6c5d0845502 + +build: + noarch: python + script: {{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + number: 0 + run_exports: + - {{ pin_subpackage('patchify', max_pin="x.x") }} + +requirements: + host: + - python >=3.7,<4.0 + - poetry >=0.12 + - poetry-core + - pip + run: + - python >=3.7.0,<4.0.0 + - numpy >=1.0.0,<2.0.0 + +test: + imports: + - patchify + commands: + - pip check + requires: + - pip + +about: + home: https://github.com/dovahcrow/patchify.py + summary: A library that helps you split image into small, overlappable patches, and merge patches back into the original image. + license: MIT + license_file: LICENSE + +extra: + recipe-maintainers: + - hexylena diff --git a/recipes/pcaone/meta.yaml b/recipes/pcaone/meta.yaml index 726942da286dc..fa818eea373d8 100644 --- a/recipes/pcaone/meta.yaml +++ b/recipes/pcaone/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "0.4.4" %} -{% set sha256 = "39e9b2fb3370ee584fbeed8522260c44bb6053489819057f1a232267a526f72a" %} +{% set version = "0.4.7" %} +{% set sha256 = "b077472ecaefc067d5aa7990453c5e46f09bdd5e07a391eca1077c9c3bc1ed76" %} package: @@ -11,7 +11,7 @@ source: sha256: '{{ sha256 }}' build: - number: 1 + number: 0 run_exports: - {{ pin_subpackage('pcaone', max_pin="x") }} diff --git a/recipes/peaks2utr/meta.yaml b/recipes/peaks2utr/meta.yaml index ff37f2d40bf9e..dfba7f191c929 100644 --- a/recipes/peaks2utr/meta.yaml +++ b/recipes/peaks2utr/meta.yaml @@ -1,5 +1,5 @@ {% set name = "peaks2utr" %} -{% set version = "1.3.0" %} +{% set version = "1.3.3" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/peaks2utr-{{ version }}.tar.gz - sha256: b54c4d1b7eaf2229573d7f5031c26000e76657989c2914f67e85de9fb2a402fc + sha256: 5fab611d8039a210936f172ccf6fb90989c91e53fb8ea8b18026cbce8a35d9b7 build: number: 0 diff --git a/recipes/pepnovo/.gitattributes b/recipes/pepnovo/.gitattributes new file mode 100644 index 0000000000000..b2514153599d1 --- /dev/null +++ b/recipes/pepnovo/.gitattributes @@ -0,0 +1,2 @@ +# the file contains both CRLF and LF line endings. Tell Git to not touch it +0002-fix-float-positive-infinity.patch binary diff --git a/recipes/pepnovo/0002-fix-float-positive-infinity.patch b/recipes/pepnovo/0002-fix-float-positive-infinity.patch new file mode 100644 index 0000000000000..59818d4d946be --- /dev/null +++ b/recipes/pepnovo/0002-fix-float-positive-infinity.patch @@ -0,0 +1,29 @@ +--- src/CumulativeSeqProb.h.orig 2024-10-07 12:43:16.904000000 +0000 ++++ src/CumulativeSeqProb.h 2024-10-07 12:54:32.420000000 +0000 +@@ -1,21 +1,22 @@ + #ifndef __CUMULATIVESEQPROB_H__ + #define __CUMULATIVESEQPROB_H__ + ++#include + #include "ME_REG.h" + #include "Config.h" + #include "FileManagement.h" + + struct SeqPath; + +-const float qual_levels[] = {0.10,0.25,0.5,0.75,0.9,0.95,0.98,POS_INF}; ++const float qual_levels[] = {0.10,0.25,0.5,0.75,0.9,0.95,0.98,INFINITY}; + const int num_qual_levels = sizeof(qual_levels)/sizeof(float); + const int rank_levels[] = {0,1,2,4,8,16,32,64,128,256,POS_INF}; // at these ranks we fill the + const int num_rank_levels = sizeof(rank_levels)/sizeof(int); +-const float rank_score_levels[] = {-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,POS_INF}; ++const float rank_score_levels[] = {-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,INFINITY}; + const int num_rank_score_levels = sizeof(rank_score_levels)/sizeof(float); +-const float pnv_score_levels[] = {0,10,20,30,40,50,60,70,80,90,100,110,120,130,140,POS_INF}; ++const float pnv_score_levels[] = {0.f,10.f,20.f,30.f,40.f,50.f,60.f,70.f,80.f,90.f,100.f,110.f,120.f,130.f,140.f,INFINITY}; + const int num_pnv_score_levels = sizeof(pnv_score_levels)/sizeof(float); +-const float avg_prob_levels[] = {0.1,0.25,0.5,0.75,0.9,0.95,POS_INF}; ++const float avg_prob_levels[] = {0.1,0.25,0.5,0.75,0.9,0.95,INFINITY}; + const int num_avg_prob_levels = sizeof(avg_prob_levels)/sizeof(float); + const int special_ranks[] = {0,8,128}; // at these ranks we fill the big set of rank score and pnv score features + const int num_special_ranks = sizeof(special_ranks)/sizeof(int); diff --git a/recipes/pepnovo/build.sh b/recipes/pepnovo/build.sh index 39fc153db8187..1988d3f7261e9 100644 --- a/recipes/pepnovo/build.sh +++ b/recipes/pepnovo/build.sh @@ -1,10 +1,12 @@ #!/bin/bash +set -xe + cd src/ # Below we add -Wno-narrowing because of the compilation error: # CumulativeSeqProb.h:10:71: error: narrowing conversion of '999999999' from 'int' to 'float' inside { } [-Wnarrowing] -make CC="${CXX}" CFLAGS="${CXXFLAGS} -Wno-narrowing " LDFLAGS="${LDFLAGS}" +make -j ${CPU_COUNT} CC="${CXX}" CFLAGS="${CXXFLAGS} -Wno-narrowing -Wno-register " LDFLAGS="${LDFLAGS}" mkdir -p ${PREFIX}/bin cp PepNovo_bin ${PREFIX}/bin/pepnovo diff --git a/recipes/pepnovo/meta.yaml b/recipes/pepnovo/meta.yaml index 331467daea156..63618acce1669 100644 --- a/recipes/pepnovo/meta.yaml +++ b/recipes/pepnovo/meta.yaml @@ -7,9 +7,12 @@ source: md5: af2a863487cb53bf0e92f00d395c4f0d patches: - 0001-fix-type-error-in-ReScoreDB.cpp.patch + - 0002-fix-float-positive-infinity.patch build: - number: 3 + number: 4 + run_exports: + - {{ pin_subpackage('pepnovo', max_pin=None) }} requirements: build: @@ -28,5 +31,8 @@ about: summary: PepNovo serves as a high throughput de novo peptide sequencing tool for tandem mass spectrometry data extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 identifiers: - biotools:pepnovo diff --git a/recipes/peptide-shaker/meta.yaml b/recipes/peptide-shaker/meta.yaml index 13a1eb134f708..66ede8a61bc99 100644 --- a/recipes/peptide-shaker/meta.yaml +++ b/recipes/peptide-shaker/meta.yaml @@ -1,7 +1,7 @@ # Do not forget to update the version string in the peptide-shaker.py file {% set name = "PeptideShaker" %} -{% set version = "3.0.8" %} -{% set sha256 = "d7bd1bc9d7f30961da6eb19f8370d2853f5b254857de953eeb34b735ff04aa99" %} +{% set version = "3.0.11" %} +{% set sha256 = "8893de0b068b3adc0c45b1139374a08ecbd8661e1fa087e5aec950d1091e2dec" %} package: name: peptide-shaker @@ -31,14 +31,15 @@ test: about: home: "https://compomics.github.io/projects/peptide-shaker.html" dev_url: "https://github.com/compomics/peptide-shaker" - license: Apache-2.0 + license: "Apache-2.0" license_family: APACHE - summary: Independent platform for interpretation of proteomics identification results + summary: "Independent platform for interpretation of proteomics identification results." description: PeptideShaker is a search engine independent platform for interpretation of proteomics identification results from multiple search engines, currently supporting X!Tandem, MS-GF+, Metamorpheus, MS Amanda, OMSSA, MyriMatch, Comet, Tide, Mascot, Andromeda and mzIdentML. By combining the results from multiple search engines, while re-calculating PTM localization scores and redoing the protein inference, PeptideShaker attempts to give you the best possible understanding of your proteomics data! + doc_url: "https://github.com/compomics/peptide-shaker/blob/master/README.md" extra: notes: diff --git a/recipes/peptide-shaker/peptide-shaker.py b/recipes/peptide-shaker/peptide-shaker.py index d41c0b5831e05..4860d508ad6e0 100755 --- a/recipes/peptide-shaker/peptide-shaker.py +++ b/recipes/peptide-shaker/peptide-shaker.py @@ -14,7 +14,7 @@ from os import getenv from os import X_OK -jar_file = 'PeptideShaker-3.0.8.jar' +jar_file = 'PeptideShaker-3.0.11.jar' default_jvm_mem_opts = ['-Xms2g', '-Xmx4g'] diff --git a/recipes/peptides/meta.yaml b/recipes/peptides/meta.yaml index f9c435c64005c..b07809680fac3 100644 --- a/recipes/peptides/meta.yaml +++ b/recipes/peptides/meta.yaml @@ -1,5 +1,5 @@ {% set name = "peptides" %} -{% set version = "0.3.1" %} +{% set version = "0.3.4" %} package: name: "{{ name }}" @@ -7,18 +7,20 @@ package: source: url: https://pypi.org/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz - sha256: d813fdfa74cb3d9087420d9e9c12faa35366ad1cd37ab4fb57236da8f7dd1776 + sha256: e4cd95c7aec68a1876d85bd544478d2d0106e1d884b515c861979dbe00e14a39 build: number: 0 noarch: python script: "{{ PYTHON }} -m pip install . --no-deps --ignore-installed -vvv " + run_exports: + - {{ pin_subpackage(name, max_pin="x.x") }} requirements: host: - python - pip - - setuptools >=39.2 + - setuptools >=46.4 - wheel >=0.30 - astor >=0.6 run: diff --git a/recipes/percolator/build.sh b/recipes/percolator/build.sh index 5dc597f961637..433b421c79df6 100644 --- a/recipes/percolator/build.sh +++ b/recipes/percolator/build.sh @@ -8,7 +8,7 @@ cmake -S . -B percobuild \ -DTARGET_ARCH=x86_64 -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX="$PREFIX" -DXML_SUPPORT=ON \ -DCMAKE_PREFIX_PATH="$PREFIX;$PREFIX/lib" -DCMAKE_CXX_COMPILER="${CXX}" \ - -DCMAKE_CXX_FLAGS="-std=c++14 -O3 -I{PREFIX}/include" + -DCMAKE_CXX_FLAGS="${CXXFLAGS} -std=c++14 -O3 -I{PREFIX}/include" cmake --build percobuild/ --target install -j ${CPU_COUNT} -v # First make sure we dont get problems with truncated PREFIX due to null terminators: @@ -19,7 +19,7 @@ cmake -S ${SRC_DIR}/src/converters -B converterbuild \ -DTARGET_ARCH=x86_64 -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX="$PREFIX" -DBOOST_ROOT="$PREFIX" \ -DBOOST_LIBRARYDIR="$PREFIX/lib" -DSERIALIZE="Boost" \ - -DCMAKE_CXX_FLAGS="-std=c++11 -O3 -I{PREFIX}/include" \ + -DCMAKE_CXX_FLAGS="${CXXFLAGS} -std=c++14 -O3 -I{PREFIX}/include" \ -DCMAKE_PREFIX_PATH="$PREFIX" -DCMAKE_CXX_COMPILER="${CXX}" cmake --build converterbuild/ --target install -j ${CPU_COUNT} -v diff --git a/recipes/percolator/meta.yaml b/recipes/percolator/meta.yaml index c3a9540cf1790..263639be02075 100644 --- a/recipes/percolator/meta.yaml +++ b/recipes/percolator/meta.yaml @@ -1,13 +1,13 @@ {% set name = "percolator" %} -{% set version = "3.6.5" %} +{% set version = "3.7.1" %} package: name: {{ name|lower }} version: {{ version }} source: - url: https://github.com/percolator/percolator/archive/refs/tags/rel-3-06-05.tar.gz - sha256: e386998046f59c34be01b1b0347709751d92f3a98e9a0079f8e7c5af5e2dcc8f + url: https://github.com/percolator/percolator/archive/refs/tags/rel-3-07-01.tar.gz + sha256: f1c9833063cb4e99c51a632efc3f80c6b8f48a43fd440ea3eb0968af5c84b97a build: number: 0 @@ -33,19 +33,19 @@ requirements: test: commands: - - sqt2pin -o testsqt.txt $PREFIX/testdata/target.sqt $PREFIX/testdata/target.sqt - - tandem2pin -o testtandem.txt $PREFIX/testdata/target.t.xml $PREFIX/testdata/target.t.xml - - msgf2pin -o testmzid.txt $PREFIX/testdata/target.mzid $PREFIX/testdata/target.mzid + #- sqt2pin -o testsqt.txt $PREFIX/testdata/target.sqt $PREFIX/testdata/target.sqt + #- tandem2pin -o testtandem.txt $PREFIX/testdata/target.t.xml $PREFIX/testdata/target.t.xml + #- msgf2pin -o testmzid.txt $PREFIX/testdata/target.mzid $PREFIX/testdata/target.mzid - percolator -X test.xml $PREFIX/testdata/percolatorTab about: - home: https://github.com/percolator/percolator + home: "https://github.com/percolator/percolator" license: Apache-2.0 license_family: APACHE - license_file: license.txt - summary: Semi-supervised learning for peptide identification from shotgun proteomics datasets - dev_url: https://github.com/percolator/percolator - doc_url: http://percolator.ms/ + license_file: "license.txt" + summary: "Semi-supervised learning for peptide identification from shotgun proteomics datasets." + dev_url: "https://github.com/percolator/percolator" + doc_url: "http://percolator.ms" extra: container: diff --git a/recipes/perl-convert-binary-c/build.sh b/recipes/perl-convert-binary-c/build.sh index acdfe24e65034..c6548a2e84767 100644 --- a/recipes/perl-convert-binary-c/build.sh +++ b/recipes/perl-convert-binary-c/build.sh @@ -1,5 +1,7 @@ #!/bin/bash +set -xe + # If it has Build.PL use that, otherwise use Makefile.PL if [ -f Build.PL ]; then perl Build.PL @@ -10,7 +12,7 @@ if [ -f Build.PL ]; then elif [ -f Makefile.PL ]; then # Make sure this goes in site perl Makefile.PL INSTALLDIRS=site - make + make -j ${CPU_COUNT} make test make install else diff --git a/recipes/perl-convert-binary-c/build_failure.osx-64.yaml b/recipes/perl-convert-binary-c/build_failure.osx-64.yaml deleted file mode 100644 index 988d5d7e4f623..0000000000000 --- a/recipes/perl-convert-binary-c/build_failure.osx-64.yaml +++ /dev/null @@ -1,104 +0,0 @@ -recipe_sha: b029f79f91254b89c13e5479ef25482a5d686dfd473a858727180255bcdcb8e6 # The commit at which this recipe failed to build. -skiplist: true # Set to true to skiplist this recipe so that it will be ignored as long as its latest commit is the one given above. -log: |2- - } STMT_END - ^ - cbc/util.c:655:13: note: ')' token is here - DUMP_INDENT; - ^~~~~~~~~~~ - cbc/util.c:577:11: note: expanded from macro 'DUMP_INDENT' - } STMT_END - ^~~~~~~~ - ./ppport.h:3814:20: note: expanded from macro 'STMT_END' - # define STMT_END ) - ^ - cbc/util.c:670:11: warning: '(' and '{' tokens introducing statement expression appear in different macro expansion contexts [-Wcompound-token-split-by-macro] - DUMP_INDENT; - ^~~~~~~~~~~ - cbc/util.c:574:9: note: expanded from macro 'DUMP_INDENT' - STMT_START { \ - ^~~~~~~~~~ - ./ppport.h:3813:28: note: expanded from macro 'STMT_START' - # define STMT_START (void)( /* gcc supports ({ STATEMENTS; })'' */ - ^ - cbc/util.c:670:11: note: '{' token is here - DUMP_INDENT; - ^~~~~~~~~~~ - cbc/util.c:574:20: note: expanded from macro 'DUMP_INDENT' - STMT_START { \ - ^ - cbc/util.c:670:11: warning: '}' and ')' tokens terminating statement expression appear in different macro expansion contexts [-Wcompound-token-split-by-macro] - DUMP_INDENT; - ^~~~~~~~~~~ - cbc/util.c:577:9: note: expanded from macro 'DUMP_INDENT' - } STMT_END - ^ - cbc/util.c:670:11: note: ')' token is here - DUMP_INDENT; - ^~~~~~~~~~~ - cbc/util.c:577:11: note: expanded from macro 'DUMP_INDENT' - } STMT_END - ^~~~~~~~ - ./ppport.h:3814:20: note: expanded from macro 'STMT_END' - # define STMT_END ) - ^ - 114 warnings generated. - Compiling [x86_64-apple-darwin13.4.0-clang -O3] ctlib/bitfields.c - Compiling [x86_64-apple-darwin13.4.0-clang -O3] ctlib/byteorder.c - Compiling [x86_64-apple-darwin13.4.0-clang -O3] ctlib/cterror.c - Compiling [x86_64-apple-darwin13.4.0-clang -O3] ctlib/ctparse.c - Compiling [x86_64-apple-darwin13.4.0-clang -O3] ctlib/cttags.c - Compiling [x86_64-apple-darwin13.4.0-clang -O3] ctlib/cttype.c - Compiling [x86_64-apple-darwin13.4.0-clang -O3] ctlib/fileinfo.c - Compiling [x86_64-apple-darwin13.4.0-clang -O3] ctlib/layout.c - Compiling [x86_64-apple-darwin13.4.0-clang -O3] ctlib/y_parser.c - Compiling [x86_64-apple-darwin13.4.0-clang -O3] ctlib/y_pragma.c - Compiling [x86_64-apple-darwin13.4.0-clang -O3] ucpp/assert.c - Compiling [x86_64-apple-darwin13.4.0-clang -O3] ucpp/cpp.c - Compiling [x86_64-apple-darwin13.4.0-clang -O3] ucpp/eval.c - Compiling [x86_64-apple-darwin13.4.0-clang -O3] ucpp/lexer.c - Compiling [x86_64-apple-darwin13.4.0-clang -O3] ucpp/macro.c - Compiling [x86_64-apple-darwin13.4.0-clang -O3] ucpp/mem.c - Compiling [x86_64-apple-darwin13.4.0-clang -O3] ucpp/nhash.c - ucpp/nhash.c:464:11: warning: passing arguments to a function without a prototype is deprecated in all versions of C and is not supported in C2x [-Wdeprecated-non-prototype] - action(arg, pnode); - ^ - ucpp/nhash.c:466:11: warning: passing arguments to a function without a prototype is deprecated in all versions of C and is not supported in C2x [-Wdeprecated-non-prototype] - action(pnode); - ^ - ucpp/nhash.c:478:10: warning: passing arguments to a function without a prototype is deprecated in all versions of C and is not supported in C2x [-Wdeprecated-non-prototype] - action(arg, node); - ^ - ucpp/nhash.c:480:10: warning: passing arguments to a function without a prototype is deprecated in all versions of C and is not supported in C2x [-Wdeprecated-non-prototype] - action(node); - ^ - 4 warnings generated. - Compiling [x86_64-apple-darwin13.4.0-clang -O3] util/hash.c - Compiling [x86_64-apple-darwin13.4.0-clang -O3] util/list.c - Compiling [x86_64-apple-darwin13.4.0-clang -O3] util/memalloc.c - rm -f blib/arch/auto/Convert/Binary/C/C.bundle - x86_64-apple-darwin13.4.0-clang -Wl,-pie -Wl,-headerpad_max_install_names -Wl,-dead_strip_dylibs -Wl,-rpath,$PREFIX/lib -L$PREFIX/lib -mmacosx-version-min=10.9 -bundle -undefined dynamic_lookup --sysroot=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -fstack-protector-strong C.o cbc/basic.o cbc/dimension.o cbc/hook.o cbc/idl.o cbc/init.o cbc/macros.o cbc/member.o cbc/object.o cbc/option.o cbc/pack.o cbc/sourcify.o cbc/tag.o cbc/type.o cbc/typeinfo.o cbc/util.o ctlib/bitfields.o ctlib/byteorder.o ctlib/cterror.o ctlib/ctparse.o ctlib/cttags.o ctlib/cttype.o ctlib/fileinfo.o ctlib/layout.o ctlib/y_parser.o ctlib/y_pragma.o ucpp/assert.o ucpp/cpp.o ucpp/eval.o ucpp/lexer.o ucpp/macro.o ucpp/mem.o ucpp/nhash.o util/hash.o util/list.o util/memalloc.o -o blib/arch/auto/Convert/Binary/C/C.bundle \ - \ - - ld: library not found for -lSystem - clang-15: error: linker command failed with exit code 1 (use -v to see invocation) - make: *** [Makefile:561: blib/arch/auto/Convert/Binary/C/C.bundle] Error 1 - Traceback (most recent call last): - File "/opt/mambaforge/envs/bioconda/bin/conda-mambabuild", line 10, in - sys.exit(main()) - File "/opt/mambaforge/envs/bioconda/lib/python3.8/site-packages/boa/cli/mambabuild.py", line 256, in main - call_conda_build(action, config) - File "/opt/mambaforge/envs/bioconda/lib/python3.8/site-packages/boa/cli/mambabuild.py", line 228, in call_conda_build - result = api.build( - File "/opt/mambaforge/envs/bioconda/lib/python3.8/site-packages/conda_build/api.py", line 180, in build - return build_tree( - File "/opt/mambaforge/envs/bioconda/lib/python3.8/site-packages/conda_build/build.py", line 3078, in build_tree - packages_from_this = build(metadata, stats, - File "/opt/mambaforge/envs/bioconda/lib/python3.8/site-packages/conda_build/build.py", line 2198, in build - utils.check_call_env(cmd, env=env, rewrite_stdout_env=rewrite_env, - File "/opt/mambaforge/envs/bioconda/lib/python3.8/site-packages/conda_build/utils.py", line 451, in check_call_env - return _func_defaulting_env_to_os_environ("call", *popenargs, **kwargs) - File "/opt/mambaforge/envs/bioconda/lib/python3.8/site-packages/conda_build/utils.py", line 427, in _func_defaulting_env_to_os_environ - raise subprocess.CalledProcessError(proc.returncode, _args) - subprocess.CalledProcessError: Command '['/bin/bash', '-o', 'errexit', '/opt/mambaforge/envs/bioconda/conda-bld/perl-convert-binary-c_1685353575548/work/conda_build.sh']' returned non-zero exit status 2. -# Last 100 lines of the build log. diff --git a/recipes/perl-convert-binary-c/meta.yaml b/recipes/perl-convert-binary-c/meta.yaml index f4812fb74c229..94f4002d4df60 100644 --- a/recipes/perl-convert-binary-c/meta.yaml +++ b/recipes/perl-convert-binary-c/meta.yaml @@ -1,26 +1,26 @@ {% set name = "perl-convert-binary-c" %} -{% set version = "0.84" %} -{% set sha256 = "a99ce7a8e60b8c6fe1cf73f290e423bd206e8721e3588ed125eebf7c39be3fb0" %} +{% set version = "0.85" %} +{% set sha256 = "c4cf42e00ea429ae3db276755b922282b4e8e9419d0eaf094aaa24107abc50e5" %} package: name: {{ name }} version: {{ version }} source: - url: https://cpan.metacpan.org/authors/id/M/MH/MHX/Convert-Binary-C-0.84.tar.gz + url: https://cpan.metacpan.org/authors/id/M/MH/MHX/Convert-Binary-C-0.85.tar.gz sha256: {{ sha256 }} build: - number: 3 + number: 1 + run_exports: + - {{ pin_subpackage('perl-convert-binary-c', max_pin="x.x") }} requirements: build: - make - {{ compiler('cxx') }} - host: - perl - run: - perl @@ -33,3 +33,8 @@ about: home: http://search.cpan.org/~mhx/Convert-Binary-C/ license: perl_5 summary: 'Binary Data Conversion using C Types' + +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 diff --git a/recipes/perl-minion/meta.yaml b/recipes/perl-minion/meta.yaml index f072af8962b1d..0dc5647826631 100644 --- a/recipes/perl-minion/meta.yaml +++ b/recipes/perl-minion/meta.yaml @@ -1,6 +1,6 @@ {% set name = "perl-minion" %} -{% set version = "10.30" %} -{% set sha256 = "b704bd66ec4af1c03394689f02c0ac0480ebd06ce9cca17291501b9202c6ed1c" %} +{% set version = "10.31" %} +{% set sha256 = "3068f99033e69df08145b584a91ee224f4e97dc6242e102221e8220a3f28503b" %} package: name: {{ name }} diff --git a/recipes/pggb/meta.yaml b/recipes/pggb/meta.yaml index 23c511a7bad59..5b0a82197d30a 100644 --- a/recipes/pggb/meta.yaml +++ b/recipes/pggb/meta.yaml @@ -13,7 +13,7 @@ build: noarch: generic run_exports: - {{ pin_subpackage(name, max_pin='x.x') }} - number: 0 + number: 1 requirements: run: @@ -28,7 +28,7 @@ requirements: - seqwish ==0.7.10 - smoothxg ==0.7.4 - time - - vg 1.40.0 + - vg 1.59.0 - wfmash ==0.13.0 - python-igraph ==0.10.4 diff --git a/recipes/pgrc/build.sh b/recipes/pgrc/build.sh new file mode 100644 index 0000000000000..b71b6c3f55249 --- /dev/null +++ b/recipes/pgrc/build.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +mkdir -p $PREFIX/bin + +export INCLUDES="-I${PREFIX}/include" +export LIBPATH="-L${PREFIX}/lib" +export CXXFLAGS="${CXXFLAGS} -I${PREFIX}/include" +export LDFLAGS="${LDFLAGS} -L${PREFIX}/lib" + +if [[ `uname` == "Darwin" ]]; then + export CONFIG_ARGS="-DCMAKE_FIND_FRAMEWORK=NEVER -DCMAKE_FIND_APPBUNDLE=NEVER" +else + export CONFIG_ARGS="" +fi + +cmake -S . -B build -DCMAKE_INSTALL_PREFIX="${PREFIX}" \ + -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER="${CXX}" \ + -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ + "${CONFIG_ARGS}" +cmake --build build --target PgRC -j "${CPU_COUNT}" -v + +chmod 0755 build/PgRC +cp -rf build/PgRC $PREFIX/bin diff --git a/recipes/pgrc/meta.yaml b/recipes/pgrc/meta.yaml new file mode 100644 index 0000000000000..2637fb0c8f6f5 --- /dev/null +++ b/recipes/pgrc/meta.yaml @@ -0,0 +1,49 @@ +{% set version = "2.0.1" %} +{% set date = "2024-10-04" %} +{% set sha256 = "1a963f40c4bd93433c236afb3e2053244ba3b419c313104f881e8d4d947532b9" %} + +package: + name: pgrc + version: {{ version }} + +build: + number: 0 + run_exports: + - {{ pin_subpackage('pgrc', max_pin="x") }} + +source: + url: https://github.com/kowallus/PgRC/archive/refs/tags/v{{ version }}.tar.gz + sha256: {{ sha256 }} + +requirements: + build: + - {{ compiler('cxx') }} + - cmake >=3.5 + - make + host: + - llvm-openmp # [osx] + - libgomp # [linux] + run: + - llvm-openmp # [osx] + - libgomp # [linux] + +test: + commands: + - PgRC -v 2>&1 | grep -F {{ date }} + +about: + home: https://github.com/kowallus/PgRC + license: "GPL-3.0-or-later" + license_file: LICENSE + license_family: GPL3 + summary: "A tool for compressing the DNA stream of FASTQ datasets." + dev_url: https://github.com/kowallus/PgRC + +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 + recipe-maintainers: + - kowallus + identifiers: + - doi:10.1093/bioinformatics/btz919 diff --git a/recipes/pgscatalog-utils/meta.yaml b/recipes/pgscatalog-utils/meta.yaml index f75bb5bdd2eca..9f2ccfa52bfaf 100644 --- a/recipes/pgscatalog-utils/meta.yaml +++ b/recipes/pgscatalog-utils/meta.yaml @@ -1,5 +1,5 @@ {% set name = "pgscatalog-utils" %} -{% set version = "1.3.1" %} +{% set version = "1.4.1" %} package: name: {{ name|lower }} @@ -7,12 +7,12 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/pgscatalog_utils-{{ version }}.tar.gz - sha256: 7816a0de184e385a1afeec153a5079f751ccda578d702af91391be389c0f09a7 + sha256: e54e67f9a372e91a7cc640528c66a9989258bc5ae61e7d6972a5b8ef4e1aa2da build: noarch: python script: {{ PYTHON }} -m pip install . -vvv --no-deps --no-build-isolation --no-cache-dir - number: 0 + number: 1 run_exports: - {{ pin_subpackage('pgscatalog-utils', max_pin='x.x') }} @@ -23,9 +23,9 @@ requirements: - pip run: - python >=3.10.0,<4.0.0 - - pgscatalog.calc >=0.2.1,<0.3.0 - - pgscatalog.core >=0.2.1,<0.3.0 - - pgscatalog.match >=0.2.1,<0.3.0 + - pgscatalog.calc >=0.3.0,<0.4.0 + - pgscatalog.core >=0.3.1,<0.4.0 + - pgscatalog.match >=0.3.3,<0.4.0 test: imports: @@ -33,6 +33,7 @@ test: - pgscatalog.calc - pgscatalog.core commands: + - pip check - pgscatalog-download --help - pgscatalog-combine --help - pgscatalog-match --help @@ -40,6 +41,8 @@ test: - pgscatalog-relabel --help - pgscatalog-aggregate --help - pgscatalog-ancestry-adjust --help + requires: + - pip about: home: https://github.com/PGScatalog/pygscatalog @@ -51,3 +54,5 @@ about: extra: recipe-maintainers: - nebfield + - smlmbrt + diff --git a/recipes/pgscatalog.calc/meta.yaml b/recipes/pgscatalog.calc/meta.yaml index 67c7c66cbacd7..043cbd85b5704 100644 --- a/recipes/pgscatalog.calc/meta.yaml +++ b/recipes/pgscatalog.calc/meta.yaml @@ -1,5 +1,5 @@ {% set name = "pgscatalog.calc" %} -{% set version = "0.2.2" %} +{% set version = "0.3.0" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/pgscatalog_calc-{{ version }}.tar.gz - sha256: 3589cc8541e8c8f6e0a359ba163454da1cd4aef0baf6e11c8c23e3aff82c237f + sha256: d5821cabb42558698ff862ec9edc5dad79863d5321db95580459f8a08c2c2c92 build: entry_points: @@ -26,7 +26,7 @@ requirements: - pip run: - python >=3.10 - - pgscatalog.core >=0.2.1,<0.3.0 + - pgscatalog.core >=0.3.0,<0.4.0 - numpy >=1.26.4,<2.0.0 - pandas >=2.2.0,<3.0.0 - pyarrow >=15.0.0,<16.0.0 diff --git a/recipes/pgscatalog.core/meta.yaml b/recipes/pgscatalog.core/meta.yaml index 3e037ff67cd1e..5d51c105d3fcc 100644 --- a/recipes/pgscatalog.core/meta.yaml +++ b/recipes/pgscatalog.core/meta.yaml @@ -1,5 +1,5 @@ {% set name = "pgscatalog.core" %} -{% set version = "0.2.2" %} +{% set version = "0.3.1" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/pgscatalog_core-{{ version }}.tar.gz - sha256: 1a716fdaa6972c86b7a8c2a8141a738cbd5f9e6a98941877631f4187415a0a7f + sha256: 612cc10afc4bea0dc5edfc6b279fc92b76e6833a9152e5bd63a7f98da4a125ad build: entry_points: @@ -29,10 +29,11 @@ requirements: - python >=3.10 - httpx >=0.26.0,<0.27.0 - tenacity >=8.2.3,<9.0.0 - - pyliftover >=0.4.0,<0.5.0 + - pyliftover >=0.4.1,<0.5.0 - xopen >=1.8.0,<2.0.0 - tqdm >=4.66.1,<5.0.0 - natsort >=8.4.0,<9.0.0 + - pydantic >=2.9.0,<3.0.0 # for xopen - python-zlib-ng test: diff --git a/recipes/pgscatalog.match/meta.yaml b/recipes/pgscatalog.match/meta.yaml index 7b5debb7c3471..e91c94f3ff030 100644 --- a/recipes/pgscatalog.match/meta.yaml +++ b/recipes/pgscatalog.match/meta.yaml @@ -1,5 +1,6 @@ {% set name = "pgscatalog.match" %} -{% set version = "0.3.1" %} +{% set version = "0.3.3" %} + package: name: {{ name|lower }} @@ -7,7 +8,8 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/pgscatalog_match-{{ version }}.tar.gz - sha256: 316feb3337298ac54a2b8aa5baa68bb9144acc1f38795cce628d8cd9b2e3b7c1 + sha256: d927fa227917d3e03fb06370dfadc6a5fe4b85f0008f303909f0d7b2d1c48c61 + build: number: 0 @@ -29,15 +31,18 @@ requirements: - python >=3.10 - polars 0.20.30 - pyarrow >=15.0.0,<16.0.0 - - pgscatalog.core >=0.2.1,<0.3.0 + - pgscatalog.core >=0.3.0,<0.4.0 test: imports: - pgscatalog.match commands: + - pip check - pgscatalog-match --help - pgscatalog-matchmerge --help - pgscatalog-intersect --help + requires: + - pip about: home: https://github.com/PGScatalog/pygscatalog diff --git a/recipes/phables/meta.yaml b/recipes/phables/meta.yaml index 2d16b2857d523..98e5b35acf6a5 100644 --- a/recipes/phables/meta.yaml +++ b/recipes/phables/meta.yaml @@ -1,5 +1,5 @@ {% set name = "phables" %} -{% set version = "1.4.0" %} +{% set version = "1.4.1" %} package: name: "{{ name|lower }}" @@ -7,11 +7,11 @@ package: source: url: "https://github.com/Vini2/{{ name }}/archive/refs/tags/v{{ version }}.tar.gz" - sha256: 09b843141ab32cda5016741b7f31ccefcb659448f0fd4aa55697c509680e16e9 + sha256: f456260bf710073986ecd524975e09083c5cf7d0ad3a0e6808ba48a2b7dc0ee4 build: - number: 0 - noarch: python + number: 1 + noarch: false entry_points: - phables=phables.__main__:main script: "{{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir -vvv" @@ -48,5 +48,10 @@ about: dev_url: "https://github.com/Vini2/phables" extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 + skip-lints: + - should_be_noarch_generic recipe-maintainers: - Vini2 diff --git a/recipes/phykit/meta.yaml b/recipes/phykit/meta.yaml index f7514b2ae2060..23e84b018047c 100644 --- a/recipes/phykit/meta.yaml +++ b/recipes/phykit/meta.yaml @@ -1,5 +1,5 @@ {% set name = "phykit" %} -{% set version = "1.20.0" %} +{% set version = "2.0.0" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: 61163c9297f4b9765184f0d74e24cf1ef31844502379cab1ca21741a760f95b7 + sha256: 32358dc24e564860ce56fa71772599a00d12dc746b6ca2fb046fbca9f4c1e2c3 build: noarch: python diff --git a/recipes/phyloacc/build.sh b/recipes/phyloacc/build.sh index b2034f66d9414..eb6412c7bc712 100644 --- a/recipes/phyloacc/build.sh +++ b/recipes/phyloacc/build.sh @@ -1,11 +1,13 @@ #!/bin/bash +set -xe + mkdir -p ${PREFIX}/bin mkdir -p ${SP_DIR} -make install CXX=${CXX} +make -j ${CPU_COUNT} install CXX=${CXX} cp src/PhyloAcc-interface/phyloacc.py ${PREFIX}/bin/ ln -s ${PREFIX}/bin/phyloacc.py ${PREFIX}/bin/phyloacc cp src/PhyloAcc-interface/phyloacc_post.py ${PREFIX}/bin/ -cp -R src/PhyloAcc-interface/phyloacc_lib ${SP_DIR}/ +cp -R src/PhyloAcc-interface/phyloacc_lib ${SP_DIR}/ \ No newline at end of file diff --git a/recipes/phyloacc/meta.yaml b/recipes/phyloacc/meta.yaml index 5c9be1dcd5e59..a000cd11dea91 100644 --- a/recipes/phyloacc/meta.yaml +++ b/recipes/phyloacc/meta.yaml @@ -1,6 +1,6 @@ {% set name = "PhyloAcc" %} -{% set version = "2.3.3" %} -{% set sha256 = "9fd75cae7015dd35d516ec040a331fcb6cb5377644d0d7864b488fda2f288d60" %} +{% set version = "2.4.1" %} +{% set sha256 = "919203dc541c172f9e835b0568f6abd49999a24734957fec020b01161479282c" %} package: name: {{ name|lower }} @@ -11,8 +11,8 @@ source: sha256: {{ sha256 }} build: - number: 1 - skip: True # [py < 38] + number: 2 + skip: True # [py < 311] run_exports: - {{ pin_subpackage('phyloacc', max_pin="x") }} @@ -35,15 +35,14 @@ requirements: - matplotlib-base >=3.5 - biopython >=1.79 - numpy >=1.22 - - snakemake-minimal >=7.3 + - snakemake-minimal >=8.0 + - snakemake-executor-plugin-slurm - libgomp # [linux] - llvm-openmp # [osx] test: - commands: - - phyloacc.py --version - - phyloacc.py --depcheck - - phyloacc_post.py -h + requires: + - wget about: home: https://phyloacc.github.io/ @@ -56,5 +55,7 @@ about: dev_url: https://github.com/phyloacc/PhyloAcc extra: + additional-platforms: + - linux-aarch64 recipe-maintainers: - gwct diff --git a/recipes/phyloacc/run_test.sh b/recipes/phyloacc/run_test.sh new file mode 100644 index 0000000000000..74e3e9d686ba2 --- /dev/null +++ b/recipes/phyloacc/run_test.sh @@ -0,0 +1,61 @@ +#!/bin/bash +set -e +set -o pipefail +set -x + +# Runs test for PhyloAcc, including on a small simulated dataset that contains a fasta file, mod file, +# bed file, id subset file, and config file. + +TMP=$(mktemp -d) +trap 'rm -rf $TMP' EXIT +export TMPDIR=$TMP +cd $TMP + +echo " ** DOWNLOADING TEST DATA." +files=( + "bioconda-test-cfg.yaml" + "id-subset.txt" + "ratite.mod" + "simu_500_200_diffr_2-1.bed" + "simu_500_200_diffr_2-1.noanc.fa" +) + +for file in "${files[@]}"; do + if ! wget -q "https://github.com/phyloacc/PhyloAcc-test-data/raw/main/bioconda-test-data/$file"; then + echo "Failed to download $file" >&2 + exit 1 + fi +done +echo " ** TEST DATA DOWNLOAD OK." + +echo " ** BEGIN DEPCHECK TEST." +if ! phyloacc --depcheck; then + echo " ** ERROR: Dependency check failed. Please ensure all dependencies are installed." >&2 + exit 1 +fi +echo " ** DEPCHECK TEST OK." + +echo " ** BEGIN PHYLOACC INTERFACE TEST." +if ! phyloacc --config bioconda-test-cfg.yaml --local; then + echo " ** ERROR: PhyloAcc interface test failed. Please check the configuration and installation." >&2 + exit 1 +fi +echo " ** INTERFACE TEST OK." + +echo " ** BEGIN WORKFLOW TEST." +if ! snakemake -p --jobs 1 --cores 1 -s phyloacc-bioconda-test/phyloacc-job-files/snakemake/run_phyloacc.smk --configfile phyloacc-bioconda-test/phyloacc-job-files/snakemake/phyloacc-config.yaml; then + echo " ** ERROR: PhyloAcc workflow test failed. Please check the Snakemake configuration and log files." >&2 + exit 1 +fi +echo " ** WORKFLOW TEST OK." + +echo " ** BEGIN POST-PROCESSING TEST." +if ! phyloacc_post.py -h; then + echo " ** ERROR: Failed to display help message for phyloacc_post.py" >&2 + exit 1 +fi +if ! phyloacc_post.py -i phyloacc-bioconda-test/; then + echo " ** ERROR: Post-processing test failed. Please check the input directory and log files." >&2 + exit 1 +fi +echo " ** POST-PROCESSING TEST OK." \ No newline at end of file diff --git a/recipes/phylodeep/meta.yaml b/recipes/phylodeep/meta.yaml index ac320200a67f7..52c3e29e478dd 100644 --- a/recipes/phylodeep/meta.yaml +++ b/recipes/phylodeep/meta.yaml @@ -1,5 +1,5 @@ {% set name = "phylodeep" %} -{% set version = "0.6" %} +{% set version = "0.9" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: 9c8adff003651de7656f690c930a6e969c9f9e685b08e926d0f6263847ac4323 + sha256: 123365b279c706b9b2c0f4c8b215bc3f9943b8c52a02f76bb0e9a2bc91cf5d47 build: number: 0 diff --git a/recipes/phylodm/meta.yaml b/recipes/phylodm/meta.yaml index 01298be68bc1f..1bfd5232396a0 100644 --- a/recipes/phylodm/meta.yaml +++ b/recipes/phylodm/meta.yaml @@ -1,6 +1,6 @@ {% set name = "phylodm" %} -{% set version = "3.1.0" %} -{% set sha256 = "ea4d0721702209c8309d82e4a54649bd60bb5d697043be4a9f9930bc0fe4e300" %} +{% set version = "3.2.0" %} +{% set sha256 = "ddcf2ddd9de75b3e411cd9d1a8dab622840530a1db520b5016e03c9c45720694" %} package: name: {{ name|lower }} diff --git a/recipes/piawka/build.sh b/recipes/piawka/build.sh index 036594907f2e1..a68b2482730b2 100644 --- a/recipes/piawka/build.sh +++ b/recipes/piawka/build.sh @@ -1,19 +1,6 @@ #!/bin/bash -# increase verbosity for debugging -set -x - mkdir -p $PREFIX/bin - -# Replace `mawk -f` shebangs with "polyglot shebangs" -# as per https://unix.stackexchange.com/a/361796/605705 -# not to rely on non-standard `env -S` option -polyglot1='#!/bin/sh'; polyglot2='"exec" "mawk" "-f" "$0" "$@" && 0 {}' -for f in $SRC_DIR/scripts/*; do - t="$PREFIX/bin/$(basename $f)" - head -n 1 $f | grep awk && ( echo "$polyglot1" > $t && echo "$polyglot2" >> $t ) - cat $f >> $t -done - +cp $SRC_DIR/scripts/* $PREFIX/bin/ chmod +x $PREFIX/bin/* diff --git a/recipes/piawka/meta.yaml b/recipes/piawka/meta.yaml index 46510a8351bc5..99d8c11b2b997 100644 --- a/recipes/piawka/meta.yaml +++ b/recipes/piawka/meta.yaml @@ -1,46 +1,45 @@ -{% set name = "piawka" %} -{% set version = "0.7.10" %} - -package: - name: {{ name|lower }} - version: {{ version }} - -source: - url: https://github.com/novikovalab/{{ name }}/archive/refs/tags/{{ version }}.tar.gz - sha256: 511859b69525db7dc988ae55556e6fd31e2709f0e3a4de404f87abfadb97a273 - -build: - noarch: generic - number: 0 - run_exports: - - {{ pin_subpackage('piawka', max_pin="x.x") }} - -requirements: - run: - - mawk =1.3.4 - - parallel - - bash - - tabix - -test: - commands: - - piawka_par.sh -h - -about: - home: https://github.com/novikovalab/piawka - license: MIT - license_family: MIT - license_file: LICENSE - summary: 'The powerful AWK script to calculate population statistics in VCF files with support for varying ploidy and missing data' - description: | - The powerful awk script to calculate π, Dxy (or πxy, or Nei's D) - and some more simple stats (Fst, Tajima's D, Ronfort's rho) in VCF files in the command line. - Developed to analyze arbitrary-ploidy groups with substantial amounts of missing data. - Largely inspired by https://github.com/ksamuk/pixy - dev_url: https://github.com/novikovalab/piawka - doc_url: https://github.com/novikovalab/piawka/wiki - doc_source_url: https://github.com/novikovalab/piawka/blob/main/README.md - -extra: - recipe-maintainers: - - taprs +{% set name = "piawka" %} +{% set version = "0.8.4" %} + +package: + name: {{ name|lower }} + version: {{ version }} + +source: + url: https://github.com/novikovalab/{{ name }}/archive/refs/tags/{{ version }}.tar.gz + sha256: bc092fb544e714d833e9006f7096e3967e2d32fcc3092598e1a1a581a6ffdf3b + +build: + noarch: generic + number: 0 + run_exports: + - {{ pin_subpackage('piawka', max_pin="x.x") }} + +requirements: + run: + - conda-forge::gawk >=5.0.0 + - bash + - tabix + +test: + commands: + - piawka --help + +about: + home: https://github.com/novikovalab/piawka + license: MIT + license_family: MIT + license_file: LICENSE + summary: 'The powerful AWK script to calculate population statistics in VCF files with support for varying ploidy and missing data' + description: | + The powerful awk script to calculate π, Dxy (or πxy, or Nei's D) + and some more simple stats (Fst, Tajima's D, Ronfort's rho) in VCF files in the command line. + Developed to analyze arbitrary-ploidy groups with substantial amounts of missing data. + Largely inspired by https://github.com/ksamuk/pixy + dev_url: https://github.com/novikovalab/piawka + doc_url: https://github.com/novikovalab/piawka/wiki + doc_source_url: https://github.com/novikovalab/piawka/blob/main/README.md + +extra: + recipe-maintainers: + - taprs diff --git a/recipes/picard-slim/meta.yaml b/recipes/picard-slim/meta.yaml index f6d9dd73f43ce..ffbb5ed2e0375 100644 --- a/recipes/picard-slim/meta.yaml +++ b/recipes/picard-slim/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "3.2.0" %} -{% set sha256 = "e258fa2e3f5fa61cd6799ec8e073f49a95fbdceaf163d8a60971b2619b86fa41" %} +{% set version = "3.3.0" %} +{% set sha256 = "58819a7660646b74b34e282f5d4d21c8dbaea22ddeff96e3258755dafa0f86dc" %} package: name: picard-slim diff --git a/recipes/picard/meta.yaml b/recipes/picard/meta.yaml index 5a31883ca1d0b..f641f50970528 100644 --- a/recipes/picard/meta.yaml +++ b/recipes/picard/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "3.2.0" %} -{% set sha256 = "e258fa2e3f5fa61cd6799ec8e073f49a95fbdceaf163d8a60971b2619b86fa41" %} +{% set version = "3.3.0" %} +{% set sha256 = "58819a7660646b74b34e282f5d4d21c8dbaea22ddeff96e3258755dafa0f86dc" %} package: name: picard diff --git a/recipes/piper/meta.yaml b/recipes/piper/meta.yaml index cf3d8030e4a85..ba86bbdf68bdf 100644 --- a/recipes/piper/meta.yaml +++ b/recipes/piper/meta.yaml @@ -1,5 +1,5 @@ {% set name = "piper" %} -{% set version = "0.14.2" %} +{% set version = "0.14.3" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: "fff74a6e7cbf188a3ce023913a9ce63098e7c3acfa73833fd9e4c4096a578035" + sha256: "fec31dd795de95ee88e6019e0c8402aa3a37f8e03213f01f348c8ee50ce8570e" build: number: 0 diff --git a/recipes/planemo/meta.yaml b/recipes/planemo/meta.yaml index 49795bf1c67d6..ea46961af1b4f 100644 --- a/recipes/planemo/meta.yaml +++ b/recipes/planemo/meta.yaml @@ -1,6 +1,6 @@ {% set name = "planemo" %} -{% set version = "0.75.25" %} -{% set sha256 = "31c2dda28677094f2d4ced21fa590d80070c71c16c97c561cdd1ffbff139997e" %} +{% set version = "0.75.26" %} +{% set sha256 = "3f71b17ef9590de1c82db7ff4e8e2e05ca63fd1f5bfea0b7ee077b378bed7037" %} package: name: {{ name|lower }} diff --git a/recipes/ppanggolin/meta.yaml b/recipes/ppanggolin/meta.yaml index 9c0229f00f267..0f5d28be758ff 100644 --- a/recipes/ppanggolin/meta.yaml +++ b/recipes/ppanggolin/meta.yaml @@ -9,8 +9,7 @@ source: sha256: ecb5cc4bc4db3a1e842a4085d6aec3a25a12513215523797723e325f96d1158d build: - number: 0 - skip: True # [py<37] + number: 1 run_exports: - {{ pin_subpackage("ppanggolin", max_pin="x") }} @@ -55,6 +54,8 @@ about: summary: "PPanGGOLiN: Depicting microbial species diversity via a Partitioned PanGenome Graph" extra: + additional-platforms: + - linux-aarch64 recipe-maintainers: - axbazin - jpjarnoux diff --git a/recipes/protgraph/meta.yaml b/recipes/protgraph/meta.yaml index 49cc0bb70b774..7827facd90682 100644 --- a/recipes/protgraph/meta.yaml +++ b/recipes/protgraph/meta.yaml @@ -1,5 +1,5 @@ {% set name = "protgraph" %} -{% set version = "0.3.10" %} +{% set version = "0.3.11" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: 52d0449eea53c8f113d1287fd5f40e837bf3bd6ed13193974fbd0c3bd358f800 + sha256: 83154a2d60b53bfd6f850780a17b8f8b1cf00a911d77d76fa60c2d5ba5fff177 build: number: 0 diff --git a/recipes/prymer/meta.yaml b/recipes/prymer/meta.yaml index 9c240473f7dd5..5302549095ed6 100644 --- a/recipes/prymer/meta.yaml +++ b/recipes/prymer/meta.yaml @@ -1,5 +1,5 @@ {% set name = "prymer" %} -{% set version = "2.0.0" %} +{% set version = "2.2.0" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://github.com/fulcrumgenomics/{{ name }}/archive/refs/tags/{{ version }}.tar.gz - sha256: c491a9a6af77784f911c16e692210b2d1795605b3628c42e80dffca82859d176 + sha256: e11a09a58e9310b2ff1b89b9e36913f47c08e0b22e1d3d9ce9321e4013fb3c2e build: noarch: python @@ -22,6 +22,7 @@ requirements: - python >=3.11 - poetry run: + - bwa-aln-interactive >=0.7.18 - python >=3.11 - pysam >=0.22.0 - primer3 >=2.6.1 diff --git a/recipes/psm-utils/meta.yaml b/recipes/psm-utils/meta.yaml index 4028389aac18a..02b60ab80be76 100644 --- a/recipes/psm-utils/meta.yaml +++ b/recipes/psm-utils/meta.yaml @@ -1,6 +1,6 @@ {% set name = "psm-utils" %} -{% set version = "1.1.0" %} -{% set sha256 = "b950ef8b4415b76c8d9b41023a93d65a3c66826524459e34c4faef1092a3f87f" %} +{% set version = "1.1.1" %} +{% set sha256 = "8926d8f5e2e05ac38d54d6ae5c89461568085b60d23414a907c820bc674a4a2b" %} package: name: {{ name|lower }} diff --git a/recipes/pyabpoa/meta.yaml b/recipes/pyabpoa/meta.yaml index a70e32f310f07..78b8f0a130346 100644 --- a/recipes/pyabpoa/meta.yaml +++ b/recipes/pyabpoa/meta.yaml @@ -1,5 +1,5 @@ {% set name = "pyabpoa" %} -{% set version = "1.5.2" %} +{% set version = "1.5.3" %} package: name: {{ name|lower }} @@ -7,10 +7,10 @@ package: source: url: https://github.com/yangao07/abPOA/releases/download/v{{ version }}/abPOA-v{{ version }}.tar.gz - sha256: 706f0ca0110f4974ae7b93157db560bb9beda4273d8c883fa6a03ccb19958149 + sha256: bb97de2dbdec014f2fb24beb0c85fa0b2073f717f3b68639e1edd89239729e6c build: - number: 1 + number: 0 script: {{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir --use-pep517 -vvv run_exports: - {{ pin_subpackage(name, max_pin="x") }} diff --git a/recipes/pybiolib/meta.yaml b/recipes/pybiolib/meta.yaml index d5a6e2a771bfe..beafd6b9e4426 100644 --- a/recipes/pybiolib/meta.yaml +++ b/recipes/pybiolib/meta.yaml @@ -1,5 +1,5 @@ {% set name = "pybiolib" %} -{% set version = "1.2.174" %} +{% set version = "1.2.188" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/pybiolib-{{ version }}.tar.gz - sha256: 59627ee0138e9969197e919a28f5bff63708aa465be2fee10f1b1f7bcc7a76fc + sha256: 7c0ecd9edbbd94b5aaddf7d412d42d5e24de9d705bbf70422175e9bae6a35bae build: number: 0 @@ -20,12 +20,12 @@ build: requirements: host: - - python >=3.6,<4.0 + - python >=3.6,<3.13 - poetry >=1.8.0 - poetry-core - pip run: - - python >=3.6,<4.0 + - python >=3.6,<3.13 - appdirs >=1.4.3 - click >=8.0.0 - docker-py >=5.0.3 diff --git a/recipes/pydamage/meta.yaml b/recipes/pydamage/meta.yaml index 10d38b9c95b16..f192b2ad8e663 100644 --- a/recipes/pydamage/meta.yaml +++ b/recipes/pydamage/meta.yaml @@ -1,5 +1,5 @@ {% set name = "pydamage" %} -{% set version = "0.72" %} +{% set version = "0.80" %} package: @@ -8,7 +8,7 @@ package: source: url: https://github.com/maxibor/{{ name }}/archive/refs/tags/{{ version }}.tar.gz - sha256: a386cf89df86ea811660d93936d8153dad05ec79b1d2984dc86b14420e5ae139 + sha256: b51682e513aa3a22fcac46e22fd404a1c8b3484c2e9e0b8aeedcabaf1fddd720 build: number: 0 @@ -22,7 +22,7 @@ build: requirements: host: - pip - - python >=3.6 + - python >=3.10 run: - biopython - click @@ -31,10 +31,11 @@ requirements: - numpy - pandas - pysam >=0.13.0 - - python >=3.6 + - python >=3.10 - scipy - statsmodels - tqdm + - numba test: imports: diff --git a/recipes/pydustmasker/build.sh b/recipes/pydustmasker/build.sh new file mode 100644 index 0000000000000..6a81c03470ead --- /dev/null +++ b/recipes/pydustmasker/build.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +set -ex + +if [ `uname` == Darwin ]; then + export HOME=`mktemp -d` +fi + +curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain nightly --profile=minimal -y + +export PATH="$HOME/.cargo/bin:$PATH" + +export CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER="$CC" +export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER="$CC" + +maturin build --interpreter python --release + +$PYTHON -m pip install target/wheels/*.whl --no-deps --ignore-installed -vv diff --git a/recipes/pydustmasker/meta.yaml b/recipes/pydustmasker/meta.yaml new file mode 100644 index 0000000000000..9ba1605e6cfb3 --- /dev/null +++ b/recipes/pydustmasker/meta.yaml @@ -0,0 +1,40 @@ +{% set name = "pydustmasker" %} +{% set version = "1.0.0" %} + +package: + name: "{{ name|lower }}" + version: "{{ version }}" + +source: + url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz + sha256: 03f875b3cdb595394eabed823d80d4da50d687f3ade4a017ff0159ce277ae331 + +build: + number: 1 + run_exports: + - {{ pin_subpackage(name, max_pin="x.x") }} + +requirements: + build: + - {{ compiler('c') }} + host: + - pip + - maturin + - python + run: + - python + +test: + imports: + - pydustmasker + +about: + home: https://github.com/apcamargo/pydustmasker + license: MIT + license_family: MIT + license_file: LICENSE + summary: "Python library for identification and masking of low-complexity regions in nucleotide sequences." + +extra: + additional-platforms: + - linux-aarch64 diff --git a/recipes/pyfaidx/meta.yaml b/recipes/pyfaidx/meta.yaml index f4b6ae4cbf1ca..c651e2a86f1c6 100644 --- a/recipes/pyfaidx/meta.yaml +++ b/recipes/pyfaidx/meta.yaml @@ -1,12 +1,12 @@ -{% set version = "0.8.1.2" %} +{% set version = "0.8.1.3" %} package: name: pyfaidx version: {{ version }} source: - url: https://files.pythonhosted.org/packages/e0/36/68bfd77bcf675ccdc97d10e69ab2b52d43642301360fa8a55707916f1528/pyfaidx-0.8.1.2.tar.gz - sha256: d8452470455b1e778f93969447db8ea24deb4624c7c40769516459cb6f87bc33 + url: https://files.pythonhosted.org/packages/d5/38/c674c28f3bf862d26d8e6a48f5b4102652dbdc2bce308e240aa18e9259d8/pyfaidx-0.8.1.3.tar.gz + sha256: feb599f8dfd192cf68bdb24969a5fd8f46772a7bd75d059e764bfd86b888e9b2 build: number: 0 diff --git a/recipes/pyfamsa/meta.yaml b/recipes/pyfamsa/meta.yaml index 0a2f46b91ccae..5cb5faa479d92 100644 --- a/recipes/pyfamsa/meta.yaml +++ b/recipes/pyfamsa/meta.yaml @@ -1,5 +1,5 @@ {% set name = "pyfamsa" %} -{% set version = "0.5.1" %} +{% set version = "0.5.2" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz - sha256: 1edcb001bd56654fb05c7f73d3b83f494ea94b1cf7e94a74b5ae184abba7e5ef + sha256: 5715eccfaf0ac38f9eba951285de900086e10007b0e2508e3735879d7e4e5fce build: number: 0 diff --git a/recipes/pyhmmer/meta.yaml b/recipes/pyhmmer/meta.yaml index 3966832072c6c..16152427e6b13 100644 --- a/recipes/pyhmmer/meta.yaml +++ b/recipes/pyhmmer/meta.yaml @@ -1,5 +1,5 @@ {% set name = "pyhmmer" %} -{% set version = "0.10.14" %} +{% set version = "0.10.15" %} package: name: "{{ name|lower }}" @@ -7,10 +7,10 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: eb50bdfdf67a3b1fecfe877d7ca6d9bade9a9f3dea3ad60c959453bbb235573d + sha256: bf8e97ce8da6fb5850298f3074640f3e998d5a655877f865c1592eb057dc7921 build: - number: 1 + number: 0 skip: True # [py2k or win] script: "{{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir --use-pep517 -vvv" run_exports: diff --git a/recipes/pyliftover/meta.yaml b/recipes/pyliftover/meta.yaml index d1c27463e1dff..27a2c19b10230 100644 --- a/recipes/pyliftover/meta.yaml +++ b/recipes/pyliftover/meta.yaml @@ -1,23 +1,25 @@ {% set name = "PyLiftover" %} -{% set version = "0.4" %} -{% set sha256 = "72bcfb7de907569b0eb75e86c817840365297d63ba43a961da394187e399da41" %} +{% set version = "0.4.1" %} package: name: {{ name|lower }} version: {{ version }} source: - url: https://files.pythonhosted.org/packages/c0/20/4386926f08410d472ed81c1f14f25069dac3d62d21e2c1c366eff7b8a035/{{ name|lower }}-{{ version }}.tar.gz - sha256: {{ sha256 }} + url: https://pypi.org/packages/source/{{ name[0] }}/{{ name }}/pyliftover-{{ version }}.tar.gz + sha256: 33ad187e35d1b6662ba446432f4dd1a808ac2914ce1645eef37598fa5a3860cd build: - number: 0 noarch: python - script: "{{ PYTHON }} -m pip install . --no-deps --ignore-installed --no-cache-dir -vvv" + script: {{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + number: 0 + run_exports: + - {{ pin_subpackage('pyliftover', max_pin="x.x") }} requirements: host: - python + - pytest - pip run: - python @@ -25,10 +27,17 @@ requirements: test: imports: - pyliftover + commands: + - pip check + requires: + - pip about: home: https://github.com/konstantint/pyliftover + summary: Pure-python implementation of UCSC ``liftOver`` genome coordinate conversion. license: MIT - license_family: MIT - license_file: '{{ environ["RECIPE_DIR"] }}/LICENSE' - summary: "Pure-python implementation of UCSC ``liftOver`` genome coordinate conversion." + license_file: LICENSE + +extra: + recipe-maintainers: + - nebfield diff --git a/recipes/pypints/meta.yaml b/recipes/pypints/meta.yaml index b32637aeeaf6e..165eca55c2c5b 100644 --- a/recipes/pypints/meta.yaml +++ b/recipes/pypints/meta.yaml @@ -1,13 +1,13 @@ {% set name = "pyPINTS" %} -{% set version = "1.1.10" %} +{% set version = "1.1.13" %} package: name: "{{ name|lower }}" version: "{{ version }}" source: - url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: 91e4e6e8a308ad4e4e829068b96282385a0285512a2351cedd9793c50e8a7f63 + url: "https://files.pythonhosted.org/packages/df/b4/0b6ded0841b01d72c2beb676b71ea94800896ec69c937f09acee24964597/pypints-1.1.13.tar.gz" + sha256: 808fca4e7fa6ff06dffebc49c36680c872044b4babdd9e42f012fa2ff140aa3e build: number: 0 diff --git a/recipes/pyslow5/meta.yaml b/recipes/pyslow5/meta.yaml index 4d72ebb39ee3e..087931ecc29c0 100644 --- a/recipes/pyslow5/meta.yaml +++ b/recipes/pyslow5/meta.yaml @@ -1,6 +1,6 @@ {% set name = "pyslow5" %} -{% set sha256 = "e756a33e2bca373dea5367af7da8db02d77d80985685566cce05cc6a711c8487" %} -{% set version = "1.2.0" %} +{% set sha256 = "2fdf091beb7e1f685d9fca70b69e406bb359d801e032d8567daf39a8833abd5a" %} +{% set version = "1.3.0" %} package: name: {{ name }} @@ -11,7 +11,7 @@ source: sha256: {{ sha256 }} build: - number: 0 + number: 1 run_exports: - {{ pin_subpackage('pyslow5', max_pin="x") }} @@ -22,6 +22,7 @@ requirements: - python - pip - cython + - setuptools - zlib - numpy run: @@ -39,3 +40,8 @@ about: license_file: thirdparty/streamvbyte/LICENSE summary: 'slow5lib Python binding' dev_url: https://github.com/hasindu2008/slow5lib + +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 diff --git a/recipes/pysradb/meta.yaml b/recipes/pysradb/meta.yaml index 243922798a2e8..d88fc69d038de 100644 --- a/recipes/pysradb/meta.yaml +++ b/recipes/pysradb/meta.yaml @@ -1,5 +1,5 @@ {% set name = "pysradb" %} -{% set version = "2.2.1" %} +{% set version = "2.2.2" %} package: name: '{{ name|lower }}' @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz - sha256: 038318b70bdf6b9ff0e1c5b67a38c5832d37ed142bbeeb3c5b55eec2d51371f4 + sha256: 0ae451361dfcc6c19c240285942aa761f6f89de9a6022215040329c021638f70 build: number: 0 diff --git a/recipes/pyteomics/meta.yaml b/recipes/pyteomics/meta.yaml index 2127906fd62dd..8a197411ebe35 100644 --- a/recipes/pyteomics/meta.yaml +++ b/recipes/pyteomics/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "4.7.3" %} +{% set version = "4.7.4" %} package: name: pyteomics @@ -6,7 +6,7 @@ package: source: url: https://pypi.io/packages/source/p/pyteomics/pyteomics-{{ version }}.tar.gz - sha256: ae87f6ba02ee735b06ae56e1ac85a37051aa503e0c9dbfee650c8a7107d08f57 + sha256: cd8a9b48ea3a3075bbbc3085880b5a4f76eb7359e3c71ee3948d9bb2aa48883b build: noarch: python diff --git a/recipes/python-hivclustering/meta.yaml b/recipes/python-hivclustering/meta.yaml index e6836779451a5..978c7db69b88c 100644 --- a/recipes/python-hivclustering/meta.yaml +++ b/recipes/python-hivclustering/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "1.6.8" %} +{% set version = "1.8.0" %} {% set name = "hivclustering" %} package: @@ -7,7 +7,7 @@ package: source: url: https://github.com/veg/{{ name }}/archive/{{ version }}.tar.gz - sha256: 63ff148ee265a273156c51b4727f5f00a07f9c3306d17f122c4c6c6ab9d41ecb + sha256: f331d44e4998149de1aa612539b15dd20c1318b411fa0a3581406a59a211adba build: noarch: python diff --git a/recipes/pytximport/meta.yaml b/recipes/pytximport/meta.yaml index d7245d020c367..a0bc051dd2be7 100644 --- a/recipes/pytximport/meta.yaml +++ b/recipes/pytximport/meta.yaml @@ -1,5 +1,5 @@ {% set name = "pytximport" %} -{% set version = "0.8.0" %} +{% set version = "0.10.0" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/pytximport-{{ version }}.tar.gz - sha256: 18bdf4fbcd78092bba18f6941f5640a937b4f0230c30c2e8fca38ce207b3840b + sha256: b882a8c86c0b80250908244e7ea2e4d84af9744a90b1143414ab4e40a43b9156 build: noarch: python diff --git a/recipes/qtlseq/meta.yaml b/recipes/qtlseq/meta.yaml index 9e3efa1cb9d99..c652240449426 100644 --- a/recipes/qtlseq/meta.yaml +++ b/recipes/qtlseq/meta.yaml @@ -1,6 +1,6 @@ {% set name = "qtlseq" %} -{% set version = "2.2.4" %} -{% set sha256 = "af19375c3d5685f24412e6dfad513d8abea5998d938b9675b1091424f243fdb6" %} +{% set version = "2.2.6" %} +{% set sha256 = "dd21dc8a7c75e330d3333356a113373e342e298882511e15f7da801035957e4f" %} package: name: {{ name|lower }} diff --git a/recipes/quatradis/meta.yaml b/recipes/quatradis/meta.yaml index a91fb4a8cd361..d06896d5b8edc 100644 --- a/recipes/quatradis/meta.yaml +++ b/recipes/quatradis/meta.yaml @@ -1,4 +1,4 @@ -{% set version="1.3.0" %} +{% set version = "1.3.1" %} package: name: quatradis @@ -6,33 +6,32 @@ package: source: url: https://github.com/quadram-institute-bioscience/QuaTradis/archive/refs/tags/{{ version }}.tar.gz - sha256: 8634c61c93073028fc35df46b3d1337e7716924051c336a12172c65e1adb2e74 + sha256: 0c05f40e14391b5044aa014cce345e43238ff01d06edfc72258f8608d3796590 build: number: 0 - script: python -m pip install -v --no-deps --ignore-installed . + script: {{ PYTHON }} -m pip install -vvv --no-deps --no-build-isolation --no-cache-dir . run_exports: - - {{ pin_subpackage('quatradis', max_pin="x.x") }} + - {{ pin_subpackage('quatradis', max_pin="x") }} requirements: build: - {{ compiler('c') }} host: - - python =3.10 - - cython >=0.20.1 + - python + - cython - pip run: - - python =3.10 - - cython + - python - setuptools # for pkg_resources + - cython - biopython - pysam >=0.18.0 - matplotlib-base - numpy - scipy - - dendropy - - seaborn - - graphviz + - dendropy ==4.6 + - seaborn-base - python-graphviz - pandas - htslib @@ -43,7 +42,7 @@ requirements: - bwa - samtools - minimap2 - - snakemake + - snakemake-minimal - snakeviz test: @@ -56,6 +55,7 @@ about: license_family: GPL3 license_file: LICENSE summary: 'A set of tools to analyse the output from TraDIS analyses' + dev_url: https://github.com/quadram-institute-bioscience/QuaTradis extra: skip-lints: @@ -66,5 +66,5 @@ extra: - sbastkowski - maplesond - thanhleviet - doi: - - 10.1093/bioinformatics/btw022 + identifiers: + - doi:10.1093/bioinformatics/btw022 diff --git a/recipes/querynator/meta.yaml b/recipes/querynator/meta.yaml index c8abd1a63d7bb..d97969cfcbbeb 100644 --- a/recipes/querynator/meta.yaml +++ b/recipes/querynator/meta.yaml @@ -1,5 +1,5 @@ {% set name = "querynator" %} -{% set version = "0.5.5" %} +{% set version = "0.6.0" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: 32536a2b03b8e7590f01dc7edea5af486a0ffc04126a7370dd1e10e2045357b1 + sha256: 24f86d53028420e6e621aa36bd7396bde52aebb272ea6217e052a852b7233ed7 build: number: 0 diff --git a/recipes/r-cobrar/meta.yaml b/recipes/r-cobrar/meta.yaml index 1b8dd50554991..78121f95e2bfa 100644 --- a/recipes/r-cobrar/meta.yaml +++ b/recipes/r-cobrar/meta.yaml @@ -1,7 +1,7 @@ {% set name = "cobrar" %} -{% set version = '0.1.0' %} +{% set version = '0.1.1' %} {% set github = "https://github.com/Waschina/cobrar" %} -{% set sha256 = '8b8d7f7604fd93130f999a41ee30ce94c16f998520dfd73d6842d34ff96270a6' %} +{% set sha256 = '0b22d09dde91ee01f735074a8bfb3a7129a799fabf3aa21dcb77d5842f119be4' %} package: name: r-{{ name }} @@ -13,7 +13,7 @@ source: sha256: {{ sha256 }} build: - number: 0 + number: 1 script: R CMD INSTALL --build . rpaths: - lib/R/lib/ @@ -55,6 +55,9 @@ about: dev_url: https://github.com/Waschina/cobrar extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 recipe-maintainers: - Waschina diff --git a/recipes/r-diffcorr/meta.yaml b/recipes/r-diffcorr/meta.yaml index 75a7764de28b5..71a4ef28bc8e3 100644 --- a/recipes/r-diffcorr/meta.yaml +++ b/recipes/r-diffcorr/meta.yaml @@ -1,4 +1,4 @@ -{% set version = '0.4.3' %} +{% set version = '0.4.4' %} package: name: r-diffcorr @@ -8,7 +8,7 @@ source: url: - {{ cran_mirror }}/src/contrib/DiffCorr_{{ version }}.tar.gz - {{ cran_mirror }}/src/contrib/Archive/DiffCorr/DiffCorr_{{ version }}.tar.gz - sha256: b0d811cbd78eb69484fb184522cc358d9ad56235b85ee56bef22fc3c1d2df3f3 + sha256: c729fe399aceaf3afb975777ff3483e5d557d9b55b33fe5803bdb8949ff33b17 build: number: 0 diff --git a/recipes/r-grain/meta.yaml b/recipes/r-grain/meta.yaml index 18c6cd5efde07..0ddbe0cd41069 100644 --- a/recipes/r-grain/meta.yaml +++ b/recipes/r-grain/meta.yaml @@ -1,4 +1,4 @@ -{% set version = '1.4.1' %} +{% set version = '1.4.3' %} package: name: r-grain @@ -8,7 +8,7 @@ source: url: - {{ cran_mirror }}/src/contrib/gRain_{{ version }}.tar.gz - {{ cran_mirror }}/src/contrib/Archive/gRain/gRain_{{ version }}.tar.gz - sha256: d9f926aa876270ab4ae156a70703ec8ccd384cc6a7bfe5de4d1de3ef9e056485 + sha256: fb65cc5b2b057457684de24ad50c1ef6d9d65e0abd9c630ec71dd18594839d0a build: number: 0 @@ -57,3 +57,7 @@ about: license_family: GPL3 license_file: - {{ environ["PREFIX"] }}/lib/R/share/licenses/GPL-2 + +extra: + additional-platforms: + - linux-aarch64 diff --git a/recipes/r-wgcna/meta.yaml b/recipes/r-wgcna/meta.yaml index 04f5371fe99aa..36f76edf48f76 100644 --- a/recipes/r-wgcna/meta.yaml +++ b/recipes/r-wgcna/meta.yaml @@ -1,4 +1,4 @@ -{% set version = '1.71' %} +{% set version = '1.73' %} package: name: r-wgcna @@ -8,10 +8,10 @@ source: url: - {{ cran_mirror }}/src/contrib/WGCNA_{{ version }}.tar.gz - {{ cran_mirror }}/src/contrib/Archive/WGCNA/WGCNA_{{ version }}.tar.gz - sha256: 21f5349e888ea76241912600ee5c35a0d2fd50180568b9b08b2b597f099bf708 + sha256: e8a0a367a93190dd9f738578a82d31856e004b9de46d2775e4ed0f44a95063ce build: - number: 5 + number: 0 run_exports: - {{ pin_subpackage("r-wgcna", max_pin="x") }} rpaths: diff --git a/recipes/recentrifuge/meta.yaml b/recipes/recentrifuge/meta.yaml index 2efe7685617b8..fd82baed37726 100644 --- a/recipes/recentrifuge/meta.yaml +++ b/recipes/recentrifuge/meta.yaml @@ -1,5 +1,5 @@ {% set name = "recentrifuge" %} -{% set version = "1.14.1" %} +{% set version = "1.15.0" %} package: name: {{ name }} @@ -14,7 +14,7 @@ build: source: url: https://github.com/khyox/{{ name }}/archive/v{{ version }}.tar.gz - sha256: b9ec5f04b256d24fc768818069838b44d576715b8093f2566fe70b129e659401 + sha256: adacf412188433f4bf54477872218d27340475eb4876af710f2d9b7294d05496 requirements: host: diff --git a/recipes/recognizer/meta.yaml b/recipes/recognizer/meta.yaml index 50ced48b7b6eb..8d3f66805adc2 100644 --- a/recipes/recognizer/meta.yaml +++ b/recipes/recognizer/meta.yaml @@ -1,6 +1,6 @@ {% set name = "recognizer" %} -{% set version = "1.11.0" %} -{% set sha256 = "e34ef29584f6e49ea118d6e555aaa23872bb813170a96b84c5be54cffe76c45b" %} +{% set version = "1.11.1" %} +{% set sha256 = "e385fb307fd64892629bcdad35d43d29ab0ea3703d20b0090e78b5cdaa83ea98" %} package: name: {{ name|lower }} diff --git a/recipes/reneo/meta.yaml b/recipes/reneo/meta.yaml index 1e51b31b26f33..1a5aa03f47493 100644 --- a/recipes/reneo/meta.yaml +++ b/recipes/reneo/meta.yaml @@ -1,5 +1,5 @@ {% set name = "reneo" %} -{% set version = "0.4.0" %} +{% set version = "0.5.0" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://github.com/Vini2/{{ name }}/archive/refs/tags/v{{ version }}.tar.gz" - sha256: b74cdf3fca658b00c15db2e52e24877aa58fa43ba242323cc4d8f8fb292fbab7 + sha256: dff9242ae7f70050b2d0a52dc48f6a1252ed0346bef2488e79a9fc4954c25804 build: number: 0 diff --git a/recipes/repic/meta.yaml b/recipes/repic/meta.yaml index 9e6b03404fbc2..364d4afc0ca19 100644 --- a/recipes/repic/meta.yaml +++ b/recipes/repic/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "0.2.1" %} +{% set version = "1.0.0" %} package: name: repic @@ -6,7 +6,7 @@ package: source: url: https://github.com/ccameron/REPIC/archive/v{{ version }}.zip - sha256: fd77f660bf6e1fe10138c145d2aa67b69fd4ff30f249047ee49460a185407633 + sha256: 27bc27cea61e012742dba0f7c7a3451f0d29633b5eef3d59b194cfae55194ee0 requirements: host: diff --git a/recipes/rukki/build.sh b/recipes/rukki/build.sh new file mode 100644 index 0000000000000..b231ffe52e75f --- /dev/null +++ b/recipes/rukki/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash -euo + +# build statically linked binary with Rust +RUST_BACKTRACE=1 +cargo install --verbose --path . --root "${PREFIX}" diff --git a/recipes/rukki/meta.yaml b/recipes/rukki/meta.yaml new file mode 100644 index 0000000000000..e4784932e3704 --- /dev/null +++ b/recipes/rukki/meta.yaml @@ -0,0 +1,38 @@ +{% set name = "rukki" %} +{% set version = "0.3.0" %} + +package: + name: {{ name }} + version: {{ version }} + +source: + url: https://github.com/marbl/rukki/archive/refs/tags/v{{ version }}.tar.gz + sha256: 036360e6287dc2b7e28bfc7b49db4ca79e792417e75f4bcc926c02d4161625b6 + +build: + number: 0 + run_exports: + - {{ pin_subpackage('rukki', max_pin="x.x") }} + +requirements: + build: + - {{ compiler('cxx') }} + - {{ compiler('rust') }} + - make + +test: + commands: + - rukki --help + +about: + home: "https://github.com/marbl/rukki" + license: "Public Domain" + license_file: "README.licenses" + summary: "Extracting paths from assembly graphs." + doc_url: "https://github.com/marbl/rukki/blob/v{{ version }}/README.md" + dev_url: "https://github.com/marbl/rukki" + +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 diff --git a/recipes/saccharis/meta.yaml b/recipes/saccharis/meta.yaml index 804d68b3d706c..121b3943b32cb 100644 --- a/recipes/saccharis/meta.yaml +++ b/recipes/saccharis/meta.yaml @@ -10,11 +10,12 @@ package: source: # url: https://github.com/saccharis/SACCHARIS_2/releases/download/v{{ version }}/saccharis-{{ version }}.tar.gz url: https://github.com/saccharis/SACCHARIS_2/releases/download/v2.0.1.dev21/saccharis-2.0.1.dev21_1.tar.gz + sha256: {{ hash|lower }} build: noarch: python - number: 1 + number: 0 script: {{ PYTHON }} setup.py install --single-version-externally-managed --record=record.txt preserve_egg_dir: True # added because the entry points below seem to be causing a build error entry_points: diff --git a/recipes/sansa/build.sh b/recipes/sansa/build.sh index dc2400afabae2..89d206cac27f5 100644 --- a/recipes/sansa/build.sh +++ b/recipes/sansa/build.sh @@ -1,3 +1,3 @@ #!/bin/sh -CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS" make CXX="${CXX}" prefix="${PREFIX}" install +CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS" make -j${CPU_COUNT} CXX="${CXX}" prefix="${PREFIX}" install diff --git a/recipes/sansa/build_failure.osx-64.yaml b/recipes/sansa/build_failure.osx-64.yaml deleted file mode 100644 index f0223f40aa68a..0000000000000 --- a/recipes/sansa/build_failure.osx-64.yaml +++ /dev/null @@ -1,104 +0,0 @@ -recipe_sha: 788a4a03f018442ca4759c62d776a93efa240672f1e911501e0ec7b926e3f3b7 # The hash of the recipe's meta.yaml at which this recipe failed to build. -skiplist: true # Set to true to skiplist this recipe so that it will be ignored as long as its latest commit is the one given above. -log: |2- - ^ - src/markdup.h:432:38: note: in instantiation of template class 'sansa::SortSVEvents' requested here - sort(allsv.begin(), allsv.end(), SortSVEvents()); - ^ - /opt/mambaforge/envs/bioconda/conda-bld/sansa_1717639548819/_build_env/bin/../include/c/v1/__functional/binary_function.h:24:29: note: 'binary_function' has been explicitly marked deprecated here - struct _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX11 binary_function - ^ - /opt/mambaforge/envs/bioconda/conda-bld/sansa_1717639548819/_build_env/bin/../include/c/v1/__config:1037:41: note: expanded from macro '_LIBCPP_DEPRECATED_IN_CXX11' - # define _LIBCPP_DEPRECATED_IN_CXX11 _LIBCPP_DEPRECATED - ^ - /opt/mambaforge/envs/bioconda/conda-bld/sansa_1717639548819/_build_env/bin/../include/c/v1/__config:1022:49: note: expanded from macro '_LIBCPP_DEPRECATED' - # define _LIBCPP_DEPRECATED __attribute__((__deprecated__)) - ^ - In file included from src/sansa.cpp:14: - In file included from src/annotate.h:22: - src/parsedb.h:107:2: warning: ignoring return value of function declared with 'warn_unused_result' attribute [-Wunused-result] - bcf_write1(ofile, hdr_out, rec); - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - /opt/mambaforge/envs/bioconda/conda-bld/sansa_1717639548819/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehol/include/htslib/vcf.h:270:33: note: expanded from macro 'bcf_write1' - #define bcf_write1(fp,h,v) bcf_write((fp),(h),(v)) - ^~~~~~~~~ ~~~~~~~~~~~~ - src/annotate.h:92:10: note: in instantiation of function template specialization 'sansa::parseDB>' requested here - if (!parseDB(c, svs)) { - ^ - src/annotate.h:231:12: note: in instantiation of function template specialization 'sansa::runAnnotate' requested here - return runAnnotate(c); - ^ - 11 warnings and 1 error generated. - make: *** [Makefile:53: src/sansa] Error 1 - Extracting download - source tree in: /opt/mambaforge/envs/bioconda/conda-bld/sansa_1717639548819/work - Traceback (most recent call last): - File "/opt/mambaforge/envs/bioconda/bin/conda-build", line 11, in - sys.exit(execute()) - export PREFIX=/opt/mambaforge/envs/bioconda/conda-bld/sansa_1717639548819/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehol - File "/opt/mambaforge/envs/bioconda/lib/python3.10/site-packages/conda_build/cli/main_build.py", line 590, in execute - api.build( - File "/opt/mambaforge/envs/bioconda/lib/python3.10/site-packages/conda_build/api.py", line 250, in build - return build_tree( - File "/opt/mambaforge/envs/bioconda/lib/python3.10/site-packages/conda_build/build.py", line 3638, in build_tree - packages_from_this = build( - File "/opt/mambaforge/envs/bioconda/lib/python3.10/site-packages/conda_build/build.py", line 2506, in build - utils.check_call_env( - export BUILD_PREFIX=/opt/mambaforge/envs/bioconda/conda-bld/sansa_1717639548819/_build_env - export SRC_DIR=/opt/mambaforge/envs/bioconda/conda-bld/sansa_1717639548819/work - INFO: activate_clang_osx-64.sh made the following environmental changes: - AR=x86_64-apple-darwin13.4.0-ar - AS=x86_64-apple-darwin13.4.0-as - CC=x86_64-apple-darwin13.4.0-clang - CC_FOR_BUILD=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-clang - CFLAGS=-march=core2 -mtune=haswell -mssse3 -ftree-vectorize -fPIC -fstack-protector-strong -O2 -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/sansa-0.2.1 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix - CHECKSYMS=x86_64-apple-darwin13.4.0-checksyms - CLANG=x86_64-apple-darwin13.4.0-clang - File "/opt/mambaforge/envs/bioconda/lib/python3.10/site-packages/conda_build/utils.py", line 405, in check_call_env - return _func_defaulting_env_to_os_environ("call", *popenargs, **kwargs) - File "/opt/mambaforge/envs/bioconda/lib/python3.10/site-packages/conda_build/utils.py", line 381, in _func_defaulting_env_to_os_environ - raise subprocess.CalledProcessError(proc.returncode, _args) - subprocess.CalledProcessError: Command '['/bin/bash', '-o', 'errexit', '/opt/mambaforge/envs/bioconda/conda-bld/sansa_1717639548819/work/conda_build.sh']' returned non-zero exit status 2. - CMAKE_ARGS=-DCMAKE_AR=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-ar -DCMAKE_CXX_COMPILER_AR=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-ar -DCMAKE_C_COMPILER_AR=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-ar -DCMAKE_RANLIB=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-ranlib -DCMAKE_CXX_COMPILER_RANLIB=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-ranlib -DCMAKE_C_COMPILER_RANLIB=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-ranlib -DCMAKE_LINKER=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-ld -DCMAKE_STRIP=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-strip -DCMAKE_INSTALL_NAME_TOOL=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-install_name_tool -DCMAKE_LIBTOOL=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-libtool -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_SYSROOT=/Applications/Xcode_15.0.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -DCMAKE_FIND_FRAMEWORK=LAST -DCMAKE_FIND_APPBUNDLE=LAST -DCMAKE_INSTALL_PREFIX=$PREFIX -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_PROGRAM_PATH=$BUILD_PREFIX/bin;$PREFIX/bin - CMAKE_PREFIX_PATH=:$PREFIX - CONDA_TOOLCHAIN_BUILD=x86_64-apple-darwin13.4.0 - CONDA_TOOLCHAIN_HOST=x86_64-apple-darwin13.4.0 - CPPFLAGS=-D_FORTIFY_SOURCE=2 -isystem $PREFIX/include -mmacosx-version-min=10.9 - DEBUG_CFLAGS=-march=core2 -mtune=haswell -mssse3 -ftree-vectorize -fPIC -fstack-protector-strong -O2 -pipe -Og -g -Wall -Wextra -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/sansa-0.2.1 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix - HOST=x86_64-apple-darwin13.4.0 - INSTALL_NAME_TOOL=x86_64-apple-darwin13.4.0-install_name_tool - LD=x86_64-apple-darwin13.4.0-ld - LDFLAGS=-Wl,-headerpad_max_install_names -Wl,-dead_strip_dylibs -Wl,-rpath,$PREFIX/lib -L$PREFIX/lib - LDFLAGS_LD=-headerpad_max_install_names -dead_strip_dylibs -rpath $PREFIX/lib -L$PREFIX/lib - LIBTOOL=x86_64-apple-darwin13.4.0-libtool - LIPO=x86_64-apple-darwin13.4.0-lipo - MESON_ARGS=--buildtype release --prefix=$PREFIX -Dlibdir=lib - NM=x86_64-apple-darwin13.4.0-nm - NMEDIT=x86_64-apple-darwin13.4.0-nmedit - OBJC=x86_64-apple-darwin13.4.0-clang - OBJC_FOR_BUILD=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-clang - OTOOL=x86_64-apple-darwin13.4.0-otool - PAGESTUFF=x86_64-apple-darwin13.4.0-pagestuff - RANLIB=x86_64-apple-darwin13.4.0-ranlib - REDO_PREBINDING=x86_64-apple-darwin13.4.0-redo_prebinding - SDKROOT=/Applications/Xcode_15.0.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk - SEGEDIT=x86_64-apple-darwin13.4.0-segedit - SEG_ADDR_TABLE=x86_64-apple-darwin13.4.0-seg_addr_table - SEG_HACK=x86_64-apple-darwin13.4.0-seg_hack - SIZE=x86_64-apple-darwin13.4.0-size - STRINGS=x86_64-apple-darwin13.4.0-strings - STRIP=x86_64-apple-darwin13.4.0-strip - _CONDA_PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata_x86_64_apple_darwin13_4_0 - ac_cv_func_malloc_0_nonnull=yes - ac_cv_func_realloc_0_nonnull=yes - build_alias=x86_64-apple-darwin13.4.0 - host_alias=x86_64-apple-darwin13.4.0 - INFO: activate_clangxx_osx-64.sh made the following environmental changes: - CLANGXX=x86_64-apple-darwin13.4.0-clang - CXX=x86_64-apple-darwin13.4.0-clang - CXXFLAGS=-march=core2 -mtune=haswell -mssse3 -ftree-vectorize -fPIC -fstack-protector-strong -O2 -pipe -stdlib=libc -fvisibility-inlines-hidden -fmessage-length=0 -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/sansa-0.2.1 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix - CXX_FOR_BUILD=$BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-clang - DEBUG_CXXFLAGS=-march=core2 -mtune=haswell -mssse3 -ftree-vectorize -fPIC -fstack-protector-strong -O2 -pipe -stdlib=libc -fvisibility-inlines-hidden -fmessage-length=0 -Og -g -Wall -Wextra -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/sansa-0.2.1 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix - if [ -r src/htslib/Makefile ]; then cd src/htslib && autoreconf -i && ./configure --disable-s3 --disable-gcs --disable-libcurl --disable-plugins && make && make lib-static && cd ../../ && touch .htslib; fi - x86_64-apple-darwin13.4.0-clang -march=core2 -mtune=haswell -mssse3 -ftree-vectorize -fPIC -fstack-protector-strong -O2 -pipe -stdlib=libc -fvisibility-inlines-hidden -fmessage-length=0 -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/sansa-0.2.1 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -D__STDC_FORMAT_MACROS -std=c11 -isystem $SRC_DIR/src/htslib/ -pedantic -W -Wall -Wno-unknown-pragmas -D__STDC_LIMIT_MACROS -fno-strict-aliasing -fpermissive -O3 -fno-tree-vectorize -DNDEBUG src/sansa.cpp src/edlib.cpp -o src/sansa -Wl,-headerpad_max_install_names -Wl,-dead_strip_dylibs -Wl,-rpath,$PREFIX/lib -L$PREFIX/lib -L$SRC_DIR/src/htslib/ -lboost_iostreams -lboost_filesystem -lboost_system -lboost_program_options -lboost_date_time -lhts -lz -llzma -lbz2 -Wl,-rpath,$SRC_DIR/src/htslib/ -# Last 100 lines of the build log. diff --git a/recipes/sansa/meta.yaml b/recipes/sansa/meta.yaml index 2673fcf314a4c..67c87723a5111 100644 --- a/recipes/sansa/meta.yaml +++ b/recipes/sansa/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "0.2.1" %} -{% set sha256 = "f43b088b8339d3ba395adf922d723b074e31f8bf548c9e9039cccace5acc60ee" %} +{% set version = "0.2.2" %} +{% set sha256 = "2bec3df6918a8dda9d0f5f766c5314137c18956e83601b93606ff2037f2662d4" %} package: name: sansa @@ -18,23 +18,18 @@ requirements: build: - make - {{ compiler('cxx') }} - - autoconf - - automake - - pkg-config - - clangdev - - llvm-openmp host: - - boost-cpp - - htslib - zlib - bzip2 - - clangdev - - llvm-openmp - run: + - libdeflate - boost-cpp - htslib + run: - zlib - bzip2 + - libdeflate + - boost-cpp + - htslib test: commands: @@ -46,3 +41,8 @@ about: license_family: BSD license_file: LICENSE summary: Structural variant annotation + +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 diff --git a/recipes/savana/meta.yaml b/recipes/savana/meta.yaml index 8450c98cfbf55..53a05b2658cd2 100644 --- a/recipes/savana/meta.yaml +++ b/recipes/savana/meta.yaml @@ -1,5 +1,5 @@ {% set name = "savana" %} -{% set version = "1.2.1" %} +{% set version = "1.2.2" %} package: name: "{{ name }}" @@ -7,7 +7,7 @@ package: source: url: "https://github.com/cortes-ciriano-lab/{{ name }}/archive/{{ version }}.tar.gz" - sha256: f43e83794c5cd18f15c4dddc8b660012d42b91d42f253274b921256f887aca72 + sha256: c4a72c13d712930e8bc8e0865767c00708062edf4eec6f1bc951877c58f08380 build: number: 0 diff --git a/recipes/scarches/meta.yaml b/recipes/scarches/meta.yaml new file mode 100644 index 0000000000000..f044a26e18a03 --- /dev/null +++ b/recipes/scarches/meta.yaml @@ -0,0 +1,60 @@ +{% set name = "scarches" %} +{% set version = "0.6.1" %} + +package: + name: {{ name|lower }} + version: {{ version }} + +source: + url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/scArches-{{ version }}.tar.gz + sha256: 187463c25781d5c5586c129ad137d96327a9f8604d530a696d5f568a9225d77c + +build: + noarch: python + script: {{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + number: 0 + run_exports: + - {{ pin_subpackage('scarches', max_pin="x.x") }} + +requirements: + host: + - python + - pip + run: + - python + - scanpy >=1.6.0 + - anndata >=0.7.4 + - schpl >=1.0.0 + - h5py >=2.10.0 + - pytorch >=1.8.0 + - numpy >=1.19.2 + - scipy >=1.5.2 + - scikit-learn >=0.23.2 + - matplotlib-base >=3.3.1 + - pandas >=1.1.2 + - scvi-tools >=0.12.1 + - tqdm >=4.56.0 + - requests + - gdown + - leidenalg + - muon + +test: + imports: + - scarches + commands: + - pip check + requires: + - pip + +about: + home: https://github.com/theislab/scarches + summary: Transfer learning with Architecture Surgery on Single-cell data + license: BSD-3-Clause + license_file: LICENSE + +extra: + identifiers: + - doi:10.1038/s41587-021-01001-7 + recipe-maintainers: + - jdblischak diff --git a/recipes/scitrack/LICENSE b/recipes/scitrack/LICENSE new file mode 100644 index 0000000000000..e3ebf90ff2271 --- /dev/null +++ b/recipes/scitrack/LICENSE @@ -0,0 +1,11 @@ +Copyright 2019-2020 Gavin Huttley + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/recipes/scitrack/meta.yaml b/recipes/scitrack/meta.yaml index 2ec9bcce823ac..956ba89388c16 100644 --- a/recipes/scitrack/meta.yaml +++ b/recipes/scitrack/meta.yaml @@ -1,5 +1,5 @@ {% set name = "scitrack" %} -{% set version = "2021.5.3" %} +{% set version = "2024.10.8" %} package: name: {{ name|lower }} @@ -7,31 +7,31 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/scitrack-{{ version }}.tar.gz - sha256: 9b938a8c844f7e3fc850c9599e9a2f52d9b054095e466e556f9007cc8120fbea + sha256: 2694a67212c075006324ef1371291868500a21cbe8e6c92402f0b2ac1a7bc7e0 build: noarch: python - script: {{ PYTHON }} -m pip install . -vv + script: {{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir -vvv number: 0 + run_exports: + - {{ pin_subpackage('scitrack', max_pin=None) }} requirements: host: - - python >=3.6 + - python >=3.9 - pip - flit-core run: - - python >=3.6 + - python >=3.9 test: imports: - scitrack - commands: - - pip check - requires: - - pip about: home: https://github.com/HuttleyLab/scitrack - summary: SciTrack provides basic logging capabilities to track scientific computations. + summary: "SciTrack provides basic logging capabilities to track scientific computations." license: BSD-3-Clause + license_family: BSD license_file: LICENSE + dev_url: https://github.com/HuttleyLab/scitrack diff --git a/recipes/sdrf-pipelines/meta.yaml b/recipes/sdrf-pipelines/meta.yaml index bd2ce8164a5f2..86219f9021c8a 100644 --- a/recipes/sdrf-pipelines/meta.yaml +++ b/recipes/sdrf-pipelines/meta.yaml @@ -1,6 +1,6 @@ {% set name = "sdrf-pipelines" %} {% set pypi_name = "sdrf_pipelines" %} -{% set version = "0.0.29" %} +{% set version = "0.0.30" %} package: name: "{{ name|lower }}" @@ -8,16 +8,16 @@ package: source: url: "https://pypi.io/packages/source/{{ pypi_name[0] }}/{{ pypi_name }}/{{ pypi_name }}-{{ version }}.tar.gz" - sha256: 730d198ce879f864181aa5e567c51273ce95212c9394df84840a0e1896d644f1 + sha256: 3959102db85398afceac2175c6c96eebc7241d4a17f215fcae6ec2d854c37a3c build: number: 0 noarch: python run_exports: - - {{ pin_subpackage(name, max_pin="x") }} + - {{ pin_subpackage(name, max_pin="x.x") }} entry_points: - parse_sdrf = sdrf_pipelines.parse_sdrf:main - script: "{{ PYTHON }} -m pip install . --no-deps -vvv" + script: "{{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir -vvv" requirements: host: @@ -48,7 +48,8 @@ test: about: home: "https://github.com/bigbio/sdrf-pipelines" - license: Apache 2 + license: "Apache-2.0" + license_family: APACHE ##license_file: LICENSE ## patch is applied upstream, next version will have it summary: "Translate, convert SDRF to configuration pipelines" doc_url: "https://github.com/bigbio/sdrf-pipelines" diff --git a/recipes/searchgui/meta.yaml b/recipes/searchgui/meta.yaml index 8cc42f01e9b8c..37ae4625b6021 100644 --- a/recipes/searchgui/meta.yaml +++ b/recipes/searchgui/meta.yaml @@ -1,7 +1,7 @@ # Do not forget to update the version string in the searchgui.py file {% set name = "SearchGUI" %} -{% set version = "4.3.9" %} -{% set sha256 = "937898927c1727f72aad6a0fd1873324af5bc8eb946f79035d30b9407652032e" %} +{% set version = "4.3.11" %} +{% set sha256 = "5d1de05115e30f9d6a395c6990442efb37b497ecfff04873ff2af7849e11957f" %} {% set build = "0" %} package: @@ -23,13 +23,13 @@ source: requirements: host: - xtandem ==15.12.15.2 - - metamorpheus ==1.0.5 + - metamorpheus ==1.0.6 - blast >=2.14.0 run: - python - openjdk >=17 - xtandem ==15.12.15.2 - - metamorpheus ==1.0.5 + - metamorpheus ==1.0.6 - mono >=6.0.0 - fontconfig - fonts-conda-ecosystem @@ -46,12 +46,14 @@ test: - searchgui eu.isas.searchgui.cmd.SearchCLI -id_params "Identification_Parameters_default.par" -fasta_file "fastacli_searchgui_tinydb1_concatenated_target_decoy.fasta" -spectrum_files "searchgui_tinyspectra1.mgf" -xtandem 1 -output_folder "." -output_option 0 -output_data 1 about: - home: https://github.com/compomics/searchgui - license: Apache-2.0 + home: "https://github.com/compomics/searchgui" + license: "Apache-2.0" license_family: APACHE - summary: User-friendly graphical tool for using proteomics identification search engines + summary: "User-friendly graphical tool for using proteomics identification search engines." description: SearchGUI is a user-friendly open-source graphical user interface for configuring and running proteomics identification search engines, currently supporting X!Tandem, MS-GF+, MetaMorpheus, MS Amanda, MyriMatch, Comet, Tide, Andromeda and OMSSA. + dev_url: "https://github.com/compomics/searchgui" + doc_url: "https://github.com/compomics/searchgui/blob/master/README.md" extra: notes: @@ -65,4 +67,4 @@ extra: - biotools:searchgui - usegalaxy-eu:search_gui - doi:10.1002/pmic.201000595 - extended-base: true ## precompiled packages + extended-base: True ## precompiled packages diff --git a/recipes/searchgui/searchgui.py b/recipes/searchgui/searchgui.py index 9f0af006eb888..911e0ab4542f6 100755 --- a/recipes/searchgui/searchgui.py +++ b/recipes/searchgui/searchgui.py @@ -14,7 +14,7 @@ from os import getenv from os import X_OK -jar_file = 'SearchGUI-4.3.9.jar' +jar_file = 'SearchGUI-4.3.11.jar' default_jvm_mem_opts = ['-Xms2g', '-Xmx4g'] diff --git a/recipes/seq-hasher/build.sh b/recipes/seq-hasher/build.sh new file mode 100644 index 0000000000000..e5cb5faa26a8b --- /dev/null +++ b/recipes/seq-hasher/build.sh @@ -0,0 +1,7 @@ +#!/bin/bash -euo + +set -xe + +# build statically linked binary with Rust +cargo-bundle-licenses --format yaml --output THIRDPARTY.yml +RUST_BACKTRACE=1 cargo install --verbose --locked --no-track --root $PREFIX --path . \ No newline at end of file diff --git a/recipes/seq-hasher/meta.yaml b/recipes/seq-hasher/meta.yaml new file mode 100644 index 0000000000000..17be5a1eeac6e --- /dev/null +++ b/recipes/seq-hasher/meta.yaml @@ -0,0 +1,41 @@ +{% set version = "0.1.0" %} + +package: + name: seq-hasher + version: {{ version }} + +build: + number: 0 + run_exports: + - {{ pin_subpackage("seq-hasher", max_pin="x") }} + +source: + url: https://github.com/apcamargo/seq-hasher/archive/v{{ version }}.tar.gz + sha256: a017be3eae1a278bd38339cc4c53f406b7536a3f3d75adcc82e75c1e1daa8253 + +requirements: + build: + - {{ compiler('rust') }} + - cargo-bundle-licenses + host: + run: + +test: + commands: + - seq-hasher --help + +about: + home: https://github.com/apcamargo/seq-hasher + license: MIT + license_file: + - LICENSE + - THIRDPARTY.yml + + summary: > + Compute hash digests for DNA sequences in a FASTA file, with support for + circular permutations + +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 \ No newline at end of file diff --git a/recipes/seqfu/meta.yaml b/recipes/seqfu/meta.yaml index dec9c542f81cc..9dfcd4bb28b7f 100644 --- a/recipes/seqfu/meta.yaml +++ b/recipes/seqfu/meta.yaml @@ -1,6 +1,6 @@ {% set name = "seqfu" %} -{% set version = "1.20.3" %} -{% set sha256 = "1b287b99f3f1ac7045f4d551e781d6780ce168ba8e0a7bfaa0f5490f32e15938" %} +{% set version = "1.22.2" %} +{% set sha256 = "0b66405ca98a80be614874fd1c1f651ecb410d953ac5070a0e93c77d2dbe1919" %} package: name: {{ name }} @@ -11,7 +11,7 @@ source: sha256: {{ sha256 }} build: - number: 2 + number: 0 run_exports: - {{ pin_subpackage(name, max_pin="x.x") }} diff --git a/recipes/sequali/meta.yaml b/recipes/sequali/meta.yaml index 6ea35930a5604..24533e6037816 100644 --- a/recipes/sequali/meta.yaml +++ b/recipes/sequali/meta.yaml @@ -1,5 +1,5 @@ {% set name = "sequali" %} -{% set version = "0.11.1" %} +{% set version = "0.12.0" %} package: name: "{{ name|lower }}" @@ -7,10 +7,10 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: d528a9a6eceace4fa8f1ef29625954a759928e7bab02348ef8f92887442f9527 + sha256: 14ddcfbe91ab4e941c4e20f0e93e3ad83fba80aca40a3c3c499acd19ac0b9f3c build: - number: 2 + number: 0 entry_points: - sequali=sequali.__main__:main - sequali-report=sequali.__main__:sequali_report diff --git a/recipes/seurat-scripts/conda_build_config.yaml b/recipes/seurat-scripts/conda_build_config.yaml index 3eedcdc17af61..04b83d74f6c26 100644 --- a/recipes/seurat-scripts/conda_build_config.yaml +++ b/recipes/seurat-scripts/conda_build_config.yaml @@ -1,2 +1,2 @@ r_base: - - 4.0 + - 4.0.5 diff --git a/recipes/seurat-scripts/meta.yaml b/recipes/seurat-scripts/meta.yaml index 55cba16fa5424..15da9b60e8023 100644 --- a/recipes/seurat-scripts/meta.yaml +++ b/recipes/seurat-scripts/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "4.0.0" %} +{% set version = "4.4.0" %} package: name: seurat-scripts @@ -6,11 +6,13 @@ package: source: url: https://github.com/ebi-gene-expression-group/r-seurat-scripts/archive/{{ version }}.tar.gz - sha256: 2ee6f3bf471809efe8455131af763dfa17b84d0134a57cc9d33d7c347898dc29 + sha256: 907d30d3c2326565654af170670fc09b6bbda5fbfa356b17486a239ebf022bfb build: number: 0 noarch: generic + run_exports: + - {{ pin_subpackage('seurat-scripts', max_pin="x.x") }} requirements: host: @@ -19,16 +21,17 @@ requirements: - r-optparse - libpng - r-cairo - - r-seurat =4.0.0 - - r-uwot <0.1.11 - r-workflowscriptscommon >=0.0.8 + - r-seurat <=4.4 - r-loom - r-svglite - bioconductor-scater - r-seuratdisk + - r-remotes - bioconductor-multtest - r-metap - pandoc + - bioconductor-limma - mscorefonts test: diff --git a/recipes/severus/meta.yaml b/recipes/severus/meta.yaml index 8f3899b47acaa..a8692261e10e3 100644 --- a/recipes/severus/meta.yaml +++ b/recipes/severus/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "1.1" %} +{% set version = "1.2" %} package: name: severus @@ -6,7 +6,7 @@ package: source: url: https://github.com/KolmogorovLab/Severus/archive/refs/tags/{{ version }}.tar.gz - sha256: 9479ff6c5ee09d28c047b7088414f5cc626cc77523940f2a22fa939506772d1d + sha256: 087566e5fb6f9156323771e46b9fe8d5f90aefb5bbb442cf1ed246dcb4f85847 build: number: 0 diff --git a/recipes/sigprofilermatrixgenerator/meta.yaml b/recipes/sigprofilermatrixgenerator/meta.yaml index b1cb0a1741cbc..01f51f62609da 100644 --- a/recipes/sigprofilermatrixgenerator/meta.yaml +++ b/recipes/sigprofilermatrixgenerator/meta.yaml @@ -1,5 +1,5 @@ {% set name = "SigProfilerMatrixGenerator" %} -{% set version = "1.2.28" %} +{% set version = "1.2.29" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/SigProfilerMatrixGenerator-{{ version }}.tar.gz - sha256: 4b909790ba1a284b4261b433839335868664da30f29ecf7c574f4ed969e673b9 + sha256: cd00ae4f5c0bf916823b9bd76d75e09d804f4cb91a9c0e0be6af2f6887dcf503 build: entry_points: diff --git a/recipes/sipros/LICENSE b/recipes/sipros/LICENSE new file mode 100644 index 0000000000000..d14aff8022d93 --- /dev/null +++ b/recipes/sipros/LICENSE @@ -0,0 +1,24 @@ +MIT License + +Copyright (c) 2023 Phase Technician XYZ + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Code written for the MSToolkit uses the Apache License, Version 2.0. All 3rd +party software included in the MSToolkit library retains its original license. \ No newline at end of file diff --git a/recipes/sipros/Raxport.sh b/recipes/sipros/Raxport.sh new file mode 100644 index 0000000000000..958980acb6e9d --- /dev/null +++ b/recipes/sipros/Raxport.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +SOURCE="${BASH_SOURCE[0]}" +while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink + DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + SOURCE="$(readlink "$SOURCE")" + [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located +done +DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" +mono "$DIR/Raxport.exe" "$@" diff --git a/recipes/sipros/build.sh b/recipes/sipros/build.sh new file mode 100644 index 0000000000000..e47019df5ce18 --- /dev/null +++ b/recipes/sipros/build.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +set -e + +mkdir -p "$PREFIX/bin" +chmod u+x bin/* +cp -r bin/* "$PREFIX/bin" + +cp -r EnsembleScripts "$PREFIX" + +cp -r V4Scripts "$PREFIX" + +cp -r configTemplates "$PREFIX" + +for script in sipros_prepare_protein_database.py sipros_psm_tabulating.py sipros_ensemble_filtering.py sipros_peptides_assembling.py; do + baseName=$(basename $script .py) + sed -i '1i#!/usr/bin/env python\n' "$PREFIX/EnsembleScripts/$script" + ln -s "$PREFIX/EnsembleScripts/$script" "$PREFIX/bin/EnsembleScripts_$baseName" +done + +for script in sipros_peptides_filtering.py sipros_peptides_assembling.py ClusterSip.py; do + baseName=$(basename $script .py) + sed -i '1i#!/usr/bin/env python\n' "$PREFIX/V4Scripts/$script" + ln -s "$PREFIX/V4Scripts/$script" "$PREFIX/bin/V4Scripts_$baseName" +done + +for script in refineProteinFDR.R getSpectraCountInEachFT.R makeDBforLabelSearch.R getLabelPCTinEachFT.R; do + baseName=$(basename $script .R) + sed -i '1i#!/usr/bin/env Rscript\n' "$PREFIX/V4Scripts/$script" + ln -s "$PREFIX/V4Scripts/$script" "$PREFIX/bin/V4Scripts_$baseName" +done + +cp "$RECIPE_DIR"/Raxport.sh "$PREFIX/bin/Raxport" +cp "$RECIPE_DIR"/copyConfigTemplate.sh "$PREFIX/bin/copyConfigTemplate" +chmod u+x $PREFIX/bin/* \ No newline at end of file diff --git a/recipes/sipros/copyConfigTemplate.sh b/recipes/sipros/copyConfigTemplate.sh new file mode 100755 index 0000000000000..6231dd1530584 --- /dev/null +++ b/recipes/sipros/copyConfigTemplate.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +if [ -z "$2" ]; then + OUTPUT_PATH="." +else + OUTPUT_PATH=$2 +fi + +if [ -z "$CONDA_PREFIX" ]; then + echo "Error: CONDA_PREFIX is not set. Are you running this in a Conda environment?" + exit 1 +fi + +TEMPLATE_DIR="$CONDA_PREFIX/configTemplates" + +if [ "$1" == "-Regular" ]; then + TEMPLATE="$TEMPLATE_DIR/SiprosEnsembleConfig.cfg" +elif [ "$1" == "-SIP" ]; then + TEMPLATE="$TEMPLATE_DIR/SiprosV4Config.cfg" +else + echo "Usage: copyConfigTemplate {-Regular|-SIP} " + exit 1 +fi + +if [ ! -f "$TEMPLATE" ]; then + echo "Error: Template file $TEMPLATE not found" + exit 1 +fi + +cp -v "$TEMPLATE" "$OUTPUT_PATH" \ No newline at end of file diff --git a/recipes/sipros/meta.yaml b/recipes/sipros/meta.yaml new file mode 100644 index 0000000000000..59ad6e7f6aa78 --- /dev/null +++ b/recipes/sipros/meta.yaml @@ -0,0 +1,57 @@ +{% set name = "sipros" %} +{% set version = "4.01" %} + +package: + name: {{ name|lower }} + version: {{ version }} + +source: + url: https://github.com/thepanlab/Sipros4/releases/download/{{ version }}/siprosRelease.zip + sha256: 10030671b94a8a2ab354396178f35c30a8e8e0c633864533690c1ff285906c9c + +build: + noarch: generic + number: 0 + skip: False + run_exports: + - {{ pin_subpackage('sipros', max_pin="x") }} + +requirements: + run: + - bioconductor-biostrings + - mono + - numpy =1.16 + - python =2.7 + - r-base + - r-stringr + - r-tidyr + - scikit-learn =0.20.3 + +test: + commands: + - configGenerator -h + - SiprosEnsembleOMP --help + - SiprosV4OMP --help + - Raxport -h + - EnsembleScripts_sipros_psm_tabulating -v + - V4Scripts_sipros_peptides_filtering -v + - V4Scripts_getSpectraCountInEachFT -help + - V4Scripts_refineProteinFDR -help + - copyConfigTemplate -SIP + +about: + home: https://github.com/thepanlab/Sipros4 + license: MIT + # currently include in the recipe folder because from the release (https://github.com/thepanlab/Sipros4/issues/3) + license_file: LICENSE + summary: "Tools for stable isotopic mass spectrometry-based metaproteomics" + description: | + "Tools for stable isotopic mass spectrometry-based metaproteomics research developed by Sipros team. These include Raxport, SiprosV4, SiprosEnsemble and some python / R scripts." + +extra: + recipe-maintainers: + - bernt-matthias + - yi-xiong + identifiers: + - biotools:sipros + - doi:10.1186/s40168-024-01866-1 \ No newline at end of file diff --git a/recipes/sizemeup/build.sh b/recipes/sizemeup/build.sh new file mode 100644 index 0000000000000..98412cd73fb29 --- /dev/null +++ b/recipes/sizemeup/build.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +mkdir -p $PREFIX/bin ${PREFIX}/share/sizemeup + +# Install sizemup library +$PYTHON -m pip install --no-deps --ignore-installed -vv . + +# move main executable, and replace with wrapper +chmod 755 bin/sizemeup-bioconda +mv $PREFIX/bin/sizemeup $PREFIX/bin/sizemeup-main +cp -f bin/sizemeup-bioconda $PREFIX/bin/sizemeup + +# Copy genome size database (~100kb) +cp -f data/sizemeup-sizes.txt ${PREFIX}/share/sizemeup diff --git a/recipes/sizemeup/meta.yaml b/recipes/sizemeup/meta.yaml new file mode 100644 index 0000000000000..a9d8a6b435d66 --- /dev/null +++ b/recipes/sizemeup/meta.yaml @@ -0,0 +1,49 @@ +{% set name = "sizemeup" %} +{% set version = "1.2.3" %} + +package: + name: {{ name|lower }} + version: {{ version }} + +source: + url: https://github.com/rpetit3/sizemeup/archive/v{{ version }}.tar.gz + sha256: 0ce574a492ec88bb4befba1c429e7f853afa859808f9606a642c722ce2564f68 + +build: + number: 0 + noarch: python + run_exports: + - {{ pin_subpackage(name, max_pin='x.x') }} + +requirements: + host: + - python >=3.7 + - poetry + - pip + run: + - python >=3.7 + - requests + - rich-click >=1.6.0 + +test: + imports: + - sizemeup + commands: + - pip check + - sizemeup --version + - sizemeup --help + - sizemeup --query "Staphylococcus aureus" + - sizemeup -q 1280 + - sizemeup-build --help + requires: + - pip + +about: + home: https://github.com/rpetit3/sizemeup + summary: A simple tool to determine the genome size of an organism + license: MIT + license_file: LICENSE + +extra: + recipe-maintainers: + - rpetit3 diff --git a/recipes/ska2/meta.yaml b/recipes/ska2/meta.yaml index 146eac47fee64..97a9ed1c65d7f 100644 --- a/recipes/ska2/meta.yaml +++ b/recipes/ska2/meta.yaml @@ -1,5 +1,5 @@ {% set name = "ska2" %} -{% set version = "0.3.10" %} +{% set version = "0.3.11" %} package: name: {{ name|lower}} @@ -7,7 +7,7 @@ package: source: url: https://github.com/bacpop/ska.rust/archive/v{{ version }}.tar.gz - sha256: ca0bdec75d2e0f9d7936e423bb8e9b2984cd3e5c5ee73e843300d93df94f6ef5 + sha256: d58519c57db7c3a8c36015a435645e09b15be456e8ffabb175bcb3e3b7731e78 build: number: 0 diff --git a/recipes/skder/build.sh b/recipes/skder/build.sh index 0761399e03b08..d2838d8fda6b0 100644 --- a/recipes/skder/build.sh +++ b/recipes/skder/build.sh @@ -5,7 +5,6 @@ $PYTHON -m pip install . --ignore-installed --no-deps -vv mkdir -p ${PREFIX}/bin export LDFLAGS= - ${CXX} -std=c++11 -Wl,-headerpad_max_install_names -o ${PREFIX}/bin/skDERsum src/skDER/skDERsum.cpp ${CXX} -std=c++11 -Wl,-headerpad_max_install_names -o ${PREFIX}/bin/skDERcore src/skDER/skDERcore.cpp diff --git a/recipes/skder/meta.yaml b/recipes/skder/meta.yaml index 2e14329b862dd..678fd77189bf3 100644 --- a/recipes/skder/meta.yaml +++ b/recipes/skder/meta.yaml @@ -1,5 +1,5 @@ {% set name = "skder" %} -{% set version = "1.2.7" %} +{% set version = "1.2.8" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://github.com/raufs/skDER/archive/refs/tags/v{{ version }}.tar.gz - sha256: 283e4a05d27afcff65564450d15150e6a9ad393b0a29b61802b6ab7e05197347 + sha256: d60056e0ebd71f62af562a490b7a4a9761fac207e03a20fe926db571d16d5237 build: number: 0 diff --git a/recipes/slow5tools/meta.yaml b/recipes/slow5tools/meta.yaml index 1886640a6b95d..4941e1c8f1dc6 100644 --- a/recipes/slow5tools/meta.yaml +++ b/recipes/slow5tools/meta.yaml @@ -1,5 +1,5 @@ {% set name = "slow5tools" %} -{% set version = "1.2.0" %} +{% set version = "1.3.0" %} package: name: {{ name }} @@ -7,10 +7,10 @@ package: source: url: https://github.com/hasindu2008/slow5tools/releases/download/v{{ version }}/slow5tools-v{{ version }}-release.tar.gz - sha256: ce9d198f8368e90f440fce974e798b7f521b0fe4f859caf9a452bba1ca5af2d4 + sha256: f7221285e0090a5ca05a75f5e70c51d093138b2c8ad658b2756c3c6e51097d5d build: - number: 1 + number: 0 run_exports: - {{ pin_subpackage('slow5tools', max_pin="x") }} diff --git a/recipes/smalt/build.sh b/recipes/smalt/build.sh index 3f8b3a68e0763..62bafd63bdae4 100644 --- a/recipes/smalt/build.sh +++ b/recipes/smalt/build.sh @@ -1,12 +1,12 @@ #!/bin/bash -set -ef -o pipefail +set -xef -o pipefail export CPPFLAGS="-I${PREFIX}/include" export LDFLAGS="-L${PREFIX}/lib" ./configure --prefix=$PREFIX -make +make -j ${CPU_COUNT} if [ -z "${OSX_ARCH}" ]; then make check diff --git a/recipes/smudgeplot/build.sh b/recipes/smudgeplot/build.sh index 758b23ba13f0e..7dd1d9fd55b4a 100644 --- a/recipes/smudgeplot/build.sh +++ b/recipes/smudgeplot/build.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash mkdir -p $PREFIX/bin diff --git a/recipes/smudgeplot/meta.yaml b/recipes/smudgeplot/meta.yaml index 3def4859d4580..9d41489cad4f2 100644 --- a/recipes/smudgeplot/meta.yaml +++ b/recipes/smudgeplot/meta.yaml @@ -1,16 +1,17 @@ -{% set version = "0.2.5" %} +{% set version = "0.3.0" %} package: name: smudgeplot version: {{ version }} build: - number: 4 - skip: True # [py2k] + number: 1 + run_exports: + - {{ pin_subpackage('smudgeplot', max_pin="x.x") }} source: url: https://github.com/KamilSJaron/smudgeplot/archive/v{{ version }}.tar.gz - sha256: 189c910b28e59d52f52ae1f7b2fc0c7e8c603525e4383e19753eccbb65afb5cc + sha256: b95b61e517de8f33c49910825a5c68e9a0d1e27cc33463939ef4c994e61dda92 requirements: build: @@ -30,6 +31,7 @@ requirements: - r-argparse - numpy - scipy + test: commands: - smudgeplot.py --version 2>&1 | grep 'Running' @@ -37,5 +39,12 @@ test: about: home: https://github.com/KamilSJaron/smudgeplot license: Apache-2.0 + license_family: APACHE license_file: LICENSE - summary: Inference of ploidy and heterozygosity structure using whole genome sequencing data + summary: "Inference of ploidy and heterozygosity structure using whole genome sequencing data." + dev_url: https://github.com/KamilSJaron/smudgeplot + +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 diff --git a/recipes/snakedeploy/meta.yaml b/recipes/snakedeploy/meta.yaml index ee301e9d00857..0ade185a5e11c 100644 --- a/recipes/snakedeploy/meta.yaml +++ b/recipes/snakedeploy/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "0.10.0" %} +{% set version = "0.10.1" %} package: name: snakedeploy @@ -6,14 +6,14 @@ package: source: url: https://pypi.io/packages/source/s/snakedeploy/snakedeploy-{{ version }}.tar.gz - sha256: 85922677897e90e3d179e74ba41f28e174084ed184d4e2712a4c0be3890c6279 + sha256: 27e14f682488d5017d52aeb6253005a51ef006b913dcb5fac217eeff70ca0c24 build: number: 0 noarch: python entry_points: - snakedeploy=snakedeploy.client:main - script: {{ PYTHON }} -m pip install . --no-deps --no-build-isolation --use-pep517 -vvv + script: {{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir --use-pep517 -vvv run_exports: - {{ pin_subpackage('snakedeploy', max_pin="x.x") }} @@ -24,6 +24,7 @@ requirements: - python >=3.8 run: - python >=3.8 + - setuptools - jinja2 - pandas - requests @@ -36,16 +37,14 @@ test: imports: - snakedeploy commands: - - pip check - snakedeploy --help - requires: - - pip about: home: https://github.com/snakemake/snakedeploy - summary: Helper for deploying published Snakemake pipelines + summary: "Helper for deploying published Snakemake pipelines." license: MPL-2.0 license_file: LICENSE + dev_url: https://github.com/snakemake/snakedeploy extra: recipe-maintainers: diff --git a/recipes/snakemake-executor-plugin-kubernetes/meta.yaml b/recipes/snakemake-executor-plugin-kubernetes/meta.yaml index f302f655b0d07..64f02f57491ed 100644 --- a/recipes/snakemake-executor-plugin-kubernetes/meta.yaml +++ b/recipes/snakemake-executor-plugin-kubernetes/meta.yaml @@ -1,5 +1,5 @@ {% set name = "snakemake-executor-plugin-kubernetes" %} -{% set version = "0.2.1" %} +{% set version = "0.2.2" %} # Upon version update, requirements have to be checked! package: @@ -8,7 +8,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/snakemake_executor_plugin_kubernetes-{{ version }}.tar.gz - sha256: 476c423cb33b71bff2ed11d2ec0aace8bb76e1b9667b408880bcbe2c7fdbe6ef + sha256: 08f7ea92cc288f0830f7bfc38112c9e4a03d623d84f8f80b0105cc179458fc4c build: noarch: python diff --git a/recipes/snakemake-executor-plugin-slurm/meta.yaml b/recipes/snakemake-executor-plugin-slurm/meta.yaml index 3fa0f9862074f..cd72d9426ad2d 100644 --- a/recipes/snakemake-executor-plugin-slurm/meta.yaml +++ b/recipes/snakemake-executor-plugin-slurm/meta.yaml @@ -1,5 +1,5 @@ {% set name = "snakemake-executor-plugin-slurm" %} -{% set version = "0.10.2" %} +{% set version = "0.11.0" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/snakemake_executor_plugin_slurm-{{ version }}.tar.gz - sha256: 919beb114785545f3cc187988f9257a183f1a2c76593e8a8559b87962ebd2651 + sha256: bce1df57900da71175c1c384dbc8f04d8bf8572717c0aaf95c32945a4c7a08d3 build: noarch: python diff --git a/recipes/snakemake-interface-common/meta.yaml b/recipes/snakemake-interface-common/meta.yaml index 63b0ac8ef24ec..d246d9c7ca192 100644 --- a/recipes/snakemake-interface-common/meta.yaml +++ b/recipes/snakemake-interface-common/meta.yaml @@ -1,5 +1,5 @@ {% set name = "snakemake-interface-common" %} -{% set version = "1.17.3" %} +{% set version = "1.17.4" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/snakemake_interface_common-{{ version }}.tar.gz - sha256: cca6e2c728072a285a8e750f00fdd98d9c50063912184c41f8b89e4cab66c7b0 + sha256: c2142e1b93cbc18c2cf41d15968ba8688f60b077c8284e5de057cccfc215d4d3 build: noarch: python diff --git a/recipes/snakemake-interface-executor-plugins/meta.yaml b/recipes/snakemake-interface-executor-plugins/meta.yaml index 8f3da6758ad78..95b8d99e77481 100644 --- a/recipes/snakemake-interface-executor-plugins/meta.yaml +++ b/recipes/snakemake-interface-executor-plugins/meta.yaml @@ -1,5 +1,5 @@ {% set name = "snakemake-interface-executor-plugins" %} -{% set version = "9.2.0" %} +{% set version = "9.3.2" %} package: name: {{ name|lower }} @@ -7,11 +7,11 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/snakemake_interface_executor_plugins-{{ version }}.tar.gz - sha256: 67feaf438a0b8b041ec5f1a1dd859f729036c70c07c9fdad895135f5b949e40a + sha256: 19c50dc82989ff25d10386cfb3c99da9d2dc980d95ecd30bbb431374dcd390b3 build: noarch: python - script: {{ PYTHON }} -m pip install . --no-deps --no-build-isolation -vvv + script: {{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir -vvv run_exports: - {{ pin_subpackage(name, max_pin='x') }} number: 0 @@ -24,7 +24,7 @@ requirements: run: - python >=3.11.0,<4.0.0 - argparse-dataclass >=2.0.0,<3.0.0 - - snakemake-interface-common >=1.12.0,<2.0.0 + - snakemake-interface-common >=1.17.4,<2.0.0 - throttler >=1.2.2,<2.0.0 test: diff --git a/recipes/snakemake-interface-report-plugins/meta.yaml b/recipes/snakemake-interface-report-plugins/meta.yaml index 16c4632e6a84d..1fd8277ea9ee6 100644 --- a/recipes/snakemake-interface-report-plugins/meta.yaml +++ b/recipes/snakemake-interface-report-plugins/meta.yaml @@ -1,5 +1,5 @@ {% set name = "snakemake-interface-report-plugins" %} -{% set version = "1.0.0" %} +{% set version = "1.1.0" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/snakemake_interface_report_plugins-{{ version }}.tar.gz - sha256: 02311cdc4bebab2a1c28469b5e6d5c6ac6e9c66998ad4e4b3229f1472127490f + sha256: b1ee444b2fca51225cf8a102f8e56633791d01433cd00cf07a1d9713a12313a5 build: noarch: python diff --git a/recipes/snakemake-storage-plugin-gcs/meta.yaml b/recipes/snakemake-storage-plugin-gcs/meta.yaml index 9228b2ed03517..a7892b1f2c597 100644 --- a/recipes/snakemake-storage-plugin-gcs/meta.yaml +++ b/recipes/snakemake-storage-plugin-gcs/meta.yaml @@ -1,5 +1,5 @@ {% set name = "snakemake-storage-plugin-gcs" %} -{% set version = "1.1.1" %} +{% set version = "1.1.2" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/snakemake_storage_plugin_gcs-{{ version }}.tar.gz - sha256: ac6fc6aaf63ec6ae7453e1cb080e07da346ad4497bd2a87947c352f0fb311d31 + sha256: 417f0dfdd6c28b3ceed609c2d29d18a135039e28433d45058eb8cb7b5a7e061a build: noarch: python diff --git a/recipes/snakemake/meta.yaml b/recipes/snakemake/meta.yaml index 74178bdb00b75..5d086eea13521 100644 --- a/recipes/snakemake/meta.yaml +++ b/recipes/snakemake/meta.yaml @@ -1,7 +1,7 @@ # Attention: when upgrading the version, please compare below dependencies with # https://github.com/snakemake/snakemake/blob/{version}/setup.cfg {% set name = "snakemake" %} -{% set version = "8.20.3" %} +{% set version = "8.20.6" %} package: name: {{ name }} @@ -9,7 +9,7 @@ package: source: url: https://pypi.io/packages/source/s/{{ name }}/snakemake-{{ version }}.tar.gz - sha256: 8940376264f862c36c60a576744787271b10e91fc47b0ffd11a0b31961bbc0af + sha256: ecf62b26ff041925985229b76bd15e3fbdef10baa03aa003406a9a10e40132c2 build: number: 0 @@ -103,7 +103,7 @@ outputs: - requests >=2.8.1 - reretry - smart_open >=4.0,<8.0 - - snakemake-interface-executor-plugins >=9.2.0,<10.0.0 + - snakemake-interface-executor-plugins >=9.3.2,<10.0.0 - snakemake-interface-common >=1.17.0,<2.0 - snakemake-interface-storage-plugins >=3.2.3,<4.0 - snakemake-interface-report-plugins >=1.0.0,<2.0.0 diff --git a/recipes/snakeobjects/meta.yaml b/recipes/snakeobjects/meta.yaml index 381cf6f16f1b6..6eb4903c40099 100644 --- a/recipes/snakeobjects/meta.yaml +++ b/recipes/snakeobjects/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "3.1.2" %} +{% set version = "3.1.4" %} package: name: snakeobjects @@ -6,21 +6,23 @@ package: source: url: https://github.com/iossifovlab/snakeobjects/archive/refs/tags/{{ version }}.tar.gz - sha256: b95951c084c5d4ab047bb4dccbb2d7c1573bf9652eabde29b5c6fab93c1075e4 + sha256: 056d8edff46015a6813047f327ca1888c88ee012707e9400d6297e4eb7b00cf7 build: - script: {{ PYTHON }} -m pip install --no-deps --ignore-installed -vv . + script: {{ PYTHON }} -m pip install --no-deps --no-build-isolation --no-cache-dir -vvv . noarch: python number: 0 entry_points: - sobjects = snakeobjects.cli:cli + run_exports: + - {{ pin_subpackage('snakeobjects', max_pin="x") }} requirements: host: - - python + - python <3.12 - pip run: - - python + - python <3.12 - snakemake-minimal test: @@ -34,7 +36,9 @@ about: home: https://github.com/iossifovlab/snakeobjects summary: Snakeobjects, an object-oriented workflow management system based on snakemake license: MIT + license_family: MIT license_file: LICENSE + dev_url: https://github.com/iossifovlab/snakeobjects extra: maintainers: diff --git a/recipes/snk-cli/meta.yaml b/recipes/snk-cli/meta.yaml new file mode 100644 index 0000000000000..9e1434504395f --- /dev/null +++ b/recipes/snk-cli/meta.yaml @@ -0,0 +1,52 @@ +{% set name = "snk-cli" %} +{% set version = "0.5.5" %} + +package: + name: {{ name|lower }} + version: {{ version }} + +source: + url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name | replace("-","_") }}-{{ version }}.tar.gz + sha256: 5ba6a88aca3473751152cdcd22b0cdc31b0f4034d9eabf859a3dfc6dcc4a487f + +build: + run_exports: + - {{ pin_subpackage('snk-cli', max_pin="x.x") }} + noarch: python + script: {{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + number: 0 + +requirements: + host: + - python >=3.8 + - hatchling + - pip + run: + - python >=3.8 + - snakemake-minimal >=7 + - typer >=0.9,<1.dev0 + - shellingham >=1.3.0 + - rich >=10.11.0 + - pulp <2.8 + - ascii-art >=5.9,<6.dev0 + - makefun >=1.15,<2.dev0 + - datrie >=0.8.2 + +test: + imports: + - snk_cli + commands: + - pip check + requires: + - pip + +about: + home: https://github.com/wytamma/snk-cli + dev_url: https://github.com/wytamma/snk-cli + summary: Dynamically generate CLIs from Snakemake configuration files + license: MIT + license_file: LICENSE.txt + +extra: + recipe-maintainers: + - Wytamma diff --git a/recipes/snk/meta.yaml b/recipes/snk/meta.yaml new file mode 100644 index 0000000000000..26dfad0f59b98 --- /dev/null +++ b/recipes/snk/meta.yaml @@ -0,0 +1,54 @@ +{% set name = "snk" %} +{% set version = "0.30.1" %} + +package: + name: {{ name|lower }} + version: {{ version }} + +source: + url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name | replace("-","_") }}-{{ version }}.tar.gz + sha256: 6bb3ed373c94ed4d9764b3ced41aecddc112c373400925f1166d52b5e5ca7c90 + +build: + run_exports: + - {{ pin_subpackage('snk', max_pin="x.x") }} + entry_points: + - snk = snk.main:app + noarch: python + script: {{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + number: 0 + +requirements: + host: + - python >=3.8 + - hatchling + - pip + - git + run: + - python >=3.8 + - gitpython >=3.1.0,<3.2.dev0 + - snk-cli >=0.5.2 + - git + +test: + imports: + - snk + commands: + - pip check + - snk --help + requires: + - pip + - git + +about: + home: https://snk.wytamma.com + dev_url: https://github.com/wytamma/snk + summary: A Snakemake CLI and Workflow Management System. + license: MIT + license_file: LICENSE.txt + +extra: + recipe-maintainers: + - Wytamma + + diff --git a/recipes/spec2vec/meta.yaml b/recipes/spec2vec/meta.yaml index 9451b70876035..c22b684c85102 100644 --- a/recipes/spec2vec/meta.yaml +++ b/recipes/spec2vec/meta.yaml @@ -11,8 +11,10 @@ source: build: noarch: python - script: {{ PYTHON }} -m pip install . -vv - number: 0 + script: {{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir -vvv + number: 1 + run_exports: + - {{ pin_subpackage('spec2vec', max_pin="x.x") }} requirements: host: @@ -20,28 +22,30 @@ requirements: - pip run: - python >=3.7 - - gensim >=4.0.0 - - matchms >=0.11.0 + - gensim >=4.2.0 + - matchms >=0.14.0,<=0.26.4 - numba >=0.51 - numpy - fuzzytm + - scipy <=1.10.1 - tqdm - + test: imports: - spec2vec - commands: - - pip check - requires: - - pip about: - home: https://github.com/iomega/spec2vec - summary: Word2Vec based similarity measure of mass spectrometry data. - license: Apache-2.0 + home: "https://github.com/iomega/spec2vec" + summary: "Word2Vec based similarity measure of mass spectrometry data." + license: "Apache-2.0" + license_family: APACHE license_file: LICENSE + dev_url: "https://github.com/iomega/spec2vec" + doc_url: "https://spec2vec.readthedocs.io/en/latest" extra: recipe-maintainers: - bgruening - hechth + identifiers: + - doi:10.1371/journal.pcbi.1008724 diff --git a/recipes/sphae/meta.yaml b/recipes/sphae/meta.yaml index 0cb6737014829..d84b4dca29e66 100644 --- a/recipes/sphae/meta.yaml +++ b/recipes/sphae/meta.yaml @@ -1,5 +1,5 @@ {% set name = "sphae" %} -{% set version = "1.4.4" %} +{% set version = "1.4.5" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://github.com/linsalrob/{{ name }}/archive/refs/tags/v{{ version }}.tar.gz" - sha256: adefd056f1e08708b27243c7fe120d7062270d4d9498bb88a62992bee715500a + sha256: 09d5de5da2e429b2de3734af7331b52fcadd185715d7f06e71eca4631afe2e91 build: number: 0 diff --git a/recipes/spreadgltools/meta.yaml b/recipes/spreadgltools/meta.yaml new file mode 100644 index 0000000000000..0cb09eeb3e772 --- /dev/null +++ b/recipes/spreadgltools/meta.yaml @@ -0,0 +1,60 @@ +{% set name ="SpreadGLtools" %} +{% set version ="1.1.0" %} +{% set sha256 ="de9319eb0cab7dcf042671c77fd473a7a03a8384ce7d476f10f89a8a100cbeec" %} + +package: + name: {{ name|lower }} + version: {{ version }} + +source: + url: https://github.com/GuyBaele/SpreadGL/archive/refs/tags/v{{ version }}.tar.gz + sha256: {{ sha256 }} + +build: + number: 0 + noarch: python + script_env: + - SETUPTOOLS_SCM_PRETEND_VERSION={{ version }} + script: | + cd scripts + {{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir -vvv + run_exports: + - {{ pin_subpackage(name|lower, max_pin="x") }} + +requirements: + host: + - python >=3.11 + - pip + run: + - python >=3.11 + - setuptools >=67.4.0 + - numpy >=1.23.2 + - pandas >=2.2.0 + - geojson >=3.0.1 + - pyproj >=3.4.1 + - dendropy >=4.5.2 + - geopandas >=0.12.2 + - rasterio >=1.3.6 + - rioxarray >=0.14.0 + - bottleneck >=1.3.7 + - gdal >=3.3.0 + +test: + commands: + - spread --help + - rates --help + - regions --help + - raster --help + - reprojection --help + - trimming --help + +about: + home: https://github.com/GuyBaele/SpreadGL + license: MIT + summary: 'Visualising pathogen dispersal in a high-performance browser application' + license_family: MIT + doc_url: https://github.com/GuyBaele/SpreadGL + +extra: + identifiers: + - doi:10.1101/2024.06.04.24308447 diff --git a/recipes/squigulator/build.sh b/recipes/squigulator/build.sh index 892f6dafecd1c..ef6581b36ea81 100644 --- a/recipes/squigulator/build.sh +++ b/recipes/squigulator/build.sh @@ -1,4 +1,7 @@ #!/bin/bash -make CC=$CC CXX=$CXX + +set -xe + +make -j ${CPU_COUNT} CC=$CC CXX=$CXX mkdir -p $PREFIX/bin cp squigulator $PREFIX/bin/squigulator diff --git a/recipes/squigulator/meta.yaml b/recipes/squigulator/meta.yaml index e55f517d8a142..087ddfe0ea226 100644 --- a/recipes/squigulator/meta.yaml +++ b/recipes/squigulator/meta.yaml @@ -1,5 +1,5 @@ {% set name = "squigulator" %} -{% set version = "0.3.0" %} +{% set version = "0.4.0" %} package: name: {{ name }} @@ -7,10 +7,10 @@ package: source: url: https://github.com/hasindu2008/squigulator/releases/download/v{{ version }}/squigulator-v{{ version }}-release.tar.gz - sha256: fca1427fe609c20125e679459c1f509b320acf8a44887fa265649607d8a47789 + sha256: b8c895067308fd950581771c5ad80ce3af10a0264c55476145d0ef0a9d437bb7 build: - number: 0 + number: 1 run_exports: - {{ pin_subpackage('squigulator', max_pin="x") }} @@ -38,3 +38,7 @@ about: summary: A tool for simulating nanopore raw signal data description: 'squigulator is a tool for simulating nanopore raw signal data.' +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 diff --git a/recipes/squirrel/meta.yaml b/recipes/squirrel/meta.yaml index 7fb2286ec8471..31fe86f18b49b 100644 --- a/recipes/squirrel/meta.yaml +++ b/recipes/squirrel/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "1.0.8" %} +{% set version = "1.0.10" %} {% set name = "squirrel" %} package: @@ -7,10 +7,10 @@ package: source: url: https://github.com/aineniamh/squirrel/archive/refs/tags/{{ version }}.tar.gz - sha256: 9e89d062f849c0b947a1d469f3864936164ea912645131e5120f86a5e12dc00d + sha256: f59e433906b995004f4e266235b0cfd58d80a08fd63c776d86c1846c8565254e build: - number: 0 + number: 1 noarch: python script: python -m pip install --no-deps --ignore-installed . run_exports: @@ -29,7 +29,7 @@ requirements: - seaborn - gofasta - baltic - - mako ==1.2 + - mako - pandas - iqtree >=2.1 - jclusterfunk >=0.0.25 diff --git a/recipes/srahunter/meta.yaml b/recipes/srahunter/meta.yaml index 2efaca256b3a9..2f3de29f283d5 100644 --- a/recipes/srahunter/meta.yaml +++ b/recipes/srahunter/meta.yaml @@ -1,5 +1,5 @@ {% set name = "srahunter" %} -{% set version = "0.0.2" %} +{% set version = "0.0.3" %} package: name: {{ name|lower }} @@ -7,12 +7,12 @@ package: source: url: https://github.com/GitEnricoNeko/srahunter/archive/refs/tags/{{version}}.tar.gz - sha256: 635dbea61296fc84857b8290fb8858b5dbc26301031d8fce3a5de2e340c78740 + sha256: f8efc31a28f84bbf62aa4b9b5b78703273ed3b6fdc29a36edc9f835838e6dd2b build: entry_points: - srahunter=scripts.cli:main noarch: python - script: {{ PYTHON }} -m pip install . --no-build-isolation --no-deps -vvv + script: {{ PYTHON }} -m pip install . --no-build-isolation --no-deps --no-cache-dir -vvv number: 0 run_exports: - {{ pin_subpackage('srahunter', max_pin="x") }} @@ -21,6 +21,7 @@ requirements: host: - python >=3.6 - pip + - setuptools run: - datavzrd - entrez-direct @@ -34,13 +35,12 @@ requirements: test: commands: - - pip check - srahunter --help - requires: - - pip about: home: https://github.com/GitEnricoNeko/srahunter license: MIT + license_family: MIT license_file: LICENSE summary: "srahunter is a tool for processing SRA accession numbers." + dev_url: https://github.com/GitEnricoNeko/srahunter diff --git a/recipes/srnamapper/meta.yaml b/recipes/srnamapper/meta.yaml index 93f52db87400d..517d9908d7844 100644 --- a/recipes/srnamapper/meta.yaml +++ b/recipes/srnamapper/meta.yaml @@ -1,19 +1,19 @@ {% set name = "srnaMapper" %} -{% set version = "1.0.10" %} +{% set version = "1.0.11" %} package: name: {{ name|lower }} version: {{ version }} build: - number: 1 + number: 0 run_exports: - {{ pin_subpackage(name|lower, max_pin="x") }} source: git_url: https://github.com/mzytnicki/srnaMapper.git git_rev: {{ version }} - sha256: 2f0ae9a7302243977195a1eb1857c7d34f3b4c537fc0e324ec338e18799e389f + sha256: 582b2f891ae181cf9754cd5d8968dc1eafa0f1d5978d7f8d588f1136a005e467 requirements: build: diff --git a/recipes/straglr/meta.yaml b/recipes/straglr/meta.yaml index 88b99b723b0dd..12c98c8e8497c 100644 --- a/recipes/straglr/meta.yaml +++ b/recipes/straglr/meta.yaml @@ -1,13 +1,13 @@ {% set name = "straglr" %} -{% set version = "1.5.1" %} +{% set version = "1.5.2" %} package: name: {{ name }} version: {{ version }} source: - url: https://github.com/bcgsc/straglr/archive/refs/tags/v1.5.1.tar.gz - sha256: 8c65247e9329f5c0b51b83cbf595089efc1d5f4783fc7e8346c05b93e9bc8abe + url: https://github.com/bcgsc/straglr/archive/refs/tags/v1.5.2.tar.gz + sha256: ab04d95e7c5e9465bdf565ad14bd0f46a20482df365b4e8fecd65adb04cf6614 build: noarch: python diff --git a/recipes/strangepg/build.sh b/recipes/strangepg/build.sh index b2d6d2c62ccc8..3040da4a94b98 100644 --- a/recipes/strangepg/build.sh +++ b/recipes/strangepg/build.sh @@ -1,4 +1,7 @@ #!/bin/bash -eu + +set -xe + export CFLAGS="$CFLAGS -I${PREFIX}/include" export LDFLAGS="$LDFLAGS -ldl -lpthread" -make -j install +make -j ${CPU_COUNT} install diff --git a/recipes/strangepg/meta.yaml b/recipes/strangepg/meta.yaml index fd79c9b8764a1..82fa3b810be04 100644 --- a/recipes/strangepg/meta.yaml +++ b/recipes/strangepg/meta.yaml @@ -1,14 +1,13 @@ {% set name = "strangepg" %} -{% set version = "0.8.4" %} -{% set ref = "f7112e4e3a43eef2e747df502a3a1e5e828f24de" %} +{% set version = "0.8.8" %} package: name: {{ name }} version: {{ version }} source: - url: https://github.com/qwx9/{{ name }}/archive/{{ ref }}.tar.gz - sha256: 08f1f22c40b8ab5a0cd92576e8b2cba5cf65726f5d0ddca286f9883a69c5d2e5 + url: https://github.com/qwx9/{{ name }}/archive/refs/tags/{{ version }}.tar.gz + sha256: 3d9accaaae14f408eb6a3f09588e79debcab122d9db9626086087fbdc9bf4b72 build: number: 0 @@ -58,6 +57,8 @@ about: license_file: LICENSE extra: + additional-platforms: + - linux-aarch64 recipe-maintainers: - qwx9 container: diff --git a/recipes/stranger/meta.yaml b/recipes/stranger/meta.yaml index 7c22e48e2acc5..cddbaa9d4f343 100644 --- a/recipes/stranger/meta.yaml +++ b/recipes/stranger/meta.yaml @@ -1,5 +1,5 @@ {% set name = "stranger" %} -{% set version = "0.9.1" %} +{% set version = "0.9.2" %} package: name: "{{ name|lower }}" @@ -7,7 +7,7 @@ package: source: url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: b9322384836e46ed9373fdb30b4e7656ea59d6b293f22692a1b9125b6cb8ca76 + sha256: f27c705b53e27098907f6ff8710ee817408baf75ea26720423bfbf1a2383f013 build: number: 0 diff --git a/recipes/strobealign/meta.yaml b/recipes/strobealign/meta.yaml index e231f790b979e..3e3b6aacbceb0 100644 --- a/recipes/strobealign/meta.yaml +++ b/recipes/strobealign/meta.yaml @@ -1,17 +1,17 @@ -{% set version = "0.13.0" %} +{% set version = "0.14.0" %} package: name: strobealign version: {{ version }} build: - number: 1 + number: 0 run_exports: - {{ pin_subpackage("strobealign", max_pin="x.x") }} source: url: https://github.com/ksahlin/strobealign/archive/refs/tags/v{{ version }}.tar.gz - sha256: 50f1585a8b3b733680067aa7ae20146a7d94d064d9fa234df0715bfcc5289c41 + sha256: d09ee82e0dfc84b10ea2d8a7fd18fe31c10cdc5170068300280a3e1e5bbf99c5 requirements: build: @@ -21,8 +21,10 @@ requirements: - make host: - zlib + - isa-l run: - zlib + - isa-l test: commands: @@ -36,5 +38,6 @@ about: extra: additional-platforms: - linux-aarch64 + - osx-arm64 recipe-maintainers: - marcelm diff --git a/recipes/superdsm/meta.yaml b/recipes/superdsm/meta.yaml index d1a32ebbd7551..c534684f4dabe 100644 --- a/recipes/superdsm/meta.yaml +++ b/recipes/superdsm/meta.yaml @@ -1,5 +1,5 @@ {% set name = "SuperDSM" %} -{% set version = "0.3.0" %} +{% set version = "0.4.0" %} {% set repo_url = "https://github.com/BMCV/SuperDSM" %} {% set docs_url = "https://superdsm.readthedocs.io" %} @@ -9,7 +9,7 @@ package: source: url: "{{ repo_url }}/archive/refs/tags/v{{ version }}.zip" - sha256: 45907ac09bd6fc150bce816194a1d09cccab42b02a418b9387e00bcb89e0ba3f + sha256: a46a150298a8c611b6ed18bebcf67fe1fc98895760acc70291fb5ca3fe435ea5 build: number: 0 @@ -20,26 +20,28 @@ build: requirements: host: - - python >=3.6,<3.11 + - python >=3.11 - pip - setuptools run: - - python >=3.6,<3.11 + - python >=3.11 - blas =*=mkl - ipython >=7.31.1 - - numpy >=1.18,<2.0 - - scipy >=1.6.3,<2.0 - - scikit-image >=0.18,<=0.19 + - numpy >=1.26,<2.0 + - scipy >=1.13.1,<1.14 + - scikit-image >=0.24.0 - dill >=0.3.2 - - cvxopt >=1.2.6,<2.0 - - cvxpy >=1.1.13,<2.0 + - cvxopt >=1.3.2,<2.0 + - cvxpy >=1.5.3,<2.0 - matplotlib-base >=3.0,<4.0 - mkl >=2020.0 - - ray-core >=0.8.7,<1.7 + - ray-core >=0.8.7 + - imagecodecs >=2024.6.1 + - repype >=1.0.0,<1.1 test: commands: - - python -m superdsm.batch --help + - python -m superdsm --help about: home: "{{ repo_url }}" diff --git a/recipes/taxmyphage/meta.yaml b/recipes/taxmyphage/meta.yaml index cad6b75921845..7330003d33a96 100644 --- a/recipes/taxmyphage/meta.yaml +++ b/recipes/taxmyphage/meta.yaml @@ -1,5 +1,5 @@ {% set name = "taxmyphage" %} -{% set version = "0.3.1" %} +{% set version = "0.3.2" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/taxmyphage-{{ version }}.tar.gz - sha256: f3c6638ae347ecab7bef84fad71db1fecc922144a0bda8fe7d430d3bf628f00d + sha256: d15f63ec6a85960aeb9702dd3ad32a39808bab1c8b536a018fda1b12832ebc05 build: entry_points: diff --git a/recipes/tbtamr/meta.yaml b/recipes/tbtamr/meta.yaml index 459fa16a643f1..c2417217da084 100644 --- a/recipes/tbtamr/meta.yaml +++ b/recipes/tbtamr/meta.yaml @@ -1,6 +1,6 @@ {% set name = "tbtamr" %} -{% set version = "0.0.4" %} -{% set sha256 = "72db1eb835574f02b0d7768e6b04e310bd2229d0f684100004b20a133eecd882" %} +{% set version = "1.0.2" %} +{% set sha256 = "3b1e669a015ed7bb40977c104ae22f3a4e1e49f07c84b7043f0e6b21c8a0957a" %} package: name: "{{ name }}" @@ -12,22 +12,20 @@ source: build: noarch: python - number: 1 + number: 0 entry_points: - tbtamr=tbtamr.tbtamr:main run_exports: - {{ pin_subpackage('tbtamr', max_pin="x.x") }} - script: "{{ PYTHON }} -m pip install . --no-deps --ignore-installed -vv " + script: "{{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir -vvv" requirements: host: - - python >=3.8 + - python >=3.10 - pip run: - - python >=3.8 - - psutil + - python >=3.10 - pandas - - csvtk - bwa - samtools =1.12 - snpeff =5.0 @@ -39,7 +37,12 @@ requirements: - xlsxwriter - requests - tqdm - + - joblib + - pydantic + - pytest + - tabulate + - unidecode + - pysam test: imports: @@ -53,6 +56,7 @@ about: license_file: LICENSE license_family: "GPL3" summary: "A tool implementing TB-Profiler for reporting of genomic DST for M. tuberculosis in a CPHL" + dev_url: "https://github.com/MDU-PHL/tbtamr" extra: recipe-maintainers: diff --git a/recipes/tefinder/build.sh b/recipes/tefinder/build.sh new file mode 100644 index 0000000000000..62add9417c48d --- /dev/null +++ b/recipes/tefinder/build.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +mkdir -p ${PREFIX}/bin + +export INCLUDES="-I${PREFIX}/include" +export LIBPATH="-L${PREFIX}/lib" +export CXXFLAGS="${CXXFLAGS} -O3 -I${PREFIX}/include" +export LDFLAGS="${LDFLAGS} -L${PREFIX}/lib" + +if [[ `uname` == "Darwin" ]]; then + export CONFIG_ARGS="-DCMAKE_FIND_FRAMEWORK=NEVER -DCMAKE_FIND_APPBUNDLE=NEVER" +else + export CONFIG_ARGS="" +fi + +cmake -S . -B build -DCMAKE_INSTALL_PREFIX="${PREFIX}" \ + -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER="${CXX}" \ + -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ + "${CONFIG_ARGS}" +cmake --build build --target install -j "${CPU_COUNT}" -v + +chmod 0755 bin/* +mv bin/* ${PREFIX}/bin diff --git a/recipes/tefinder/meta.yaml b/recipes/tefinder/meta.yaml new file mode 100644 index 0000000000000..5bf3b91c2d4b0 --- /dev/null +++ b/recipes/tefinder/meta.yaml @@ -0,0 +1,37 @@ +{% set name = "tefinder" %} +{% set version = "2.32" %} + +package : + name: {{ name }} + version: {{ version }} + +build: + number: 0 + run_exports: + - {{ pin_subpackage( 'tefinder', max_pin="x") }} + +source: + url: https://urgi.versailles.inra.fr/download/repet/te_finder_light-{{ version }}.tar.gz + sha256: 826cb7ba7bf0222126dd468c7cef420316fa11083b78ec6ceaa146e2ff9915ed + +requirements: + build: + - {{ compiler('cxx') }} + - make + - cmake + host: + - cppunit + run: + - blast + - blast-legacy + +about: + home: "https://forgemia.inra.fr/urgi-anagen/te_finder" + license: CeCILL + license_file: LICENSE + summary: "Programs for transposable element search and annotation in large eukaryotic genome sequence." + dev_url: "https://forgemia.inra.fr/urgi-anagen/te_finder" + +test: + commands: + - blaster2.32 -h >> /dev/null diff --git a/recipes/tiberius/build.sh b/recipes/tiberius/build.sh new file mode 100644 index 0000000000000..7db29bf46afdf --- /dev/null +++ b/recipes/tiberius/build.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +mkdir -p ${PREFIX}/bin +cp -R $SRC_DIR/bin/* ${PREFIX}/bin/ +chmod +x ${PREFIX}/bin/tiberius.py +ln -s ${PREFIX}/bin/tiberius.py ${PREFIX}/bin/tiberius +sed -i '1s|^|#!/usr/bin/env python3\n|' ${PREFIX}/bin/tiberius \ No newline at end of file diff --git a/recipes/tiberius/meta.yaml b/recipes/tiberius/meta.yaml new file mode 100644 index 0000000000000..74d57de25be23 --- /dev/null +++ b/recipes/tiberius/meta.yaml @@ -0,0 +1,43 @@ +{% set version = "1.0.0" %} +{% set name = "tiberius" %} + +package: + name: {{ name }} + version: {{ version }} + +source: + url: https://github.com/Gaius-Augustus/Tiberius/archive/refs/tags/v{{ version }}.tar.gz + sha256: 05fc993a72a1881bac2ec85ae412d2a186daf9d5a2bebb60237c8437b3a68da0 + +build: + number: 0 + noarch: python + run_exports: + - {{ pin_subpackage(name, max_pin="x") }} + +requirements: + host: + - python + - pip + run: + - python >=3.7 + - pip + - tensorflow + - transformers + - pyBigWig + - biopython + - bcbio-gff + - requests + - jax + - jaxlib + +test: + commands: + - tiberius -h + +about: + home: https://github.com/Gaius-Augustus/Tiberius + license: MIT + license_file: LICENSE + summary: | + Tiberius is a programme for quantifying and analysing genetic sequence data. \ No newline at end of file diff --git a/recipes/tidk/build.sh b/recipes/tidk/build.sh index 91ef98a0a298d..ea49437fb3a2f 100644 --- a/recipes/tidk/build.sh +++ b/recipes/tidk/build.sh @@ -1,21 +1,6 @@ -#!/bin/bash -e +#!/bin/bash -# taken from https://github.com/bioconda/bioconda-recipes/blob/25ee21573c577aa1ae899e0f7fbbc848d8a63865/recipes/longshot/build.sh - -# this build script is taken from the rust-bio-tools recipe -# https://github.com/bioconda/bioconda-recipes/blob/master/recipes/rust-bio-tools/build.sh - -# taken from yacrd recipe, see: https://github.com/bioconda/bioconda-recipes/blob/2b02c3db6400499d910bc5f297d23cb20c9db4f8/recipes/yacrd/build.sh -if [ "$(uname)" == "Darwin" ]; then - - # apparently the HOME variable isn't set correctly, and circle ci output indicates the following as the home directory - export HOME="/Users/distiller" - export HOME=`pwd` - - # according to https://github.com/rust-lang/cargo/issues/2422#issuecomment-198458960 removing circle ci default configuration solves cargo trouble downloading crates - #git config --global --unset url.ssh://git@github.com.insteadOf - -fi +set -xe # build statically linked binary with Rust -C_INCLUDE_PATH=$PREFIX/include LIBRARY_PATH=$PREFIX/lib cargo install --path . --root $PREFIX +C_INCLUDE_PATH=$PREFIX/include OPENSSL_DIR=$PREFIX LIBRARY_PATH=$PREFIX/lib cargo install --verbose --path . --root "${PREFIX}" --no-track diff --git a/recipes/tidk/meta.yaml b/recipes/tidk/meta.yaml index 6d4db203c6073..636b5da45dfd7 100644 --- a/recipes/tidk/meta.yaml +++ b/recipes/tidk/meta.yaml @@ -1,31 +1,33 @@ -{% set version = "0.2.41" %} +{% set version = "0.2.63" %} package: name: tidk version: {{ version }} build: - number: 0 + number: 1 run_exports: - {{ pin_subpackage('tidk', max_pin="x.x") }} source: - url: https://github.com/tolkit/telomeric-identifier/archive/{{ version }}.tar.gz - sha256: 28cac3506d66ffc7ee37ff48a429663dde68aa23ba5d9b28ee0a6656aeea03d4 + url: https://github.com/tolkit/telomeric-identifier/archive/v{{ version }}.tar.gz + sha256: d6ba68e693523cd74607e63739a75e4cdbb71a621928d22a8ab2e1bc470963f6 requirements: build: - {{ compiler('c') }} - {{ compiler('cxx') }} + - {{ compiler('rust') }} - cmake - make - - rust >=1.52 - pkg-config # [osx] + host: + - openssl + test: commands: - - tidk --help - - tidk --version + - tidk -h about: home: https://github.com/tolkit/telomeric-identifier @@ -33,3 +35,8 @@ about: license_family: MIT summary: | Identify and find telomeres, or telomeric repeats in a genome. + +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 diff --git a/recipes/tissuumaps/meta.yaml b/recipes/tissuumaps/meta.yaml index d3b5a1c418492..ae769341e2447 100644 --- a/recipes/tissuumaps/meta.yaml +++ b/recipes/tissuumaps/meta.yaml @@ -4,7 +4,7 @@ # - add pyqt6 (or possibly pyqt>=6) dependency # Until then, only the "tissuumaps_server" script is available, not "tissuumaps" -{% set version = "3.2.1.9" %} +{% set version = "3.2.1.10" %} package: name: tissuumaps @@ -12,7 +12,7 @@ package: source: url: https://github.com/TissUUmaps/TissUUmaps/archive/refs/tags/{{ version }}.tar.gz - sha256: cd859ae51d14d243dd9c3000d5aa5e9e9a6920643b7b5eafdaedbc88d5214a4d + sha256: 126537079ea9fef743b0d2575d4e6cafac1351c465de7bbf0b0ec2b080748e34 build: number: 0 diff --git a/recipes/tooldistillator/meta.yaml b/recipes/tooldistillator/meta.yaml index 278963cd3d1f7..286e22cf02b85 100644 --- a/recipes/tooldistillator/meta.yaml +++ b/recipes/tooldistillator/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "0.9" %} -{% set sha256 = "e2b52e29971ef0da84d9bb8370db060dbc6c58fc61e509e852d297b3d7648817" %} +{% set version = "0.9.1" %} +{% set sha256 = "54e107b0ffa3bde988ca9a77cb3c74111f463f33b8c161c652990953a4cdc4c2" %} context: {} diff --git a/recipes/tr-trimmer/build.sh b/recipes/tr-trimmer/build.sh new file mode 100644 index 0000000000000..e5cb5faa26a8b --- /dev/null +++ b/recipes/tr-trimmer/build.sh @@ -0,0 +1,7 @@ +#!/bin/bash -euo + +set -xe + +# build statically linked binary with Rust +cargo-bundle-licenses --format yaml --output THIRDPARTY.yml +RUST_BACKTRACE=1 cargo install --verbose --locked --no-track --root $PREFIX --path . \ No newline at end of file diff --git a/recipes/tr-trimmer/meta.yaml b/recipes/tr-trimmer/meta.yaml new file mode 100644 index 0000000000000..5e5e01cfaad7d --- /dev/null +++ b/recipes/tr-trimmer/meta.yaml @@ -0,0 +1,38 @@ +{% set version = "0.1.0" %} + +package: + name: tr-trimmer + version: {{ version }} + +build: + number: 0 + run_exports: + - {{ pin_subpackage("tr-trimmer", max_pin="x") }} + +source: + url: https://github.com/apcamargo/tr-trimmer/archive/v{{ version }}.tar.gz + sha256: ff063dcf3dbe23bee3c9f0d47808c0859fd79ccf0caed20642ebc0e4e38e917c + +requirements: + build: + - {{ compiler('rust') }} + - cargo-bundle-licenses + host: + run: + +test: + commands: + - tr-trimmer --help + +about: + home: https://github.com/apcamargo/tr-trimmer + license: MIT + license_file: + - LICENSE + - THIRDPARTY.yml + summary: Identify and trim terminal repeats from sequences in FASTA files + +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 \ No newline at end of file diff --git a/recipes/tracs/meta.yaml b/recipes/tracs/meta.yaml index 27dd65f6653b3..1c9270772a9a9 100644 --- a/recipes/tracs/meta.yaml +++ b/recipes/tracs/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "1.0.0" %} +{% set version = "1.0.1" %} {% set name = "tracs" %} package: @@ -7,10 +7,10 @@ package: source: url: https://github.com/gtonkinhill/{{ name|lower }}/archive/v{{ version }}.tar.gz - sha256: 8950cf46bf53160b03c639cf9c1aaca43e506ac60b081d3ba7ee0a3b61c800f9 + sha256: ea54a443c2a1a2bda7bb4dc9b79f79ffe5bfffc340ef8e6cc61f1df249ba4e5c build: - number: 0 + number: 1 script: "{{ PYTHON }} -m pip install . --no-deps --no-build-isolation --no-cache-dir -vvv" run_exports: - {{ pin_subpackage('tracs', max_pin="x") }} @@ -25,7 +25,8 @@ requirements: - pybind11 - boost-cpp - zlib - - llvm-openmp + - libgomp # [linux] + - llvm-openmp # [osx] run: - python >=3.12 - numpy @@ -61,4 +62,9 @@ about: license_family: MIT license_file: LICENSE summary: 'Tracs - Fast pairwise transmission inference from single genome and/or metagenomic data' - doc_url: https://github.com/gtonkinhill/tracs/tree/main/docs \ No newline at end of file + doc_url: https://github.com/gtonkinhill/tracs/tree/main/docs + +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64 \ No newline at end of file diff --git a/recipes/trgt/build.sh b/recipes/trgt/build.sh deleted file mode 100644 index 65c729ab1d289..0000000000000 --- a/recipes/trgt/build.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -mkdir -p "${PREFIX}"/bin -gunzip *.gz -mv trvz* trvz -mv trgt* trgt -chmod +x trvz -chmod +x trgt -cp trvz "${PREFIX}"/bin/ -cp trgt "${PREFIX}"/bin/ - diff --git a/recipes/trgt/meta.yaml b/recipes/trgt/meta.yaml index 030c04cde40a0..bb87d98169589 100644 --- a/recipes/trgt/meta.yaml +++ b/recipes/trgt/meta.yaml @@ -1,35 +1,39 @@ {% set name = "trgt" %} -{% set version = "0.9.0" %} -{% set trgt_sha256 = "fba2edb311c2ea4f15ae1e0f1b464ae470a73f803d12630b8ea6dbeeff3cc3f9" %} -{% set trvz_sha256 = "08dcb1e5ca9d317140f26d635b323d12a8384b1263fda542e293effb2ca81280" %} +{% set version = "1.2.0" %} +{% set trgt_sha256 = "5dec0943d3400fd1677236fa35737e5a442a486fac55188029c3c9164edb3d23" %} package: name: {{ name }} version: {{ version }} -source: - - url: https://github.com/PacificBiosciences/trgt/releases/download/v{{ version }}/trgt-v{{ version }}-linux_x86_64.gz - sha256: {{ trgt_sha256 }} - - url: https://github.com/PacificBiosciences/trgt/releases/download/v{{ version }}/trvz-v{{ version }}-linux_x86_64.gz - sha256: {{ trvz_sha256 }} +source: + - url: https://github.com/PacificBiosciences/trgt/releases/download/v{{ version }}/trgt-v{{ version }}-x86_64-unknown-linux-gnu.tar.gz # [linux64] + sha256: {{ trgt_sha256 }} # [linux64] about: home: https://github.com/PacificBiosciences/trgt - license: BSD-3-Clause-Clear + license: Pacific Biosciences Software License (https://github.com/PacificBiosciences/trgt/blob/main/LICENSE.md) summary: Tandem repeat genotyping and visualization from PacBio HiFi data -extra: - recipe-maintainers: - - zeeev - - williamrowell - build: number: 0 - noarch: generic + skip: true # [not linux64] + noarch: false + script: + - mkdir -p ${PREFIX}/bin + - cp trgt ${PREFIX}/bin/ + - chmod +x ${PREFIX}/bin/trgt run_exports: - {{ pin_subpackage('trgt', max_pin="x") }} test: commands: - trgt --version - - trvz --version + +extra: + recipe-maintainers: + - zeeev + - williamrowell + - tmokveld + skip-lints: + - should_be_noarch_generic diff --git a/recipes/trnascan-se/build.sh b/recipes/trnascan-se/build.sh index f4f88fa388ac6..e3460852a2275 100644 --- a/recipes/trnascan-se/build.sh +++ b/recipes/trnascan-se/build.sh @@ -1,5 +1,6 @@ #!/bin/bash +export M4="${BUILD_PREFIX}/bin/m4" export INCLUDE_PATH=${PREFIX}/include export LIBRARY_PATH=${PREFIX}/lib export LDFLAGS="${LDFLAGS} -L${PREFIX}/lib" @@ -7,7 +8,10 @@ export CFLAGS="${CFLAGS} -O3 -I${PREFIX}/include ${LDFLAGS}" sed -i.bak '1 s|^.*$|#!/usr/bin/env perl|g' tRNAscan-SE.src sed -i.bak '1 s|^.*$|#!/usr/bin/env perl|g' src/instman.pl +rm -rf *.bak +rm -rf src/*.bak +autoreconf -if ./configure CC="${CC}" CFLAGS="${CFLAGS}" --prefix="${PREFIX}" make diff --git a/recipes/trnascan-se/meta.yaml b/recipes/trnascan-se/meta.yaml index 5d8c1c2ed9f80..48596fa090ce3 100644 --- a/recipes/trnascan-se/meta.yaml +++ b/recipes/trnascan-se/meta.yaml @@ -1,16 +1,18 @@ {% set name = "tRNAscan-SE" %} {% set version = "2.0.12" %} -{% set sha256 = "96fa4af507cd918c1c623763d9260bd6ed055d091662b44314426f6bbf447251" %} +{% set sha256 = "4b255c2c5e0255381194166f857ab2ea21c55aa7de409e201333ba615aa3dc61" %} package: name: {{ name|lower }} version: {{ version }} build: - number: 0 + number: 1 + run_exports: + - {{ pin_subpackage('trnascan-se', max_pin="x") }} source: - url: http://trna.ucsc.edu/software/trnascan-se-{{ version }}.tar.gz + url: https://github.com/UCSC-LoweLab/tRNAscan-SE/archive/refs/tags/v{{ version }}.tar.gz sha256: {{ sha256 }} patches: - patches/libdir.patch @@ -21,6 +23,7 @@ requirements: - make - autoconf - automake + - libtool host: - perl run: @@ -32,13 +35,18 @@ test: - tRNAscan-SE -h about: - home: "http://lowelab.ucsc.edu/tRNAscan-SE/" - license: GPLv3 + home: "https://lowelab.ucsc.edu/tRNAscan-SE/" + license: "GPL-3.0-or-later" + license_family: GPL3 license_file: LICENSE summary: tRNA detection in large-scale genomic sequences - doc_url: "http://lowelab.ucsc.edu/tRNAscan-SE/help.html" + doc_url: "https://lowelab.ucsc.edu/tRNAscan-SE/help.html" + dev_url: "https://github.com/UCSC-LoweLab/tRNAscan-SE" extra: identifiers: - biotools:trnascan-se - doi:10.1093/nar/gkab688 + additional-platforms: + - linux-aarch64 + - osx-arm64 diff --git a/recipes/varlociraptor/meta.yaml b/recipes/varlociraptor/meta.yaml index 1a5931af0a496..571d69adc5e48 100644 --- a/recipes/varlociraptor/meta.yaml +++ b/recipes/varlociraptor/meta.yaml @@ -1,5 +1,5 @@ {% set name = "varlociraptor" %} -{% set version = "8.4.10" %} +{% set version = "8.4.11" %} package: name: {{ name }} @@ -7,7 +7,7 @@ package: source: url: https://github.com/varlociraptor/varlociraptor/archive/v{{ version }}.tar.gz - sha256: 243e24e0da2025d3098319c956f7884d5eca20dbb95ed8695867c223b0cc1fd5 + sha256: 1785d13aee5f37381042bf280bcc1bd4f0306d5f94d22b9ec85b8d76a56ff70a build: number: 0 diff --git a/recipes/vclean/meta.yaml b/recipes/vclean/meta.yaml index 53c1c665879db..64dbe96be5c08 100644 --- a/recipes/vclean/meta.yaml +++ b/recipes/vclean/meta.yaml @@ -1,5 +1,5 @@ {% set name = "vclean" %} -{% set version = "0.1.3" %} +{% set version = "0.2.1" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/vclean-{{ version }}.tar.gz - sha256: ba9fb9e317254db3bb89c82810f238a7d78e3aba3a4a187cdacf9acd0adcffac + sha256: 17aa09563d96b7f06b4052fc73a764cb9959bf0bc1306bfe0c1a696b4a08088c build: entry_points: diff --git a/recipes/vembrane/meta.yaml b/recipes/vembrane/meta.yaml index 5081f8ba543dd..0c4003b0d066e 100644 --- a/recipes/vembrane/meta.yaml +++ b/recipes/vembrane/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "1.0.6" %} +{% set version = "1.0.7" %} package: name: vembrane @@ -6,7 +6,7 @@ package: source: url: https://pypi.io/packages/source/v/vembrane/vembrane-{{ version }}.tar.gz - sha256: 941fcb10cc61c3d3fcaa87d1ab7e230c87f1ce625975402a0139eef0acc03fc2 + sha256: 4e94ff702662d2b2cd3043525500c250661a51a39dec69ca4ef94d17ceb51892 build: number: 0 diff --git a/recipes/verkko/build.sh b/recipes/verkko/build.sh index c8c5821281933..72be8124e90ef 100644 --- a/recipes/verkko/build.sh +++ b/recipes/verkko/build.sh @@ -1,6 +1,8 @@ #!/bin/bash set -ex +mkdir -p "$PREFIX/bin" + # taken from yacrd recipe, see: https://github.com/bioconda/bioconda-recipes/blob/2b02c3db6400499d910bc5f297d23cb20c9db4f8/recipes/yacrd/build.sh if [ "$(uname)" == "Darwin" ]; then @@ -10,6 +12,10 @@ if [ "$(uname)" == "Darwin" ]; then mkdir -p $HOME/.cargo/registry/index/ fi +export LDFLAGS="${LDFLAGS} -L${PREFIX}/lib" +export CFLAGS="${CFLAGS} -O3" +export CXXFLAGS="${CXXFLAGS} -O3 -I${PREFIX}/include" + # on osx we remove the built-in boost and make sure todepend on the system boost pushd src if [ "$(uname)" == "Darwin" ]; then @@ -18,6 +24,5 @@ fi make clean && make -j$CPU_COUNT popd -mkdir -p "$PREFIX/bin" cp -rf bin/* $PREFIX/bin/ cp -rf lib/* $PREFIX/lib/ diff --git a/recipes/verkko/meta.yaml b/recipes/verkko/meta.yaml index e16ea34db298b..bc812c97aaa3a 100644 --- a/recipes/verkko/meta.yaml +++ b/recipes/verkko/meta.yaml @@ -1,5 +1,5 @@ {% set name = "verkko" %} -{% set version = "2.2" %} +{% set version = "2.2.1" %} package: name: {{ name|lower }} @@ -7,10 +7,9 @@ package: source: url: https://github.com/marbl/{{ name }}/releases/download/v{{ version }}/{{ name }}-v{{ version }}.tar.gz - sha256: 77a6c8e041bc7dd61f724dcafa6ce6bf1ddc3aed163d17536e9612824293cfba - + sha256: 4ab40961352cac22eebfb37606c82bb5a589f9361c36430e7278227e62db3860 patches: - - osx_availability.patch # [osx] + - osx_availability.patch # [osx] build: number: 0 @@ -20,20 +19,20 @@ build: requirements: build: - make - - llvm-openmp # [osx] - - libgomp # [linux] - - htslib - {{ compiler('cxx') }} - rust >=1.74 host: - - boost-cpp >=1.56 #[osx] + - boost-cpp >=1.56 #[osx] - llvm-openmp # [osx] - - libgomp # [linux] + - libgomp # [linux] - gsl - zlib - htslib run: - python >=3.9 + - boost-cpp >=1.56 #[osx] + - llvm-openmp # [osx] + - libgomp # [linux] - pulp <=2.7.0 - perl >=5.6 - seqtk @@ -57,12 +56,12 @@ test: - verkko --version about: - home: https://github.com/marbl/verkko + home: "https://github.com/marbl/verkko" license: CC0 license_file: README.licenses summary: "A hybrid genome assembly pipeline developed for telomere-to-telomere assembly of accurate (HiFi, ONT Duplex, ONT HERRO) and long (ONT UL) reads." dev_url: "https://github.com/marbl/verkko" - doc_url: "https://github.com/marbl/verkko/blob/master/README.md" + doc_url: "https://github.com/marbl/verkko/blob/v{{ version }}/README.md" extra: identifiers: diff --git a/recipes/verkko/osx_availability.patch b/recipes/verkko/osx_availability.patch index 0386fd5187537..69344ea5b476f 100644 --- a/recipes/verkko/osx_availability.patch +++ b/recipes/verkko/osx_availability.patch @@ -1,43 +1,3 @@ -diff --git a/src/Makefile.boilermake b/src/Makefile.boilermake -index 7e2b929..2dfc3b1 100644 ---- a/src/Makefile.boilermake -+++ b/src/Makefile.boilermake -@@ -160,11 +160,18 @@ endef - define ADD_FILE_COPY_RULE - doall: $${TARGET_DIR}/$2 - ifeq ($3,executable) -+ ifeq ($(suffix $(1)),.sh) - $${TARGET_DIR}/$2: $1 - @mkdir -p $$(dir $${TARGET_DIR}/$2) - cat $1 |sed s/'version=""'/'version="$(VERSION)"'/g > $${TARGET_DIR}/$2 - chmod +x $${TARGET_DIR}/$2 - else -+ $${TARGET_DIR}/$2: $1 -+ @mkdir -p $$(dir $${TARGET_DIR}/$2) -+ cp $1 $${TARGET_DIR}/$2 -+ chmod +x $${TARGET_DIR}/$2 -+ endif -+ else - $${TARGET_DIR}/$2: $1 - @mkdir -p $$(dir $${TARGET_DIR}/$2) - cp -pf $1 $${TARGET_DIR}/$2 -diff --git a/src/Makefile b/src/Makefile -index 67975ff..6a0d332 100644 ---- a/src/Makefile -+++ b/src/Makefile -@@ -127,9 +127,9 @@ define SET_DEFAULT_FLAGS - else - TOOLCHAIN := LLVM - TOOLCHAINV := $$(shell ${CXX} -dumpversion) -- CFLAGS := -pthread -fopenmp -fPIC -std=c17 ${1} -- CXXFLAGS := -pthread -fopenmp -fPIC -std=c++20 ${1} -- LDFLAGS := -pthread -fopenmp ${2} -lm -+ CFLAGS := -DBOOST_NO_CXX98_FUNCTION_BASE -pthread -fopenmp -fPIC -std=c17 ${1} -+ CXXFLAGS := -DBOOST_NO_CXX98_FUNCTION_BASE -pthread -fopenmp -fPIC -std=c++20 ${1} -+ LDFLAGS := -DBOOST_NO_CXX98_FUNCTION_BASE -pthread -fopenmp ${2} -lm - endif - - # Build up our preferred set of flags. diff --git a/src/MBG/makefile b/src/MBG/makefile index 0c0113b..c6fd847 100644 --- a/src/MBG/makefile diff --git a/recipes/verkko/version.patch b/recipes/verkko/version.patch deleted file mode 100644 index 65a9a043a84a7..0000000000000 --- a/recipes/verkko/version.patch +++ /dev/null @@ -1,33 +0,0 @@ -diff --git a/src/Makefile b/src/Makefile -index 5f33ff4..25c2285 100644 ---- a/src/Makefile -+++ b/src/Makefile -@@ -301,7 +301,7 @@ - $${OBJS}: SRC_CFLAGS := $${$${TGT}_CFLAGS} $${SRC_CFLAGS} - $${OBJS}: SRC_CXXFLAGS := $${$${TGT}_CXXFLAGS} $${SRC_CXXFLAGS} - $${OBJS}: SRC_DEFS := $$(addprefix -D,$${$${TGT}_DEFS} $${SRC_DEFS}) -- $${OBJS}: SRC_INCDIRS := $$(addprefix -I,\ -+ $${OBJS}: SRC_INCDIRS := $$(addprefix -iquote,\ - $${$${TGT}_INCDIRS} $${SRC_INCDIRS}) - endif - -@@ -389,7 +389,7 @@ - ALL_TGTS := - DEFS := - DIR_STACK := --INCDIRS := -+INCDIRS := utgcns/libboost - TGT_STACK := - - # Discover our OS and architecture. These were previously used to set -@@ -703,7 +703,7 @@ - - # Perform post-processing on global variables as needed. - DEFS := $(addprefix -D,${DEFS}) --INCDIRS := $(addprefix -I,$(call CANONICAL_PATH,${INCDIRS})) --VERSION := verkko release v2.1 -+INCDIRS := $(addprefix -isystem,$(call CANONICAL_PATH,${INCDIRS})) -+VERSION := bioconda $(PKG_NAME) bioconda $(PKG_VERSION) - - # Define the "all" target (which simply builds all user-defined targets) as the - # default goal. diff --git a/recipes/versionix/meta.yaml b/recipes/versionix/meta.yaml index 6e3ae36edb194..972d658a672d8 100644 --- a/recipes/versionix/meta.yaml +++ b/recipes/versionix/meta.yaml @@ -1,5 +1,5 @@ {% set name = "versionix" %} -{% set version = "0.2.4" %} +{% set version = "0.99.1" %} package: name: {{ name|lower }} @@ -7,13 +7,13 @@ package: source: url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/versionix-{{ version }}.tar.gz - sha256: f78960fff3863d5bf02fa8b6e841a4350b5fa2f5ffff409a94083b66f729cf75 + sha256: 022f28a65406b34160c1ad27c543ac0167f0bcacb960dcb9ca00bc588a425304 build: entry_points: - versionix = versionix.scripts:main noarch: python - script: {{ PYTHON }} -m pip install . -vvv --no-deps --no-build-isolation + script: {{ PYTHON }} -m pip install . -vvv --no-deps --no-build-isolation --no-cache-dir number: 0 run_exports: - {{ pin_subpackage('versionix', max_pin="x") }} @@ -24,9 +24,10 @@ requirements: - pip - poetry-core >=1.0.0 run: - - python >=3.8.0 + - python >=3.8 - click >=8.1.7 - rich-click + - colorlog test: imports: @@ -36,7 +37,8 @@ test: about: home: https://github.com/sequana/versionix - summary: Get version of any tools + summary: "Get version of any tools." license: BSD-3-Clause license_family: BSD license_file: LICENSE + dev_url: https://github.com/sequana/versionix diff --git a/recipes/viroconstrictor/meta.yaml b/recipes/viroconstrictor/meta.yaml index 2b1e0d8c2d406..02fab0c888d7d 100644 --- a/recipes/viroconstrictor/meta.yaml +++ b/recipes/viroconstrictor/meta.yaml @@ -1,5 +1,5 @@ {% set name = "ViroConstrictor" %} -{% set version = "1.4.4" %} +{% set version = "1.4.6" %} package: name: {{ name|lower }} @@ -7,7 +7,7 @@ package: source: url: https://github.com/RIVM-bioinformatics/ViroConstrictor/archive/v{{ version }}.tar.gz - sha256: 79e0ba6bcc817e203181e64b840db99f4c27b260d0aa8ab9caffded692bd23c9 + sha256: 9485d1755f135357272fafadf2c0a4e681a975e78662ff1d54d2fd6c75a24879 build: noarch: python @@ -40,7 +40,7 @@ requirements: - snakemake >=7.15.2, < 8 - aminoextract ==0.3.1 - conda - - mamba + - mamba >=1.5.0, <2.0.0 test: imports: @@ -63,5 +63,6 @@ about: extra: recipe-maintainers: - florianzwagemaker - - KHajji + - raaijmag + - wolthuisr - ids-bioinformatics diff --git a/recipes/vitap/meta.yaml b/recipes/vitap/meta.yaml index 7b8d4f94b6d99..618a68d172a99 100644 --- a/recipes/vitap/meta.yaml +++ b/recipes/vitap/meta.yaml @@ -1,5 +1,5 @@ {% set name = "vitap" %} -{% set version = "1.5" %} +{% set version = "1.7" %} package: name: "{{ name|lower }}" @@ -7,10 +7,10 @@ package: source: url: https://github.com/DrKaiyangZheng/VITAP/archive/refs/tags/v.{{ version }}.tar.gz - sha256: 4384925f0f6f53f08eb2a16cabc3ea325efd39a7e76139803668744b030b1d9a + sha256: 9b33447b2ca4f459ba856dbeb4947bee6b8dab9b158a9d0a3c8b863f66c086d5 build: - number: 0 + number: 1 noarch: python run_exports: - {{ pin_subpackage('vitap', max_pin='x') }} @@ -32,7 +32,7 @@ requirements: - diamond >=0.9 - entrez-direct =16.2 - seqkit >=2.5.1 - - prodigal-gv >=2.6 + - prodigal >=2.6 test: commands: @@ -46,4 +46,5 @@ about: license_family: GPL summary: Viral Taxonomic Assignment Pipeline doc_url: https://github.com/DrKaiyangZheng/VITAP/blob/main/README.md - description: Viral Taxonomic Assignment Pipeline (VITAP) is a cutting-edge tool designed to address the growing need for accurate and comprehensive classification of DNA and RNA viral sequences. By integrating alignment-based techniques with graph theory, VITAP achieves high precision in classifying viral sequences, including those as short as 1000 base pairs, down to the genus level. + description: Viral Taxonomic Assignment Pipeline (VITAP) is a cutting-edge tool designed to address the growing need for accurate and comprehensive taxonomic assignments of DNA and RNA viral sequences. By integrating alignment-based techniques with graph theory, VITAP achieves high precision in classifying viral sequences, including those as short as 1000 base pairs, down to the genus level. + diff --git a/recipes/vsearch/meta.yaml b/recipes/vsearch/meta.yaml index 7cee8874d5bbb..f3b2d947ad235 100644 --- a/recipes/vsearch/meta.yaml +++ b/recipes/vsearch/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "2.28.1" %} -{% set sha256 = "4f8bf0ad43fef77e573d152b59f55a1f81eb84c22d6545911757e6108f8de21c" %} +{% set version = "2.29.0" %} +{% set sha256 = "2c5bd0d9b3c2ec8eecd1af06ae11611138d87fdfecfa423ae791d52dccd27e63" %} package: name: vsearch @@ -10,7 +10,7 @@ source: sha256: '{{ sha256 }}' build: - number: 1 + number: 0 run_exports: - {{ pin_subpackage('vsearch', max_pin="x") }} diff --git a/recipes/vsnp3/meta.yaml b/recipes/vsnp3/meta.yaml index 426ab6cdc0a41..d816791c62ea2 100644 --- a/recipes/vsnp3/meta.yaml +++ b/recipes/vsnp3/meta.yaml @@ -1,7 +1,7 @@ {% set user = "USDA-VS" %} {% set name = "vsnp3" %} -{% set version = "3.25" %} -{% set sha256 = "04af483d78019bc6ed9f2df028d7be7db2d5ad55acd2459f4bb1a28f2df83181" %} +{% set version = "3.26" %} +{% set sha256 = "7d83019dd8537d686f66d17610722d636d2e918aed563db175fc4f3d3e9807f0" %} package: diff --git a/recipes/wally/meta.yaml b/recipes/wally/meta.yaml index a3e561ae1a3cd..26a0beaba7985 100644 --- a/recipes/wally/meta.yaml +++ b/recipes/wally/meta.yaml @@ -1,5 +1,5 @@ -{% set version = "0.5.9" %} -{% set sha256 = "ab4a73062076ae0dea08a50cab8b0344e40b3a8f888e8e9a11c77a9e1887d698" %} +{% set version = "0.6.1" %} +{% set sha256 = "8c83808b112996cef6557cd0f26d4de9b96722ce7cb1c2fa482c8af32ef1c422" %} package: name: wally diff --git a/recipes/woltka/meta.yaml b/recipes/woltka/meta.yaml index f5fdbff852898..90ac9b472e926 100644 --- a/recipes/woltka/meta.yaml +++ b/recipes/woltka/meta.yaml @@ -1,50 +1,47 @@ {% set name = "woltka" %} -{% set version = "0.1.6" %} +{% set version = "0.1.7" %} package: - name: "{{ name|lower }}" - version: "{{ version }}" + name: {{ name|lower }} + version: {{ version }} source: - url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz" - sha256: d1ffe069515284f6350e3129b5fa3a65b4a583105282c5af0a3997c30b7f8e99 + url: https://pypi.org/packages/source/{{ name[0] }}/{{ name }}/woltka-{{ version }}.tar.gz + sha256: 7958b10a4f33511fd82c740cdb461fc03d1b7932e00ac6746b6eb5d8de3880f5 build: - number: 0 - noarch: python entry_points: - - woltka=woltka.cli:cli - script: "{{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation" + - woltka = woltka.cli:cli + noarch: python + script: {{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + number: 0 run_exports: - {{ pin_subpackage("woltka", max_pin="x.x") }} requirements: host: - - biom-format + - python >=3.6 + - hatchling - pip - - python - - setuptools run: + - python >=3.6 + - numba - biom-format - - python - - setuptools test: imports: - woltka - - woltka.q2 - - woltka.tests commands: + - pip check - woltka --help + requires: + - pip about: - home: "https://github.com/qiyunzhu/woltka" + home: https://github.com/qiyunzhu/woltka + summary: versatile meta-omic data classifier license: BSD-3-Clause - license_family: BSD license_file: LICENSE - summary: "versatile meta-omic data classifier" - doc_url: - dev_url: extra: recipe-maintainers: diff --git a/recipes/yahs/Makefile.patch b/recipes/yahs/Makefile.patch index 347d4e9d7231d..263e6bffe6e59 100644 --- a/recipes/yahs/Makefile.patch +++ b/recipes/yahs/Makefile.patch @@ -1,10 +1,10 @@ diff --git a/Makefile b/Makefile -index 2174509..f7b8646 100644 +index 1cb880c..1c2283f 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ --CFLAGS= -g -O0 -Wall -fno-strict-aliasing -+CFLAGS += -g -O0 -Wall -fno-strict-aliasing +-CFLAGS= -O3 -Wall -fno-strict-aliasing ++CFLAGS += -O3 -Wall -fno-strict-aliasing CPPFLAGS= INCLUDES= OBJS= diff --git a/recipes/yahs/build.sh b/recipes/yahs/build.sh index 113e16a0a7912..f8fed6a93fb1c 100644 --- a/recipes/yahs/build.sh +++ b/recipes/yahs/build.sh @@ -1,6 +1,12 @@ +#!/bin/bash + mkdir -p ${PREFIX}/bin -export CFLAGS="-I$PREFIX/include -L$PREFIX/lib" -make + +export CFLAGS="${CFLAGS} -O3 -I$PREFIX/include -L$PREFIX/lib" + +make -j"${CPU_COUNT}" CC="${CC}" CFLAGS="${CFLAGS}" + +chmod 0755 yahs agp_to_fasta juicer mv yahs ${PREFIX}/bin mv agp_to_fasta ${PREFIX}/bin mv juicer ${PREFIX}/bin diff --git a/recipes/yahs/meta.yaml b/recipes/yahs/meta.yaml index d7a37d8ed4e11..b4cc5e55f410f 100644 --- a/recipes/yahs/meta.yaml +++ b/recipes/yahs/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "1.2a.2" %} +{% set version = "1.2.2" %} package: name: yahs @@ -6,18 +6,20 @@ package: source: url: https://github.com/c-zhou/yahs/archive/refs/tags/v{{ version }}.tar.gz - sha256: c94e62d00f6c8cc1339e2d55845b9b2729fc74831352798d60ba3ff47a09b7a3 + sha256: 9ee37f72ee9f62015fe92029d0fa97eec90963ddf15a2f4b760b45ee2e0014aa patches: - Makefile.patch build: - number: 2 + number: 0 + run_exports: + - {{ pin_subpackage('yahs', max_pin="x") }} requirements: build: - {{ compiler('c') }} - host: - make + host: - zlib test: @@ -29,5 +31,12 @@ test: about: home: https://github.com/c-zhou/yahs license: MIT + license_family: MIT license_file: LICENSE - summary: YaHS, yet another Hi-C scaffolding tool. + summary: "YaHS, yet another Hi-C scaffolding tool." + dev_url: https://github.com/c-zhou/yahs + +extra: + additional-platforms: + - linux-aarch64 + - osx-arm64