Merge pull request #187 from fsb4000/Qt
authorCryptoManiac <CryptoManiac@users.noreply.github.com>
Sun, 29 Mar 2015 14:30:42 +0000 (17:30 +0300)
committerCryptoManiac <CryptoManiac@users.noreply.github.com>
Sun, 29 Mar 2015 14:30:42 +0000 (17:30 +0300)
убраны фиксированные размеры шрифтов.

24 files changed:
MSVC/libcommon/libcommon.vcxproj
MSVC/libcommon/libcommon.vcxproj.filters
MSVC/mynovacoin/mynovacoin.vcxproj
MSVC/mynovacoinqt/mynovacoinqt.vcxproj
doc/building novacoind and novacoinqt under Linux.txt
doc/building novacoind and novacoinqt under Windows with MSVC.txt
novacoin-qt.pro
src/bitcoinrpc.cpp
src/init.cpp
src/main.cpp
src/makefile.bsd
src/makefile.linux-mingw
src/makefile.mingw
src/makefile.osx
src/makefile.unix
src/miner.cpp
src/qt/optionsmodel.cpp
src/rpcblockchain.cpp
src/rpcnet.cpp
src/scrypt-sse2.cpp [new file with mode: 0644]
src/scrypt.cpp
src/scrypt.h
src/util.cpp
src/util.h

index eb5fc88..8ddeac1 100644 (file)
@@ -21,6 +21,7 @@
   <ItemGroup>
     <ClCompile Include="..\..\src\alert.cpp" />
     <ClCompile Include="..\..\src\scrypt-generic.c" />
+    <ClCompile Include="..\..\src\scrypt-sse2.cpp" />
     <ClCompile Include="..\..\src\stun.cpp" />
     <ClCompile Include="..\..\src\txdb-leveldb.cpp" />
     <ClCompile Include="..\..\src\version.cpp" />
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <WarningLevel>Level1</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>MINIUPNP_STATICLIB;STATICLIB;USE_UPNP;_CRT_SECURE_NO_WARNINGS;UNICODE;WIN32;_SCL_SECURE_NO_WARNINGS;_WIN32_WINNT=0x0501;HAVE_WORKING_BOOST_SLEEP_FOR;NOMINMAX;USE_LEVELDB;USE_IPV6=1;BOOST_SPIRIT_THREADSAFE;__STDC_FORMAT_MACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>MINIUPNP_STATICLIB;STATICLIB;USE_UPNP;_CRT_SECURE_NO_WARNINGS;UNICODE;WIN32;_SCL_SECURE_NO_WARNINGS;_WIN32_WINNT=0x0501;HAVE_WORKING_BOOST_SLEEP_FOR;NOMINMAX;USE_LEVELDB;USE_IPV6=1;BOOST_SPIRIT_THREADSAFE;__STDC_FORMAT_MACROS;USE_SSE2;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>..\include;..\..\..\Deps;..\..\..\deps\openssl-1.0.2\inc32;..\..\..\src\leveldb\helpers\memenv;..\..\src\leveldb\helpers;..\..\src\leveldb\include;..\..\..\deps\db-6.0.20\build_windows;..\..\..\deps\boost_1_57_0;..\..\..\deps\boost_1_57_0\boost;.\GeneratedFiles;.\GeneratedFiles\$(ConfigurationName);.\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       </PrecompiledHeader>
       <WarningLevel>Level1</WarningLevel>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>MINIUPNP_STATICLIB;STATICLIB;USE_UPNP;_CRT_SECURE_NO_WARNINGS;UNICODE;WIN32;_WIN32;_SCL_SECURE_NO_WARNINGS;_WIN32_WINNT=0x0501;HAVE_WORKING_BOOST_SLEEP_FOR;NOMINMAX;USE_LEVELDB;USE_IPV6=1;BOOST_SPIRIT_THREADSAFE;__STDC_FORMAT_MACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>MINIUPNP_STATICLIB;STATICLIB;USE_UPNP;_CRT_SECURE_NO_WARNINGS;UNICODE;WIN32;_WIN32;_SCL_SECURE_NO_WARNINGS;_WIN32_WINNT=0x0501;HAVE_WORKING_BOOST_SLEEP_FOR;NOMINMAX;USE_LEVELDB;USE_IPV6=1;BOOST_SPIRIT_THREADSAFE;__STDC_FORMAT_MACROS;USE_SSE2;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>..\include;..\..\..\Deps;..\..\..\deps\openssl-1.0.2\inc32;..\..\..\src\leveldb\helpers\memenv;..\..\src\leveldb\helpers;..\..\src\leveldb\include;..\..\..\deps\db-6.0.20\build_windows;..\..\..\deps\boost_1_57_0;..\..\..\deps\boost_1_57_0\boost;.\GeneratedFiles;.\GeneratedFiles\$(ConfigurationName);.\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>MINIUPNP_STATICLIB;STATICLIB;USE_UPNP;_CRT_SECURE_NO_WARNINGS;UNICODE;WIN32;_SCL_SECURE_NO_WARNINGS;_WIN32_WINNT=0x0501;HAVE_WORKING_BOOST_SLEEP_FOR;NOMINMAX;USE_LEVELDB;USE_IPV6=1;BOOST_SPIRIT_THREADSAFE;__STDC_FORMAT_MACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>MINIUPNP_STATICLIB;STATICLIB;USE_UPNP;_CRT_SECURE_NO_WARNINGS;UNICODE;WIN32;_SCL_SECURE_NO_WARNINGS;_WIN32_WINNT=0x0501;HAVE_WORKING_BOOST_SLEEP_FOR;NOMINMAX;USE_LEVELDB;USE_IPV6=1;BOOST_SPIRIT_THREADSAFE;__STDC_FORMAT_MACROS;USE_SSE2;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>..\include;..\..\..\deps\;..\..\..\deps\openssl-1.0.2\inc32;..\..\..\src\leveldb\helpers\memenv;..\..\src\leveldb\helpers;..\..\src\leveldb\include;..\..\..\deps\db-6.0.20\build_windows;..\..\..\deps\boost_1_57_0;..\..\..\deps\boost_1_57_0\boost;.\GeneratedFiles;.\GeneratedFiles\$(ConfigurationName);.\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>MINIUPNP_STATICLIB;STATICLIB;USE_UPNP;_CRT_SECURE_NO_WARNINGS;UNICODE;WIN32;_SCL_SECURE_NO_WARNINGS;_WIN32_WINNT=0x0501;HAVE_WORKING_BOOST_SLEEP_FOR;NOMINMAX;USE_LEVELDB;USE_IPV6=1;BOOST_SPIRIT_THREADSAFE;__STDC_FORMAT_MACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>MINIUPNP_STATICLIB;STATICLIB;USE_UPNP;_CRT_SECURE_NO_WARNINGS;UNICODE;WIN32;_SCL_SECURE_NO_WARNINGS;_WIN32_WINNT=0x0501;HAVE_WORKING_BOOST_SLEEP_FOR;NOMINMAX;USE_LEVELDB;USE_IPV6=1;BOOST_SPIRIT_THREADSAFE;__STDC_FORMAT_MACROS;USE_SSE2;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>..\include;..\..\..\Deps;..\..\..\deps\openssl-1.0.2\inc32;..\..\..\src\leveldb\helpers\memenv;..\..\src\leveldb\helpers;..\..\src\leveldb\include;..\..\..\deps\db-6.0.20\build_windows;..\..\..\deps\boost_1_57_0;..\..\..\deps\boost_1_57_0\boost;.\GeneratedFiles;.\GeneratedFiles\$(ConfigurationName);.\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
