DlangããŸãã¯åã«Dã¯ãé·ãæŽå²ãæã€è¥ãããã°ã©ãã³ã°èšèªã§ãã ãã®ååã®èšèªã¯ããªãåã«ç»å Žãããšããäºå®ã«ãããããããçŸåšD2ãŸãã¯åã«DãšåŒã°ããŠãããã®ãæè¿ç»å Žãããã®å身ã«ã»ãšãã©äŒŒãŠããŸããã Dã§ã®èšè¿°ã¯éåžžã«äŸ¿å©ã§ãããããã©ãŒãã³ã¹ã¯C ++ã«å£ããŸããããããã£ãŠã圌ãARMãšãã®Androidããã³iOSã®ã¢ãã€ã«æ
åœè
ã«ãªã£ãããšã¯é©ãããšã§ã¯ãããŸããã ããã«ãã¢ãã®ã€ã³ã¿ãŒããããšããŒã¿ãã«ããã€ã¹ã®ã¿ã«é¢å¿ãé«ãŸã£ãŠããŸãã
ãã®èšäºã§ã¯ãRaspberry Piã®dlangã³ãŒããã¯ãã¹ã³ã³ãã€ã«ããã¿ã¹ã¯ã«ã€ããŠèª¬æããŸãã ããã¯è€éãªããšã§ã¯ãªããèœãšãç©ŽããããŸããã ãã®åºçç©ã¯ãäžè¬çãªããŸããŸãªããã€ã¹ãç¹ã«Raspberry Piã§Dã䜿çšããããã®ç°¡åãªããã¥ã¢ã«ã§ãã
ãããŒã¯ãŒã«ã
以äžãå¿
èŠã§ãã
- Linuxã³ã³ãã¥ãŒã¿ãŒïŒç§ã®å Žåãä»®æ³ãã·ã³äžã®Ubuntu 14.04ïŒ
- sshã¢ã¯ã»ã¹ãåããRaspberry PiïŒRaspberry Pi B +ã§äœ¿çšïŒ
Raspberry Piã§ãœãŒã¹ãçŽæ¥åéã§ãããšããäºå®ã«ãããããããå¥ã®ãã匷åãªã³ã³ãã¥ãŒã¿ãŒã§ãããè¡ãããšããå§ãããŸãã Raspberryèªäœã®ã¡ã¢ãªã¯å°ãªããããããRaspberry Piã§ã®ã¯ãã¹ã³ã³ãã€ã«ã¯ç°¡åã§ãã ãŸããRaspberry Piçšã®dlangã³ã³ãã€ã©ãå¿
èŠã§ãã LDCïŒLLVMããŒã¹ã®Dã³ã³ãã€ã©ïŒãšGDCïŒGNU Dã³ã³ãã€ã©ïŒã®2ã€ã®ãªãã·ã§ã³ããããŸãã é©åãªããŒãžã§ã³ã®GDCãèŠã€ããã®ã¯ç°¡åã§ããã ARMçšã®LDCãããã䜿çšããããšãã§ããŸããGDCã䜿çšããã®ã¯å¶ç¶ã§ãã
ããŠã³ããŒãã»ã¯ã·ã§ã³ã®GDC Webãµã€ãã«ã¢ã¯ã»ã¹ã
ãŸã ã
ã¿ãŒã²ããarm-linux-gnueabihfãã©ãããã©ãŒã çšã®x86_64ã¢ã»ã³ããªãããŠã³ããŒãããŸãïŒããæ
éã«ãGDCèªäœã¯x86ãšarmhfã¿ãŒã²ããã§å®è¡ãããŸããããã€ã¹ã§å®è¡ãããarmã®GDCãšæ··åããªãã§ãã ããïŒã
ããŠã³ããŒãããŠãã³ã³ãœãŒã«ãã解åããŸããwget http://gdcproject.org/downloads/binaries/5.2.0/x86_64-linux-gnu/gdc-5.2.0-arm-linux-gnueabihf+2.066.1.tar.xz
é梱
tar -xf gdc-5.2.0-arm-linux-gnueabihf+2.066.1.tar.xz
䟿å®äžããã©ã«ãã®ååãå€æŽããŸãã
mv arm-unknown-linux-gnueabihf gdc-arm
æ°žç¶çã«äœ¿çšããããã«ãgdcã䜿çšããŠãã©ã«ããŒã/ usr / binã«ã³ããŒãããšã€ãªã¢ã¹gdc-armãäœæããŸããããèšäºã®äŸã§ã¯ããã©ã«ããŒå
ã®ãã¹ãŠãããŒã«ã«ã§å®è¡ããŸãã ãããŠãã·ã§ãŒãã«ãããªã³ã¯ãäœæããŸãã
ln -s gdc-arm/bin/arm-linux-gnueabihf-gdc gdc
äžè¬çã«èšãã°ãããã¯ãã§ã«Raspberry PIã§Dã³ãŒããåéããã®ã«ååã§ãã Helloãworldã®äŸã確èªããŸãããã ãããã£ãŠããœãŒã¹ãèšè¿°ããŸãã
import std.stdio; void main() { writeln("Hello, World!"); }
ãããŠãhello.dã«ä¿åããŸãã ã³ã³ãã€ã«ããŸãïŒ
./gdc hello.d -o hello
次ã«ãããã€ã¹ã«ã³ããŒããããã«è¡ã£ãŠç¢ºèªããŸãã ç§ã«ãšã£ãŠã¯ãã®ããã«èŠããŸããïŒ
scp hello pi@192.168.1.85/~/dlang/hello
ãããŠãããã€ã¹äžã§ïŒ
pi@raspberrypi:~/dlang $ ./hello Hello, World!
ã¿ã¹ã¯ãããé£ãããã-ã©ã€ãã©ãªã®ãªã³ã¯
äžèšã®ãã¹ãŠã¯ç°¡åã§ãããç®±ããåºããŠåäœããŸãã ããã§ã¯ããã£ãšè€éãªãã®ãéããŸãããã ããšãã°ããHeââlloãvibe.dããã€ãŸãã
Webãã¬ãŒã ã¯ãŒã¯vibe.dã®åºæ¬çãªã¢ããªã±ãŒã·ã§ã³ã§ãã éåžžã®HelloWorldãšã®1ã€ã®éãã¯ãã©ã€ãã©ãªããªã³ã¯ããå¿
èŠãããããšã§ãã ãã®åé¡ã§ã®dlangã®ã¯ãã¹ã³ã³ãã€ã«ã¯ãCãC ++ããã³ãã®ä»ã®ã³ã³ãã€ã«ãããèšèªãšéãã¯ãããŸããã ãããã£ãŠãRaspberry Piã§ã®ã¯ãã¹ã³ã³ãã€ã«ã«ã¯äŸ¿å©ãªã¢ãããŒãã䜿çšã§ããŸãã
ã©ã€ãã©ãªã¯ç¹å®ã®ã¢ãŒããã¯ãã£ã«å¿
èŠã§ããããã®æé©ãªãœãŒã¹ã¯Raspberryãã£ã¹ããªãã¥ãŒã·ã§ã³ã«ã€ã³ã¹ããŒã«ããããªããžããªã§ãã ããã¯éåžž
https://www.raspbian.org/RaspbianRepositoryã§ãã ã©ã€ãã©ãªã䜿çšããæãç°¡åãªæ¹æ³ã¯ãããã€ã¹ããçŽæ¥è¡ãããšã§ãã ãã åéããã®ã§ã¯ãªãïŒéåžžã«æªãèãã§ãã¹ã¯ããã§éåžžã«ãã£ãããšæ°žé ã«ïŒããã¡ã€ã«ã䜿çšããã ãã§ãã sshfsã䜿çšããããšããå§ãããŸãïŒãã¡ãããã芧ãã ããïŒ
wiki.dlang.org/GDC/Cross_Compiler/Existing_Sysroot ïŒã ãã®ã¢ãããŒãã®äž»ãªå©ç¹ã¯ã絶察çãªæ±çšæ§ãšå®å®æ§ã§ãã ã©ã®é
åžããããã€ã³ã¹ããŒã«ãããŠããŠããå®ç§ãªã©ã€ãã©ãªã䜿çšãããŸãã é
åžããŒãžã§ã³ãŸãã¯ã©ã€ãã©ãªéã«ç«¶åãŸãã¯ççŸã¯ãããŸããã
ãã«ããã·ã³èªäœã®ããã±ãŒãžã®ãœãŒã¹ãšããŠRaspbianãéžæããªãã®ã¯ãªãã§ããæ®å¿µãªããããã®ãœãŒã¹ãæ¥ç¶ããŠã©ã€ãã©ãªã䜿çšããããšããè©Šã¿ã¯ãã¹ãŠå€±æããŸããã ãããã«éåžžã«äŒŒãå€ãã®èŠçã®åŸã
answers.launchpad.net /
ubuntu /
+ source /
build-essential /
+ question /
250970ã¢ã€ãã¢ã¯æŸæ£ãããŸããã
è
ã®ããã«ubuntuãªããžããªãå©çšããŠã¿ãŸããããã€ããŒãªæ¥ç¶ã®åé¡ããããŸãã åŸã§æ¥ç¶ããããçµã¿ç«ãŠãããšãã§ããŸããããèµ·åæã«éæ³ãªæ瀺ãåããŸããã armhfã®ã¢ãŒããã¯ãã£ã«ã¯ãŸã å€ãã®çš®é¡ãšãã©ã°ããããRaspberry Piã«åã£ããªããžããªãèŠã€ããŠèŠã€ããå¿
èŠããããŸãã
Raspberry Piãã¡ã€ã«ã·ã¹ãã å
šäœãããŠã³ããããã©ã«ããŒãäœæããç°å¢å€æ°ã«æžã蟌ã¿ãŸãã
mkdir rpi echo $RPIROOT export RPIROOT=~/test_pi/rpi/ echo $RPIROOT /home/user/test_pi/rpi/
sshfsçµç±ã§ããŠã³ãããŸãã
sshfs -o idmap=user,follow_symlinks pi@192.168.1.85:/ $RPIROOT
libã®ã¢ãŒããã¯ãã£ãšæ€çŽ¢ãã¹ãæå®ããå¿
èŠããããããã¬ã³ãŒããççž®ããããã®å¥ã®ã·ã§ãŒãã«ãããäœæããŸãã gdc-rpiãã¡ã€ã«ãäœæããå¿
èŠãªãã©ã°ã䜿çšããŠGDCãèµ·åããã¹ã¯ãªãããäœæããŸãã
ããã§ããå°ã詳ããïŒ-march = armv6j -mfpu = vfp -mfloat-abi = hard-ãããã¯ãRaspberry Piããã»ããµã®ã¢ãŒããã¯ãã£ã®ãã©ã°ã§ãã sysroot-ããã€ã¹ã®ã«ãŒãã-B-libãæ€çŽ¢ããå Žæãusr / libã®åãããã€ã¹äžã«ãããŸã
èµ·åæš©ãè¿œå ããŠç¢ºèªããŸãã
user@ubuntu:~/test_pi$ chmod 777 gdc-rpi user@ubuntu:~/test_pi$ ./gdc-rpi gdc: fatal error: no input files compilation terminated.
ãã¹ãŠãåäœããŸãããã«ããã·ã³äžã«DUBãå¿
èŠã§ãïŒããã¯ãã«ãã·ã¹ãã ã§ããã1ã€ã®äŸåé¢ä¿ãããŒãžã£ãŒçšã§ãïŒã
ããã§èª¬æãããŠ
ãã䟿å©ãªæ¹æ³ã§ããŠã³ããŒãããŠèšå®ã
ãŸã ã
åçŽãªvibe.dãããžã§ã¯ããäœæããŸãã
dub init -tvibe.d test_vibe_pi
DUBã¯ãæå°éã®ãããžã§ã¯ããå«ããã©ã«ããŒãäœæããŸãã 次ã«åéããŸãïŒ
cd test_vibe_pi/ dub build --compiler=../gdc-rpi
åºåã«ã¯ãtest_vibe_piãšãããã¡ã€ã«ããããŸãã libcurlã®ãããªãã®ããªãå Žåã¯ãããã€ã¹ã«ã¢ã¯ã»ã¹ããŠãã¹ãŠãååŸããŸãã éå»ã®å®éšã®åŸãç§ã¯ãã§ã«ãã¹ãŠãæã£ãŠããŸããã
ããã€ã¹ã«ã³ããŒããŠç¢ºèªããŸãã
cp test_vibe_pi $RPIROOT/home/pi/dlang
Raspberry Piã®å ŽåïŒ
pi@raspberrypi:~/dlang $ ./test_vibe_pi Listening for requests on http://[::1]:8080/ Listening for requests on http://127.0.0.1:8080/ Please open http://127.0.0.1:8080/ in your browser.
ãã¹ãŠããHelloãWorldïŒããäžããæå°ãµã€ãã¯
127.0.0.1ã§ã®ãªã¯ãšã¹ãã«ïŒ8080 /æºåãã§ããŠããŸãã
ããã€ã¹ã§çŽæ¥ãããžã§ã¯ããåéããã人åã
ãã®ãããªåŒ±ãããã€ã¹ã§ã³ãŒããåéããããšã¯æªãèãã§ããããœãŒã¹ã³ãŒãã®åœ¢åŒã§ããã€ã¹ã«ãããžã§ã¯ããå±éããæ¹ã䟿å©ãªå ŽåããããŸãã RaspberryçšGDCã®æºåãã§ããŸãã
ãgdcproject.org / downloadsã®ARMã»ã¯ã·ã§ã³ã«
ã¢ã¯ã»ã¹ããŠãarmhfããŒãžã§ã³ãããŠã³ããŒãã§ããŸãã ã»ãšãã©ã®å Žåããã«ãã«DUBãå¿
èŠã«ãªããŸããããµã€ãããã®å®æãããã€ããªã¯Raspberry Pi B +ã§éå§ãããªããããä»ã§ã¯çµã¿ç«ãŠãå¿
èŠããããŸãã
https://code.dlang.org/downloadãµã€ããããœãŒã¹ãããŠã³ããŒãã
ãŸã ïŒgithubããå
¥æã§ããŸããããããã®æ¹æ³ã§ãïŒã é梱ããŠã䟿å©ãªååã®ãã©ã«ããŒã«å
¥ããŸã
user@ubuntu:~/test_pi$ wget https://github.com/rejectedsoftware/dub/archive/v0.9.24.tar.gz user@ubuntu:~/test_pi$ tar -xf v0.9.24.tar.gz user@ubuntu:~/test_pi$ mv dub-0.9.24/ dub user@ubuntu:~/test_pi$ cd dub
Linuxã§GDCã䜿çšããŠãã«ãããããã®å¥ã®ã¹ã¯ãªããïŒbuild-gdc.shããããŸãã 圌ã¯gdcãã·ã¹ãã äžã«ããããGDCç°å¢å€æ°ãèšå®ãããŠããããšãæåŸ
ããŠããŸãã å€æ°ã䜿çšããŸãã ã·ã§ãŒãã«ããã¹ã¯ãªããã®ãã¹ãæå®ããŠå®è¡ããã ãã§ãã
GDC=../gdc-rpi ./build-gdc.sh Generating version file... ./build-gdc.sh: 15: ./build-gdc.sh: git: not found Running ../gdc-rpi... DUB has been built as bin/dub. You may want to run sudo ln -s /home/user/test_pi/dub/bin/dub /usr/local/bin now.
ãã®çµè«ãåŸããããªã³ã¯ãšã©ãŒããªããã°ãRaspberry Piã®DUBãæ©èœããŠããŸãã ããã€ã¹ã«ã³ããŒããŠç¢ºèªããŸãã
user@ubuntu:~/test_pi/dub$ cd .. user@ubuntu:~/test_pi$ cp dub/bin/dub rpi/home/pi/dlang/dub-test/dub
ããã€ã¹äžïŒ
pi@raspberrypi:~/dlang/dub-test $ ./dub Neither a package description file, nor source/app.d was found in /home/pi/dlang/dub-test Please run DUB from the root directory of an existing package, or run "dub init --help" to get information on creating a new package. Failed to find a package named ''.
DUBãèµ·åãããã©ã«ããŒã«ãããžã§ã¯ããååšããªãããšã«æ°ä»ããŸããã ç§ãã¡ã«ã¯æ¬åœã«ãããžã§ã¯ãããªããäž»ãªç®æšã¯éæãããŸãã-DUBã¯Raspberry Piã§å®è¡ãããŸãã
Rapberry Piã®äžã§Dã®ãããžã§ã¯ããåéã§ããŸãã ããšãã°ãã¹ããŒãããŒã ã®ãµãŒããŒãèµ·åã§ããŸãã vibe.dã®
ãã©ã°ã€ã³åœ¢åŒã§ã®MQTTã®ãµããŒããšãæ¢åã®Cã©ã€ãã©ãªã䜿çšããæ©èœããããŸãã