Skip to content

aarch64 compile problem #13

Description

@892768447
  1. modify https://github.com/preshing/turf/blob/master/turf/c/platform_detect.h#L97
    #elif defined(__arm64__) || defined(__aarch64__ )
  2. modify https://github.com/preshing/turf/blob/master/turf/c/platform_detect.h#L101
    #if defined(__ARM64_ARCH_8__) || defined(__ARM_ARCH_8A) || defined(__ARM_ARCH)
  3. modify https://github.com/preshing/turf/blob/master/turf/Atomic.h#L23
    remove TURF_CPU_ARM || TURF_CPU_ARM64 ||
  4. add define to CMakeLists.txt
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_definitions(-DTURF_COMPILER_GCC)
add_definitions(-DTURF_CPU_ARM)
  1. use /usr/bin/aarch64-linux-gnu-gcc and /usr/bin/aarch64-linux-gnu-g++,
Using built-in specs.
COLLECT_GCC=/usr/bin/aarch64-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/aarch64-linux-gnu/5/lto-wrapper
Target: aarch64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 5.4.0-6kord1~16.04.12' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libquadmath --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-arm64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-arm64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-arm64 --with-arch-directory=aarch64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-multiarch --enable-fix-cortex-a53-843419 --disable-werror --enable-checking=release --build=aarch64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu
Thread model: posix
gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6kord1~16.04.12) 

then compile the demo. but there has some assembler error.