index 9d1b8d5..b358bf8 100644 (file)
     <ClCompile Include="..\..\src\txdb-leveldb.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\stun.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\src\scrypt-generic.c">
       <Filter>Source Files</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\src\stun.cpp">
+    <ClCompile Include="..\..\src\scrypt-sse2.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
index df8b4a0..d4d8474 100644 (file)
@@ -86,7 +86,7 @@
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <PreprocessorDefinitions>USE_UPNP;UNICODE;WIN32;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;USE_LEVELDB;USE_IPV6=1;__STDC_FORMAT_MACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>USE_UPNP;UNICODE;WIN32;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;USE_LEVELDB;USE_IPV6=1;__STDC_FORMAT_MACROS;USE_SSE2;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>..\include;..\..\src\leveldb\include;..\..\..\deps\openssl-1.0.2\inc32;..\..\..\deps\db-6.0.20\build_windows;..\..\..\deps\boost_1_57_0;..\..\..\deps\boost_1_57_0\boost;.\GeneratedFiles;.\GeneratedFiles\$(ConfigurationName);.\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <Optimization>Disabled</Optimization>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <ClCompile>
-      <PreprocessorDefinitions>USE_UPNP;UNICODE;WIN32;_WIN32;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;USE_LEVELDB;USE_IPV6=1;__STDC_FORMAT_MACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>USE_UPNP;UNICODE;WIN32;_WIN32;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;USE_LEVELDB;USE_IPV6=1;__STDC_FORMAT_MACROS;USE_SSE2;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>..\include;..\..\src\leveldb\include;..\..\..\Deps\openssl-1.0.2\inc32;..\..\..\Deps\db-6.0.20\build_windows;..\..\..\Deps\boost_1_57_0;..\..\..\Deps\boost_1_57_0\boost;.\GeneratedFiles;.\GeneratedFiles\$(ConfigurationName);.\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <Optimization>Disabled</Optimization>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <PreprocessorDefinitions>USE_UPNP;UNICODE;WIN32;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;USE_LEVELDB;USE_IPV6=1;__STDC_FORMAT_MACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>USE_UPNP;UNICODE;WIN32;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;USE_LEVELDB;USE_IPV6=1;__STDC_FORMAT_MACROS;USE_SSE2;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>..\include;..\..\src\leveldb\include;..\..\..\deps\openssl-1.0.2\inc32;..\..\..\deps\db-6.0.20\build_windows;..\..\..\deps\boost_1_57_0;..\..\..\deps\boost_1_57_0\boost;.\GeneratedFiles;.\GeneratedFiles\$(ConfigurationName);.\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
-      <PreprocessorDefinitions>USE_UPNP;UNICODE;WIN32;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;USE_LEVELDB;USE_IPV6=1;__STDC_FORMAT_MACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>USE_UPNP;UNICODE;WIN32;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;USE_LEVELDB;USE_IPV6=1;__STDC_FORMAT_MACROS;USE_SSE2;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>..\include;..\..\src\leveldb\include;..\..\..\Deps\openssl-1.0.2\inc32;..\..\..\Deps\db-6.0.20\build_windows;..\..\..\Deps\boost_1_57_0;..\..\..\Deps\boost_1_57_0\boost;.\GeneratedFiles;.\GeneratedFiles\$(ConfigurationName);.\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
index d36aa97..578ecd6 100644 (file)
       <ExceptionHandling>Sync</ExceptionHandling>
       <ObjectFileName>$(IntDir)</ObjectFileName>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>USE_UPNP;USE_QRCODE;UNICODE;WIN32;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;QT_GUI;_SCL_SECURE_NO_WARNINGS;USE_LEVELDB;USE_IPV6=1;__STDC_FORMAT_MACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>USE_UPNP;USE_QRCODE;UNICODE;WIN32;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;QT_GUI;_SCL_SECURE_NO_WARNINGS;USE_LEVELDB;USE_IPV6=1;__STDC_FORMAT_MACROS;USE_SSE2;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessToFile>false</PreprocessToFile>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <SuppressStartupBanner>true</SuppressStartupBanner>
