BSD compatibility

- separate Makefile for BSD make
- auto-compile will detect BSD and pass the correct parameters to make
- C PoW builds on OpenBSD and detects number of cores
This commit is contained in:
Peter Šurda 2017-02-18 17:20:09 +01:00
parent 6c907e2046
commit 75f715bfe4
Signed by: PeterSurda
GPG Key ID: 0C5F50C0B5F37D87
3 changed files with 30 additions and 1 deletions

View File

@ -0,0 +1,14 @@
all: bitmsghash.so
powtest:
./testpow.py
bitmsghash.so: bitmsghash.o
${CXX} bitmsghash.o -shared -fPIC -lpthread -lcrypto $(LDFLAGS) -o bitmsghash.so
bitmsghash.o:
${CXX} -Wall -O3 -march=native -fPIC $(CCFLAGS) -c bitmsghash.cpp
clean:
rm -f bitmsghash.o bitmsghash.so

View File

@ -75,6 +75,10 @@ void getnumthreads()
DWORD_PTR dwProcessAffinity, dwSystemAffinity; DWORD_PTR dwProcessAffinity, dwSystemAffinity;
#elif __linux__ #elif __linux__
cpu_set_t dwProcessAffinity; cpu_set_t dwProcessAffinity;
#elif __OpenBSD__
int mib[2], core_count = 0;
int dwProcessAffinity = 0;
size_t len2;
#else #else
int dwProcessAffinity = 0; int dwProcessAffinity = 0;
int32_t core_count = 0; int32_t core_count = 0;
@ -86,6 +90,12 @@ void getnumthreads()
GetProcessAffinityMask(GetCurrentProcess(), &dwProcessAffinity, &dwSystemAffinity); GetProcessAffinityMask(GetCurrentProcess(), &dwProcessAffinity, &dwSystemAffinity);
#elif __linux__ #elif __linux__
sched_getaffinity(0, len, &dwProcessAffinity); sched_getaffinity(0, len, &dwProcessAffinity);
#elif __OpenBSD__
len2 = sizeof(core_count);
mib[0] = CTL_HW;
mib[1] = HW_NCPU;
if (sysctl(mib, 2, &core_count, &len2, 0, 0) == 0)
numthreads = core_count;
#else #else
if (sysctlbyname("hw.logicalcpu", &core_count, &len, 0, 0) == 0) if (sysctlbyname("hw.logicalcpu", &core_count, &len, 0, 0) == 0)
numthreads = core_count; numthreads = core_count;

View File

@ -174,7 +174,12 @@ def buildCPoW():
notifyBuild(False) notifyBuild(False)
return return
try: try:
call(["make", "-C", os.path.join(paths.codePath(), "bitmsghash")]) if "bsd" in sys.platform:
# BSD make
call(["make", "-C", os.path.join(paths.codePath(), "bitmsghash"), '-f', 'Makefile.bsd'])
else:
# GNU make
call(["make", "-C", os.path.join(paths.codePath(), "bitmsghash")])
if os.path.exists(os.path.join(paths.codePath(), "bitmsghash", "bitmsghash.so")): if os.path.exists(os.path.join(paths.codePath(), "bitmsghash", "bitmsghash.so")):
init() init()
notifyBuild(True) notifyBuild(True)