Arduino IDE | Linux Arduino互換ライブラリをCygwin GCCでビルド→最初からエラー
Intel Galileo Arduino IDEに同梱されているLinux Arduino互換ライブラリのソースコードをCygwin GCCで
ビルド出来るか試してみました。Cygwin GCCをCygwinコマンドプロンプト外で使用する場合、幾つか環境
変数を設定しておくのが良いのですが、Arduino IDE上で環境変数を設定する方法が分からず、かといって、
Arduino IDE起動前にWindows上で環境変数を設定するのも嫌でしたので、以下のようなバッチファイルを
作成し、Arduino IDEの環境設定ファイルを書き換えて、バッチファイルをArduino IDEから呼び出すように
しました。しかしながら、最初のソースファイルからコンパイルエラーになってしまいました。(とりあえず、
これはこれで置いておいて、次はUbuntu/Linaro Linux GCCでビルド出来るか試してみようと思っています。)
作成したバッチファイル(例): arduino-1.5.3\hardware\arduino\x86\i686-pc-cygwin\bin\cygwin-g++.bat
バッチファイルの内容(例):
@echo off
set CYGWIN=nodosfilewarning
set LANG=C.ISO-8859-1
cd /d E:\tools\windows\cygwin\bin
g++.exe %*
ビルドエラーの内容:
E:\tools\micom\Intel\arduino-1.5.3/hardware/tools/x86/i686-pc-cygwin/bin/cygwin-g++.bat -m32 -march=i586 -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -MMD -march=i586 -m32 -DARDUINO=153 -IE:\tools\micom\Intel\arduino-1.5.3\hardware\arduino\x86\cores\arduino -IE:\tools\micom\Intel\arduino-1.5.3\hardware\arduino\x86\variants\galileo_fab_d E:\tools\micom\Intel\sketchbook\build\sketch_jan14a.cpp -o E:\tools\micom\Intel\sketchbook\build\sketch_jan14a.cpp.o
In file included from E:\tools\micom\Intel\arduino-1.5.3\hardware\arduino\x86\variants\galileo_fab_d/variant.h:36:0,
from E:\tools\micom\Intel\arduino-1.5.3\hardware\arduino\x86\cores\arduino/Arduino.h:15,
from sketch_jan14a.ino:1:
E:\tools\micom\Intel\arduino-1.5.3\hardware\arduino\x86\cores\arduino/TTYUART.h:25:2: error: 'pthread_barrier_t' does not name a type
pthread_barrier_t _barrier;
^

書き換えたArduino IDEの環境設定ファイル: arduino-1.5.3\hardware\arduino\x86\platform.win.txt
環境設定ファイルの書き換え部分の内容:
# X86 compile variables
# ---------------------
name=Arduino X86 Boards
compiler.path={runtime.ide.path}/hardware/tools/x86/i686-pc-cygwin/bin/
compiler.c.cmd=cygwin-gcc.bat
compiler.c.flags= -m32 -march=i586 -c -g -Os -w -ffunction-sections -fdata-sections -MMD
compiler.c.elf.flags=-m32 -march=i586 -Os -Wl,--gc-sections
compiler.c.elf.cmd=cygwin-g++.bat
compiler.S.flags=-c -g -assembler-with-cpp
compiler.cpp.cmd=cygwin-g++.bat
compiler.cpp.flags= -m32 -march=i586 -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -MMD
compiler.ar.cmd=cygwin-ar.bat
compiler.ar.flags=rcs
compiler.objcopy.cmd=cygwin-objcopy.bat
compiler.objcopy.eep.flags=-O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0
compiler.elf2hex.flags=-O ihex -R .eeprom
compiler.elf2hex.cmd=cygwin-objcopy.bat
compiler.ldflags=
compiler.size.cmd=cygwin-size.bat
compiler.strip.cmd=cygwin-strip.bat
# this can be overriden in boards.txt
build.extra_flags=
# X86 compile patterns
# --------------------
## Compile c files
recipe.c.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.c.flags} -march={build.mcu} {build.f_cpu} -D{software}={runtime.ide.version} {build.extra_flags} {includes} "{source_file}" -o "{object_file}"
## Compile c++ files
recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} -march={build.mcu} {build.f_cpu} -D{software}={runtime.ide.version} {build.extra_flags} {includes} "{source_file}" -o "{object_file}"
## Create archives
recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} "{build.path}/{archive_file}" "{object_file}"
## Combine gc-sections, archives, and objects
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} -march={build.mcu} -o "{build.path}/{build.project_name}.exe" {object_files} "{build.path}/{archive_file}" "-L{build.path}" -lm -lpthread
## Create eeprom
recipe.objcopy.eep.pattern="{compiler.path}{compiler.strip.cmd}" "{build.path}/{build.project_name}.exe"
## Create hex
recipe.objcopy.hex.pattern=
## Compute size
recipe.size.pattern="{compiler.path}{compiler.size.cmd}" -A "{build.path}/{build.project_name}.exe"
recipe.size.regex=Total\s+([0-9]+).*
作成したバッチファイルのフォルダ: arduino-1.5.3\hardware\arduino\x86\i686-pc-cygwin\bin
フォルダの内容:

