From 387c9c4b83e9bdf28fc175f801a7cf97853997d3 Mon Sep 17 00:00:00 2001 From: FireMartZ Date: Sun, 18 Feb 2018 11:16:07 -0500 Subject: [PATCH] Changes to compile on mac. --- .gitignore | 1 + depends/builders/darwin.mk | 10 +++--- depends/packages/boost.mk | 9 +++-- depends/packages/googlemock.mk | 20 ++++++++--- depends/packages/googletest.mk | 19 +++++++--- depends/packages/packages.mk | 4 +-- src/netbase.cpp | 5 +++ src/paymentdisclosure.h | 4 +-- src/snark/Makefile | 10 +++--- src/univalue/include/univalue.h | 15 ++++++++ src/univalue/lib/univalue.cpp | 9 +++++ src/wallet/wallet.h | 2 +- zcutil/build-mac.sh | 64 +++++++++++++++++++++++++++++++++ 13 files changed, 142 insertions(+), 30 deletions(-) create mode 100755 zcutil/build-mac.sh diff --git a/.gitignore b/.gitignore index 96cc15116..9c8071848 100644 --- a/.gitignore +++ b/.gitignore @@ -88,6 +88,7 @@ qrc_*.cpp # Mac specific .DS_Store build +*.dSYM #lcov *.gcno diff --git a/depends/builders/darwin.mk b/depends/builders/darwin.mk index b366460e6..af60fa8ea 100644 --- a/depends/builders/darwin.mk +++ b/depends/builders/darwin.mk @@ -1,5 +1,5 @@ -build_darwin_CC: = $(shell xcrun -f clang) -build_darwin_CXX: = $(shell xcrun -f clang++) +build_darwin_CC = gcc-5 +build_darwin_CXX = g++-5 build_darwin_AR: = $(shell xcrun -f ar) build_darwin_RANLIB: = $(shell xcrun -f ranlib) 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_INSTALL_NAME_TOOL:=$(shell xcrun -f install_name_tool) 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_CC=$(shell xcrun -f clang) -mmacosx-version-min=$(OSX_MIN_VERSION) -darwin_CXX:=$(shell xcrun -f clang++) -mmacosx-version-min=$(OSX_MIN_VERSION) +darwin_CC= gcc-5 +darwin_CXX= g++-5 darwin_AR:=$(shell xcrun -f ar) darwin_RANLIB:=$(shell xcrun -f ranlib) darwin_STRIP:=$(shell xcrun -f strip) diff --git a/depends/packages/boost.mk b/depends/packages/boost.mk index 7303821be..a2e820163 100644 --- a/depends/packages/boost.mk +++ b/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+=threading=multi link=static -sNO_BZIP2=1 -sNO_ZLIB=1 $(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_x86_64_mingw32=address-model=64 $(package)_config_opts_i686_mingw32=address-model=32 $(package)_config_opts_i686_linux=address-model=32 architecture=x86 $(package)_toolset_$(host_os)=gcc $(package)_archiver_$(host_os)=$($(package)_ar) -$(package)_toolset_darwin=darwin -$(package)_archiver_darwin=$($(package)_libtool) +$(package)_toolset_darwin=gcc $(package)_config_libraries=chrono,filesystem,program_options,system,thread,test $(package)_cxxflags=-fvisibility=hidden $(package)_cxxflags_linux=-fPIC @@ -36,9 +35,9 @@ define $(package)_config_cmds endef 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 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 diff --git a/depends/packages/googlemock.mk b/depends/packages/googlemock.mk index 229dc3587..5dd875675 100644 --- a/depends/packages/googlemock.mk +++ b/depends/packages/googlemock.mk @@ -9,12 +9,22 @@ $(package)_file_name=$(package)-$($(package)_version).tar.gz $(package)_download_file=release-$($(package)_version).tar.gz $(package)_sha256_hash=3f20b6acb37e5a98e8c4518165711e3e35d47deb6cdb5a4dd4566563b5efd232 -define $(package)_build_cmds - $(MAKE) -C make GTEST_DIR='$(host_prefix)' CXXFLAGS='-fPIC' gmock-all.o +define $(package)_set_vars + $(package)_build_env=AR="$($(package)_ar)" RANLIB="$($(package)_ranlib)" CC="$($(package)_cc)" CXX="$($(package)_cxx)" CXXFLAGS="$($(package)_cxxflags)" endef +BUILD_OS := $(shell uname) +ifeq ($(BUILD_OS),Darwin) + $(package)_install=ginstall +else + $(package)_install=install +endif -define $(package)_stage_cmds - install -D ./make/gmock-all.o $($(package)_staging_dir)$(host_prefix)/lib/libgmock.a && \ - cp -a ./include $($(package)_staging_dir)$(host_prefix)/include +define $(package)_build_cmds + $(MAKE) -C make GTEST_DIR='$(host_prefix)' gmock-all.o endef + +define $(package)_stage_cmds + $($(package)_install) -D ./make/gmock-all.o $($(package)_staging_dir)$(host_prefix)/lib/libgmock.a && \ + cp -a ./include $($(package)_staging_dir)$(host_prefix)/include +endef \ No newline at end of file diff --git a/depends/packages/googletest.mk b/depends/packages/googletest.mk index 5133e64a1..666796584 100644 --- a/depends/packages/googletest.mk +++ b/depends/packages/googletest.mk @@ -5,11 +5,22 @@ $(package)_file_name=$(package)-$($(package)_version).tar.gz $(package)_download_file=release-$($(package)_version).tar.gz $(package)_sha256_hash=f73a6546fdf9fce9ff93a5015e0333a8af3062a152a9ad6bcb772c96687016cc +define $(package)_set_vars + $(package)_build_env=AR="$($(package)_ar)" RANLIB="$($(package)_ranlib)" CC="$($(package)_cc)" CXX="$($(package)_cxx)" CXXFLAGS="$($(package)_cxxflags)" +endef + +BUILD_OS := $(shell uname) +ifeq ($(BUILD_OS),Darwin) + $(package)_install=ginstall +else + $(package)_install=install +endif + define $(package)_build_cmds - $(MAKE) -C make CXXFLAGS=-fPIC gtest.a + $(MAKE) -C make gtest.a endef define $(package)_stage_cmds - install -D ./make/gtest.a $($(package)_staging_dir)$(host_prefix)/lib/libgtest.a && \ - cp -a ./include $($(package)_staging_dir)$(host_prefix)/include -endef + $($(package)_install) -D ./make/gtest.a $($(package)_staging_dir)$(host_prefix)/lib/libgtest.a && \ + cp -a ./include $($(package)_staging_dir)$(host_prefix)/include +endef \ No newline at end of file diff --git a/depends/packages/packages.mk b/depends/packages/packages.mk index 0b7905e4f..e10d1638a 100644 --- a/depends/packages/packages.mk +++ b/depends/packages/packages.mk @@ -1,5 +1,5 @@ -rust_packages := rust librustzcash -proton_packages := proton +#rust_packages := rust librustzcash +#proton_packages := proton zcash_packages := libgmp libsodium packages := boost openssl libevent zeromq $(zcash_packages) googletest googlemock native_packages := native_ccache diff --git a/src/netbase.cpp b/src/netbase.cpp index c88a227fd..900b20b7e 100644 --- a/src/netbase.cpp +++ b/src/netbase.cpp @@ -17,8 +17,13 @@ #include "utilstrencodings.h" #ifdef HAVE_GETADDRINFO_A +#if defined(__APPLE__) +// On MacOSX we end up with this defined, but no gettaddrinfo_a +#undef HAVE_GETADDRINFO_A +#else #include #endif +#endif #ifndef WIN32 #if HAVE_INET_PTON diff --git a/src/paymentdisclosure.h b/src/paymentdisclosure.h index 1ad1bc006..d4f02b685 100644 --- a/src/paymentdisclosure.h +++ b/src/paymentdisclosure.h @@ -71,7 +71,7 @@ struct PaymentDisclosurePayload { uint8_t version; // 0 = experimental, 1 = first production version, etc. uint256 esk; // zcash/NoteEncryption.cpp uint256 txid; // primitives/transaction.h - size_t js; // Index into CTransaction.vjoinsplit + uint64_t js; // Index into CTransaction.vjoinsplit uint8_t n; // Index into JSDescription fields of length ZC_NUM_JS_OUTPUTS libzcash::PaymentAddress zaddr; // zcash/Address.hpp std::string message; // parameter to RPC call @@ -142,4 +142,4 @@ struct PaymentDisclosure { typedef std::pair PaymentDisclosureKeyInfo; -#endif // ZCASH_PAYMENTDISCLOSURE_H \ No newline at end of file +#endif // ZCASH_PAYMENTDISCLOSURE_H diff --git a/src/snark/Makefile b/src/snark/Makefile index cceffb989..678de8863 100644 --- a/src/snark/Makefile +++ b/src/snark/Makefile @@ -199,13 +199,11 @@ $(LIBGTEST_A): $(GTESTDIR)/src/gtest-all.cc $(DEPINST_EXISTS) # libsnark.a will contains all of our relevant object files, and we also mash in the .a files of relevant dependencies built by ./prepare-depends.sh $(LIBSNARK_A): $(LIB_OBJS) $(AR_LIBS) ( \ - echo "create $(LIBSNARK_A)"; \ - echo "addmod $(LIB_OBJS)"; \ + echo " $(LIBSNARK_A)"; \ + echo " $(LIB_OBJS)"; \ if [ -n "$(AR_LIBS)" ]; then for AR_LIB in $(AR_LIBS); do echo addlib $$AR_LIB; done; fi; \ - echo "save"; \ - echo "end"; \ - ) | $(AR) -M - $(AR) s $(LIBSNARK_A) + ) | xargs $(AR) -r + $(AR) s $(LIBSNARK_A) libsnark.so: $(LIBSNARK_A) $(DEPINST_EXISTS) $(CXX) -o $@ --shared -Wl,--whole-archive $(LIBSNARK_A) $(CXXFLAGS) $(LDFLAGS) -Wl,--no-whole-archive $(LDLIBS) diff --git a/src/univalue/include/univalue.h b/src/univalue/include/univalue.h index 07314bc5c..908339ad4 100644 --- a/src/univalue/include/univalue.h +++ b/src/univalue/include/univalue.h @@ -25,6 +25,9 @@ public: typ = initialType; val = initialStr; } + UniValue(size_t val_) { + setInt(val_); + } UniValue(uint64_t val_) { setInt(val_); } @@ -54,6 +57,7 @@ public: bool setNull(); bool setBool(bool val); bool setNumStr(const std::string& val); + bool setInt(size_t val_); bool setInt(uint64_t val); bool setInt(int64_t val); bool setInt(int val_) { return setInt((int64_t)val_); } @@ -92,6 +96,10 @@ public: std::string s(val_); return push_back(s); } + bool push_back(size_t val_) { + UniValue tmpVal(val_); + return push_back(tmpVal); + } bool push_back(uint64_t val_) { UniValue tmpVal(val_); return push_back(tmpVal); @@ -190,6 +198,13 @@ static inline std::pair Pair(const char *cKey, std::string return std::make_pair(key, uVal); } +static inline std::pair Pair(const char *cKey, size_t sizeVal) +{ + std::string key(cKey); + UniValue uVal(sizeVal); + return std::make_pair(key, uVal); +} + static inline std::pair Pair(const char *cKey, uint64_t u64Val) { std::string key(cKey); diff --git a/src/univalue/lib/univalue.cpp b/src/univalue/lib/univalue.cpp index 47ca7aca7..b6c205f16 100644 --- a/src/univalue/lib/univalue.cpp +++ b/src/univalue/lib/univalue.cpp @@ -119,6 +119,15 @@ bool UniValue::setNumStr(const string& val_) return true; } +bool UniValue::setInt(size_t val_) +{ + ostringstream oss; + + oss << val_; + + return setNumStr(oss.str()); +} + bool UniValue::setInt(uint64_t val_) { ostringstream oss; diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index e73d05cc9..9962ab609 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -160,7 +160,7 @@ public: // Transaction hash uint256 hash; // Index into CTransaction.vjoinsplit - size_t js; + uint64_t js; // Index into JSDescription fields of length ZC_NUM_JS_OUTPUTS uint8_t n; diff --git a/zcutil/build-mac.sh b/zcutil/build-mac.sh new file mode 100755 index 000000000..f26fdfa4c --- /dev/null +++ b/zcutil/build-mac.sh @@ -0,0 +1,64 @@ +#!/bin/bash +export CC=gcc-5 +export CXX=g++-5 +export LIBTOOL=libtool +export AR=ar +export RANLIB=ranlib +export STRIP=strip +export OTOOL=otool +export NM=nm + +set -eu -o pipefail + +if [ "x$*" = 'x--help' ] +then + cat <