@@ -153,7 +153,7 @@ C:\MyProjects\Deps\qt-everywhere-opensource-src-5.3.2\qtbase\bin\lrelease C:\MyP
       <ExceptionHandling>Sync</ExceptionHandling>
       <ObjectFileName>$(IntDir)</ObjectFileName>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>USE_UPNP;USE_QRCODE;UNICODE;WIN32;_WIN32;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;QT_GUI;_SCL_SECURE_NO_WARNINGS;USE_LEVELDB;USE_IPV6=1;__STDC_FORMAT_MACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>USE_UPNP;USE_QRCODE;UNICODE;WIN32;_WIN32;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;QT_GUI;_SCL_SECURE_NO_WARNINGS;USE_LEVELDB;USE_IPV6=1;__STDC_FORMAT_MACROS;USE_SSE2;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessToFile>false</PreprocessToFile>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <SuppressStartupBanner>true</SuppressStartupBanner>
@@ -203,7 +203,7 @@ C:\MyProjects\Deps\qt-everywhere-opensource-src-5.3.2-64\qtbase\bin\lrelease C:\
       <ExceptionHandling>Sync</ExceptionHandling>
       <ObjectFileName>$(IntDir)</ObjectFileName>
       <Optimization>Full</Optimization>
-      <PreprocessorDefinitions>USE_UPNP;USE_QRCODE;UNICODE;WIN32;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;QT_GUI;_SCL_SECURE_NO_WARNINGS;USE_LEVELDB;USE_IPV6=1;__STDC_FORMAT_MACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>USE_UPNP;USE_QRCODE;UNICODE;WIN32;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;QT_GUI;_SCL_SECURE_NO_WARNINGS;USE_LEVELDB;USE_IPV6=1;__STDC_FORMAT_MACROS;USE_SSE2;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessToFile>false</PreprocessToFile>
       <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -257,7 +257,7 @@ C:\MyProjects\Deps\qt-everywhere-opensource-src-5.3.2\qtbase\bin\lrelease C:\MyP
       <ExceptionHandling>Sync</ExceptionHandling>
       <ObjectFileName>$(IntDir)</ObjectFileName>
       <Optimization>Full</Optimization>
-      <PreprocessorDefinitions>USE_UPNP;USE_QRCODE;UNICODE;WIN32;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;QT_GUI;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;USE_LEVELDB;USE_IPV6=1;__STDC_FORMAT_MACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>USE_UPNP;USE_QRCODE;UNICODE;WIN32;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;QT_GUI;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;USE_LEVELDB;USE_IPV6=1;__STDC_FORMAT_MACROS;USE_SSE2;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessToFile>false</PreprocessToFile>
       <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
index 6badaf9..71f4192 100644 (file)
@@ -6,6 +6,17 @@ Ubuntu/Debian:
    libboost-filesystem-dev libboost-program-options-dev libboost-thread-dev
    libssl-dev libdb++-dev libminiupnpc-dev libqrencode-dev
 
+Если у вас возникла ошибка при установке qt4-qmake (Возникает на Ubuntu 14.04.2 и возможно в других версиях)
+libcheese-gtk23 : Depends: libclutter-gtk-1.0-0 (>= 0.91.8) but it is not going to be installed
+                  Depends: libcogl15 (>= 1.15.8) but it is not going to be installed
+libcheese7 : Depends: libclutter-gst-2.0-0 (>= 0.10.0) but it is not going to be installed
+             Depends: gstreamer1.0-clutter but it is not going to be installed
+libclutter-1.0-0 : Depends: libcogl-pango15 (>= 1.15.8) but it is not going to be installed
+                   Depends: libcogl15 (>= 1.15.8) but it is not going to be installed
+
+То введите
+sudo apt-get install  libglew-dev libcheese7 libcheese-gtk23 libclutter-gst-2.0-0 libcogl15 libclutter-gtk-1.0-0 libclutter-1.0-0  xserver-xorg-input-all
+
 openSUSE(проверено на версии 13.2):
  sudo zypper install git gcc gcc-c++ libqt4-devel boost-devel libopenssl-devel libdb-4_8-devel libminiupnpc-devel libqrencode3
 
