Also build a libgf-complete1-sse package, which contains the optimized version of the library.

master
Thomas Goirand 2015-09-18 17:54:49 +02:00
parent ba127b4a1d
commit 30528bf580
7 changed files with 179 additions and 1 deletions

7
debian/changelog vendored
View File

@ -1,3 +1,10 @@
gf-complete (1.0.2-3) unstable; urgency=medium
* Also build a libgf-complete1-sse package, which contains the optimized
version of the library.
-- Thomas Goirand <zigo@debian.org> Fri, 18 Sep 2015 17:48:52 +0200
gf-complete (1.0.2-2) unstable; urgency=medium
* Team upload.

14
debian/check_sse.c vendored Normal file
View File

@ -0,0 +1,14 @@
#include <stdbool.h>
#include <stdio.h>
#include <cpuid.h>
static inline bool can_sse41(void){
int a, b, c, d;
__cpuid (1, a, b, c, d);
return c & bit_SSE4_1;
}
int main(int argc, char** argv){
return (int) can_sse41();
}

25
debian/control vendored
View File

@ -37,6 +37,9 @@ Architecture: any
Depends: ${misc:Depends},
${shlibs:Depends},
Multi-Arch: same
Breaks: libgf-complete1-sse
Replaces: libgf-complete1-sse
Provides: libgf-complete1-sse
Description: Galois Field Arithmetic - shared library
Galois Field arithmetic forms the backbone of erasure-coded storage systems,
most famously the Reed-Solomon erasure code. A Galois Field is defined over
@ -50,6 +53,28 @@ Description: Galois Field Arithmetic - shared library
.
This package contains the shared library.
Package: libgf-complete1-sse
Architecture: amd64
Depends: ${misc:Depends},
${shlibs:Depends},
Multi-Arch: same
Breaks: libgf-complete1
Replaces: libgf-complete1
Provides: libgf-complete1
Description: Galois Field Arithmetic - shared library with SSE support
Galois Field arithmetic forms the backbone of erasure-coded storage systems,
most famously the Reed-Solomon erasure code. A Galois Field is defined over
w-bit words and is termed GF(2w). As such, the elements of a Galois Field are
the integers 0, 1, . . ., 2^w 1. Galois Field arithmetic defines addition
and multiplication over these closed sets of integers in such a way that they
work as you would hope they would work. Specifically, every number has a
unique multiplicative inverse. Moreover, there is a value, typically the value
2, which has the property that you can enumerate all of the non-zero elements
of the field by taking that value to successively higher powers.
.
This package contains the shared library, compiled with the SSE instructions
support for better optimization.
Package: gf-complete-tools
Architecture: any
Depends: libgf-complete1 (= ${binary:Version}),

85
debian/libgf-complete1-sse.symbols vendored Normal file
View File

