More Related Content Similar to CMake multiplatform build-tool (20) More from Naruto TAKAHASHI (20) CMake multiplatform build-tool2. Naruto ð¥ TAKAHASHI
â tnaruto@gmail.com
â twitter: @TNaruto
â Primary job: DeNA Co., Ltd.
â develop SDK for mobile platforms
â Side job: wolfSSL Inc.
â port embedded SSL/TLS library to RTOS
7. Platforms & Build-tools
Platforms
â Windows
â macOS
â Linux
â iOS
â Android
Build-tools
â MSVC, NMake
â Xcode
â autotools
â Xcode
â build.mk
ð åç°å¢ã§ããããã¡ã³ããã³ã¹ãå¿
èŠ
10. åé¡ç¹
â Windows ãš macOS ãš Linux 3ã€ã®èµ·åãå¿
èŠ
â ããããã® Makefiles ã®ã¡ã³ããã³ã¹ãå¿
èŠ
â åé¡ç¹
â æéãå¿
èŠ(ãã«ãç°å¢ã®ã¡ã³ããã³ã¹ãå¿
èŠ)
â ããŒãžã§ã³ç®¡çãœãããŠã§ã¢ãšçžæ§æªã
â é¢åãªã®ã§èª°ãã¡ã³ããã³ã¹ãããããããªã
â OSS ã§ãããªãããžã§ã¯ãããã£ããåå ãã¥ãã
ð ã¡ã³ããã³ã¹ã®é¢åãããã¯ãããžã§ã¯ãã®æ»
12. ã¢ãããŒã·ã§ã³(2)
â éçºç°å¢ã®å
å®
â ã¢ãã€ã« + ãã¹ã¯ãããç°
å¢ã§ã®åäœç¢ºèªå¯èœãªéçº
ç°å¢ã®å°é
â Unity
â Xamarin
â Qt
â 次ã«çŸããçŽ æµãªéçºç°å¢
â æ±ããããããš
â ãã¹ã¯ããããšã¢ãã€ã«ã§
åãåäœãããããš
â iOS ã Android 以å€ã«
Windows ã macOS ã®ã©ã€
ãã©ãªãå¿
èŠ
ð ã¢ãã€ã«ãšãã¹ã¯ãããã§åãã³ãŒãã§åäœãããããšã§éçºå¹çæ
ä¿
19. OSS & Cross-Platform tool
â Support Platforms
â Windows
â macOS
â Linux
â ã»ããã¢ããããã°ã©ã ãã
â CLI/GUI ã©ã¡ãããããŸãã
ð CMake ã¯ã€ã³ã¹ããŒã«&ããŒãžã§ã³ã¢ãããããã楜
21. build, test and packaging
â ãã«ã
â ãã«ã
â ã¯ãã¹ã³ã³ãã€ã«
â ãã¹ã(ctest)
â ãŠããããã¹ã
â ããã±ãŒãž
â ãªãªãŒã¹ç©äœæ
22. ãã«ã
â CMakeLists.txt ã«èšè¿°
â CMake ã¯èªèº«ã§ã¯ãã€ããªããã«ãããªã
â åãã©ãããã©ãŒã ã® makefile ããããžã§ã¯ããã¡ã€ã«ãçæãã
â ãã€ããªã®ãã«ãã¯çæãããããžã§ã¯ãã«ä»»ãã
ð ãããžã§ã¯ããçæããã®ã CMake ã®ãã«ã
23. generate Native Platform makefiles
CMakeLists.txt
â .sln
â .cproj
â Makefile
â .xcodeproj
â Makefile
â Makefile
24. support Platform makefiles
â Visual Studio
â Xcode
â Makefile (Unix, MSYS, MinGW, NMake...)
â Ninja
â and otherâŠ
ð CMakeLists.txt ãäžåºŠæžãã°ãã¹ãŠã«åºåå¯èœ
28. CMake toolchain
â toolchain ã§ã³ã³ãã€ã©ãå€æŽå¯èœã«
â toolchain ã䜿ããšãã«ãå¯èœãªãã®
â iOS
â Android
â ãã®ä»ãã©ãããã©ãŒã
ð CMake toolchain ã䜿ãã°ã¯ãã¹ãã«ããåºæ¥ã¡ãã
29. â CMake ã®ãã¹ãã©ã³ããŒ
â ãã¹ãã·ããªãªã¯ CMakeLists.txt ã«çŽæ¥èšè¿°
â gtest ãªã©ã®ãã¹ããã¬ãŒã ã¯ãŒã¯ãå©çšå¯èœ
â enable_testing() ã§ãã¹ãæå¹å
â add_test() ã§ãã¹ãã³ãã³ããç»é²
â ãã«ãåŸ, ctest ã³ãã³ãã§å®è¡å¯èœ
CTest
31. support by many companies
â Qt Company
â Qt ã¢ããªã®ãã«ã㧠CMake ãå©çšå¯èœã«
â Microsoft
â Visual Studio 㧠CMake ã®å¯Ÿå¿ãé²ãã§ãã
â Jetbrains
â CLion(CMake çš IDE) ãéçº
â (ãããã) Unix ã©ã€ãã©ãªã IDE ã§éçºã§ããïŒ
ð ã¯ãã¹ãã©ãããã©ãŒã ãçã£ãŠããäŒæ¥ããµããŒã
35. CMakeLists.txt
CMakeLists.txt
# ã©ã€ãã©ãªäœæ
add_library(timestwo SHARED timestwo.c)
# ctest æå¹å
enable_testing()
# ãã¹ãçšå®è¡ãã€ããªäœæ
add_executable(timestwo_test timestwo_test.c)
# ãã¹ãçšå®è¡ãã€ããªã®ã©ã€ãã©ãªã®ãªã³ã¯
target_link_libraries(timestwo_test timestwo)
# ãã¹ãã·ããªãªã®è¿œå
add_test(NAME timestwo_test COMMAND timestwo_test)
36. ãã«ã & ãã¹ãã³ãã³ã
# ãã«ããã£ã¬ã¯ããªäœæ
mkdir build && cd build
# makefile ã®çæ
cmake ..
# ã©ã€ãã©ãªãšãã¹ãããã°ã©ã ã®ãã«ã
cmake --build .
# add_test() ã§è¿œå ããããã¹ããé 次å®è¡
ctest .
commands
39. armeabi-v7a ãã«ã
mkdir build_armeabi && cd build_armeabi
cmake .. -DCMAKE_SYSTEM_NAME=Android ¥
-DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang ¥
-DCMAKE_SYSTEM_VERSION=21 ¥
-DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a ¥
-DCMAKE_ANDROID_NDK=${ANDROID_NDK_ROOT}
cmake --build . # ã©ã€ãã©ãªã®ãã«ã
commands
40. arm64-v8a ãã«ã
mkdir build_arm64-v8a && cd build_arm64-v8a
cmake .. -DCMAKE_SYSTEM_NAME=Android ¥
-DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang ¥
-DCMAKE_SYSTEM_VERSION=21 ¥
-DCMAKE_ANDROID_ARCH_ABI=arm64-v8a ¥
-DCMAKE_ANDROID_NDK=${ANDROID_NDK_ROOT}
cmake --build . # ã©ã€ãã©ãªã®ãã«ã
commands
42. CMake ãããŸã§ãŸãšã
â ã€ã³ã¹ããŒã«ãç°¡å
â CMakeLists.txt ãã Makefiles ãçæ
â CLI ã³ãã³ãã®å
±éåå¯èœ
â CMake toolchain ã§ã¯ãã¹ãã«ãå¯èœ
â ãã¹ãã©ã³ããŒæèŒ
â ãã¹ãã·ããªãªã CMakeLists.txt ã§ç®¡çå¯èœ
â æ
å ±ãå°ãªãã®ãããã¯(誰ãæžããŠ)
46. Simon Speck
â lightweight block cipher ã®äžã€
â æ±çš IoT åã
â è€æ°ã®ãããã¯ãµã€ãº/ããŒãµã€ãºã«å¯Ÿå¿
â 32/64, 48/72, 48/96, 64/96, 64/128, 96/96, 96/144
â 128/128, 128/192, 128/256
â simon ã HW åããspeck ãCPU åã
â speck 㯠SIMD ãæžãããã
47. simon-speck-c
â C èšèªã® Simon Speck å®è£
(ä»ã®ãšãã Speck ã®ã¿)
â 察å¿ãããã¯ã»ããŒ: 128/128, 128/192, 128/256
â æå·ã¢ãŒã: ECB, CTR(æå·ã»åŸ©å·ã§äžŠååŠçå¯)
â ããã£ã³ã°åŠçãªã(CTR ã§ä»£æ¿)
â æå·ã»åŸ©å·åŠç㯠SIMD å©çš
â C èšèªæ±çšç(ECB, CTR)
â ARM NEON ç(ECB, CTR)
â Intel AVX2 ç(ECB, CTR)
55. iOS 察å¿
CMakeLists.txt
â iOS ãã«ãçšã® toolchain ãã¡ã€
ã«ãå©çšããããš
ãã«ã
â åã¢ãŒããã¯ãã£ã®ãã«ããã
ãããš
â armv7, armv7s, arm64
â i386, x86_64
â libtool 㧠fat library ã«ããããš
(ref1)
56. Android 察å¿
CMakeLists.txt
â Android ãã«ãçšã® toolchain ã
ã¡ã€ã«ãååŸ
â CMake v3.4 ããæšæºæèŒ
ãã«ã
â åã¢ãŒããã¯ãã£ã®ãã«ããã
ãããš
â armeabi-v7a, arm64-v8a
â x86(ããããããªïœ¥ïœ¥ïœ¥), x86_64
â cmake toolchain ãªãã·ã§ã³ã¯
Google ãåç
§
â https://developer.android.com/ndk/
guides/cmake.html#build-command
63. CMake ã§ã® AVX2 æèŒå€å¥æ¹æ³
â AVX2 以éã®åœä»€ãã³ã³ãã€ã« & å®è¡å¯èœãã§å€å¥
â _mm256_loadu_si256 å®è¡ãœãŒã¹
â CMake ã§ã³ã³ãã€ã«&å®è¡ã§ç¢ºèª(try_run ãå©çš)
â cpu_avx2.c ããã«ãããå®è¡
â ã©ã€ãã©ãªã®åäœç¢ºèªã¯ ctest ã§å¯èœ
64. CMake ã§ã® ARM ã¢ãŒããã¯ãã£å€å¥æ¹æ³
â ã³ã³ãã€ã©ã¿ãŒã²ããã§å€å¥
â ARMv7 ã®å Žå㯠âARMâ å€æ°ãèšå®ããã
â ARMv8 ã®å Žå㯠âAARCH64â å€æ°ãèšå®ããã
65. NEON æèŒå€å¥æ¹æ³
â NEON åœä»€ãã³ã³ãã€ã«å¯èœãã§å€å¥
â vld1q_f32 å®è¡ãœãŒã¹
â CMake ã§ã³ã³ãã€ã«ã§ç¢ºèª(try_compile ãå©çš)
â iOS ã Android ã§ã®ã©ã€ãã©ãªã®åäœç¢ºèªã¯ ctest ã§ã¯äžå¯èœ
66. ARM ãã€ããªåäœç¢ºèªæ¹æ³
â Linux ã§ã¯ãã¹ãã«ã
â å¥ã¢ãŒããã¯ãã£åãã«ã³ã³ãã€ã«ãå¯èœ
â arm ,aarch64
â QEMU
â ã³ãã³ãã©ã€ã³ã§å¥ã¢ãŒããã¯ãã£ã®åäœç¢ºèªãå¯èœ
â ã¿ãŒã²ããã¢ãŒããã¯ãã£ã®ãŠããããã¹ããå¯èœ
ð CI äžã§ ARM ã®ãã«ã&åäœç¢ºèªãå¯èœã«ãªã
68. ARM Linux ã¯ãã¹ãã«ããªãã·ã§ã³
â -DCMAKE_CROSSCOMPILING=ON
â -DCMAKE_SYSTEM_NAME=Linux
â -DCMAKE_SYSTEM_VERSION=1
â -DCMAKE_SYSTEM_PROCESSOR=(arm | aarch64)
â -DCMAKE_C_COMPILER=(arm-linux-gnueabi-gcc | aarch64-linux-gnu-gcc)
â -DCMAKE_CXX_COMPILER=(arm-linux-gnueabi-g++ | aarch64-linux-gnu-
g++)
ð CMake ã®ãªãã·ã§ã³ã§ã¯ãã¹ãã«ã
69. CTest ãšãã¥ã¬ãŒã¿èšå®
â -DCMAKE_CROSSCOMPILING_EMULATOR ã§ãšãã¥ã¬ãŒã¿ã®æå®ãå¯èœ
â ãšãã¥ã¬ãŒã¿ã®åŒæ°ã¯äžã€ã®ã¿
â QEMU 㯠âqemu-arm-static -L rootfsâ ã®ããã« rootfs ãæå®ããã®ã§ã©ã
ãããã¹ã¯ãªãããçšæ
â âqemu-arm-static -L /usr/arm-linux-gnueabi $@â (run_qemu_arm.sh)
â âqemu-aarch64-static -L /usr/aarch64-linux-gnu $@â (run_qemu_aarch64.sh)
70. arm NEON æå¹ã§ã¯ãã¹ãã«ã & åäœç¢ºèª
mkdir build_linux_arm && cd build_linux_arm
cmake .. -DCMAKE_CROSSCOMPILING=ON ¥
-DCMAKE_SYSTEM_NAME=Linux ¥
-DCMAKE_SYSTEM_VERSION=1 ¥
-DCMAKE_SYSTEM_PROCESSOR=arm ¥
-
DCMAKE_CROSSCOMPILING_EMULATOR=../scripts/tools/ubuntu/run_qem
u_arm.sh ¥
-DCMAKE_C_COMPILER=arm-linux-gnueabi-gcc ¥
-DCMAKE_CXX_COMPILER=arm-linux-gnueabi-g++ ¥
-DENABLE_NEON=ON ¥
-DENABLE_TESTING=ON
cmake --build .
ctest .
commands
71. aarch64 NEON æå¹ã§ã¯ãã¹ãã«ã & åäœç¢ºèª
mkdir build_linux_aarch64 && cd build_linux_aarch64
cmake .. -DCMAKE_CROSSCOMPILING=ON ¥
-DCMAKE_SYSTEM_NAME=Linux ¥
-DCMAKE_SYSTEM_VERSION=1 ¥
-DCMAKE_SYSTEM_PROCESSOR=arm ¥
-
DCMAKE_CROSSCOMPILING_EMULATOR=../scripts/tools/ubuntu/run_qem
u_aarch64.sh ¥
-DCMAKE_C_COMPILER=aarch64-linux-gnueabi-gcc ¥
-DCMAKE_CXX_COMPILER=aarch64-linux-gnueabi-g++ ¥
-DENABLE_NEON=ON ¥
-DENABLE_TESTING=ON
cmake --build .
ctest .
commands
73. CI (ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³) ãšã¯
ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãCIïŒè±: continuous
integrationïŒãšã¯ãäž»ã«ããã°ã©ããŒã®ã¢ããªã±ãŒã·
ã§ã³äœææã®å質æ¹åãçŽæã®ççž®ã®ããã®ç¿æ
£ã®ã
ãšã§ããããšã¯ã¹ããªãŒã ã»ããã°ã©ãã³ã° (XP) ã®ã
ã©ã¯ãã£ã¹ã®äžã€ã§ãç矩ã«ã¯ãã«ãããã¹ããã€ã³
ã¹ãã¯ã·ã§ã³ãªã©ãç¶ç¶çã«å®è¡ããŠããããšãæå³
ãã( Wikipedia ãã )
74. â 課é¡è§£æ±º
â ãœãããŠã§ã¢ã®ä¿®æ£ãå€æŽã«ãããã°ã¬ãŒããçºçãã
â ãªããžããªããææ°ã®ãœãŒã¹ã³ãŒããååŸããããã«ããéããªã
â äžå
·åä¿®æ£ãé¢é£ãã掟çãœãããŠã§ã¢ã«é©çšãããŠããªã
â çµåãŸãã¯ã·ã¹ãã ãã¹ãæã«å€ãã®åé¡ãçºèŠããææ»ãã®å·¥æ°ã
ããã
â ãã«ããã©ãããã©ãŒã ã§ã¯ããèµ·ãã
â ãã¹ãŠã®ãã©ãããã©ãŒã ã®ãã«ã&åäœç¢ºèªãå¿ãã
â ãã¹ãŠã®ã¢ãŒããã¯ãã£ã®ãã«ã&åäœç¢ºèªãå¿ãã
ãã€ãã£ãã«ããã CI ãã«ã
76. â Travis CI
â Linux ãš macOS ã§ã®ãã«ãã確èªå¯èœ
â (QEMU ã§)AVX2, arm, aarch64 ã®åäœç¢ºèªãå¯èœ
â Appveyor
â Windows ã§ã®ãã«ãã確èªå¯èœ
â AVX2 ã®åäœç¢ºèªãå¯èœ
CI ãµãŒãã¹
79. CMake ãšã®ä»ãåãæ¹
â æ
å ±ãå°ãªãã®ã§ CMake ã䜿ãããªããŠãããããžã§ã¯ããåèã«ãã
â OpenCV ããããåèã«ãªããŸã
â Qt ã Microsoft ãCMake 察å¿é 匵ã£ãŠããã®ã§ãäžè³ªãªããã¥ã¡ã³ãã
åºãŠããããšãæåŸ