ビルド出来るか試してみました。Cygwin GCCをCygwinコマンドプロンプト外で使用する場合、幾つか環境
変数を設定しておくのが良いのですが、Arduino IDE上で環境変数を設定する方法が分からず、かといって、
Arduino IDE起動前にWindows上で環境変数を設定するのも嫌でしたので、以下のようなバッチファイルを
作成し、Arduino IDEの環境設定ファイルを書き換えて、バッチファイルをArduino IDEから呼び出すように
しました。しかしながら、最初のソースファイルからコンパイルエラーになってしまいました。(とりあえず、
これはこれで置いておいて、次はUbuntu/Linaro Linux GCCでビルド出来るか試してみようと思っています。)
作成したバッチファイル(例): arduino-1.5.3\hardware\arduino\x86\i686-pc-cygwin\bin\cygwin-g++.bat
バッチファイルの内容(例):
@echo off
set CYGWIN=nodosfilewarning
set LANG=C.ISO-8859-1
cd /d E:\tools\windows\cygwin\bin
g++.exe %*
ビルドエラーの内容:
E:\tools\micom\Intel\arduino-1.5.3/hardware/tools/x86/i686-pc-cygwin/bin/cygwin-g++.bat -m32 -march=i586 -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -MMD -march=i586 -m32 -DARDUINO=153 -IE:\tools\micom\Intel\arduino-1.5.3\hardware\arduino\x86\cores\arduino -IE:\tools\micom\Intel\arduino-1.5.3\hardware\arduino\x86\variants\galileo_fab_d E:\tools\micom\Intel\sketchbook\build\sketch_jan14a.cpp -o E:\tools\micom\Intel\sketchbook\build\sketch_jan14a.cpp.o
In file included from E:\tools\micom\Intel\arduino-1.5.3\hardware\arduino\x86\variants\galileo_fab_d/variant.h:36:0,
from E:\tools\micom\Intel\arduino-1.5.3\hardware\arduino\x86\cores\arduino/Arduino.h:15,
from sketch_jan14a.ino:1:
E:\tools\micom\Intel\arduino-1.5.3\hardware\arduino\x86\cores\arduino/TTYUART.h:25:2: error: 'pthread_barrier_t' does not name a type
pthread_barrier_t _barrier;
^

