JELOS KAI RGB10 MAX3とチラシの裏のメモ

エミュレーター,日常JELOS,RGB10MAX3,エミュレーター,ネタ

先に結論 JELOS Kai for RGB10 MAX3 (RK3566)

BSP対応の最終ソース版はこちら


こっちがメインです、問題なくビルドも完走しました
動作確認もしましたが特に不備はなさそう?Bluetoothは未検証。

バッチリ1.19.1で動作しています。


ファミコンも動作OK


他のゲームも特段の問題は見当たりませんでした
ただRGB30とか353PSをお持ちの人はArkOSでよいと思います。




おまけ
前回記載した1月分ソースにGeolithを追加した
RK3566用JELOSを置いておきます。

ARKOSがないRGB10MAX3用に作ったのですが
最低限の動作確認しかしていないので、一応人柱さん向けです
旧BSPビルドなのもソースで確認済です。

忘備録メモ(ムダに長いので注意)

JELOSのBSPビルドだとGeolith-lrが
Windowsバイナリでビルドされてしまいエラー落ちする。

# packages\emulators\libretro\geolith-lr\package.mk

(略)

make_target() {
cd libretro
  make -f ./Makefile platform=${DEVICE_NAME}
}

makeinstall_target() {
  mkdir -p ${INSTALL}/usr/lib/libretro
  cp geolith_libretro.so ${INSTALL}/usr/lib/libretro/
}

make -f ./Makefile platform=${DEVICE_NAME}
この部分でmakeしているが、${DEVICE_NAME}に何が入るのか?

上記サイトを参照にDEVICE_NAMEを検索してみる(一部のみ記載)

projects\Rockchip\devices\RK3566\options: DEVICE_NAME="RK3566"
projects\Rockchip\devices\RK3566-BSP\options: DEVICE_NAME="RK3566"

定義からRK3566になっていることが判明
GeolithのMakeファイルを確認すると

そのままではRK3566ではMakeの引数がヒットしないのでどうしてるのか?
で、Patchを当ててるのが分かるので確認する。

# /packages/emulators/libretro/geolith-lr/patches/000-platform.patch

(略)
+# @DEVICE@
+else ifeq ($(platform), @DEVICE@)
+        TARGET := $(TARGET_NAME)_libretro.so
+        fpic := -fPIC
+        SHARED := -shared -Wl,--no-undefined -Wl,--version-script=link.T
+        CFLAGS+=-fsigned-char
+        FLAGS += -DARM
+        FLAGS += -mcpu=@TARGET_CPU@ -mtune=@TARGET_CPU@
+        FLAGS += -fomit-frame-pointer -ffast-math
+
 else ifeq ($(platform), emscripten)
 	TARGET := $(TARGET_NAME)_libretro_$(platform).bc
 	STATIC_LINKING = 1

Patchの内容はザックリ言うと
RK3566(ビルドのSoCに応じて変動)の引数を有効にして
デバイスにあわせたCPU情報を書き込んでくれるもの

projects\Rockchip\devices\RK3566-BSP\options

   case ${TARGET_ARCH} in
      aarch64)
        TARGET_KERNEL_ARCH="arm64"
        TARGET_PATCH_ARCH="aarch64"
        TARGET_CPU="cortex-a55"
        TARGET_CPU_FLAGS="+crc+crypto+fp+simd"
        TARGET_FPU="fp-armv8"
	TARGET_FLOAT="hard"
        TARGET_FEATURES="64bit"
./Makefile

RK3566-BSP:
	unset DEVICE_ROOT
	DEVICE_ROOT=RK3566-BSP PROJECT=Rockchip DEVICE=RK3566-BSP ARCH=arm ./scripts/build_distro
	DEVICE_ROOT=RK3566-BSP PROJECT=Rockchip DEVICE=RK3566-BSP ARCH=aarch64 ./scripts/build_distro

上記2つのファイルから定義が分かったので当てはめる

