Skip to content

Commit 668b23c

Browse files
committed
Initial libuv support build.
1 parent 7741c34 commit 668b23c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1821
-386
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
/build
2+
/CMakeLists.txt.user

CMakeLists.txt

+38-115
Original file line numberDiff line numberDiff line change
@@ -1,99 +1,55 @@
11
cmake_minimum_required(VERSION 3.0)
2-
project(xmrig C)
3-
4-
option(WITH_LIBCPUID "Use Libcpuid" ON)
5-
option(WITH_AEON "CryptoNight-Lite support" ON)
2+
project(xmrig)
63

74
set(HEADERS
8-
compat.h
9-
algo/cryptonight/cryptonight.h
10-
algo/cryptonight/cryptonight_aesni.h
11-
algo/cryptonight/cryptonight_softaes.h
12-
elist.h
13-
xmrig.h
14-
version.h
15-
options.h
16-
cpu.h
17-
persistent_memory.h
18-
stratum.h
19-
stats.h
20-
util.h
21-
donate.h
22-
)
23-
24-
set(HEADERS_CRYPTO
25-
crypto/c_groestl.h
26-
crypto/c_blake256.h
27-
crypto/c_jh.h
28-
crypto/c_skein.h
29-
)
30-
31-
set(HEADERS_COMPAT
32-
compat/winansi.h
33-
)
34-
35-
set(HEADERS_UTILS
36-
utils/applog.h
37-
utils/threads.h
38-
utils/summary.h
5+
src/App.h
6+
src/interfaces/IClientListener.h
7+
src/net/Client.h
8+
src/net/Network.h
9+
src/net/Url.h
10+
src/Options.h
11+
src/Console.h
12+
src/version.h
3913
)
4014

4115
set(SOURCES
42-
xmrig.c
43-
algo/cryptonight/cryptonight.c
44-
algo/cryptonight/cryptonight_av1_aesni.c
45-
algo/cryptonight/cryptonight_av2_aesni_double.c
46-
algo/cryptonight/cryptonight_av3_softaes.c
47-
algo/cryptonight/cryptonight_av4_softaes_double.c
48-
util.c
49-
options.c
50-
stratum.c
51-
stats.c
52-
memory.c
53-
)
54-
55-
set(SOURCES_CRYPTO
56-
crypto/c_keccak.c
57-
crypto/c_groestl.c
58-
crypto/c_blake256.c
59-
crypto/c_jh.c
60-
crypto/c_skein.c
61-
crypto/soft_aes.c
62-
)
63-
64-
set(SOURCES_UTILS
65-
utils/applog.c
66-
utils/summary.c
16+
src/App.cpp
17+
src/net/Client.cpp
18+
src/net/Network.cpp
19+
src/net/Url.cpp
20+
src/Options.cpp
21+
src/Console.cpp
22+
src/xmrig.cpp
6723
)
6824

6925
if (WIN32)
70-
set(SOURCES_OS win/cpu_win.c win/memory_win.c win/xmrig_win.c win/app.rc compat/winansi.c)
71-
set(EXTRA_LIBS ws2_32)
72-
add_definitions(/D_WIN32_WINNT=0x600)
73-
elseif (APPLE)
74-
set(SOURCES_OS mac/cpu_mac.c mac/memory_mac.c mac/xmrig_mac.c)
26+
set(SOURCES_OS
27+
res/app.rc
28+
src/3rdparty/winansi.cpp
29+
src/3rdparty/winansi.h
30+
src/net/Network_win.cpp
31+
)
32+
33+
set(EXTRA_LIBS ws2_32 psapi iphlpapi userenv)
7534
else()
7635
set(SOURCES_OS unix/cpu_unix.c unix/memory_unix.c unix/xmrig_unix.c)
7736
set(EXTRA_LIBS pthread)
7837
endif()
7938

