LovyanGFXのPC用シミュレータをLinuxで動かす手順は2日目に紹介されていますが、clangをインストールしたらあっさりと動いたので手順のメモを残しておきます。
2日目の記事ではg++でコンパイルをしていますが、clangでコンパイルするので以下のドキュメントからclangをインストールします。
自分は ubuntu 22.04 を利用しているので、↓を /etc/apt/sources.list
に書き込んで sudo apt update
を実行します。
# 15
deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-15 main
deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-15 main
updateしたらclang-15をインストールします。
$ sudo apt install clang-15
インストールしたら、cloneしたLovyanGFXのフォルダに移動します。
$ cd LovyanGFX/examples_for_PC/CMake_SDL
下記内容で clang-cmakeinit.cmake
ファイルを作成して、
$ cat clang-cmakeinit.cmake
set(CMAKE_C_COMPILER "/usr/bin/clang-15" CACHE string "clang compiler" FORCE)
set(CMAKE_CXX_COMPILER "/usr/bin/clang++-15" CACHE string "clang++ compiler" FORCE)
cmakeコマンドを実行してmakefileを作成します。
$ cmake -C clang-cmakeinit.cmake .
loading initial cache file clang-cmakeinit.cmake
CMake Warning (dev) at clang-cmakeinit.cmake:1 (set):
implicitly converting 'string' to 'STRING' type.
This warning is for project developers. Use -Wno-dev to suppress it.
CMake Warning (dev) at clang-cmakeinit.cmake:2 (set):
implicitly converting 'string' to 'STRING' type.
This warning is for project developers. Use -Wno-dev to suppress it.
-- Configuring done
You have changed variables that require your cache to be deleted.
Configure will be re-run and you may have to reset some variables.
The following variables have changed:
CMAKE_C_COMPILER= /usr/bin/clang-15
CMAKE_CXX_COMPILER= /usr/bin/clang++-15
-- The C compiler identification is Clang 15.0.6
-- The CXX compiler identification is Clang 15.0.6
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/clang-15 - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/clang++-15 - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /work/mysketch/LovyanGFX/examples_for_PC/CMake_SDL
makeコマンドが作成されたらmakeコマンドを実行します。
終了するとバイナリが生成されます。
$ make
[ 4%] Building C object CMakeFiles/LGFX_SDL.dir/work/mysketch/LovyanGFX/src/lgfx/Fonts/IPA/lgfx_font_japan.c.o
[ 9%] Building C object CMakeFiles/LGFX_SDL.dir/work/mysketch/LovyanGFX/src/lgfx/Fonts/efont/lgfx_efont_cn.c.o
[ 13%] Building C object CMakeFiles/LGFX_SDL.dir/work/mysketch/LovyanGFX/src/lgfx/Fonts/efont/lgfx_efont_ja.c.o
[ 18%] Building C object CMakeFiles/LGFX_SDL.dir/work/mysketch/LovyanGFX/src/lgfx/Fonts/efont/lgfx_efont_kr.c.o
[ 22%] Building C object CMakeFiles/LGFX_SDL.dir/work/mysketch/LovyanGFX/src/lgfx/Fonts/efont/lgfx_efont_tw.c.o
[ 27%] Building C object CMakeFiles/LGFX_SDL.dir/work/mysketch/LovyanGFX/src/lgfx/utility/lgfx_pngle.c.o
[ 31%] Building C object CMakeFiles/LGFX_SDL.dir/work/mysketch/LovyanGFX/src/lgfx/utility/lgfx_qoi.c.o
/work/mysketch/LovyanGFX/src/lgfx/utility/lgfx_qoi.c:335:44: warning: format specifies type 'int' but the argument has type 'size_t' (aka 'unsigned long') [-Wformat]
debug_printf( "Can't malloc %d bytes", writeBufferSize);
~~ ^~~~~~~~~~~~~~~
%zu
/work/mysketch/LovyanGFX/src/lgfx/utility/lgfx_qoi.c:73:43: note: expanded from macro 'debug_printf'
#define debug_printf(...) fprintf(stderr, __VA_ARGS__)
^~~~~~~~~~~
1 warning generated.
[ 36%] Building C object CMakeFiles/LGFX_SDL.dir/work/mysketch/LovyanGFX/src/lgfx/utility/lgfx_qrcode.c.o
[ 40%] Building C object CMakeFiles/LGFX_SDL.dir/work/mysketch/LovyanGFX/src/lgfx/utility/lgfx_tjpgd.c.o
[ 45%] Building C object CMakeFiles/LGFX_SDL.dir/work/mysketch/LovyanGFX/src/lgfx/utility/miniz.c.o
[ 50%] Building CXX object CMakeFiles/LGFX_SDL.dir/work/mysketch/LovyanGFX/src/lgfx/v1/LGFXBase.cpp.o
In file included from /work/mysketch/LovyanGFX/src/lgfx/v1/LGFXBase.cpp:19:
In file included from /work/mysketch/LovyanGFX/src/lgfx/v1/LGFXBase.hpp:29:
/work/mysketch/LovyanGFX/src/lgfx/v1/misc/colortype.hpp:417:15: warning: constexpr constructor that does not initialize all members is a C++20 extension [-Wc++20-extensions]
constexpr bgra8888_t(uint8_t r8, uint8_t g8, uint8_t b8) : r(r8), g(g8), b(b8) {}
^
/work/mysketch/LovyanGFX/src/lgfx/v1/misc/colortype.hpp:405:17: note: member not initialized by constructor
uint8_t a;
^
1 warning generated.
[ 54%] Building CXX object CMakeFiles/LGFX_SDL.dir/work/mysketch/LovyanGFX/src/lgfx/v1/LGFX_Button.cpp.o
In file included from /work/mysketch/LovyanGFX/src/lgfx/v1/LGFX_Button.cpp:19:
In file included from /work/mysketch/LovyanGFX/src/lgfx/v1/LGFX_Button.hpp:20:
/work/mysketch/LovyanGFX/src/lgfx/v1/misc/colortype.hpp:417:15: warning: constexpr constructor that does not initialize all members is a C++20 extension [-Wc++20-extensions]
constexpr bgra8888_t(uint8_t r8, uint8_t g8, uint8_t b8) : r(r8), g(g8), b(b8) {}
^
/work/mysketch/LovyanGFX/src/lgfx/v1/misc/colortype.hpp:405:17: note: member not initialized by constructor
uint8_t a;
^
1 warning generated.
[ 59%] Building CXX object CMakeFiles/LGFX_SDL.dir/work/mysketch/LovyanGFX/src/lgfx/v1/LGFX_Sprite.cpp.o
In file included from /work/mysketch/LovyanGFX/src/lgfx/v1/LGFX_Sprite.cpp:19:
In file included from /work/mysketch/LovyanGFX/src/lgfx/v1/LGFX_Sprite.hpp:22:
In file included from /work/mysketch/LovyanGFX/src/lgfx/v1/LGFXBase.hpp:29:
/work/mysketch/LovyanGFX/src/lgfx/v1/misc/colortype.hpp:417:15: warning: constexpr constructor that does not initialize all members is a C++20 extension [-Wc++20-extensions]
constexpr bgra8888_t(uint8_t r8, uint8_t g8, uint8_t b8) : r(r8), g(g8), b(b8) {}
^
/work/mysketch/LovyanGFX/src/lgfx/v1/misc/colortype.hpp:405:17: note: member not initialized by constructor
uint8_t a;
^
1 warning generated.
[ 63%] Building CXX object CMakeFiles/LGFX_SDL.dir/work/mysketch/LovyanGFX/src/lgfx/v1/lgfx_fonts.cpp.o
In file included from /work/mysketch/LovyanGFX/src/lgfx/v1/lgfx_fonts.cpp:4:
In file included from /work/mysketch/LovyanGFX/src/lgfx/v1/misc/pixelcopy.hpp:22:
/work/mysketch/LovyanGFX/src/lgfx/v1/misc/colortype.hpp:417:15: warning: constexpr constructor that does not initialize all members is a C++20 extension [-Wc++20-extensions]
constexpr bgra8888_t(uint8_t r8, uint8_t g8, uint8_t b8) : r(r8), g(g8), b(b8) {}
^
/work/mysketch/LovyanGFX/src/lgfx/v1/misc/colortype.hpp:405:17: note: member not initialized by constructor
uint8_t a;
^
1 warning generated.
[ 68%] Building CXX object CMakeFiles/LGFX_SDL.dir/work/mysketch/LovyanGFX/src/lgfx/v1/misc/SpriteBuffer.cpp.o
[ 72%] Building CXX object CMakeFiles/LGFX_SDL.dir/work/mysketch/LovyanGFX/src/lgfx/v1/misc/pixelcopy.cpp.o
In file included from /work/mysketch/LovyanGFX/src/lgfx/v1/misc/pixelcopy.cpp:19:
In file included from /work/mysketch/LovyanGFX/src/lgfx/v1/misc/pixelcopy.hpp:22:
/work/mysketch/LovyanGFX/src/lgfx/v1/misc/colortype.hpp:417:15: warning: constexpr constructor that does not initialize all members is a C++20 extension [-Wc++20-extensions]
constexpr bgra8888_t(uint8_t r8, uint8_t g8, uint8_t b8) : r(r8), g(g8), b(b8) {}
^
/work/mysketch/LovyanGFX/src/lgfx/v1/misc/colortype.hpp:405:17: note: member not initialized by constructor
uint8_t a;
^
/work/mysketch/LovyanGFX/src/lgfx/v1/misc/pixelcopy.cpp:39:25: warning: field 'src_bits' is uninitialized when used here [-Wuninitialized]
, src_mask ( (1 << src_bits) - 1 )
^
/work/mysketch/LovyanGFX/src/lgfx/v1/misc/pixelcopy.cpp:40:25: warning: field 'dst_bits' is uninitialized when used here [-Wuninitialized]
, dst_mask ( (1 << dst_bits) - 1 )
^
3 warnings generated.
[ 77%] Building CXX object CMakeFiles/LGFX_SDL.dir/work/mysketch/LovyanGFX/src/lgfx/v1/panel/Panel_Device.cpp.o
In file included from /work/mysketch/LovyanGFX/src/lgfx/v1/panel/Panel_Device.cpp:18:
In file included from /work/mysketch/LovyanGFX/src/lgfx/v1/panel/Panel_Device.hpp:20:
In file included from /work/mysketch/LovyanGFX/src/lgfx/v1/panel/../Panel.hpp:30:
/work/mysketch/LovyanGFX/src/lgfx/v1/panel/../misc/colortype.hpp:417:15: warning: constexpr constructor that does not initialize all members is a C++20 extension [-Wc++20-extensions]
constexpr bgra8888_t(uint8_t r8, uint8_t g8, uint8_t b8) : r(r8), g(g8), b(b8) {}
^
/work/mysketch/LovyanGFX/src/lgfx/v1/panel/../misc/colortype.hpp:405:17: note: member not initialized by constructor
uint8_t a;
^
1 warning generated.
[ 81%] Building CXX object CMakeFiles/LGFX_SDL.dir/work/mysketch/LovyanGFX/src/lgfx/v1/platforms/sdl/Panel_sdl.cpp.o
In file included from /work/mysketch/LovyanGFX/src/lgfx/v1/platforms/sdl/Panel_sdl.cpp:23:
In file included from /work/mysketch/LovyanGFX/src/lgfx/v1/platforms/sdl/Panel_sdl.hpp:23:
In file included from /work/mysketch/LovyanGFX/src/lgfx/v1/platforms/sdl/../../panel/Panel_Device.hpp:20:
In file included from /work/mysketch/LovyanGFX/src/lgfx/v1/platforms/sdl/../../panel/../Panel.hpp:30:
/work/mysketch/LovyanGFX/src/lgfx/v1/platforms/sdl/../../panel/../misc/colortype.hpp:417:15: warning: constexpr constructor that does not initialize all members is a C++20 extension [-Wc++20-extensions]
constexpr bgra8888_t(uint8_t r8, uint8_t g8, uint8_t b8) : r(r8), g(g8), b(b8) {}
^
/work/mysketch/LovyanGFX/src/lgfx/v1/platforms/sdl/../../panel/../misc/colortype.hpp:405:17: note: member not initialized by constructor
uint8_t a;
^
1 warning generated.
[ 86%] Building CXX object CMakeFiles/LGFX_SDL.dir/work/mysketch/LovyanGFX/src/lgfx/v1/platforms/sdl/common.cpp.o
[ 90%] Building CXX object CMakeFiles/LGFX_SDL.dir/LGFX_SDL.cpp.o
In file included from /work/mysketch/LovyanGFX/examples_for_PC/CMake_SDL/LGFX_SDL.cpp:4:
In file included from /work/mysketch/LovyanGFX/examples_for_PC/CMake_SDL/../../../LovyanGFX/src/LovyanGFX.hpp:31:
In file included from /work/mysketch/LovyanGFX/examples_for_PC/CMake_SDL/../../../LovyanGFX/src/lgfx/v1_init.hpp:25:
In file included from /work/mysketch/LovyanGFX/examples_for_PC/CMake_SDL/../../../LovyanGFX/src/lgfx/v1/LGFXBase.hpp:29:
/work/mysketch/LovyanGFX/examples_for_PC/CMake_SDL/../../../LovyanGFX/src/lgfx/v1/misc/colortype.hpp:417:15: warning: constexpr constructor that does not initialize all members is a C++20 extension [-Wc++20-extensions]
constexpr bgra8888_t(uint8_t r8, uint8_t g8, uint8_t b8) : r(r8), g(g8), b(b8) {}
^
/work/mysketch/LovyanGFX/examples_for_PC/CMake_SDL/../../../LovyanGFX/src/lgfx/v1/misc/colortype.hpp:405:17: note: member not initialized by constructor
uint8_t a;
^
1 warning generated.
[ 95%] Building CXX object CMakeFiles/LGFX_SDL.dir/user_code.cpp.o
In file included from /work/mysketch/LovyanGFX/examples_for_PC/CMake_SDL/user_code.cpp:9:
In file included from /work/mysketch/LovyanGFX/examples_for_PC/CMake_SDL/../../../LovyanGFX/src/LovyanGFX.hpp:31:
In file included from /work/mysketch/LovyanGFX/examples_for_PC/CMake_SDL/../../../LovyanGFX/src/lgfx/v1_init.hpp:25:
In file included from /work/mysketch/LovyanGFX/examples_for_PC/CMake_SDL/../../../LovyanGFX/src/lgfx/v1/LGFXBase.hpp:29:
/work/mysketch/LovyanGFX/examples_for_PC/CMake_SDL/../../../LovyanGFX/src/lgfx/v1/misc/colortype.hpp:417:15: warning: constexpr constructor that does not initialize all members is a C++20 extension [-Wc++20-extensions]
constexpr bgra8888_t(uint8_t r8, uint8_t g8, uint8_t b8) : r(r8), g(g8), b(b8) {}
^
/work/mysketch/LovyanGFX/examples_for_PC/CMake_SDL/../../../LovyanGFX/src/lgfx/v1/misc/colortype.hpp:405:17: note: member not initialized by constructor
uint8_t a;
^
1 warning generated.
[100%] Linking CXX executable LGFX_SDL
[100%] Built target LGFX_SDL
生成されたバイナリを実行すると、LovyanGFX for PCが実行されます。
$ ./LGFX_SDL