Browse Source

initial working mac version

v1.0.9-mac
David Mercer 7 years ago
parent
commit
41ecf512f6
  1. 9
      configure.ac
  2. 10
      depends/builders/darwin.mk
  3. 4
      depends/funcs.mk
  4. 9
      depends/packages/boost.mk
  5. 8
      depends/packages/libsnark.mk
  6. 6
      depends/packages/packages.mk
  7. 4
      depends/packages/rust.mk
  8. 2
      src/crypto/equihash.cpp
  9. 50
      src/netbase.cpp
  10. 15
      src/univalue/include/univalue.h
  11. 9
      src/univalue/lib/univalue.cpp
  12. 2
      src/wallet/wallet.h
  13. 2
      zcutil/build.sh
  14. 52
      zcutil/fetch-params.sh

9
configure.ac

@ -449,8 +449,13 @@ if test x$use_hardening != xno; then
HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2" HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2"
],[AC_MSG_ERROR(Cannot enable -D_FORTIFY_SOURCE=2)]) ],[AC_MSG_ERROR(Cannot enable -D_FORTIFY_SOURCE=2)])
AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_ERROR(Cannot enable RELRO)]) if test x$BUILD_OS != xdarwin; then
AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_ERROR(Cannot enable BIND_NOW)]) AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_ERROR(Cannot enable RELRO)])
AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_ERROR(Cannot enable BIND_NOW)])
else
AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"],[AC_MSG_WARN(Cannot enable RELRO)])
AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"],[AC_MSG_WARN(Cannot enable BIND_NOW)])
fi
if test x$TARGET_OS != xwindows; then if test x$TARGET_OS != xwindows; then
# All windows code is PIC, forcing it on just adds useless compile warnings # All windows code is PIC, forcing it on just adds useless compile warnings

10
depends/builders/darwin.mk

@ -1,5 +1,5 @@
build_darwin_CC: = $(shell xcrun -f clang) build_darwin_CC = gcc-5
build_darwin_CXX: = $(shell xcrun -f clang++) build_darwin_CXX = g++-5
build_darwin_AR: = $(shell xcrun -f ar) build_darwin_AR: = $(shell xcrun -f ar)
build_darwin_RANLIB: = $(shell xcrun -f ranlib) build_darwin_RANLIB: = $(shell xcrun -f ranlib)
build_darwin_STRIP: = $(shell xcrun -f strip) build_darwin_STRIP: = $(shell xcrun -f strip)
@ -7,11 +7,11 @@ build_darwin_OTOOL: = $(shell xcrun -f otool)
build_darwin_NM: = $(shell xcrun -f nm) build_darwin_NM: = $(shell xcrun -f nm)
build_darwin_INSTALL_NAME_TOOL:=$(shell xcrun -f install_name_tool) build_darwin_INSTALL_NAME_TOOL:=$(shell xcrun -f install_name_tool)
build_darwin_SHA256SUM = shasum -a 256 build_darwin_SHA256SUM = shasum -a 256
build_darwin_DOWNLOAD = curl --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) --retry $(DOWNLOAD_RETRIES) -L -o build_darwin_DOWNLOAD = wget --timeout=$(DOWNLOAD_CONNECT_TIMEOUT) --tries=$(DOWNLOAD_RETRIES) -nv -O
#darwin host on darwin builder. overrides darwin host preferences. #darwin host on darwin builder. overrides darwin host preferences.
darwin_CC=$(shell xcrun -f clang) -mmacosx-version-min=$(OSX_MIN_VERSION) darwin_CC= gcc-5
darwin_CXX:=$(shell xcrun -f clang++) -mmacosx-version-min=$(OSX_MIN_VERSION) darwin_CXX= g++-5
darwin_AR:=$(shell xcrun -f ar) darwin_AR:=$(shell xcrun -f ar)
darwin_RANLIB:=$(shell xcrun -f ranlib) darwin_RANLIB:=$(shell xcrun -f ranlib)
darwin_STRIP:=$(shell xcrun -f strip) darwin_STRIP:=$(shell xcrun -f strip)

4
depends/funcs.mk

