Xxhash: XXH3 ๋ฐ Windows ARM ๋นŒ๋“œ

์— ๋งŒ๋“  2019๋…„ 06์›” 27์ผ  ยท  6์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: Cyan4973/xxHash

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 ํ”„๋กœ์„ธ์„œ์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜์‹ญ์‹œ์˜ค. ๊ฐ์‚ฌ ํ•ด์š”.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

CMake ๋ฐ Visual Studio 2019๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•  ๋•Œ:

  1. cd cmake_unofficial
  2. mkdir build
  3. cd build
  4. cmake -G "Visual Studio 16 2019" -A ARM ..
  5. 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
  )

๋ชจ๋“  6 ๋Œ“๊ธ€

์ข‹์€ ์ง€์ , ์•Œ๋ฆผ @carstenskyboxlabs์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์ด ์ฝ”๋“œ ๊ฒฝ๋กœ๋Š” x86 / x64 ๋Œ€ํ•ด์„œ๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด __emulu ๋ช…๋ น์–ด ๊ฐ€ ์ •์˜๋œ ๋Œ€์ƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์‚ฌํ•ญ: ARM์šฉ Visual Studio ์ปดํŒŒ์ผ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์ด๋Ÿฌํ•œ ํ…Œ์ŠคํŠธ๋ฅผ AppveyorCI๋กœ ์ž๋™ํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด

์‘๋‹ตํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
AppveyorCI๋ฅผ ์‚ฌ์šฉํ•œ ์ ์ด ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ VS/MSBuild๊ฐ€ UWP ARM ๋นŒ๋“œ๋ฅผ ์ง€์›ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

CMake ๋ฐ Visual Studio 2019๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•  ๋•Œ:

  1. cd cmake_unofficial
  2. mkdir build
  3. cd build
  4. cmake -G "Visual Studio 16 2019" -A ARM ..
  5. 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 ๋ถ„๊ธฐ์—์„œ ์ˆ˜์ •๋จ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