index 32dd2d7..65b6947 100644 (file)
@@ -38,7 +38,10 @@ buildopenssl.bat
 -Откройте C:\MyProjects\Deps\db-6.0.20\build_windows\Berkeley_DB_vs2010.sln
 -Выберете проект db
 -Измените конфигурацию с Debug на Static Debug
--Нажмите левой кнопкой мыши на  проект db, затем "Только проект" -> "Построить только db"
+-Нажмите правой кнопкой мыши на  проект db, затем в "Свойства" -> "Общие" убедитесь, что Набор символов "Использовать многобайтовую кодировку"
+-Перейдите в "C/C++" -> "Препроцессор" -> "Определения препроцессора" и удалите _UNICODE и UNICODE, также убедитесь, что в Унаследованных значениях нет 
+_UNICODE и UNICODE
+-Нажмите правой кнопкой мыши на  проект db, затем "Только проект" -> "Построить только db"
 -Постройте так все Static конфигурации(Static Debug 32 bit, Static Release 32 bit, Static Debug X64, Static Release X64)
 
 Проверка:
index 670271b..585782d 100644 (file)
@@ -133,11 +133,23 @@ contains(USE_LEVELDB, 1) {
     SOURCES += src/txdb-bdb.cpp
 }
 
+# use: qmake "USE_ASM=1"
 contains(USE_ASM, 1) {
-    message(Using optimized scrypt core implementation)
+    message(Using assembler scrypt core implementation)
     SOURCES += src/scrypt-arm.S src/scrypt-x86.S src/scrypt-x86_64.S
 } else {
-    message(Using generic scrypt core implementation)
+    # use: qmake "USE_SSE2=1"
+    contains(USE_SSE2, 1) {
+        message(Using SSE2 intrinsic scrypt implementation)
+        SOURCES += src/scrypt-sse2.cpp
+        DEFINES += USE_SSE2
+        QMAKE_CXXFLAGS += -msse2
+        QMAKE_CFLAGS += -msse2
+    } else {
+        message(Using generic scrypt core implementation)
+    }
+
+    # For now, generic module is required in both cases
     SOURCES += src/scrypt-generic.c
 }
 