@ -0,0 +1,85 @@
libgf_complete.so.1 libgf-complete1 #MINVER#
MOA_Fill_Random_Region@Base 1.0.2
MOA_Random_128@Base 1.0.2
MOA_Random_32@Base 1.0.2
MOA_Random_64@Base 1.0.2
MOA_Random_W@Base 1.0.2
MOA_Seed@Base 1.0.2
_gf_errno@Base 1.0.2
bits@Base 1.0.2
bits_56@Base 1.0.2
create_gf_from_argv@Base 1.0.2
gf_alignment_error@Base 1.0.2
gf_bitmatrix_inverse@Base 1.0.2
gf_composite_get_default_poly@Base 1.0.2
gf_do_final_region_alignment@Base 1.0.2
gf_do_initial_region_alignment@Base 1.0.2
gf_error@Base 1.0.2
gf_error_check@Base 1.0.2
gf_free@Base 1.0.2
gf_general_add@Base 1.0.2
gf_general_are_equal@Base 1.0.2
gf_general_divide@Base 1.0.2
gf_general_do_region_check@Base 1.0.2
gf_general_do_region_multiply@Base 1.0.2
gf_general_do_single_timing_test@Base 1.0.2
gf_general_inverse@Base 1.0.2
gf_general_is_one@Base 1.0.2
gf_general_is_zero@Base 1.0.2
gf_general_multiply@Base 1.0.2
gf_general_s_to_val@Base 1.0.2
gf_general_set_one@Base 1.0.2
gf_general_set_random@Base 1.0.2
gf_general_set_two@Base 1.0.2
gf_general_set_up_single_timing_test@Base 1.0.2
gf_general_set_zero@Base 1.0.2
gf_general_val_to_s@Base 1.0.2
gf_init_easy@Base 1.0.2
gf_init_hard@Base 1.0.2
gf_multby_one@Base 1.0.2
gf_multby_zero@Base 1.0.2
gf_scratch_size@Base 1.0.2
gf_set_region_data@Base 1.0.2
gf_size@Base 1.0.2
gf_two_byte_region_table_multiply@Base 1.0.2
gf_w128_bytwo_b_multiply@Base 1.0.2
gf_w128_bytwo_b_multiply_region@Base 1.0.2
gf_w128_bytwo_p_multiply@Base 1.0.2
gf_w128_clm_multiply@Base 1.0.2
gf_w128_divide_from_inverse@Base 1.0.2
gf_w128_euclid@Base 1.0.2
gf_w128_extract_word@Base 1.0.2
gf_w128_group_multiply@Base 1.0.2
gf_w128_init@Base 1.0.2
gf_w128_inverse_from_divide@Base 1.0.2
gf_w128_scratch_size@Base 1.0.2
gf_w128_shift_multiply@Base 1.0.2
gf_w128_sse_bytwo_b_multiply@Base 1.0.2
gf_w128_sse_bytwo_p_multiply@Base 1.0.2
gf_w16_get_div_alog_table@Base 1.0.2
gf_w16_get_log_table@Base 1.0.2
gf_w16_get_mult_alog_table@Base 1.0.2
gf_w16_init@Base 1.0.2
gf_w16_scratch_size@Base 1.0.2
gf_w16_split_8_8_multiply@Base 1.0.2
gf_w32_init@Base 1.0.2
gf_w32_scratch_size@Base 1.0.2
gf_w4_get_div_table@Base 1.0.2
gf_w4_get_mult_table@Base 1.0.2
gf_w4_init@Base 1.0.2
gf_w4_scratch_size@Base 1.0.2
gf_w64_bytwo_p_sse_multiply_region@Base 1.0.2
gf_w64_clm_multiply_region@Base 1.0.2
gf_w64_init@Base 1.0.2
gf_w64_scratch_size@Base 1.0.2
gf_w64_split_16_64_lazy_multiply_region@Base 1.0.2
gf_w64_split_4_64_lazy_multiply_region@Base 1.0.2
gf_w64_split_8_64_lazy_multiply_region@Base 1.0.2
gf_w8_get_div_table@Base 1.0.2
gf_w8_get_mult_table@Base 1.0.2
gf_w8_init@Base 1.0.2
gf_w8_scratch_size@Base 1.0.2
gf_wgen_cauchy_region@Base 1.0.2
gf_wgen_extract_word@Base 1.0.2
gf_wgen_init@Base 1.0.2
gf_wgen_scratch_size@Base 1.0.2

View File

@ -1 +0,0 @@
do-not-use-sse-ac-ext.patch

48
debian/rules vendored
View File

@ -1,5 +1,7 @@
#!/usr/bin/make -f
include /usr/share/dpkg/architecture.mk
UPSTREAM_GIT ?= https://bitbucket.org/jimplank/gf-complete.git
DEBVERS ?= $(shell dpkg-parsechangelog | sed -n -e 's/^Version: //p')
@ -11,8 +13,54 @@ GIT_TAG ?= $(shell echo '$(VERSION)' | sed -e 's/~/_/')
%:
dh $@ --with autoreconf --parallel
override_dh_autoreconf:
echo "Please don't do anything!"
override_dh_auto_configure:
echo "Please don't do anything!"
override_dh_auto_install:
ifeq ($(DEB_HOST_ARCH_CPU),amd64)
set -e ; set -x ; if ! [ -x debian/check_sse ] ; then \
gcc debian/check_sse.c -o debian/check_sse ; \
fi
set -e ; set -x ; if ./debian/check_sse ; then \
echo "No SSE support here..." ; \
else \
dh_autoreconf ; \
dh_auto_configure ; \
dh_auto_build ; \
dh_auto_install ; \
dh_autoreconf_clean ; \
mv debian/tmp debian/tmp-with-sse ; \
fi
endif
patch -p1 <debian/do-not-use-sse-ac-ext.patch
dh_autoreconf
dh_auto_configure
dh_auto_build
dh_auto_install
dh_autoreconf_clean
patch -p1 -R <debian/do-not-use-sse-ac-ext.patch
override_dh_auto_clean:
dh_auto_clean
rm -rf debian/tmp-with-sse debian/check_sse
override_dh_install:
dh_install
ifeq ($(DEB_HOST_ARCH_CPU),amd64)
set -e ; set -x ; if ./debian/check_sse ; then \
echo "No SSE support here..." ; \
else \
mkdir -p $(CURDIR)/debian/libgf-complete1-sse/usr/lib ; \
mv $(CURDIR)/debian/tmp-with-sse/usr/lib/* $(CURDIR)/debian/libgf-complete1-sse/usr/lib ; \
rm $(CURDIR)/debian/libgf-complete1-sse/usr/lib/*/*.so ; \
rm $(CURDIR)/debian/libgf-complete1-sse/usr/lib/*/*.a ; \
rm $(CURDIR)/debian/libgf-complete1-sse/usr/lib/*/*.la ; \
fi
endif
# NOTE(jamespage): Don't ship example binaries, just the actual tools
rm -rf $(CURDIR)/debian/gf-complete-tools/usr/bin/gf_example*