Rebased to xmrig v2.14.0

This commit is contained in:
MoneroOcean 2019-03-06 15:31:59 -08:00
commit dcbfe53869
43 changed files with 1958 additions and 3421 deletions

View file

@ -61,6 +61,10 @@ char *Platform::createUserAgent()
# if defined(__x86_64__)
length += snprintf(buf + length, max - length, "x86_64) libuv/%s", uv_version_string());
# elif defined(__aarch64__)
length += snprintf(buf + length, max - length, "aarch64) libuv/%s", uv_version_string());
# elif defined(__arm__)
length += snprintf(buf + length, max - length, "arm) libuv/%s", uv_version_string());
# else
length += snprintf(buf + length, max - length, "i686) libuv/%s", uv_version_string());
# endif

View file

@ -53,6 +53,11 @@
#include "rapidjson/fwd.h"
#ifdef XMRIG_FEATURE_EMBEDDED_CONFIG
# include "core/ConfigLoader_default.h"
#endif
xmrig::ConfigWatcher *xmrig::ConfigLoader::m_watcher = nullptr;
xmrig::IConfigCreator *xmrig::ConfigLoader::m_creator = nullptr;
xmrig::IConfigListener *xmrig::ConfigLoader::m_listener = nullptr;
@ -180,6 +185,15 @@ xmrig::IConfig *xmrig::ConfigLoader::load(Process *process, IConfigCreator *crea
loadFromFile(config, process->location(Process::ExeLocation, "config.json"));
}
# ifdef XMRIG_FEATURE_EMBEDDED_CONFIG
if (!config->finalize()) {
delete config;
config = m_creator->create();
loadFromJSON(config, default_config);
}
# endif
if (!config->finalize()) {
if (!config->algorithm().isValid()) {
fprintf(stderr, "No valid algorithm specified. Exiting.\n");

View file

@ -36,6 +36,10 @@
# define bit_AES (1 << 25)
#endif
#ifndef bit_OSXSAVE
# define bit_OSXSAVE (1 << 27)
#endif
#ifndef bit_AVX2
# define bit_AVX2 (1 << 5)
#endif
@ -107,10 +111,19 @@ static inline bool has_avx2()
}
static inline bool has_ossave()
{
int32_t cpu_info[4] = { 0 };
cpuid(PROCESSOR_INFO, cpu_info);
return (cpu_info[ECX_Reg] & bit_OSXSAVE) != 0;
}
xmrig::BasicCpuInfo::BasicCpuInfo() :
m_assembly(ASM_NONE),
m_aes(has_aes_ni()),
m_avx2(has_avx2()),
m_avx2(has_avx2() && has_ossave()),
m_brand(),
m_threads(std::thread::hardware_concurrency())
{

View file

@ -55,18 +55,21 @@ struct AlgoData
static AlgoData const algorithms[] = {
{ "cryptonight", "cn", xmrig::CRYPTONIGHT, xmrig::VARIANT_AUTO },
{ "cryptonight/0", "cn/0", xmrig::CRYPTONIGHT, xmrig::VARIANT_0 },
{ "cryptonight/1", "cn/1", xmrig::CRYPTONIGHT, xmrig::VARIANT_1 },
{ "cryptonight/xtl", "cn/xtl", xmrig::CRYPTONIGHT, xmrig::VARIANT_XTL },
{ "cryptonight/msr", "cn/msr", xmrig::CRYPTONIGHT, xmrig::VARIANT_MSR },
{ "cryptonight/xao", "cn/xao", xmrig::CRYPTONIGHT, xmrig::VARIANT_XAO },
{ "cryptonight/rto", "cn/rto", xmrig::CRYPTONIGHT, xmrig::VARIANT_RTO },
{ "cryptonight/2", "cn/2", xmrig::CRYPTONIGHT, xmrig::VARIANT_2 },
{ "cryptonight/half", "cn/half", xmrig::CRYPTONIGHT, xmrig::VARIANT_HALF },
{ "cryptonight/xtlv9", "cn/xtlv9", xmrig::CRYPTONIGHT, xmrig::VARIANT_HALF },
{ "cryptonight/wow", "cn/wow", xmrig::CRYPTONIGHT, xmrig::VARIANT_WOW },
{ "cryptonight/r", "cn/r", xmrig::CRYPTONIGHT, xmrig::VARIANT_4 },
{ "cryptonight", "cn", xmrig::CRYPTONIGHT, xmrig::VARIANT_AUTO },
{ "cryptonight/0", "cn/0", xmrig::CRYPTONIGHT, xmrig::VARIANT_0 },
{ "cryptonight/1", "cn/1", xmrig::CRYPTONIGHT, xmrig::VARIANT_1 },
{ "cryptonight/xtl", "cn/xtl", xmrig::CRYPTONIGHT, xmrig::VARIANT_XTL },
{ "cryptonight/msr", "cn/msr", xmrig::CRYPTONIGHT, xmrig::VARIANT_MSR },
{ "cryptonight/xao", "cn/xao", xmrig::CRYPTONIGHT, xmrig::VARIANT_XAO },
{ "cryptonight/rto", "cn/rto", xmrig::CRYPTONIGHT, xmrig::VARIANT_RTO },
{ "cryptonight/2", "cn/2", xmrig::CRYPTONIGHT, xmrig::VARIANT_2 },
{ "cryptonight/half", "cn/half", xmrig::CRYPTONIGHT, xmrig::VARIANT_HALF },
{ "cryptonight/xtlv9", "cn/xtlv9", xmrig::CRYPTONIGHT, xmrig::VARIANT_HALF },
{ "cryptonight/wow", "cn/wow", xmrig::CRYPTONIGHT, xmrig::VARIANT_WOW },
{ "cryptonight/r", "cn/r", xmrig::CRYPTONIGHT, xmrig::VARIANT_4 },
{ "cryptonight/rwz", "cn/rwz", xmrig::CRYPTONIGHT, xmrig::VARIANT_RWZ },
{ "cryptonight/zls", "cn/zls", xmrig::CRYPTONIGHT, xmrig::VARIANT_ZLS },
{ "cryptonight/double", "cn/double", xmrig::CRYPTONIGHT, xmrig::VARIANT_DOUBLE },
# ifndef XMRIG_NO_AEON
{ "cryptonight-lite", "cn-lite", xmrig::CRYPTONIGHT_LITE, xmrig::VARIANT_AUTO },
@ -134,6 +137,9 @@ static const char *variants[] = {
"gpu",
"wow",
"r",
"rwz",
"zls",
"double"
};
@ -300,6 +306,9 @@ const char *xmrig::Algorithm::perfAlgoName(const xmrig::PerfAlgo pa) {
"cn/half",
"cn/gpu",
"cn/r",
"cn/rwz",
"cn/zls",
"cn/double",
"cn-lite",
"cn-heavy",
"cn-pico",
@ -330,6 +339,18 @@ xmrig::Algorithm::Algorithm(const xmrig::PerfAlgo pa) {
m_algo = xmrig::CRYPTONIGHT;
m_variant = xmrig::VARIANT_4;
break;
case PA_CN_RWZ:
m_algo = xmrig::CRYPTONIGHT;
m_variant = xmrig::VARIANT_RWZ;
break;
case PA_CN_ZLS:
m_algo = xmrig::CRYPTONIGHT;
m_variant = xmrig::VARIANT_ZLS;
break;
case PA_CN_DOUBLE:
m_algo = xmrig::CRYPTONIGHT;
m_variant = xmrig::VARIANT_DOUBLE;
break;
case PA_CN_LITE:
m_algo = xmrig::CRYPTONIGHT_LITE;
m_variant = xmrig::VARIANT_1;
@ -353,12 +374,15 @@ xmrig::PerfAlgo xmrig::Algorithm::perf_algo() const {
switch (m_algo) {
case CRYPTONIGHT:
switch (m_variant) {
case VARIANT_2: return PA_CN2;
case VARIANT_HALF: return PA_CN_HALF;
case VARIANT_GPU: return PA_CN_GPU;
case VARIANT_WOW: return PA_CN_R;
case VARIANT_4: return PA_CN_R;
default: return PA_CN;
case VARIANT_2: return PA_CN2;
case VARIANT_HALF: return PA_CN_HALF;
case VARIANT_GPU: return PA_CN_GPU;
case VARIANT_WOW: return PA_CN_R;
case VARIANT_4: return PA_CN_R;
case VARIANT_RWZ: return PA_CN_RWZ;
case VARIANT_ZLS: return PA_CN_ZLS;
case VARIANT_DOUBLE: return PA_CN_DOUBLE;
default: return PA_CN;
}
case CRYPTONIGHT_LITE: return PA_CN_LITE;
case CRYPTONIGHT_HEAVY: return PA_CN_HEAVY;

View file

@ -138,6 +138,12 @@ bool xmrig::Job::setBlob(const char *blob)
else if (m_algorithm.variant() == VARIANT_WOW && m_blob[0] < 11) {
m_algorithm.setVariant(VARIANT_2);
}
else if (m_algorithm.variant() == VARIANT_RWZ && m_blob[0] < 12) {
m_algorithm.setVariant(VARIANT_2);
}
else if (m_algorithm.variant() == VARIANT_ZLS && m_blob[0] < 8) {
m_algorithm.setVariant(VARIANT_2);
}
}
# ifdef XMRIG_PROXY_PROJECT

View file

@ -43,14 +43,17 @@ enum Algo {
// algorithms that can has different performance
enum PerfAlgo {
PA_INVALID = -1,
PA_CN, /* cn/0 (Monero) */
PA_CN2, /* cn/2 (Monero) */
PA_CN_HALF, /* cn/half (MSR) */
PA_CN_GPU, /* cn/gpu (RYO) */
PA_CN_R, /* cn/4 (Monero) */
PA_CN_LITE, /* cn-lite/1 (AEON) */
PA_CN_HEAVY, /* cn-heavy/0 (LOKI) */
PA_CN_PICO, /* cn-pico/trtl (TRTL) */
PA_CN, /* cn/0 (Monero) */
PA_CN2, /* cn/2 (Monero) */
PA_CN_HALF, /* cn/half (MSR) */
PA_CN_GPU, /* cn/gpu (RYO) */
PA_CN_R, /* cn/4 (Monero) */
PA_CN_RWZ, /* cn/rwz (Graft) */
PA_CN_ZLS, /* cn/zls (Zelerius) */
PA_CN_DOUBLE, /* cn/double (Double) */
PA_CN_LITE, /* cn-lite/1 (AEON) */
PA_CN_HEAVY, /* cn-heavy/0 (LOKI) */
PA_CN_PICO, /* cn-pico/trtl (TRTL) */
PA_MAX
};
@ -75,21 +78,24 @@ enum AlgoVariant {
enum Variant {
VARIANT_AUTO = -1, // Autodetect
VARIANT_0 = 0, // Original CryptoNight or CryptoNight-Heavy
VARIANT_1 = 1, // CryptoNight variant 1 also known as Monero7 and CryptoNightV7
VARIANT_TUBE = 2, // Modified CryptoNight-Heavy (TUBE only)
VARIANT_XTL = 3, // Modified CryptoNight variant 1 (Stellite only)
VARIANT_MSR = 4, // Modified CryptoNight variant 1 (Masari only)
VARIANT_XHV = 5, // Modified CryptoNight-Heavy (Haven Protocol only)
VARIANT_XAO = 6, // Modified CryptoNight variant 0 (Alloy only)
VARIANT_RTO = 7, // Modified CryptoNight variant 1 (Arto only)
VARIANT_2 = 8, // CryptoNight variant 2
VARIANT_HALF = 9, // CryptoNight variant 2 with half iterations (Masari/Stellite)
VARIANT_TRTL = 10, // CryptoNight Turtle (TRTL)
VARIANT_GPU = 11, // CryptoNight-GPU (Ryo)
VARIANT_WOW = 12, // CryptoNightR (Wownero)
VARIANT_4 = 13, // CryptoNightR (Monero's variant 4)
VARIANT_AUTO = -1, // Autodetect
VARIANT_0 = 0, // Original CryptoNight or CryptoNight-Heavy
VARIANT_1 = 1, // CryptoNight variant 1 also known as Monero7 and CryptoNightV7
VARIANT_TUBE = 2, // Modified CryptoNight-Heavy (TUBE only)
VARIANT_XTL = 3, // Modified CryptoNight variant 1 (Stellite only)
VARIANT_MSR = 4, // Modified CryptoNight variant 1 (Masari only)
VARIANT_XHV = 5, // Modified CryptoNight-Heavy (Haven Protocol only)
VARIANT_XAO = 6, // Modified CryptoNight variant 0 (Alloy only)
VARIANT_RTO = 7, // Modified CryptoNight variant 1 (Arto only)
VARIANT_2 = 8, // CryptoNight variant 2
VARIANT_HALF = 9, // CryptoNight variant 2 with half iterations (Masari/Stellite)
VARIANT_TRTL = 10, // CryptoNight Turtle (TRTL)
VARIANT_GPU = 11, // CryptoNight-GPU (Ryo)
VARIANT_WOW = 12, // CryptoNightR (Wownero)
VARIANT_4 = 13, // CryptoNightR (Monero's variant 4)
VARIANT_RWZ = 14, // CryptoNight variant 2 with 3/4 iterations and reversed shuffle operation (Graft)
VARIANT_ZLS = 15, // CryptoNight variant 2 with 3/4 iterations (Zelerius)
VARIANT_DOUBLE = 16, // CryptoNight variant 2 with double iterations (X-CASH)
VARIANT_MAX
};