index d944b92..03bd10e 100644 (file)
@@ -361,15 +361,7 @@ string HTTPPost(const string& strMsg, const map<string,string>& mapRequestHeader
 
 string rfc1123Time()
 {
-    char buffer[64];
-    time_t now;
-    time(&now);
-    struct tm* now_gmt = gmtime(&now);
-    string locale(setlocale(LC_TIME, NULL));
-    setlocale(LC_TIME, "C"); // we want POSIX (aka "C") weekday/month strings
-    strftime(buffer, sizeof(buffer), "%a, %d %b %Y %H:%M:%S +0000", now_gmt);
-    setlocale(LC_TIME, locale.c_str());
-    return string(buffer);
+    return DateTimeStrFormat("%a, %d %b %Y %H:%M:%S +0000", GetTime());
 }
 
 static string HTTPReply(int nStatus, const string& strMsg, bool keepalive)
index 1f7fade..ca7c8b1 100644 (file)
@@ -33,7 +33,6 @@ bool fConfChange;
 unsigned int nNodeLifespan;
 unsigned int nMinerSleep;
 bool fUseFastIndex;
-bool fUseFastStakeMiner;
 bool fUseMemoryLog;
 enum Checkpoints::CPMode CheckpointsMode;
 
@@ -575,6 +574,9 @@ bool AppInit2()
 
     int64_t nStart;
 
+#ifdef USE_SSE2
+    scrypt_detect_sse2();
+#endif
     // ********************************************************* Step 5: verify database integrity
 
     uiInterface.InitMessage(_("Verifying database integrity..."));
index 2a97e49..28bdb47 100644 (file)
@@ -2568,17 +2568,17 @@ bool ProcessBlock(CNode* pfrom, CBlock* pblock)
     if (!mapBlockIndex.count(pblock->hashPrevBlock))
     {
         printf("ProcessBlock: ORPHAN BLOCK, prev=%s\n", pblock->hashPrevBlock.ToString().substr(0,20).c_str());
-        CBlock* pblock2 = new CBlock(*pblock);
         // ppcoin: check proof-of-stake
-        if (pblock2->IsProofOfStake())
+        if (pblock->IsProofOfStake())
         {
             // Limited duplicity on stake: prevents block flood attack
             // Duplicate stake allowed only when there is orphan child block
-            if (setStakeSeenOrphan.count(pblock2->GetProofOfStake()) && !mapOrphanBlocksByPrev.count(hash) && !Checkpoints::WantedByPendingSyncCheckpoint(hash))
-                return error("ProcessBlock() : duplicate proof-of-stake (%s, %d) for orphan block %s", pblock2->GetProofOfStake().first.ToString().c_str(), pblock2->GetProofOfStake().second, hash.ToString().c_str());
+            if (setStakeSeenOrphan.count(pblock->GetProofOfStake()) && !mapOrphanBlocksByPrev.count(hash) && !Checkpoints::WantedByPendingSyncCheckpoint(hash))
+                return error("ProcessBlock() : duplicate proof-of-stake (%s, %d) for orphan block %s", pblock->GetProofOfStake().first.ToString().c_str(), pblock->GetProofOfStake().second, hash.ToString().c_str());
             else
-                setStakeSeenOrphan.insert(pblock2->GetProofOfStake());
+                setStakeSeenOrphan.insert(pblock->GetProofOfStake());
         }
+        CBlock* pblock2 = new CBlock(*pblock);
         mapOrphanBlocks.insert(make_pair(hash, pblock2));
         mapOrphanBlocksByPrev.insert(make_pair(pblock2->hashPrevBlock, pblock2));
 
index 11172ca..27f8187 100644 (file)
@@ -166,8 +166,16 @@ OBJS += obj/scrypt-generic.o
 
 obj/scrypt-generic.o: scrypt-generic.c
        $(CC) -c $(xCXXFLAGS) -MMD -o $@ $<
+
+ifeq  (${USE_SSE2}, 1)
+DEFS += -DUSE_SSE2
+OBJS += obj/scrypt-sse2.o
+obj/scrypt-sse2.o: scrypt-sse2.cpp
+       $(CXX) -c $(CFLAGS) -MMD -o $@ $<
+endif
 endif
 
+
 # auto-generated dependencies:
 -include obj/*.P
 
index 5175466..26a8eb8 100644 (file)
@@ -133,12 +133,22 @@ obj/scrypt-x86.o: scrypt-x86.S
 obj/scrypt-x86_64.o: scrypt-x86_64.S
        $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $<
 endif
+
 ifneq (${USE_ASM}, 1)
 OBJS += obj/scrypt-generic.o
 
 obj/scrypt-generic.o: scrypt-generic.c
        $(CC) -c $(xCXXFLAGS) -MMD -o $@ $<
+
+ifeq  (${USE_SSE2}, 1)
+DEFS += -DUSE_SSE2
+OBJS += obj/scrypt-sse2.o
+
+obj/scrypt-sse2.o: scrypt-sse2.cpp $(HEADERS)
+       $(CCX)  -c $(CFLAGS) -MMD -o $@ $<
 endif
+endif
+
 
 obj/build.h: FORCE
        /bin/sh ../share/genbuild.sh obj/build.h
index 1c4e1a1..1d36b42 100644 (file)
@@ -4,32 +4,44 @@
 
 USE_UPNP:=0
 USE_LEVELDB:=0
+CC=gcc
+
+
 USE_IPV6:=1
+USE_SSE2:=1
 
-INCLUDEPATHS= \
- -I"C:\boost-1.50.0-mgw" \
- -I"C:\db-4.8.30.NC-mgw\build_unix" \
- -I"C:\openssl-1.0.1c-mgw\include"
+BOOST_SUFFIX?=-mgw49-mt-s-1_57
 
+INCLUDEPATHS= \
+ -I"$(CURDIR)" \
+ -I"/c/deps/boost_1_57_0" \
+ -I"/c/deps" \
+ -I"/c/deps/db-6.0.20/build_unix" \
+ -I"/c/deps/openssl-1.0.2/include"
 LIBPATHS= \
- -L"C:\boost-1.50.0-mgw\stage\lib" \
- -L"C:\db-4.8.30.NC-mgw\build_unix" \
- -L"C:\openssl-1.0.1c-mgw"
+ -L"$(CURDIR)/leveldb" \
+ -L"/c/deps/boost_1_57_0/stage/lib" \
+ -L"/c/deps/miniupnpc" \
+ -L"/c/deps/db-6.0.20/build_unix" \
+ -L"/c/deps/openssl-1.0.2"
 
 LIBS= \
- -l boost_system-mgw44-mt-1_53 \
- -l boost_filesystem-mgw44-mt-1_53 \
- -l boost_program_options-mgw44-mt-1_53 \
- -l boost_thread-mgw44-mt-1_53 \
- -l boost_chrono-mgw44-mt-1_53 \
- -l db_cxx \
- -l ssl \
- -l crypto
+  -l leveldb \
+  -l memenv \
+  -l boost_system$(BOOST_SUFFIX) \
+  -l boost_filesystem$(BOOST_SUFFIX) \
+  -l boost_program_options$(BOOST_SUFFIX) \
+  -l boost_thread$(BOOST_SUFFIX) \
+  -l boost_chrono$(BOOST_SUFFIX) \
+  -l db_cxx \
+  -l ssl \
+  -l crypto
 
 DEFS=-DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB -DBOOST_SPIRIT_THREADSAFE -D__STDC_FORMAT_MACROS
 DEBUGFLAGS=-g
 CFLAGS=-mthreads -O2 -msse2 -w -Wall -Wextra -Wno-ignored-qualifiers -Wformat -Wformat-security -Wno-unused-parameter $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS)
-LDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat
+LDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat -Wl,--large-address-aware -static
 
 ifndef USE_UPNP
        override USE_UPNP = -
@@ -95,8 +107,8 @@ DEFS += $(addprefix -I,$(CURDIR)/leveldb/include) -DUSE_LEVELDB
 DEFS += $(addprefix -I,$(CURDIR)/leveldb/helpers)
 OBJS += obj/txdb-leveldb.o
 leveldb/libleveldb.a:
-       cd leveldb; make; cd ..
-obj/txdb-leveldb.o: leveldb/libleveldb.lib
+       cd leveldb;TARGET_OS=NATIVE_WINDOWS make libleveldb.a libmemenv.a;; cd ..
+obj/txdb-leveldb.o: leveldb/libleveldb.a
 else
 OBJS += obj/txdb-bdb.o
 endif
@@ -114,8 +126,18 @@ OBJS += obj/scrypt-generic.o
 
 obj/scrypt-generic.o: scrypt-generic.c
        $(CC) -c $(xCXXFLAGS) -MMD -o $@ $<
+
+ifdef USE_SSE2
+DEFS += -DUSE_SSE2
+OBJS += obj/scrypt-sse2.o
+
+obj/scrypt-sse2.o: scrypt-sse2.cpp $(HEADERS)
+       g++  -c $(CFLAGS) -MMD -o $@ $<
+endif
 endif
 
+
+
 obj/%.o: %.cpp $(HEADERS)
        g++ -c $(CFLAGS) -o $@ $<
 
index 9f8e76c..3a4a80c 100644 (file)
@@ -144,7 +144,16 @@ OBJS += obj/scrypt-generic.o
 
 obj/scrypt-generic.o: scrypt-generic.c
        $(CC) -c $(xCXXFLAGS) -MMD -o $@ $<
+
+ifneq (${USE_SSE2}, 1) and eq (${USE_ASM}, 1)
+DEFS += -DUSE_SSE2
+OBJS += obj/scrypt-sse2.o
+
+obj/scrypt-sse2.o: scrypt-sse2.cpp
+       $(CXX) -c  $(CFLAGS) -MMD -o $@ $<
 endif
+endif
+
 
 # auto-generated dependencies:
 -include obj/*.P
index bdf9f96..4ef89d5 100644 (file)
@@ -173,7 +173,16 @@ OBJS += obj/scrypt-generic.o
 
 obj/scrypt-generic.o: scrypt-generic.c
        $(CC) -c $(xCXXFLAGS) -MMD -o $@ $<
+
+ifeq  (${USE_SSE2}, 1)
+DEFS += -DUSE_SSE2
+OBJS += obj/scrypt-sse2.o
+
+obj/scrypt-sse2.o: scrypt-sse2.cpp
+       $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $<
 endif
+endif
+
 
 # auto-generated dependencies:
 -include obj/*.P
index 0f04521..aca0674 100644 (file)
@@ -520,6 +520,8 @@ void StakeMiner(CWallet *pwallet)
     // Make this thread recognisable as the mining thread
     RenameThread("novacoin-miner");
 
+    bool fTrySync = true;
+
     // Each thread has its own counter
     unsigned int nExtraNonce = 0;
 
@@ -537,11 +539,23 @@ void StakeMiner(CWallet *pwallet)
 
         while (vNodes.empty() || IsInitialBlockDownload())
         {
+            fTrySync = true;
+
             Sleep(1000);
             if (fShutdown)
                 return;
         }
 
+        if (fTrySync)
+        {
+            fTrySync = false;
+            if (vNodes.size() < 3 || nBestHeight < GetNumBlocksOfPeers())
+            {
+                Sleep(1000);
+                continue;
+            }
+        }
+
         //
         // Create new block
         //
index 664de32..3d93577 100644 (file)
@@ -253,7 +253,7 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in
         case TorIP: {
             proxyType proxy;
             proxy.first = CService("127.0.0.1", 9050);
-            GetProxy(NET_IPV4, proxy);
+            GetProxy(NET_TOR, proxy);
 
             CNetAddr addr(value.toString().toStdString());
             proxy.first.SetIP(addr);
@@ -264,7 +264,7 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in
         case TorPort: {
             proxyType proxy;
             proxy.first = CService("127.0.0.1", 9050);
-            GetProxy(NET_IPV4, proxy);
+            GetProxy(NET_TOR, proxy);
 
             proxy.first.SetPort(value.toInt());
             settings.setValue("addrTor", proxy.first.ToStringIPPort().c_str());
index 3414a00..ba4ad5c 100644 (file)
@@ -252,7 +252,7 @@ Value getblockbynumber(const Array& params, bool fHelp)
 {
     if (fHelp || params.size() < 1 || params.size() > 2)
         throw runtime_error(
-            "getblock <number> [txinfo]\n"
+            "getblockbynumber <number> [txinfo]\n"
             "txinfo optional to print more detailed tx info\n"
             "Returns details of a block with given block-number.");
 
index 4b4448a..614552f 100644 (file)
@@ -269,10 +269,6 @@ Value getaddednodeinfo(const Array& params, bool fHelp)
     return ret;
 }
 
-extern CCriticalSection cs_mapAlerts;
-extern map<uint256, CAlert> mapAlerts;
-// ppcoin: send alert.  
 // There is a known deadlock situation with ThreadMessageHandler
 // ThreadMessageHandler: holds cs_vSend and acquiring cs_main in SendMessages()
 // ThreadRPCServer: holds cs_main and acquiring cs_vSend in alert.RelayTo()/PushMessage()/BeginMessage()
diff --git a/src/scrypt-sse2.cpp b/src/scrypt-sse2.cpp
new file mode 100644 (file)
index 0000000..ef6ffb0
--- /dev/null
@@ -0,0 +1,156 @@
+/*
+ * Copyright 2009 Colin Percival, 2011 ArtForz, 2012-2013 pooler
+ * All rights reserved.
+ *
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ *
+ * This file was originally written by Colin Percival as part of the Tarsnap
+ * online backup system.
+ */
+
+#include "scrypt.h"
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include "pbkdf2.h"
+
+#include <emmintrin.h>
+
+static inline uint32_t le32dec(const void *pp)
+{
+    const uint8_t *p = (uint8_t const *)pp;
+    return ((uint32_t)(p[0]) + ((uint32_t)(p[1]) << 8) +
+    ((uint32_t)(p[2]) << 16) + ((uint32_t)(p[3]) << 24));
+}
+
+static inline void le32enc(void *pp, uint32_t x)
+{
+    uint8_t *p = (uint8_t *)pp;
+    p[0] = x & 0xff;
+    p[1] = (x >> 8) & 0xff;
+    p[2] = (x >> 16) & 0xff;
+    p[3] = (x >> 24) & 0xff;
+}
+
+static inline void xor_salsa8_sse2(__m128i B[4], const __m128i Bx[4])
+{
+       __m128i X0, X1, X2, X3;
+       __m128i T;
+       int i;
+
+       X0 = B[0] = _mm_xor_si128(B[0], Bx[0]);
+       X1 = B[1] = _mm_xor_si128(B[1], Bx[1]);
+       X2 = B[2] = _mm_xor_si128(B[2], Bx[2]);
+       X3 = B[3] = _mm_xor_si128(B[3], Bx[3]);
+
+       for (i = 0; i < 8; i += 2) {
+               /* Operate on "columns". */
+               T = _mm_add_epi32(X0, X3);
+               X1 = _mm_xor_si128(X1, _mm_slli_epi32(T, 7));
+               X1 = _mm_xor_si128(X1, _mm_srli_epi32(T, 25));
+               T = _mm_add_epi32(X1, X0);
+               X2 = _mm_xor_si128(X2, _mm_slli_epi32(T, 9));
+               X2 = _mm_xor_si128(X2, _mm_srli_epi32(T, 23));
+               T = _mm_add_epi32(X2, X1);
+               X3 = _mm_xor_si128(X3, _mm_slli_epi32(T, 13));
+               X3 = _mm_xor_si128(X3, _mm_srli_epi32(T, 19));
+               T = _mm_add_epi32(X3, X2);
+               X0 = _mm_xor_si128(X0, _mm_slli_epi32(T, 18));
+               X0 = _mm_xor_si128(X0, _mm_srli_epi32(T, 14));
+
+               /* Rearrange data. */
+               X1 = _mm_shuffle_epi32(X1, 0x93);
+               X2 = _mm_shuffle_epi32(X2, 0x4E);
+               X3 = _mm_shuffle_epi32(X3, 0x39);
+
+               /* Operate on "rows". */
+               T = _mm_add_epi32(X0, X1);
+               X3 = _mm_xor_si128(X3, _mm_slli_epi32(T, 7));
+               X3 = _mm_xor_si128(X3, _mm_srli_epi32(T, 25));
+               T = _mm_add_epi32(X3, X0);
+               X2 = _mm_xor_si128(X2, _mm_slli_epi32(T, 9));
+               X2 = _mm_xor_si128(X2, _mm_srli_epi32(T, 23));
+               T = _mm_add_epi32(X2, X3);
+               X1 = _mm_xor_si128(X1, _mm_slli_epi32(T, 13));
+               X1 = _mm_xor_si128(X1, _mm_srli_epi32(T, 19));
+               T = _mm_add_epi32(X1, X2);
+               X0 = _mm_xor_si128(X0, _mm_slli_epi32(T, 18));
+               X0 = _mm_xor_si128(X0, _mm_srli_epi32(T, 14));
+
+               /* Rearrange data. */
+               X1 = _mm_shuffle_epi32(X1, 0x39);
+               X2 = _mm_shuffle_epi32(X2, 0x4E);
+               X3 = _mm_shuffle_epi32(X3, 0x93);
+       }
+
+       B[0] = _mm_add_epi32(B[0], X0);
+       B[1] = _mm_add_epi32(B[1], X1);
+       B[2] = _mm_add_epi32(B[2], X2);
+       B[3] = _mm_add_epi32(B[3], X3);
+}
+
+uint256 scrypt_blockhash__sse2(const uint8_t* input)
+{
+    uint256 result = 0;
+    uint8_t scratchpad[SCRYPT_BUFFER_SIZE];
+       uint8_t B[128];
+       union {
+               __m128i i128[8];
+               uint32_t u32[32];
+       } X;
+       __m128i *V;
+       uint32_t i, j, k;
+
+       V = (__m128i *)(((uintptr_t)(scratchpad) + 63) & ~ (uintptr_t)(63));
+
+       PBKDF2_SHA256((const uint8_t *)input, 80, (const uint8_t *)input, 80, 1, B, 128);
+
+       for (k = 0; k < 2; k++) {
+               for (i = 0; i < 16; i++) {
+                       X.u32[k * 16 + i] = le32dec(&B[(k * 16 + (i * 5 % 16)) * 4]);
+               }
+       }
+
+       for (i = 0; i < 1024; i++) {
+               for (k = 0; k < 8; k++)
+                       V[i * 8 + k] = X.i128[k];
+               xor_salsa8_sse2(&X.i128[0], &X.i128[4]);
+               xor_salsa8_sse2(&X.i128[4], &X.i128[0]);
+       }
+       for (i = 0; i < 1024; i++) {
+               j = 8 * (X.u32[16] & 1023);
+               for (k = 0; k < 8; k++)
+                       X.i128[k] = _mm_xor_si128(X.i128[k], V[j + k]);
+               xor_salsa8_sse2(&X.i128[0], &X.i128[4]);
+               xor_salsa8_sse2(&X.i128[4], &X.i128[0]);
+       }
+
+       for (k = 0; k < 2; k++) {
+               for (i = 0; i < 16; i++) {
+                       le32enc(&B[(k * 16 + (i * 5 % 16)) * 4], X.u32[k * 16 + i]);
+               }
+       }
+
+       PBKDF2_SHA256((const uint8_t *)input, 80, B, 128, 1, (uint8_t *)&result, 32);
+
+    return result;
+}
index 5779127..32eea96 100644 (file)
@@ -6,16 +6,26 @@
 #include "util.h"
 #include "net.h"
 
-#define SCRYPT_BUFFER_SIZE (131072 + 63)
+#ifdef USE_SSE2
+#ifdef _MSC_VER
+// MSVC 64bit is unable to use inline asm
+#include <intrin.h>
+#else
+// GCC Linux or i686-w64-mingw32
+#include <cpuid.h>
+#endif
+#endif
 
 extern "C" void scrypt_core(uint32_t *X, uint32_t *V);
-
+#ifdef USE_SSE2
+extern  uint256 scrypt_blockhash__sse2(const uint8_t* input);
+#endif
 /* cpu and memory intensive function to transform a 80 byte buffer into a 32 byte output
    scratchpad size needs to be at least 63 + (128 * r * p) + (256 * r + 64) + (128 * r * N) bytes
    r = 1, p = 1, N = 1024
  */
 
-uint256 scrypt_blockhash(const uint8_t* input)
+uint256 scrypt_blockhash_generic(const uint8_t* input)
 {
     uint8_t scratchpad[SCRYPT_BUFFER_SIZE];
     uint32_t X[32];
@@ -29,3 +39,40 @@ uint256 scrypt_blockhash(const uint8_t* input)
 
     return result;
 }
+
+// By default, set to generic scrypt function. This will prevent crash in case when scrypt_detect_sse2() wasn't called
+uint256 (*scrypt_blockhash_detected)(const uint8_t* input) = &scrypt_blockhash_generic;
+
+#ifdef USE_SSE2
+void scrypt_detect_sse2()
+{
+    // 32bit x86 Linux or Windows, detect cpuid features
+    unsigned int cpuid_edx=0;
+#if defined(_MSC_VER)
+     // MSVC
+     int x86cpuid[4];
+     __cpuid(x86cpuid, 1);
+     cpuid_edx = (unsigned int)x86cpuid[3];
+#else // _MSC_VER
+    // Linux or i686-w64-mingw32 (gcc-4.6.3)
+    unsigned int eax, ebx, ecx;
+    __get_cpuid(1, &eax, &ebx, &ecx, &cpuid_edx);
+#endif // _MSC_VER
+
+    if (cpuid_edx & 1<<26)
+    {
+        scrypt_blockhash_detected = &scrypt_blockhash__sse2;
+        printf("scrypt: using scrypt-sse2 as detected.\n");
+    }
+    else
+    {
+        scrypt_blockhash_detected = &scrypt_blockhash_generic;
+        printf("scrypt: using scrypt-generic, SSE2 unavailable.\n");
+    }
+}
+#endif
+
+uint256 scrypt_blockhash(const uint8_t* input)
+{
+    return scrypt_blockhash_detected(input);
+}
\ No newline at end of file
index 9a648d3..3c9e3bd 100644 (file)
@@ -7,6 +7,12 @@
 #include "util.h"
 #include "net.h"
 
+#define SCRYPT_BUFFER_SIZE (131072 + 63)
+
 uint256 scrypt_blockhash(const uint8_t* input);
 
+#ifdef USE_SSE2
+void scrypt_detect_sse2();
+#endif
+
 #endif // SCRYPT_MINE_H
index 481da94..8b0afa9 100644 (file)
@@ -1464,3 +1464,13 @@ bool NewThread(void(*pfn)(void*), void* parg)
     }
     return true;
 }
+
+std::string DateTimeStrFormat(const char* pszFormat, int64_t nTime)
+{
+    // std::locale takes ownership of the pointer
+    std::locale loc(std::locale::classic(), new boost::posix_time::time_facet(pszFormat));
+    std::stringstream ss;
+    ss.imbue(loc);
+    ss << boost::posix_time::from_time_t(nTime);
+    return ss.str();
+}
\ No newline at end of file
index 77b439e..53dc567 100644 (file)
@@ -351,14 +351,7 @@ inline int64_t GetTimeMillis()
             boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_milliseconds();
 }
 
-inline std::string DateTimeStrFormat(const char* pszFormat, int64_t nTime)
-{
-    time_t n = nTime;
-    struct tm* ptmTime = gmtime(&n);
-    char pszTime[200];
-    strftime(pszTime, sizeof(pszTime), pszFormat, ptmTime);
-    return pszTime;
-}
+std::string DateTimeStrFormat(const char* pszFormat, int64_t nTime);
 
 static const std::string strTimestampFormat = "%Y-%m-%d %H:%M:%S UTC";
 inline std::string DateTimeStrFormat(int64_t nTime)