80-
include_directories(.)
81-
add_definitions(/DUSE_NATIVE_THREADS)
8239
add_definitions(/D_GNU_SOURCE)
8340
add_definitions(/DUNICODE)
41+
add_definitions(/DAPP_DEBUG)
8442

85-
if ("${CMAKE_BUILD_TYPE}" STREQUAL "")
86-
set(CMAKE_BUILD_TYPE Release)
87-
endif()
43+
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
8844

89-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maes -Wno-pointer-to-int-cast")
45+
find_package(UV REQUIRED)
9046

91-
if (CMAKE_C_COMPILER_ID MATCHES "Clang")
92-
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Ofast -funroll-loops -fvariable-expansion-in-unroller -fmerge-all-constants")
93-
else()
94-
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Ofast -funroll-loops -fvariable-expansion-in-unroller -ftree-loop-if-convert-stores -fmerge-all-constants -fbranch-target-load-optimize2")
47+
if ("${CMAKE_BUILD_TYPE}" STREQUAL "")
48+
set(CMAKE_BUILD_TYPE Release)
9549
endif()
9650

51+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maes -Wall")
52+
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Ofast -funroll-loops -fvariable-expansion-in-unroller -ftree-loop-if-convert-stores -fmerge-all-constants -fbranch-target-load-optimize2")
9753
#set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -gdwarf-2")
9854
#set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -fprofile-generate")
9955
#set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -fprofile-use -fprofile-correction")
@@ -102,45 +58,12 @@ if (WIN32)
10258
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")
10359
endif()
10460

105-
include_directories(compat/jansson)
106-
add_subdirectory(compat/jansson)
107-
108-
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
109-
110-
find_package(CURL REQUIRED)
111-
include_directories(${CURL_INCLUDE_DIRS})
112-
add_definitions(/DCURL_STATICLIB)
113-
link_directories(${CURL_LIBRARIES})
114-
115-
if (WITH_LIBCPUID)
116-
add_subdirectory(compat/libcpuid)
117-
118-
include_directories(compat/libcpuid)
119-
set(CPUID_LIB cpuid)
120-
set(SOURCES_CPUID cpu.c)
121-
else()
122-
add_definitions(/DXMRIG_NO_LIBCPUID)
123-
set(SOURCES_CPUID cpu_stub.c)
124-
endif()
125-
126-
if (WITH_AEON)
127-
set(SOURCES_AEON
128-
algo/cryptonight-lite/cryptonight_lite_av1_aesni.c
129-
algo/cryptonight-lite/cryptonight_lite_av2_aesni_double.c
130-
algo/cryptonight-lite/cryptonight_lite_av3_softaes.c
131-
algo/cryptonight-lite/cryptonight_lite_av4_softaes_double.c
132-
algo/cryptonight-lite/cryptonight_lite_aesni.h
133-
algo/cryptonight-lite/cryptonight_lite_softaes.h
134-
)
135-
else()
136-
add_definitions(/DXMRIG_NO_AEON)
137-
endif()
61+
include_directories(src)
62+
include_directories(src/3rdparty)
63+
include_directories(src/3rdparty/jansson)
64+
include_directories(${UV_INCLUDE_DIR})
13865

139-
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
140-
add_executable(xmrig ${HEADERS} ${HEADERS_CRYPTO} ${SOURCES} ${SOURCES_CRYPTO} ${HEADERS_UTILS} ${SOURCES_UTILS} ${HEADERS_COMPAT} ${SOURCES_COMPAT} ${SOURCES_OS} ${SOURCES_CPUID} ${SOURCES_AEON})
141-
target_link_libraries(xmrig jansson curl ${CPUID_LIB} ${EXTRA_LIBS})
142-
else()
143-
add_executable(xmrig32 ${HEADERS} ${HEADERS_CRYPTO} ${SOURCES} ${SOURCES_CRYPTO} ${HEADERS_UTILS} ${SOURCES_UTILS} ${HEADERS_COMPAT} ${SOURCES_COMPAT} ${SOURCES_OS} ${SOURCES_CPUID} ${SOURCES_AEON})
144-
target_link_libraries(xmrig32 jansson curl ${CPUID_LIB} ${EXTRA_LIBS})
145-
endif()
66+
add_subdirectory(src/3rdparty/jansson)
14667