@ -22,8 +22,8 @@ endef
define fetch_file define fetch_file
(test -f $$($(1)_source_dir)/$(4) || \ (test -f $$($(1)_source_dir)/$(4) || \
( mkdir -p $$($(1)_download_dir) && echo Fetching $(1)... && \ ( mkdir -p $$($(1)_download_dir) && echo Fetching $(1)... && \
( $(build_DOWNLOAD) "$$($(1)_download_dir)/$(4).temp" "$(FALLBACK_DOWNLOAD_PATH)/$(4)" || \ ( $(build_DOWNLOAD) "$$($(1)_download_dir)/$(4).temp" "$(2)/$(3)" || \
$(build_DOWNLOAD) "$$($(1)_download_dir)/$(4).temp" "$(2)/$(3)" ) && \ $(build_DOWNLOAD) "$$($(1)_download_dir)/$(4).temp" "$(FALLBACK_DOWNLOAD_PATH)/$(4)" ) && \
echo "$(5) $$($(1)_download_dir)/$(4).temp" > $$($(1)_download_dir)/.$(4).hash && \ echo "$(5) $$($(1)_download_dir)/$(4).temp" > $$($(1)_download_dir)/.$(4).hash && \
$(build_SHA256SUM) -c $$($(1)_download_dir)/.$(4).hash && \ $(build_SHA256SUM) -c $$($(1)_download_dir)/.$(4).hash && \
mv $$($(1)_download_dir)/$(4).temp $$($(1)_source_dir)/$(4) && \ mv $$($(1)_download_dir)/$(4).temp $$($(1)_source_dir)/$(4) && \

9
depends/packages/boost.mk

@ -11,15 +11,14 @@ $(package)_config_opts_debug=variant=debug
$(package)_config_opts=--layout=tagged --build-type=complete --user-config=user-config.jam $(package)_config_opts=--layout=tagged --build-type=complete --user-config=user-config.jam
$(package)_config_opts+=threading=multi link=static -sNO_BZIP2=1 -sNO_ZLIB=1 $(package)_config_opts+=threading=multi link=static -sNO_BZIP2=1 -sNO_ZLIB=1
$(package)_config_opts_linux=threadapi=pthread runtime-link=shared $(package)_config_opts_linux=threadapi=pthread runtime-link=shared
$(package)_config_opts_darwin=--toolset=darwin-4.2.1 runtime-link=shared $(package)_config_opts_darwin=--toolset=gcc threadapi=pthread runtime-link=shared
$(package)_config_opts_mingw32=binary-format=pe target-os=windows threadapi=win32 runtime-link=static $(package)_config_opts_mingw32=binary-format=pe target-os=windows threadapi=win32 runtime-link=static
$(package)_config_opts_x86_64_mingw32=address-model=64 $(package)_config_opts_x86_64_mingw32=address-model=64
$(package)_config_opts_i686_mingw32=address-model=32 $(package)_config_opts_i686_mingw32=address-model=32
$(package)_config_opts_i686_linux=address-model=32 architecture=x86 $(package)_config_opts_i686_linux=address-model=32 architecture=x86
$(package)_toolset_$(host_os)=gcc $(package)_toolset_$(host_os)=gcc
$(package)_archiver_$(host_os)=$($(package)_ar) $(package)_archiver_$(host_os)=$($(package)_ar)
$(package)_toolset_darwin=darwin $(package)_toolset_darwin=gcc
$(package)_archiver_darwin=$($(package)_libtool)
$(package)_config_libraries=chrono,filesystem,program_options,system,thread,test $(package)_config_libraries=chrono,filesystem,program_options,system,thread,test
$(package)_cxxflags=-fvisibility=hidden $(package)_cxxflags=-fvisibility=hidden
$(package)_cxxflags_linux=-fPIC $(package)_cxxflags_linux=-fPIC
@ -36,9 +35,9 @@ define $(package)_config_cmds
endef endef
define $(package)_build_cmds define $(package)_build_cmds
./b2 -d2 -j2 -d1 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) stage ./b2 -d2 -j2 -d1 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) cxxflags=-std=c++11 stage
endef endef
define $(package)_stage_cmds define $(package)_stage_cmds
./b2 -d0 -j4 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) install ./b2 -d0 -j4 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) cxxflags=-std=c++11 install
endef endef

8
depends/packages/libsnark.mk

@ -1,15 +1,15 @@
package=libsnark package=libsnark
$(package)_version=0.1 $(package)_version=0.1
$(package)_download_path=https://github.com/zcash/$(package)/archive/ $(package)_download_path=https://github.com/radix42/$(package)/archive/
$(package)_file_name=$(package)-$($(package)_git_commit).tar.gz $(package)_file_name=$(package)-$($(package)_git_commit).tar.gz
$(package)_download_file=$($(package)_git_commit).tar.gz $(package)_download_file=$($(package)_git_commit).tar.gz
$(package)_sha256_hash=dad153fe46e2e1f33557a195cbe7d69aed8b19ed9befc08ddcb8c6d3c025941f $(package)_sha256_hash=9dbd5b44d3443e86463e934bfe1023cab4ca5948f8d74c23a67d9535c28d2584
$(package)_git_commit=9ada3f84ab484c57b2247c2f41091fd6a0916573 $(package)_git_commit=9be18569b8abcda1245c3912877075259599c0f1
$(package)_dependencies=libgmp libsodium $(package)_dependencies=libgmp libsodium
define $(package)_build_cmds define $(package)_build_cmds
CXXFLAGS="-fPIC -DBINARY_OUTPUT -DNO_PT_COMPRESSION=1" $(MAKE) lib DEPINST=$(host_prefix) CURVE=ALT_BN128 MULTICORE=1 NO_PROCPS=1 NO_GTEST=1 NO_DOCS=1 STATIC=1 NO_SUPERCOP=1 FEATUREFLAGS=-DMONTGOMERY_OUTPUT OPTFLAGS="-O2 -march=x86-64" CC=gcc-5 CXX=g++-5 CXXFLAGS="-arch x86_64 -DBINARY_OUTPUT -DNO_PT_COMPRESSION=1" $(MAKE) lib DEPINST=$(host_prefix) CURVE=ALT_BN128 MULTICORE=0 NO_PROCPS=1 NO_GTEST=1 NO_DOCS=1 STATIC=1 NO_SUPERCOP=1 FEATUREFLAGS=-DMONTGOMERY_OUTPUT
endef endef
define $(package)_stage_cmds define $(package)_stage_cmds

6
depends/packages/packages.mk

@ -1,7 +1,7 @@
rust_packages := rust librustzcash #rust_packages := rust librustzcash
proton_packages := proton #proton_packages := proton
zcash_packages := libsnark libgmp libsodium zcash_packages := libsnark libgmp libsodium
packages := boost openssl libevent zeromq $(zcash_packages) googletest googlemock packages := boost openssl libevent zeromq $(zcash_packages)
native_packages := native_ccache native_packages := native_ccache
wallet_packages=bdb wallet_packages=bdb

4
depends/packages/rust.mk

@ -1,8 +1,8 @@
package=rust package=rust
$(package)_version=1.16.0 $(package)_version=1.16.0
$(package)_download_path=https://static.rust-lang.org/dist $(package)_download_path=https://static.rust-lang.org/dist
$(package)_file_name=rust-$($(package)_version)-x86_64-unknown-linux-gnu.tar.gz $(package)_file_name=rust-$($(package)_version)-x86_64-apple-darwin.tar.gz
$(package)_sha256_hash=48621912c242753ba37cad5145df375eeba41c81079df46f93ffb4896542e8fd $(package)_sha256_hash=2d08259ee038d3a2c77a93f1a31fc59e7a1d6d1bbfcba3dba3c8213b2e5d1926
define $(package)_stage_cmds define $(package)_stage_cmds
./install.sh --destdir=$($(package)_staging_dir) --prefix=$(host_prefix)/native --disable-ldconfig ./install.sh --destdir=$($(package)_staging_dir) --prefix=$(host_prefix)/native --disable-ldconfig

2
src/crypto/equihash.cpp

@ -16,6 +16,8 @@
#include "config/bitcoin-config.h" #include "config/bitcoin-config.h"
#endif #endif
#include "compat/endian.h"
#include "crypto/equihash.h" #include "crypto/equihash.h"
#include "util.h" #include "util.h"

50
src/netbase.cpp