書き換えたArduino IDEの環境設定ファイル: arduino-1.5.3\hardware\arduino\x86\platform.win.txt
環境設定ファイルの書き換え部分の内容:
# X86 compile variables
# ---------------------
name=Arduino X86 Boards
compiler.path={runtime.ide.path}/hardware/tools/x86/i686-pc-cygwin/bin/
compiler.c.cmd=cygwin-gcc.bat
compiler.c.flags= -m32 -march=i586 -c -g -Os -w -ffunction-sections -fdata-sections -MMD
compiler.c.elf.flags=-m32 -march=i586 -Os -Wl,--gc-sections
compiler.c.elf.cmd=cygwin-g++.bat
compiler.S.flags=-c -g -assembler-with-cpp
compiler.cpp.cmd=cygwin-g++.bat
compiler.cpp.flags= -m32 -march=i586 -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -MMD
compiler.ar.cmd=cygwin-ar.bat
compiler.ar.flags=rcs
compiler.objcopy.cmd=cygwin-objcopy.bat
compiler.objcopy.eep.flags=-O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0
compiler.elf2hex.flags=-O ihex -R .eeprom
compiler.elf2hex.cmd=cygwin-objcopy.bat
compiler.ldflags=
compiler.size.cmd=cygwin-size.bat
compiler.strip.cmd=cygwin-strip.bat
# this can be overriden in boards.txt
build.extra_flags=
# X86 compile patterns
# --------------------
## Compile c files
recipe.c.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.c.flags} -march={build.mcu} {build.f_cpu} -D{software}={runtime.ide.version} {build.extra_flags} {includes} "{source_file}" -o "{object_file}"
## Compile c++ files
recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} -march={build.mcu} {build.f_cpu} -D{software}={runtime.ide.version} {build.extra_flags} {includes} "{source_file}" -o "{object_file}"
## Create archives
recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} "{build.path}/{archive_file}" "{object_file}"
## Combine gc-sections, archives, and objects
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} -march={build.mcu} -o "{build.path}/{build.project_name}.exe" {object_files} "{build.path}/{archive_file}" "-L{build.path}" -lm -lpthread
## Create eeprom
recipe.objcopy.eep.pattern="{compiler.path}{compiler.strip.cmd}" "{build.path}/{build.project_name}.exe"
## Create hex
recipe.objcopy.hex.pattern=
## Compute size
recipe.size.pattern="{compiler.path}{compiler.size.cmd}" -A "{build.path}/{build.project_name}.exe"
recipe.size.regex=Total\s+([0-9]+).*
作成したバッチファイルのフォルダ: arduino-1.5.3\hardware\arduino\x86\i686-pc-cygwin\bin
フォルダの内容:

- 関連記事
-
- QEMU | Ubuntuのマルチアーキテクチャ機能を使ってARM Linux Arduinoスケッチを実行
- QEMU | CEV Linux SDK V2.00.00 GCC 4.7でビルドしたARM Linux ArduinoスケッチをQEMUで実行
- QEMU | Linaro ARM Linux GCC 4.7でビルドしたARM Linux ArduinoスケッチをQEMUで実行
- Arduino IDE | Linux Arduino互換ライブラリをCEV Linux SDK V2.00.00 GCC 4.7でビルド→正常終了
- Arduino IDE | Linux Arduino互換ライブラリをUbuntu/Linaro x86 Linux GCC 4.7でビルド→正常終了
- Arduino IDE | Linux Arduino互換ライブラリをLinaro ARM Linux GCC 4.7でビルド→正常終了
- Arduino IDE | Linux Arduino互換ライブラリをUbuntu/Linaro x86 Linux GCCでビルド→途中でエラー
- Arduino IDE | Linux Arduino互換ライブラリをCygwin GCCでビルド→最初からエラー
- Arduino IDE | Intel Galileo Arduino IDEのマイコンボードメニューを冗談半分(?)に増やしてみた
- Arduino IDE | Intel Galileo Arduino IDEで作成した実行プログラムをLinuxから実行する時の引数
- Arduino IDE | Intel Galileo Arduino IDEでcppファイルをコンパイル
- Arduino IDE | Pleiades KeplerとIntel Galileo Arduino IDEでスケッチフォルダとビルドフォルダを共有
- Arduino IDE | Pleiades KeplerでLinux Arduino互換ライブラリをcppファイルから使用する
- Arduino IDE | Pleiades KeplerでLinux Arduinoスケッチのinoファイルをコンパイル
- Arduino IDE | Pleiades Kepler + VMware Player上のUbuntuでLinux Arduinoスケッチをデバッグ (2)
2014/01/14 blog-entry-405 category: Arduino Lib & CrossGCC
| h o m e |