Bitcoin Forum

Bitcoin => Bitcoin Technical Support => Topic started by: ih8censorship on February 27, 2011, 09:11:50 PM



Title: Bitcoin generation on ARM hardware
Post by: ih8censorship on February 27, 2011, 09:11:50 PM
So I've got a SheevaPlug (http://en.wikipedia.org/wiki/SheevaPlug) And I'm wanting to set it up for bitcoin generation. I downloaded the latest sourcecode, installed various dependencies, and i ran "make -f makefile.unix bitcoind" and after it compiled 8 .o files it left me with this error:

Quote
g++ -c -O2 -Wno-invalid-offsetof -Wformat -g -D__WXDEBUG__ -D__WXGTK__ -DNOPCH -DFOURWAYSSE2 -DUSE_SSL -I"/usr/local/include/wx-2.9" -I"/usr/local/lib/wx/include/gtk2-unicode-debug-static-2.9" -msse2 -O3 -march=amdfam10 -o obj/sha256.o sha256.cpp
cc1plus: error: unrecognized command line option "-msse2"
sha256.cpp:1: error: bad value (amdfam10) for -march= switch
make: *** [obj/sha256.o] Error 1

Anyone know how to fix this one? I'm not real familiar with compiling for ARM yet, though it seems its trying to compile for an AMD compatible processor which the sheevaplug doesn't have.


Title: Re: Bitcoin generation on ARM hardware
Post by: error on February 27, 2011, 09:15:36 PM
Um, take out the -msse2 and -mamdfam10 switches and replace them with something more appropriate? You aren't on an Intel chip there :)


Title: Re: Bitcoin generation on ARM hardware
Post by: ih8censorship on February 27, 2011, 09:20:18 PM
Any idea on where to look for what to replace them with? That's kindof what I was thinking too, but I figured i'd post here so the community was aware of the issue.


Title: Re: Bitcoin generation on ARM hardware
Post by: error on February 27, 2011, 09:22:58 PM
Any idea on where to look for what to replace them with? That's kindof what I was thinking too, but I figured i'd post here so the community was aware of the issue.

I suspect that you don't compile much stuff? This sort of thing would be in the makefile.

Oh, you'll have to take out the -DFOURWAYSSE2 as well, since you can't run that without... SSE2!


Title: Re: Bitcoin generation on ARM hardware
Post by: ribuck on February 27, 2011, 09:28:48 PM
Any idea on where to look for what to replace them with?

You could maybe ask doublec. He's the only person I know who has compiled bitcoind for an ARM device:
http://bitcointalk.org/index.php?topic=2125.0 (http://bitcointalk.org/index.php?topic=2125.0)


Title: Re: Bitcoin generation on ARM hardware
Post by: ih8censorship on February 27, 2011, 09:32:07 PM
well I compile stuff, i just don't have much experience with ARM specifics. What's the thought? take out the intel stuff without replacing it with something arm specific then? Seems easy enough.

I'll look into that ribuck :)

**edit**

took out all the amd/intel stuff and replaced it with nothing to see if that will work. seems I need to actually compile some of boost.
Quote
g++ -c -O2 -Wno-invalid-offsetof -Wformat -g -D__WXDEBUG__ -D__WXGTK__ -DNOPCH -DUSE_SSL -I"/usr/local/include/wx-2.9" -I"/usr/local/lib/wx/include/gtk2-unicode-debug-static-2.9" -O3 -o obj/sha256.o sha256.cpp
g++ -O2 -Wno-invalid-offsetof -Wformat -g -D__WXDEBUG__ -D__WXGTK__ -DNOPCH -DUSE_SSL -I"/usr/local/include/wx-2.9" -I"/usr/local/lib/wx/include/gtk2-unicode-debug-static-2.9" -o bitcoind obj/nogui/util.o obj/nogui/script.o obj/nogui/db.o obj/nogui/net.o obj/nogui/irc.o obj/nogui/main.o obj/nogui/rpc.o obj/nogui/init.o cryptopp/obj/sha.o cryptopp/obj/cpu.o obj/sha256.o -Wl,-Bstatic -l boost_system-mt -l boost_filesystem-mt -l boost_program_options-mt -l boost_thread-mt -l db_cxx -l ssl -l crypto -Wl,-Bdynamic -l gthread-2.0 -l z -l dl
/usr/bin/ld: cryptopp/obj/sha.o: Relocations in generic ELF (EM: 3)
/usr/bin/ld: cryptopp/obj/sha.o: Relocations in generic ELF (EM: 3)
/usr/bin/ld: cryptopp/obj/sha.o: Relocations in generic ELF (EM: 3)
/usr/bin/ld: cryptopp/obj/sha.o: Relocations in generic ELF (EM: 3)
/usr/bin/ld: cryptopp/obj/sha.o: Relocations in generic ELF (EM: 3)
/usr/bin/ld: cryptopp/obj/sha.o: Relocations in generic ELF (EM: 3)
/usr/bin/ld: cryptopp/obj/sha.o: Relocations in generic ELF (EM: 3)
/usr/bin/ld: cryptopp/obj/sha.o: Relocations in generic ELF (EM: 3)
/usr/bin/ld: cryptopp/obj/sha.o: Relocations in generic ELF (EM: 3)
/usr/bin/ld: cryptopp/obj/sha.o: Relocations in generic ELF (EM: 3)
/usr/bin/ld: cryptopp/obj/sha.o: Relocations in generic ELF (EM: 3)
/usr/bin/ld: cryptopp/obj/sha.o: Relocations in generic ELF (EM: 3)
cryptopp/obj/sha.o: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make: *** [bitcoind] Error 1


