ARM ์ํคํ
์ฒ์ฉ์ผ๋ก ๋น๋ํ๋ ๋์ Widows์์ xxh3.h
๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋ฌธ์ ๋ __emulu
๊ฐ x64/x86 ์ ์ฉ Windows ๋ด๋ถ ๋งคํฌ๋ก( MS Docs )๋ผ๋ ๊ฒ์
๋๋ค.
/* U64 XXH_mult32to64(U32 a, U64 b) { return (U64)a * (U64)b; } */
#ifdef _MSC_VER
# include <intrin.h>
/* MSVC doesn't do a good job with the mull detection. */
# define XXH_mult32to64 __emulu
#else
# define XXH_mult32to64(x, y) ((U64)((x) & 0xFFFFFFFF) * (U64)((y) & 0xFFFFFFFF))
#endif
์ ์๋ ๊ณณ์์๋ ์ฌ์ฉํ๊ธฐ ์ ์ _MSC_VER
๋ง ํ์ธํฉ๋๋ค. ์ด๊ฒ์ด ์ํคํ
์ฒ๋ฅผ ํ์ธํ ์ ์๋ค๋ฉด ๋งค์ฐ ๋์์ด ๋ ๊ฒ์
๋๋ค. ARM์ผ ๋ ํฌํจํ์ง ์๊ฑฐ๋ x64/x86 ํ๋ก์ธ์์์๋ง ์ฌ์ฉํ๋๋ก ํ์ญ์์ค. ๊ฐ์ฌ ํด์.
์ข์ ์ง์ , ์๋ฆผ @carstenskyboxlabs์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
์ด ์ฝ๋ ๊ฒฝ๋ก๋ x86
/ x64
๋ํด์๋ง ์ ํจํฉ๋๋ค. ์๋ํ๋ฉด __emulu
๋ช
๋ น์ด ๊ฐ ์ ์๋ ๋์์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
์ฐธ๊ณ ์ฌํญ: ARM์ฉ Visual Studio ์ปดํ์ผ์ ํ ์คํธํ๊ณ ์ด๋ฌํ ํ ์คํธ๋ฅผ AppveyorCI๋ก ์๋ํ ํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์๋ค๋ฉด
์๋ตํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
AppveyorCI๋ฅผ ์ฌ์ฉํ ์ ์ด ์๋์ง ํ์คํ์ง ์์ง๋ง VS/MSBuild๊ฐ UWP ARM ๋น๋๋ฅผ ์ง์ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
CMake ๋ฐ Visual Studio 2019๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ ๋:
cd cmake_unofficial
mkdir build
cd build
cmake -G "Visual Studio 16 2019" -A ARM ..
cmake --build .
์ด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
xxhash.obj : error LNK2019: unresolved external symbol __emulu referenced in function XXH3_mul128_fold64 [C:\Users\steve\Do
cuments\xxHash\cmake_unofficial\build\xxhash.vcxproj]
C:\Users\steve\Documents\xxHash\cmake_unofficial\build\Debug\xxhash.dll : fatal error LNK1120: 1 unresolved externals [C:\U
sers\steve\Documents\xxHash\cmake_unofficial\build\xxhash.vcxproj]
์ ๋ appveyor.yml์ ๋ํ ๊ฒฝํ์ด ๋ง์ง ์์ง๋ง ๊ธฐ์กด ํจํด์ ๋ฐ๋ฅด๋ฉด ARM์ฉ์ผ๋ก ์์ฑํ๊ณ ์คํํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
- if "%PLATFORM%"=="visual_arm" (
cd cmake_unofficial &&
cmake . -DCMAKE_BUILD_TYPE=Release -A ARM &&
cmake --build . --config Release
)
ํํธ๋ฅผ ์ฃผ์ @v-strob์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! ์๋ํด ๋ณผ ๊ฐ์น๊ฐ ์์ต๋๋ค!
์ด๊ฒ์ ์๋ง๋ ์๋ํด์ผํฉ๋๋ค. ARM ์ปดํ์ผ์ ์์ ํ๊ณ x64 ์ฑ๋ฅ์ ๊ฐ์ ํด์ผ
#if defined(_MSC_VER) && defined(_M_IX86)
# include <intrin.h>
# define XXH_mult32to64 __emulu
#else
# define XXH_mult32to64(x, y) ((U64)((x) & 0xFFFFFFFF) * (U64)((y) & 0xFFFFFFFF))
#endif
dev
๋ถ๊ธฐ์์ ์์ ๋จ
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
CMake ๋ฐ Visual Studio 2019๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ ๋:
cd cmake_unofficial
mkdir build
cd build
cmake -G "Visual Studio 16 2019" -A ARM ..
cmake --build .
์ด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ ๋ appveyor.yml์ ๋ํ ๊ฒฝํ์ด ๋ง์ง ์์ง๋ง ๊ธฐ์กด ํจํด์ ๋ฐ๋ฅด๋ฉด ARM์ฉ์ผ๋ก ์์ฑํ๊ณ ์คํํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.