diff --git a/src/CMakeData-arch.cmake b/src/CMakeData-arch.cmake index 896506fb50..b8bd4682d6 100644 --- a/src/CMakeData-arch.cmake +++ b/src/CMakeData-arch.cmake @@ -231,14 +231,12 @@ if(NOT APPLE) "arch/Lights/LightsDriver_Linux_PIUIO.cpp" "arch/Lights/LightsDriver_Linux_PIUIO_Leds.cpp" "arch/Lights/LightsDriver_Linux_ITGIO.cpp" - "arch/Lights/LightsDriver_LinuxWeedTech.cpp" - "arch/Lights/LightsDriver_LinuxParallel.cpp") + "arch/Lights/LightsDriver_LinuxWeedTech.cpp") list(APPEND SMDATA_ARCH_LIGHTS_HPP "arch/Lights/LightsDriver_Linux_PIUIO.h" "arch/Lights/LightsDriver_Linux_PIUIO_Leds.h" "arch/Lights/LightsDriver_Linux_ITGIO.h" - "arch/Lights/LightsDriver_LinuxWeedTech.h" - "arch/Lights/LightsDriver_LinuxParallel.h") + "arch/Lights/LightsDriver_LinuxWeedTech.h") if(WITH_PARALLEL_PORT) list(APPEND SMDATA_ARCH_LIGHTS_SRC "arch/Lights/LightsDriver_LinuxParallel.cpp") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 398e3e78b1..97ed7617b4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -142,8 +142,12 @@ if(WITH_SSE2) if(SM_WIN32_ARCH MATCHES "x86") set(SM_COMPILE_FLAGS "${SM_COMPILE_FLAGS} /arch:SSE2") endif() - else() + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86") set(SM_COMPILE_FLAGS "${SM_COMPILE_FLAGS} -msse2") + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") + set(SM_COMPILE_FLAGS "${SM_COMPILE_FLAGS} -mtune=cortex-a72") + else() + message("Unrecognized host processor type") endif() endif() @@ -332,9 +336,14 @@ else() # Linux sm_add_compile_definition("${SM_EXE_NAME}" CRASH_HANDLER) if(LINUX) # used only in the ArchHooks_Unix.cpp file - sm_add_compile_definition("${SM_EXE_NAME}" BACKTRACE_METHOD_X86_LINUX) - sm_add_compile_definition("${SM_EXE_NAME}" + if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86" OR CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") + sm_add_compile_definition("${SM_EXE_NAME}" BACKTRACE_METHOD_X86_LINUX) + sm_add_compile_definition("${SM_EXE_NAME}" BACKTRACE_METHOD_TEXT="x86 custom backtrace") + else() + sm_add_compile_definition("${SM_EXE_NAME}" + BACKTRACE_METHOD_TEXT="no backtrace") + endif() sm_add_compile_definition( "${SM_EXE_NAME}" BACKTRACE_LOOKUP_METHOD_TEXT="backtrace_symbols") if(${DL_FOUND}) @@ -351,12 +360,15 @@ else() # Linux message("Host processor is ${CMAKE_SYSTEM_PROCESSOR}") if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") - message("Host processor is 64bit") + message("Host processor is 64bit X86") sm_add_compile_definition("${SM_EXE_NAME}" CPU_X86_64) elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86" OR CMAKE_SYSTEM_PROCESSOR MATCHES "i686") - message("Host processor is 32bit") + message("Host processor is 32bit X86") sm_add_compile_definition("${SM_EXE_NAME}" CPU_X86) + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") + message("Host processor is 64bit ARM") + sm_add_compile_definition("${SM_EXE_NAME}" CPU_AARCH64) else() message("Unrecognized host processor type") endif() diff --git a/src/archutils/Common/PthreadHelpers.cpp b/src/archutils/Common/PthreadHelpers.cpp index 543f70c55a..05eec07045 100644 --- a/src/archutils/Common/PthreadHelpers.cpp +++ b/src/archutils/Common/PthreadHelpers.cpp @@ -244,6 +244,9 @@ bool GetThreadBacktraceContext( uint64_t ThreadID, BacktraceContext *ctx ) ctx->PC = (void *)ptrace( PTRACE_PEEKUSER, pid_t(ThreadID), (void *)(PT_NIP<<2), 0 ); if( errno ) return false; +#elif defined(CPU_AARCH64) + // NYI + return false; #else #error GetThreadBacktraceContext: which arch? #endif diff --git a/src/archutils/Unix/Backtrace.cpp b/src/archutils/Unix/Backtrace.cpp index fbf9a1c4d3..b650e3b415 100644 --- a/src/archutils/Unix/Backtrace.cpp +++ b/src/archutils/Unix/Backtrace.cpp @@ -398,6 +398,12 @@ void GetSignalBacktraceContext( BacktraceContext *ctx, const ucontext_t *uc ) ctx->sp = (void *) uc->uc_mcontext.gregs[REG_RSP]; ctx->pid = GetCurrentThreadId(); } +#elif defined(CPU_AARCH64) +void GetSignalBacktraceContext( BacktraceContext *ctx, const ucontext_t *uc ) +{ + // NYI +} + #else #error #endif @@ -740,6 +746,11 @@ void GetBacktrace( const void **buf, size_t size, const BacktraceContext *ctx ) #warning Undefined BACKTRACE_METHOD_* void InitializeBacktrace() { } +void GetSignalBacktraceContext( BacktraceContext *ctx, const ucontext_t *uc ) +{ + // NYI +} + void GetBacktrace( const void **buf, size_t size, const BacktraceContext *ctx ) { buf[0] = BACKTRACE_METHOD_NOT_AVAILABLE;