Title: Re: Bitcoin generation on ARM hardware
Post by: doublec on February 27, 2011, 10:19:57 PM
This is the makefile I used to build on the N900:

Code:
INCLUDEPATHS= \
 -I"/usr/local/include/wx-2.9" \
 -I"/home/user/src/db-4.8.30/build_unix" \
 -I"/usr/local/lib/wx/include/gtk2-unicode-debug-static-2.9"

# for wxWidgets 2.9.1, add -l Xxf86vm
WXLIBS= \
 -Wl,-Bstatic \
   -l wx_gtk2ud-2.9 \
 -Wl,-Bdynamic \
   -l gtk-x11-2.0 \
   -l SM

# for boost 1.37, add -mt to the boost libraries
LIBS= \
 -Wl,-Bstatic \
   -l boost_system \
   -l boost_filesystem \
   -l boost_program_options \
   -l boost_thread \
   -L /home/user/src/db-4.8.30/build_unix \
   -l db_cxx \
   -l ssl \
   -l crypto \
 -Wl,-Bdynamic \
   -l gthread-2.0 \
   -l z \
   -l dl

DEFS=-D__WXGTK__ -DNOPCH
DEBUGFLAGS=-g -D__WXDEBUG__
CFLAGS=-O2 -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS)
HEADERS=headers.h strlcpy.h serialize.h uint256.h util.h key.h bignum.h base58.h \
    script.h db.h net.h irc.h main.h rpc.h uibase.h ui.h noui.h init.h

OBJS= \
    obj/util.o \
    obj/script.o \
    obj/db.o \
    obj/net.o \
    obj/irc.o \
    obj/main.o \
    obj/rpc.o \
    obj/init.o \
    cryptopp/obj/sha.o \
    cryptopp/obj/cpu.o


all: bitcoin


obj/%.o: %.cpp $(HEADERS)
        g++ -c $(CFLAGS) -DGUI -o $@ $<

cryptopp/obj/%.o: cryptopp/%.cpp
        g++ -c $(CFLAGS) -O3 -o $@ $<

obj/sha256.o: sha256.cpp
        g++ -c $(CFLAGS) -O3 -o $@ $<

bitcoin: $(OBJS) obj/ui.o obj/uibase.o obj/sha256.o
        g++ $(CFLAGS) -o $@ $^ $(WXLIBS) $(LIBS)


obj/nogui/%.o: %.cpp $(HEADERS)
        g++ -c $(CFLAGS) -o $@ $<

bitcoind: $(OBJS:obj/%=obj/nogui/%) obj/sha256.o
        g++ $(CFLAGS) -o $@ $^ $(LIBS)


clean:
        -rm -f obj/*.o
        -rm -f obj/nogui/*.o
        -rm -f cryptopp/obj/*.o
        -rm -f headers.h.gch

I had to build boost, db-48.30 and libevent from source as they weren't available in the N900 repositories.


Title: Re: Bitcoin generation on ARM hardware
Post by: ih8censorship on February 28, 2011, 04:43:04 AM
Well, I've managed to compile the needed boost libs and get bitcoind compiled as well, however it is throwing an exception:
Quote
bitcoin server starting


************************
EXCEPTION: 11DbException
DbEnv::open: Invalid argument
bitcoin in AppInit()

terminate called after throwing an instance of 'DbException'
  what():  DbEnv::open: Invalid argument
Any thoughts on this one? I think im using version 4.7 of the db lib if i remember correctly, maybe its a version difference issue? unless im just starting it wrong without the right arguments or something.


Title: Re: Bitcoin generation on ARM hardware
Post by: bitk on February 28, 2011, 12:18:46 PM
Can I give you a harsh response?
An arm for mining? You know you are not getting any single penny out of it, don't you? Even with pooled mining...


Title: Re: Bitcoin generation on ARM hardware
Post by: chromicant on February 28, 2011, 12:53:44 PM
I haven't tried with the bitcoin client on my BB-xM, but it should work there in headless mode. Are you using the SheevaPlug distribution, since I haven't messed with that much at all.

As for performance, my OMAP3 Cortex-A8 is getting about 270khash/sec unoptimized underclocked @ 800MHz, and looking at fixing the NEON code I have in my fork of jgarzik's miner at some point which should make things better.

However, the SheevaPlug is a Kirkwood (arm5te), and my Pogoplug is pushing 200kbit/sec. Not fast, nor is there any NEON to try SIMD tricks with...but the power usage for such light miners will allow for a trickle if you're in a pool.


Title: Re: Bitcoin generation on ARM hardware
Post by: ih8censorship on March 01, 2011, 02:34:53 AM
My intent is more academic than practical. and the "look what I can do" factor. haha.

I am using the default sheevaplug distro of ubuntu.

What exactly is a pool? Is it just multiple machines mining for the same owners address?


Title: Re: Bitcoin generation on ARM hardware
Post by: Beremat on March 02, 2011, 03:29:17 AM
My intent is more academic than practical. and the "look what I can do" factor. haha.

I am using the default sheevaplug distro of ubuntu.

What exactly is a pool? Is it just multiple machines mining for the same owners address?
Yes, and when a machine finds a block the 50BTC is distributed among the machines that submitted work. Overall the payout's the same, but in a pool you get payment over time instead of the 50BTC you'd get every time you find a block.