+# RK3566-BSP
+else ifeq ($(platform), RK3566-BSP)
+        TARGET := $(TARGET_NAME)_libretro.so
+        fpic := -fPIC
+        SHARED := -shared -Wl,--no-undefined -Wl,--version-script=link.T
+        CFLAGS+=-fsigned-char
+        FLAGS += -DARM
+        FLAGS += -mcpu=cortex-a55 -mtune=cortex-a55
+        FLAGS += -fomit-frame-pointer -ffast-math
+

恐らくこんな感じになると思われる。
1月分では問題なくビルドできたのでRK3566記載は問題ない(ハズ)
最終版のBSPビルドのパッチではRK3566-BSP記載でヒットしなくなる。
ならWindowsだな!ってなった感じ?

解決編

対応策その1
geolith-lr\package.mkに渡すDEVICE_NAME(RK3566)をDEVICE(RK3566-BSP)に書き換える

# packages\emulators\libretro\geolith-lr\package.mk

(略)

make_target() {
cd libretro
  make -f ./Makefile platform=${DEVICE}
}

makeinstall_target() {
  mkdir -p ${INSTALL}/usr/lib/libretro
  cp geolith_libretro.so ${INSTALL}/usr/lib/libretro/
}

対応策その2
Patch側のDEVICE(RK3566-BSP)をDEVICE_NAME(RK3566)に書き換える

対策その1でビルド


ごー!



とりあえず対応策その1でビルド完走です
これでやりたかったことは完了!

ARKOSのビルドを確認(参考)

ARKOSはSoC別にコアビルドが独立してるので読みやすかったです。
Patch適応のコードは書かれてるけど
実際にはファイルがないので、ここは予備的な記述と思われる。

	 cd geolith-libretro/
	 
	 geolith_patches=$(find *.patch)
	 
	 if [[ ! -z "$geolith_patches" ]]; then
	  for patching in geolith-patch*
	  do
		   patch -Np1 < "$patching"
		   if [[ $? != "0" ]]; then
			echo " "
			echo "There was an error while applying $patching.  Stopping here."
			exit 1
		   fi
		   rm "$patching" 
	  done

この先を確認するとmakeを編集してるっぽい。

	 fi

	  sed -i '/a53/s//a55/g' libretro/Makefile
	  sed -i '/rpi3_64/s//rk3566/' libretro/Makefile
	  make -C libretro/ clean
	  make -C libretro/ platform=rk3566 -j$(nproc)
sed -i '/a53/s//a55/g' libretro/Makefile

libretro/Makefile ファイルの a53 を含む行を探し
その行内のすべての a53 を a55 に置換する。

sed -i '/rpi3_64/s//rk3566/' libretro/Makefile

libretro/Makefile ファイルの rpi3_64 を含む行を探し
その行内の最初の rpi3_64 を rk3566 に置換

つまりRaspberryPi3の64bitビルドを乗っ取ってRK3566にしている
挙動としては問題なくA55最適化されるから問題なし?

ちからわざ(非推奨・旧解決策)



ここに2月ってウソついた1月分のGeolith-lrビルドがあるじゃろ?


それをBSP版のビルドフォルダーにポイ、ソースもぽい!


ビルドスクリプト「お!ビルド済みやな!ほなビルド飛ばしてコピーしとくわ!

計画通り!

動作確認できました!

しめ

32GBだとメインメモリが足らなくなってきました!!(ドーン
大昔のパソコンは640kbだったというのに。

主な原因はComfyUIでの4倍アップスケール繰り返すと
利用メモリが90%以上になってPCが止まる事
こうなると最悪、主電源切らないとダメ。
再起動できない、電源ボタン長押しでオフも出来ない、というありさま;



もう一つはJELOSのビルドでメモリ不足から挙動が怪しくなること。
エラーから再ビルドでリークするのかメモリが85%以上消費すると挙動不審に
サブPCにubuntu入れて、そっちでやる方がいいんでしょうけどねえ;

PCManagerからメモリ開放してたのですが
いつの時代だよ!?ってなったんで64GBに変更する感じです。(注文済)

N100PCが1台買える金額なの、ホント価格バグってますよね(N100PCが)
そんな感じでビルド話はひと段落かなと。