Skip to content

aarch64 compile problem #13

@892768447

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

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