[main] Building folder: junction-sample 
[build] Starting build
[proc] Executing command: /usr/bin/cmake --build /tmp/junction-sample/build --config Debug --target all -j 6 --
[build] Consolidate compiler generated dependencies of target turf
[build] Consolidate compiler generated dependencies of target junction
[build] [  3%] Building CXX object junction/turf/CMakeFiles/turf.dir/turf/UTCTime.cpp.o
[build] [  7%] Building CXX object junction/turf/CMakeFiles/turf.dir/turf/Heap.cpp.o
[build] [ 14%] Building CXX object junction/turf/CMakeFiles/turf.dir/turf/Core.cpp.o
[build] [ 14%] Building C object junction/turf/CMakeFiles/turf.dir/turf/c/impl/atomic_gcc_arm.c.o
[build] [ 21%] Building CXX object junction/CMakeFiles/junction.dir/junction/ConcurrentMap_Grampa.cpp.o
[build] [ 21%] Building CXX object junction/turf/CMakeFiles/turf.dir/turf/extra/Options.cpp.o
[build] /tmp/ccXshPqk.s: Assembler messages:
[build] /tmp/ccXshPqk.s:11: 错误:operand 1 should be an integer register -- `mov r2,r0'
[build] /tmp/ccXshPqk.s:13: 错误:unknown mnemonic `ldrexd' -- `ldrexd r0,r1,[r2]'
[build] /tmp/ccXshPqk.s:14: 错误:unknown mnemonic `strexd' -- `strexd r3,r0,r1,[r2]'
[build] /tmp/ccXshPqk.s:15: 错误:operand 1 should be an integer or stack pointer register -- `cmp r3,#0'
[build] /tmp/ccXshPqk.s:17: 错误:unknown mnemonic `bx' -- `bx lr'
[build] /tmp/ccXshPqk.s:23: 错误:unknown mnemonic `push' -- `push {r4-r5}'
[build] /tmp/ccXshPqk.s:24: 错误:operand 1 should be an integer register -- `mov r5,r0'
[build] /tmp/ccXshPqk.s:25: 错误:operand 1 should be an integer register -- `mov r3,r2'
[build] /tmp/ccXshPqk.s:26: 错误:operand 1 should be an integer register -- `mov r2,r1'
[build] /tmp/ccXshPqk.s:28: 错误:unknown mnemonic `ldrexd' -- `ldrexd r0,r1,[r5]'
[build] /tmp/ccXshPqk.s:29: 错误:unknown mnemonic `strexd' -- `strexd r4,r2,r3,[r5]'
[build] /tmp/ccXshPqk.s:30: 错误:operand 1 should be an integer or stack pointer register -- `cmp r4,#0'
[build] /tmp/ccXshPqk.s:32: 错误:unknown mnemonic `pop' -- `pop {r4-r5}'
[build] /tmp/ccXshPqk.s:33: 错误:unknown mnemonic `bx' -- `bx lr'
[build] /tmp/ccXshPqk.s:39: 错误:unknown mnemonic `push' -- `push {r4-r7}'
[build] /tmp/ccXshPqk.s:40: 错误:operand 1 should be an integer register -- `mov r6,r3'
[build] /tmp/ccXshPqk.s:41: 错误:operand 1 should be an integer register -- `ldr r7,[sp,#16]'
[build] /tmp/ccXshPqk.s:42: 错误:operand 1 should be an integer register -- `mov r5,r0'
[build] /tmp/ccXshPqk.s:43: 错误:operand 1 should be an integer register -- `mov r4,r1'
[build] /tmp/ccXshPqk.s:45: 错误:unknown mnemonic `ldrexd' -- `ldrexd r0,r1,[r5]'
[build] /tmp/ccXshPqk.s:46: 错误:operand 1 should be an integer or stack pointer register -- `cmp r0,r4'
[build] /tmp/ccXshPqk.s:47: 错误:unknown mnemonic `cmpeq' -- `cmpeq r1,r2'
[build] /tmp/ccXshPqk.s:49: 错误:unknown mnemonic `strexd' -- `strexd r3,r6,r7,[r5]'
[build] /tmp/ccXshPqk.s:50: 错误:operand 1 should be an integer or stack pointer register -- `cmp r3,#0'
[build] /tmp/ccXshPqk.s:53: 错误:unknown mnemonic `pop' -- `pop {r4-r7}'
[build] /tmp/ccXshPqk.s:54: 错误:unknown mnemonic `bx' -- `bx lr'
[build] /tmp/ccXshPqk.s:60: 错误:unknown mnemonic `push' -- `push {r4-r7}'
[build] /tmp/ccXshPqk.s:61: 错误:operand 1 should be an integer register -- `mov r6,r3'
[build] /tmp/ccXshPqk.s:62: 错误:operand 1 should be an integer register -- `ldr r7,[sp,#16]'
[build] /tmp/ccXshPqk.s:63: 错误:operand 1 should be an integer register -- `mov r5,r0'
[build] /tmp/ccXshPqk.s:64: 错误:operand 1 should be an integer register -- `mov r4,r1'
[build] /tmp/ccXshPqk.s:66: 错误:unknown mnemonic `ldrexd' -- `ldrexd r0,r1,[r5]'
[build] /tmp/ccXshPqk.s:67: 错误:operand 1 should be an integer or stack pointer register -- `cmp r0,r4'
[build] /tmp/ccXshPqk.s:68: 错误:unknown mnemonic `cmpeq' -- `cmpeq r1,r2'
[build] /tmp/ccXshPqk.s:70: 错误:unknown mnemonic `strexd' -- `strexd r3,r6,r7,[r5]'
[build] /tmp/ccXshPqk.s:71: 错误:operand 1 should be an integer or stack pointer register -- `cmp r3,#0'
[build] /tmp/ccXshPqk.s:74: 错误:unknown mnemonic `pop' -- `pop {r4-r7}'
[build] /tmp/ccXshPqk.s:75: 错误:unknown mnemonic `bx' -- `bx lr'
[build] /tmp/ccXshPqk.s:81: 错误:unknown mnemonic `push' -- `push {r4-r7}'
[build] /tmp/ccXshPqk.s:82: 错误:operand 1 should be an integer register -- `mov r5,r0'
[build] /tmp/ccXshPqk.s:83: 错误:operand 1 should be an integer register -- `mov r4,r1'
[build] /tmp/ccXshPqk.s:85: 错误:unknown mnemonic `ldrexd' -- `ldrexd r0,r1,[r5]'
[build] /tmp/ccXshPqk.s:86: 错误:operand 1 should be an integer register -- `adds r6,r0,r4'
[build] /tmp/ccXshPqk.s:87: 错误:operand 1 should be an integer register -- `adc r7,r1,r2'
[build] /tmp/ccXshPqk.s:88: 错误:unknown mnemonic `strexd' -- `strexd r3,r6,r7,[r5]'
[build] /tmp/ccXshPqk.s:89: 错误:operand 1 should be an integer or stack pointer register -- `cmp r3,#0'
[build] /tmp/ccXshPqk.s:91: 错误:unknown mnemonic `pop' -- `pop {r4-r7}'
[build] /tmp/ccXshPqk.s:92: 错误:unknown mnemonic `bx' -- `bx lr'
[build] /tmp/ccXshPqk.s:98: 错误:unknown mnemonic `push' -- `push {r4-r7}'
[build] /tmp/ccXshPqk.s:99: 错误:operand 1 should be an integer register -- `mov r5,r0'
[build] /tmp/ccXshPqk.s:100: 错误:operand 1 should be an integer register -- `mov r4,r1'
[build] /tmp/ccXshPqk.s:102: 错误:unknown mnemonic `ldrexd' -- `ldrexd r0,r1,[r5]'
[build] /tmp/ccXshPqk.s:103: 错误:operand 1 should be an integer or stack pointer register -- `and r6,r0,r4'
[build] /tmp/ccXshPqk.s:104: 错误:operand 1 should be an integer or stack pointer register -- `and r7,r1,r2'
[build] /tmp/ccXshPqk.s:105: 错误:unknown mnemonic `strexd' -- `strexd r3,r6,r7,[r5]'
[build] /tmp/ccXshPqk.s:106: 错误:operand 1 should be an integer or stack pointer register -- `cmp r3,#0'
[build] /tmp/ccXshPqk.s:108: 错误:unknown mnemonic `pop' -- `pop {r4-r7}'
[build] /tmp/ccXshPqk.s:109: 错误:unknown mnemonic `bx' -- `bx lr'
[build] /tmp/ccXshPqk.s:115: 错误:unknown mnemonic `push' -- `push {r4-r7}'
[build] /tmp/ccXshPqk.s:116: 错误:operand 1 should be an integer register -- `mov r5,r0'
[build] /tmp/ccXshPqk.s:117: 错误:operand 1 should be an integer register -- `mov r4,r1'
[build] /tmp/ccXshPqk.s:119: 错误:unknown mnemonic `ldrexd' -- `ldrexd r0,r1,[r5]'
[build] /tmp/ccXshPqk.s:120: 错误:operand 1 should be a SIMD vector register -- `orr r6,r0,r4'
[build] /tmp/ccXshPqk.s:121: 错误:operand 1 should be a SIMD vector register -- `orr r7,r1,r2'
[build] /tmp/ccXshPqk.s:122: 错误:unknown mnemonic `strexd' -- `strexd r3,r6,r7,[r5]'
[build] /tmp/ccXshPqk.s:123: 错误:operand 1 should be an integer or stack pointer register -- `cmp r3,#0'
[build] /tmp/ccXshPqk.s:125: 错误:unknown mnemonic `pop' -- `pop {r4-r7}'
[build] /tmp/ccXshPqk.s:126: 错误:unknown mnemonic `bx' -- `bx lr'
[build] make[2]: *** [junction/turf/CMakeFiles/turf.dir/turf/c/impl/atomic_gcc_arm.c.o] Error 1
[build] make[2]: *** 正在等待未完成的任务....
[build] [ 25%] Building CXX object junction/turf/CMakeFiles/turf.dir/turf/extra/Random.cpp.o
[build] junction/turf/CMakeFiles/turf.dir/build.make:117: recipe for target 'junction/turf/CMakeFiles/turf.dir/turf/c/impl/atomic_gcc_arm.c.o' failed
[build] [ 28%] Building CXX object junction/CMakeFiles/junction.dir/junction/ConcurrentMap_Leapfrog.cpp.o
[build] [ 32%] Building CXX object junction/CMakeFiles/junction.dir/junction/QSBR.cpp.o
[build] [ 35%] Building CXX object junction/CMakeFiles/junction.dir/junction/ConcurrentMap_Linear.cpp.o
[build] [ 39%] Building CXX object junction/CMakeFiles/junction.dir/junction/details/Grampa.cpp.o
[build] [ 42%] Building CXX object junction/CMakeFiles/junction.dir/junction/details/Leapfrog.cpp.o
[build] [ 46%] Building CXX object junction/CMakeFiles/junction.dir/junction/details/Linear.cpp.o
[build] [ 50%] Building CXX object junction/CMakeFiles/junction.dir/junction/extra/MemHook_NBDS.cpp.o
[build] [ 53%] Building CXX object junction/CMakeFiles/junction.dir/junction/extra/MemHook_TBB.cpp.o
[build] [ 57%] Building CXX object junction/CMakeFiles/junction.dir/junction/striped/ConditionBank.cpp.o
[build] /tmp/cciSrMa7.s: Assembler messages:
[build] /tmp/cciSrMa7.s:47: 错误:unknown mnemonic `ldrex' -- `ldrex x4,[x0]'
[build] /tmp/cciSrMa7.s:50: 错误:unknown mnemonic `strex' -- `strex x6,x2,[x0]'
[build] junction/CMakeFiles/junction.dir/build.make:201: recipe for target 'junction/CMakeFiles/junction.dir/junction/striped/ConditionBank.cpp.o' failed
[build] CMakeFiles/Makefile2:143: recipe for target 'junction/CMakeFiles/junction.dir/all' failed
[build] make[2]: *** [junction/CMakeFiles/junction.dir/junction/striped/ConditionBank.cpp.o] Error 1
[build] make[1]: *** [junction/CMakeFiles/junction.dir/all] Error 2
[build] make[1]: *** 正在等待未完成的任务....
[build] CMakeFiles/Makefile2:169: recipe for target 'junction/turf/CMakeFiles/turf.dir/all' failed
[build] Makefile:90: recipe for target 'all' failed
[build] make[1]: *** [junction/turf/CMakeFiles/turf.dir/all] Error 2
[build] make: *** [all] Error 2
[proc] The command: /usr/bin/cmake --build /tmp/junction-sample/build --config Debug --target all -j 6 -- exited with code: 2 and signal: null
[build] Build finished with exit code 2

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions