From fcb709b789c1147cf5cad17d2eaeb772f3be8c07 Mon Sep 17 00:00:00 2001 From: "Demi M. Obenour" Date: Fri, 4 Jan 2019 13:23:16 -0500 Subject: [PATCH] Fix install and run scripts --- classgroup/src/gmp_classgroup/mod.rs | 13 ++-- install.sh | 9 ++- test.sh | 14 +---- vdf-cli/src/main.rs | 1 - vdf-competition/src/main.rs | 89 +++------------------------- vdf/build.rs | 1 - 6 files changed, 18 insertions(+), 109 deletions(-) diff --git a/classgroup/src/gmp_classgroup/mod.rs b/classgroup/src/gmp_classgroup/mod.rs index 1ca2465..bb4fc5a 100644 --- a/classgroup/src/gmp_classgroup/mod.rs +++ b/classgroup/src/gmp_classgroup/mod.rs @@ -12,15 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. #![deny(unsafe_code)] -#![cfg_attr(not(test), forbid(warnings))] -#![cfg_attr(test, deny(warnings))] use super::ClassGroup; use gmp::mpz::Mpz; use num_traits::{One, Zero}; use std::{ borrow::Borrow, cell::RefCell, - fmt, mem::swap, ops::{Mul, MulAssign}, }; @@ -66,13 +63,11 @@ thread_local! { static CTX: RefCell = Default::default(); } -impl fmt::Display for GmpClassGroup { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{:?}\n{:?}", self.a, self.b) - } -} - impl GmpClassGroup { + pub fn into_raw(self) -> (Mpz, Mpz) { + (self.a, self.b) + } + fn inner_multiply(&mut self, rhs: &Self, ctx: &mut Ctx) { self.assert_valid(); rhs.assert_valid(); diff --git a/install.sh b/install.sh index 723f678..e5b12c7 100755 --- a/install.sh +++ b/install.sh @@ -1,12 +1,11 @@ #!/bin/sh -- +exec 2>/dev/null export RUSTFLAGS='-Clto -Cpanic=abort' export DEBIAN_FRONTEND=noninteractive -exec 2>/dev/null sudo apt-get -y -q update -sudo apt-get install git build-essential libgmp3-dev -y -q +sudo apt-get install git build-essential libgmp3-dev curl -y -q curl https://sh.rustup.rs -sSf | sh -s -- -y -export PATH="$HOME/.cargo/bin:$PATH" +. ~/.cargo/env rustup install nightly rustup default nightly -cargo install --force --path=vdf-competition || : -exit 0 +cargo install --force --path=vdf-competition diff --git a/test.sh b/test.sh index 58d1071..49b5703 100755 --- a/test.sh +++ b/test.sh @@ -14,15 +14,5 @@ # and limitations under the License. # cargo run --release --bin=vdf-competition -set -eu -case $0 in - (/*) cd "${0%/*}/";; - (*/*) cd "./${0%/*}";; -esac -PATH=~/.cargo/bin:/usr/bin -unset RUST_BACKTRACE CARGO_INCREMENTAL -export RUSTFLAGS=-Clto -# cargo build --release -pvdf-competition -# LD_LIBRARY_PATH=~/.rustup/toolchains/beta-x86_64-unknown-linux-gnu/lib \ -cargo install --path=vdf-competition --force -/bin/time vdf-competition -0xdc2a335cd2b355c99d3d8d92850122b3d8fe20d0f5360e7aaaecb448960d57bcddfee12a229bbd8d370feda5a17466fc725158ebb78a2a7d37d0a226d89b54434db9c3be9a9bb6ba2c2cd079221d873a17933ceb81a37b0665b9b7e247e8df66bdd45eb15ada12326db01e26c861adf0233666c01dec92bbb547df7369aed3b1fbdff867cfc670511cc270964fbd98e5c55fbe0947ac2b9803acbfd935f3abb8d9be6f938aa4b4cc6203f53c928a979a2f18a1ff501b2587a93e95a428a107545e451f0ac6c7f520a7e99bf77336b1659a2cb3dd1b60e0c6fcfffc05f74cfa763a1d0af7de9994b6e35a9682c4543ae991b3a39839230ef84dae63e88d90f457 10000 >/dev/null +unset RUST_BACKTRACE +exec ~/.cargo/bin/vdf-competition "$@" diff --git a/vdf-cli/src/main.rs b/vdf-cli/src/main.rs index 0b2adee..adf0b1a 100644 --- a/vdf-cli/src/main.rs +++ b/vdf-cli/src/main.rs @@ -11,7 +11,6 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#![forbid(warnings)] #![forbid(unsafe_code)] use hex; diff --git a/vdf-competition/src/main.rs b/vdf-competition/src/main.rs index b1f7a31..50d9ee2 100644 --- a/vdf-competition/src/main.rs +++ b/vdf-competition/src/main.rs @@ -13,60 +13,14 @@ // limitations under the License. use classgroup::{ - gmp::mpz::{mpz_ptr, Mpz}, + gmp::mpz::{mpz_ptr, Mpz, mpz_srcptr}, gmp_classgroup::GmpClassGroup, ClassGroup, }; use libc; -use std::os::raw::c_void; use std::{env, process}; -#[link = "gmp"] -extern "C" { - fn __gmp_set_memory_functions( - arg1: Option *mut c_void>, - arg2: Option< - unsafe extern "C" fn(arg1: *mut c_void, arg2: usize, arg3: usize) -> *mut c_void, - >, - arg3: Option, - ); -} - -unsafe extern "C" fn do_realloc( - old_ptr: *mut libc::c_void, - old_len: libc::size_t, - new_len: libc::size_t, -) -> *mut libc::c_void { - if old_len.max(2048) >= new_len { - old_ptr - } else { - let q = libc::realloc(old_ptr, new_len); - if q.is_null() { - libc::abort() - } - q - } -} - -unsafe extern "C" fn do_malloc(len: libc::size_t) -> *mut libc::c_void { - let q = libc::malloc(len.max(2048)); - if q.is_null() { - libc::abort() - } - q -} - -unsafe extern "C" fn do_free(ptr: *mut libc::c_void, _len: libc::size_t) { - if true { - libc::free(ptr) - } -} - -#[cfg(unix)] fn main() { - unsafe { - __gmp_set_memory_functions(Some(do_malloc), Some(do_realloc), Some(do_free)); - } let fail = |q| { eprintln!("{}", q); process::exit(1) @@ -81,6 +35,7 @@ fn main() { ptr: *const libc::c_char, base: libc::c_int, ) -> libc::c_int; + fn __gmpz_out_str(stream: *mut libc::FILE, base: libc::c_int, op: mpz_srcptr) -> libc::size_t; } let mut args = env::args_os(); @@ -103,41 +58,13 @@ fn main() { if let Some(iterations) = args.next().unwrap().to_str().and_then(|x| x.parse().ok()) { let mut generator = GmpClassGroup::generator_for_discriminant(discriminant); generator.repeated_square(iterations); - println!("{}", generator); + let (a, b) = generator.into_raw(); + unsafe { + __gmpz_out_str(std::ptr::null_mut(), 10, a.inner()); + libc::putchar(b'\n'.into()); + __gmpz_out_str(std::ptr::null_mut(), 10, b.inner()); + } } else { fail("Invalid number of iterations"); } } -#[cfg(not(unix))] -fn main() { - unsafe { - __gmp_set_memory_functions(Some(do_malloc), Some(do_realloc), Some(do_free)); - } - use std::str::FromStr; - let fail = |q| { - eprintln!("{}", q); - process::exit(1) - }; - let check_arg = |q: &mut env::ArgsOs| { - if let Some(q) = q.next().and_then(|x| x.to_str().map(|x| x.to_owned())) { - q - } else { - fail("Arguments must be valid UTF-8!".to_owned()) - } - }; - let mut args = env::args_os(); - if args.len() != 3 { - fail("Must have exactly two arguments".to_owned()); - } - drop(args.next()); - let discriminant = Mpz::from_str_radix(&check_arg(&mut args), 0) - .map_err(|x| fail(format!("{}", x))) - .unwrap(); - let iterations: u64 = check_arg(&mut args) - .parse() - .map_err(|x| fail(format!("{}", x))) - .unwrap(); - let mut generator = GmpClassGroup::generator_for_discriminant(discriminant); - generator.repeated_square(iterations); - println!("{}", generator); -} diff --git a/vdf/build.rs b/vdf/build.rs index 43ea84a..6b576a6 100644 --- a/vdf/build.rs +++ b/vdf/build.rs @@ -11,7 +11,6 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#![forbid(warnings)] use std::{env, fs::File, io::Write, path::PathBuf, u16}; /// The number of odd primes less than 65536.