@ -16,10 +16,6 @@
#include "util.h" #include "util.h"
#include "utilstrencodings.h" #include "utilstrencodings.h"
#ifdef HAVE_GETADDRINFO_A
#include <netdb.h>
#endif
#ifndef WIN32 #ifndef WIN32
#if HAVE_INET_PTON #if HAVE_INET_PTON
#include <arpa/inet.h> #include <arpa/inet.h>
@ -96,28 +92,6 @@ bool static LookupIntern(const char *pszName, std::vector<CNetAddr>& vIP, unsign
} }
} }
#ifdef HAVE_GETADDRINFO_A
struct in_addr ipv4_addr;
#ifdef HAVE_INET_PTON
if (inet_pton(AF_INET, pszName, &ipv4_addr) > 0) {
vIP.push_back(CNetAddr(ipv4_addr));
return true;
}
struct in6_addr ipv6_addr;
if (inet_pton(AF_INET6, pszName, &ipv6_addr) > 0) {
vIP.push_back(CNetAddr(ipv6_addr));
return true;
}
#else
ipv4_addr.s_addr = inet_addr(pszName);
if (ipv4_addr.s_addr != INADDR_NONE) {
vIP.push_back(CNetAddr(ipv4_addr));
return true;
}
#endif
#endif
struct addrinfo aiHint; struct addrinfo aiHint;
memset(&aiHint, 0, sizeof(struct addrinfo)); memset(&aiHint, 0, sizeof(struct addrinfo));
aiHint.ai_socktype = SOCK_STREAM; aiHint.ai_socktype = SOCK_STREAM;
@ -130,31 +104,7 @@ bool static LookupIntern(const char *pszName, std::vector<CNetAddr>& vIP, unsign
#endif #endif
struct addrinfo *aiRes = NULL; struct addrinfo *aiRes = NULL;
#ifdef HAVE_GETADDRINFO_A
struct gaicb gcb, *query = &gcb;
memset(query, 0, sizeof(struct gaicb));
gcb.ar_name = pszName;
gcb.ar_request = &aiHint;
int nErr = getaddrinfo_a(GAI_NOWAIT, &query, 1, NULL);
if (nErr)
return false;
do {
// Should set the timeout limit to a resonable value to avoid
// generating unnecessary checking call during the polling loop,
// while it can still response to stop request quick enough.
// 2 seconds looks fine in our situation.
struct timespec ts = { 2, 0 };
gai_suspend(&query, 1, &ts);
boost::this_thread::interruption_point();
nErr = gai_error(query);
if (0 == nErr)
aiRes = query->ar_result;
} while (nErr == EAI_INPROGRESS);
#else
int nErr = getaddrinfo(pszName, NULL, &aiHint, &aiRes); int nErr = getaddrinfo(pszName, NULL, &aiHint, &aiRes);
#endif
if (nErr) if (nErr)
return false; return false;

15
src/univalue/include/univalue.h

@ -25,6 +25,9 @@ public:
typ = initialType; typ = initialType;
val = initialStr; val = initialStr;
} }
UniValue(size_t val_) {
setInt(val_);
}
UniValue(uint64_t val_) { UniValue(uint64_t val_) {
setInt(val_); setInt(val_);
} }
@ -54,6 +57,7 @@ public:
bool setNull(); bool setNull();
bool setBool(bool val); bool setBool(bool val);
bool setNumStr(const std::string& val); bool setNumStr(const std::string& val);
bool setInt(size_t val_);
bool setInt(uint64_t val); bool setInt(uint64_t val);
bool setInt(int64_t val); bool setInt(int64_t val);
bool setInt(int val_) { return setInt((int64_t)val_); } bool setInt(int val_) { return setInt((int64_t)val_); }
@ -92,6 +96,10 @@ public:
std::string s(val_); std::string s(val_);
return push_back(s); return push_back(s);
} }
bool push_back(size_t val_) {
UniValue tmpVal(val_);
return push_back(tmpVal);
}
bool push_back(uint64_t val_) { bool push_back(uint64_t val_) {
UniValue tmpVal(val_); UniValue tmpVal(val_);
return push_back(tmpVal); return push_back(tmpVal);
@ -190,6 +198,13 @@ static inline std::pair<std::string,UniValue> Pair(const char *cKey, std::string
return std::make_pair(key, uVal); return std::make_pair(key, uVal);
} }
static inline std::pair<std::string,UniValue> Pair(const char *cKey, size_t sizeVal)
{
std::string key(cKey);
UniValue uVal(sizeVal);
return std::make_pair(key, uVal);
}
static inline std::pair<std::string,UniValue> Pair(const char *cKey, uint64_t u64Val) static inline std::pair<std::string,UniValue> Pair(const char *cKey, uint64_t u64Val)
{ {
std::string key(cKey); std::string key(cKey);

9
src/univalue/lib/univalue.cpp

@ -119,6 +119,15 @@ bool UniValue::setNumStr(const string& val_)
return true; return true;
} }
bool UniValue::setInt(size_t val_)
{
ostringstream oss;
oss << val_;
return setNumStr(oss.str());
}
bool UniValue::setInt(uint64_t val_) bool UniValue::setInt(uint64_t val_)
{ {
ostringstream oss; ostringstream oss;

2
src/wallet/wallet.h

@ -160,7 +160,7 @@ public:
// Transaction hash // Transaction hash
uint256 hash; uint256 hash;
// Index into CTransaction.vjoinsplit // Index into CTransaction.vjoinsplit
size_t js; uint64_t js;
// Index into JSDescription fields of length ZC_NUM_JS_OUTPUTS // Index into JSDescription fields of length ZC_NUM_JS_OUTPUTS
uint8_t n; uint8_t n;

2
zcutil/build.sh

@ -102,7 +102,7 @@ eval "$MAKE" --version
eval "$CC" --version eval "$CC" --version
eval "$CXX" --version eval "$CXX" --version
as --version as --version
ld --version ld -v
HOST="$HOST" BUILD="$BUILD" NO_RUST="$RUST_ARG" NO_PROTON="$PROTON_ARG" "$MAKE" "$@" -C ./depends/ V=1 HOST="$HOST" BUILD="$BUILD" NO_RUST="$RUST_ARG" NO_PROTON="$PROTON_ARG" "$MAKE" "$@" -C ./depends/ V=1
./autogen.sh ./autogen.sh

52
zcutil/fetch-params.sh

@ -2,7 +2,11 @@
set -eu set -eu
PARAMS_DIR="$HOME/.zcash-params" if [[ "$OSTYPE" == "darwin"* ]]; then
PARAMS_DIR="$HOME/Library/Application Support/ZcashParams"
else
PARAMS_DIR="$HOME/.zcash-params"
fi
SPROUT_PKEY_NAME='sprout-proving.key' SPROUT_PKEY_NAME='sprout-proving.key'
SPROUT_VKEY_NAME='sprout-verifying.key' SPROUT_VKEY_NAME='sprout-verifying.key'
@ -18,17 +22,23 @@ function fetch_params {
local dlname="${output}.dl" local dlname="${output}.dl"
local expectedhash="$3" local expectedhash="$3"
if ! [ -f "$output" ] if ! [ -f "$output" ]; then
then
echo "Retrieving: $url" echo "Retrieving: $url"
wget \ if [[ $(sw_vers -productName) == "Mac OS X" ]]; then
--progress=dot:giga \ curl \
--output-document="$dlname" \ --output "$dlname" \
--continue \ -# -L -C - \
--retry-connrefused --waitretry=3 --timeout=30 \ "$url"
"$url" else
wget \
"$SHA256CMD" $SHA256ARGS -c <<EOF --progress=dot:giga \
--output-document="$dlname" \
--continue \
--retry-connrefused --waitretry=3 --timeout=30 \
"$url"
fi
"$SHA256CMD" $SHA256ARGS --check <<EOF
$expectedhash $dlname $expectedhash $dlname
EOF EOF
@ -46,12 +56,20 @@ EOF
# Use flock to prevent parallel execution. # Use flock to prevent parallel execution.
function lock() { function lock() {
local lockfile=/tmp/fetch_params.lock local lockfile=/tmp/fetch_params.lock
# create lock file if [[ "$OSTYPE" == "darwin"* ]]; then
eval "exec 200>/$lockfile" if shlock -f ${lockfile} -p $$; then
# acquire the lock return 0
flock -n 200 \ else
&& return 0 \ return 1
|| return 1 fi
else
# create lock file
eval "exec 200>/$lockfile"
# acquire the lock
flock -n 200 \
&& return 0 \
|| return 1
fi
} }
function exit_locked_error { function exit_locked_error {

Loading…
Cancel
Save