68+
add_executable(xmrig ${HEADERS} ${SOURCES} ${SOURCES_OS})
69+
target_link_libraries(xmrig jansson ${UV_LIBRARIES} ${EXTRA_LIBS})

cmake/FindUV.cmake

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
find_path(UV_INCLUDE_DIR NAMES uv.h)
2+
find_library(UV_LIBRARY NAMES libuv)
3+
4+
set(UV_LIBRARIES ${UV_LIBRARY})
5+
set(UV_INCLUDE_DIRS ${UV_INCLUDE_DIR})
6+
7+
include(FindPackageHandleStandardArgs)
8+
find_package_handle_standard_args(UV DEFAULT_MSG UV_LIBRARY UV_INCLUDE_DIR)

win/app.ico res/app.ico

File renamed without changes.

win/app.rc res/app.rc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#include <windows.h>
2-
#include "../version.h"
2+
#include "../src/version.h"
33

44
IDI_ICON1 ICON DISCARDABLE "app.ico"
55

compat/jansson/CMakeLists.txt src/3rdparty/jansson/CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ add_definitions(-DHAVE_CONFIG_H)
66
# Add the lib sources.
77
file(GLOB JANSSON_SRC *.c)
88

9+
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Os")
10+
911
set(JANSSON_HDR_PRIVATE
1012
${CMAKE_CURRENT_SOURCE_DIR}/hashtable.h
1113
${CMAKE_CURRENT_SOURCE_DIR}/jansson_private.h
File renamed without changes.

compat/jansson/dump.c src/3rdparty/jansson/dump.c

+57-7
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,17 @@
99
#define _GNU_SOURCE
1010
#endif
1111

12+
#include "jansson_private.h"
13+
1214
#include <stdio.h>
1315
#include <stdlib.h>
1416
#include <string.h>
1517
#include <assert.h>
18+
#ifdef HAVE_UNISTD_H
19+
#include <unistd.h>
20+
#endif
1621

1722
#include "jansson.h"
18-
#include "jansson_private.h"
1923
#include "strbuffer.h"
2024
#include "utf.h"
2125

@@ -25,11 +29,28 @@
2529
#define FLAGS_TO_INDENT(f) ((f) & 0x1F)
2630
#define FLAGS_TO_PRECISION(f) (((f) >> 11) & 0x1F)
2731

32+
struct buffer {
33+
const size_t size;
34+
size_t used;
35+
char *data;
36+
};
37+
2838
static int dump_to_strbuffer(const char *buffer, size_t size, void *data)
2939
{
3040
return strbuffer_append_bytes((strbuffer_t *)data, buffer, size);
3141
}
3242

43+
static int dump_to_buffer(const char *buffer, size_t size, void *data)
44+
{
45+
struct buffer *buf = (struct buffer *)data;
46+
47+
if(buf->used + size <= buf->size)
48+
memcpy(&buf->data[buf->used], buffer, size);
49+
50+
buf->used += size;
51+
return 0;
52+
}
53+
3354
static int dump_to_file(const char *buffer, size_t size, void *data)
3455
{
3556
FILE *dest = (FILE *)data;
@@ -38,6 +59,16 @@ static int dump_to_file(const char *buffer, size_t size, void *data)
3859
return 0;
3960
}
4061

62+
static int dump_to_fd(const char *buffer, size_t size, void *data)
63+
{
64+
int *dest = (int *)data;
65+
#ifdef HAVE_UNISTD_H
66+
if(write(*dest, buffer, size) == (ssize_t)size)
67+
return 0;
68+
#endif
69+
return -1;
70+
}
71+
4172
/* 32 spaces (the maximum indentation size) */
4273
static const char whitespace[] = " ";
4374

@@ -168,6 +199,10 @@ static int compare_keys(const void *key1, const void *key2)
168199
static int do_dump(const json_t *json, size_t flags, int depth,
169200
json_dump_callback_t dump, void *data)
170201
{
202+
int embed = flags & JSON_EMBED;
203+
204+
flags &= ~JSON_EMBED;
205+
171206
if(!json)
172207
return -1;
173208

@@ -227,11 +262,11 @@ static int do_dump(const json_t *json, size_t flags, int depth,
227262

228263
n = json_array_size(json);
229264

230-
if(dump("[", 1, data))
265+
if(!embed && dump("[", 1, data))
231266
goto array_error;
232267
if(n == 0) {
233268
array->visited = 0;
234-
return dump("]", 1, data);
269+
return embed ? 0 : dump("]", 1, data);
235270
}
236271
if(dump_indent(flags, depth + 1, 0, dump, data))
237272
goto array_error;
@@ -255,7 +290,7 @@ static int do_dump(const json_t *json, size_t flags, int depth,
255290
}
256291

257292
array->visited = 0;
258-
return dump("]", 1, data);
293+
return embed ? 0 : dump("]", 1, data);
259294

260295
array_error:
261296
array->visited = 0;
@@ -286,11 +321,11 @@ static int do_dump(const json_t *json, size_t flags, int depth,
286321

287322
iter = json_object_iter((json_t *)json);
288323

289-
if(dump("{", 1, data))
324+
if(!embed && dump("{", 1, data))
290325
goto object_error;
291326
if(!iter) {
292327
object->visited = 0;
293-
return dump("}", 1, data);
328+
return embed ? 0 : dump("}", 1, data);
294329
}
295330
if(dump_indent(flags, depth + 1, 0, dump, data))
296331
goto object_error;
@@ -386,7 +421,7 @@ static int do_dump(const json_t *json, size_t flags, int depth,
386421
}
387422

388423
object->visited = 0;
389-
return dump("}", 1, data);
424+
return embed ? 0 : dump("}", 1, data);
390425

391426
object_error:
392427
object->visited = 0;
@@ -416,11 +451,26 @@ char *json_dumps(const json_t *json, size_t flags)
416451
return result;
417452
}
418453

454+
size_t json_dumpb(const json_t *json, char *buffer, size_t size, size_t flags)
455+
{
456+
struct buffer buf = { size, 0, buffer };
457+
458+
if(json_dump_callback(json, dump_to_buffer, (void *)&buf, flags))
459+
return 0;
460+
461+
return buf.used;
462+
}
463+
419464
int json_dumpf(const json_t *json, FILE *output, size_t flags)
420465
{
421466
return json_dump_callback(json, dump_to_file, (void *)output, flags);
422467
}
423468

469+
int json_dumpfd(const json_t *json, int output, size_t flags)
470+
{
471+
return json_dump_callback(json, dump_to_fd, (void *)&output, flags);
472+
}
473+
424474
int json_dump_file(const json_t *json, const char *path, size_t flags)
425475
{
426476
int result;
File renamed without changes.
File renamed without changes.
File renamed without changes.

compat/jansson/hashtable_seed.c src/3rdparty/jansson/hashtable_seed.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,12 @@ static uint32_t generate_seed() {
168168
int done = 0;
169169

170170
#if !defined(_WIN32) && defined(USE_URANDOM)
171-
if (!done && seed_from_urandom(&seed) == 0)
171+
if (seed_from_urandom(&seed) == 0)
172172
done = 1;
173173
#endif
174174

175175
#if defined(_WIN32) && defined(USE_WINDOWS_CRYPTOAPI)
176-
if (!done && seed_from_windows_cryptoapi(&seed) == 0)
176+
if (seed_from_windows_cryptoapi(&seed) == 0)
177177
done = 1;
178178
#endif
179179

0 commit comments

Comments
 (0)