見出し画像

twSdrPower: Raspberry PiなどのLinux版をMac OSでビルドするMakefileの作成

今朝は5時から開発開始です。昨日の夜は調子が良くなかったので早く寝ましたが、今朝は復活しました。
昨日の続きでRTL-SDR

で私の周りの電波の強度を測定するtwSdrPowerの開発です。
中身を作る前にビルドするためのMakefileを作りました。Mac OS版をビルドは、RTL-SDRのライブラリをインストールしてGO言語でbuildコマンドでできますがLinux版はRTL-SDRのライブラリなどもビルドする必要があります。特にRaspberry Pi用はCPUがARMなのでクロスコンパイルも必要です。
twpcapを開発する時にDocker内でビルドする技をあみだしておいたのでその応用でできますが、必要なライブラリのビルド方法は調べなければなりません。

まずは、Dockerのgolang環境の中で、コマンドを入力してビルドしてみました。けっこう時間がかかりましたができました。
AMD64のLinux版は

docker run --rm -v "$(WD)":/twSdrPower -w /twSdrPower golang:1.17 /twSdrPower/mklinux.sh $(DIST) $(VERSION) $(COMMIT)

というコマンドで起動して、ビルドスクリプト

#!/bin/sh
apt update
apt install -y librtlsdr-dev libusb-1.0-0-dev
go mod tidy
go build -o $1/twSdrPower -ldflags="-extldflags \"-static -s\" -w -X main.version=$2 -X main.commit=$3"

でビルドできます。
ARM64のLinux版(Raspberry Pi用)は、

docker run --rm -v "$(WD)":/twSdrPower -w /twSdrPower golang:1.17 /twSdrPower/mkarm64.sh $(DIST) $(VERSION) $(COMMIT)

というコマンドで起動して、ビルドスクリプト

#!/bin/sh
apt update
apt install -y wget bzip2 cmake g++-aarch64-linux-gnu
export CC=aarch64-linux-gnu-gcc #libusb -1.0
cd /tmp
wget https://github.com/libusb/libusb/releases/download/v1.0.26/libusb-1.0.26.tar.bz2
tar xjf libusb-1.0.26.tar.bz2
cd libusb-1.0.26
./configure --host=aarch64-linux --enable-udev=no
make 
make install #librtlsdr 
cd /tmp
git clone https://gitea.osmocom.org/sdr/rtl-sdr.git
cd rtl-sdr/
mkdir build
cd build
cmake ../
make
make install
cd /twSdrPower
go mod tidy
CC=aarch64-linux-gnu-gcc GOOS=linux GOARCH=arm64  CGO_ENABLED=1 go build -o $1/twSdrPower.arm64  -ldflags="-extldflags \"-static -s\" -w -X main.version=$2 -X main.commit=$3"

でビルドできます。クロスコンパイルしています。
今朝は、ここで時間切れです。

明日に続く

開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。