diff --git a/Include/Linux-Arm/OniPlatformLinux-Arm.h b/Include/Linux-Arm/OniPlatformLinux-Arm.h index be1f4da1..40a7a343 100644 --- a/Include/Linux-Arm/OniPlatformLinux-Arm.h +++ b/Include/Linux-Arm/OniPlatformLinux-Arm.h @@ -29,8 +29,13 @@ //--------------------------------------------------------------------------- #undef ONI_PLATFORM #undef ONI_PLATFORM_STRING -#define ONI_PLATFORM ONI_PLATFORM_LINUX_ARM -#define ONI_PLATFORM_STRING "Linux-Arm" +#ifdef __aarch64__ +# define ONI_PLATFORM ONI_PLATFORM_LINUX_AARCH64 +# define ONI_PLATFORM_STRING "Linux-AArch64" +#else +# define ONI_PLATFORM ONI_PLATFORM_LINUX_ARM +# define ONI_PLATFORM_STRING "Linux-Arm" +#endif #endif // ONIPLATFORMLINUX_ARM_H diff --git a/Include/OniPlatform.h b/Include/OniPlatform.h index 23841889..62746082 100644 --- a/Include/OniPlatform.h +++ b/Include/OniPlatform.h @@ -27,6 +27,7 @@ #define ONI_PLATFORM_LINUX_ARM 3 #define ONI_PLATFORM_MACOSX 4 #define ONI_PLATFORM_ANDROID_ARM 5 +#define ONI_PLATFORM_LINUX_AARCH64 6 #if (defined _WIN32) # ifndef RC_INVOKED @@ -39,7 +40,7 @@ # include "Android-Arm/OniPlatformAndroid-Arm.h" #elif (__linux__ && (i386 || __x86_64__)) # include "Linux-x86/OniPlatformLinux-x86.h" -#elif (__linux__ && __arm__) +#elif (__linux__ && (__arm__ || __aarch64__)) # include "Linux-Arm/OniPlatformLinux-Arm.h" #elif _ARC # include "ARC/OniPlaformARC.h" diff --git a/Source/Drivers/PS1080/Sensor/XnDeviceSensorInit.h b/Source/Drivers/PS1080/Sensor/XnDeviceSensorInit.h index 27b5c8bf..b2532f4f 100644 --- a/Source/Drivers/PS1080/Sensor/XnDeviceSensorInit.h +++ b/Source/Drivers/PS1080/Sensor/XnDeviceSensorInit.h @@ -57,7 +57,7 @@ #define XN_SENSOR_USB_MISC_BUFFER_SIZE 0x1000 #define XN_SENSOR_USB_MISC_BUFFERS 1 -#elif (XN_PLATFORM == XN_PLATFORM_LINUX_X86 || XN_PLATFORM == XN_PLATFORM_LINUX_ARM || XN_PLATFORM == XN_PLATFORM_MACOSX || XN_PLATFORM == XN_PLATFORM_ANDROID_ARM) +#elif (XN_PLATFORM == XN_PLATFORM_LINUX_X86 || XN_PLATFORM == XN_PLATFORM_LINUX_ARM || XN_PLATFORM == XN_PLATFORM_MACOSX || XN_PLATFORM == XN_PLATFORM_ANDROID_ARM || XN_PLATFORM == XN_PLATFORM_LINUX_AARCH64) #define XN_SENSOR_USB_IMAGE_BUFFER_SIZE_MULTIPLIER_ISO 32 #define XN_SENSOR_USB_IMAGE_BUFFER_SIZE_MULTIPLIER_BULK 40 #define XN_SENSOR_USB_IMAGE_BUFFER_SIZE_MULTIPLIER_LOWBAND_ISO 16 diff --git a/Source/Drivers/PS1080/Sensor/XnSensorDepthStream.h b/Source/Drivers/PS1080/Sensor/XnSensorDepthStream.h index d835ba30..d7f25ea0 100644 --- a/Source/Drivers/PS1080/Sensor/XnSensorDepthStream.h +++ b/Source/Drivers/PS1080/Sensor/XnSensorDepthStream.h @@ -32,7 +32,7 @@ //--------------------------------------------------------------------------- // Defines //--------------------------------------------------------------------------- -#if (XN_PLATFORM == XN_PLATFORM_LINUX_ARM || XN_PLATFORM == XN_PLATFORM_ANDROID_ARM) +#if (XN_PLATFORM == XN_PLATFORM_LINUX_ARM || XN_PLATFORM == XN_PLATFORM_ANDROID_ARM || XN_PLATFORM == XN_PLATFORM_LINUX_AARCH64) #define XN_DEPTH_STREAM_DEFAULT_INPUT_FORMAT XN_IO_DEPTH_FORMAT_UNCOMPRESSED_12_BIT #define XN_DEPTH_STREAM_DEFAULT_RESOLUTION XN_RESOLUTION_QQVGA #else diff --git a/Source/Drivers/PSLink/DriverImpl/LinkOniDepthStream.cpp b/Source/Drivers/PSLink/DriverImpl/LinkOniDepthStream.cpp index f7c7505e..f932104b 100644 --- a/Source/Drivers/PSLink/DriverImpl/LinkOniDepthStream.cpp +++ b/Source/Drivers/PSLink/DriverImpl/LinkOniDepthStream.cpp @@ -233,7 +233,7 @@ XnStatus LinkOniDepthStream::GetDefaultVideoMode( OniVideoMode* pVideoMode ) if(pVideoMode != NULL) { //ARM cannot handle QVGA, so we default to QQVGA -#if (XN_PLATFORM == XN_PLATFORM_LINUX_ARM || XN_PLATFORM == XN_PLATFORM_ANDROID_ARM) +#if (XN_PLATFORM == XN_PLATFORM_LINUX_ARM || XN_PLATFORM == XN_PLATFORM_ANDROID_ARM || XN_PLATFORM == XN_PLATFORM_LINUX_AARCH64) pVideoMode->resolutionX = 160; pVideoMode->resolutionY = 120; #else diff --git a/Source/Drivers/PSLink/DriverImpl/LinkOniDevice.cpp b/Source/Drivers/PSLink/DriverImpl/LinkOniDevice.cpp index 7dbae61c..42e8164c 100644 --- a/Source/Drivers/PSLink/DriverImpl/LinkOniDevice.cpp +++ b/Source/Drivers/PSLink/DriverImpl/LinkOniDevice.cpp @@ -36,7 +36,7 @@ #if XN_PLATFORM == XN_PLATFORM_WIN32 #define XN_DEFAULT_USB_INTERFACE PS_USB_INTERFACE_ISO_ENDPOINTS; -#elif XN_PLATFORM == XN_PLATFORM_LINUX_X86 || XN_PLATFORM == XN_PLATFORM_LINUX_ARM || XN_PLATFORM == XN_PLATFORM_MACOSX || XN_PLATFORM == XN_PLATFORM_ANDROID_ARM +#elif XN_PLATFORM == XN_PLATFORM_LINUX_X86 || XN_PLATFORM == XN_PLATFORM_LINUX_ARM || XN_PLATFORM == XN_PLATFORM_MACOSX || XN_PLATFORM == XN_PLATFORM_ANDROID_ARM || XN_PLATFORM == XN_PLATFORM_LINUX_AARCH64 #define XN_DEFAULT_USB_INTERFACE PS_USB_INTERFACE_BULK_ENDPOINTS; #else #error Unsupported platform! diff --git a/Source/Drivers/PSLink/LinkProtoLib/XnClientUSBInDataEndpoint.cpp b/Source/Drivers/PSLink/LinkProtoLib/XnClientUSBInDataEndpoint.cpp index d61b559e..db03fa88 100644 --- a/Source/Drivers/PSLink/LinkProtoLib/XnClientUSBInDataEndpoint.cpp +++ b/Source/Drivers/PSLink/LinkProtoLib/XnClientUSBInDataEndpoint.cpp @@ -36,7 +36,7 @@ namespace xn const XnUInt32 ClientUSBInDataEndpoint::READ_THREAD_BUFFER_NUM_PACKETS_BULK = 120; const XnUInt32 ClientUSBInDataEndpoint::READ_THREAD_NUM_BUFFERS_BULK = 8; const XnUInt32 ClientUSBInDataEndpoint::READ_THREAD_TIMEOUT_BULK = 1000; -#elif (XN_PLATFORM == XN_PLATFORM_LINUX_X86 || XN_PLATFORM == XN_PLATFORM_LINUX_ARM || XN_PLATFORM == XN_PLATFORM_MACOSX || XN_PLATFORM == XN_PLATFORM_ANDROID_ARM) +#elif (XN_PLATFORM == XN_PLATFORM_LINUX_X86 || XN_PLATFORM == XN_PLATFORM_LINUX_ARM || XN_PLATFORM == XN_PLATFORM_MACOSX || XN_PLATFORM == XN_PLATFORM_ANDROID_ARM || XN_PLATFORM == XN_PLATFORM_LINUX_AARCH64) const XnUInt32 ClientUSBInDataEndpoint::READ_THREAD_BUFFER_NUM_PACKETS_ISO = 32; const XnUInt32 ClientUSBInDataEndpoint::READ_THREAD_NUM_BUFFERS_ISO = 16; const XnUInt32 ClientUSBInDataEndpoint::READ_THREAD_TIMEOUT_ISO = 100; diff --git a/Source/Tools/NiViewer/NiViewer.cpp b/Source/Tools/NiViewer/NiViewer.cpp index df7dde52..fd8211db 100644 --- a/Source/Tools/NiViewer/NiViewer.cpp +++ b/Source/Tools/NiViewer/NiViewer.cpp @@ -68,7 +68,7 @@ #if (ONI_PLATFORM == ONI_PLATFORM_WIN32) #include #include -#elif (ONI_PLATFORM == ONI_PLATFORM_LINUX_X86 || ONI_PLATFORM == ONI_PLATFORM_LINUX_ARM || ONI_PLATFORM == ONI_PLATFORM_MACOSX) +#elif (ONI_PLATFORM == ONI_PLATFORM_LINUX_X86 || ONI_PLATFORM == ONI_PLATFORM_LINUX_ARM || ONI_PLATFORM == ONI_PLATFORM_MACOSX || ONI_PLATFORM == ONI_PLATFORM_LINUX_AARCH64) #define _getch() getchar() #endif diff --git a/ThirdParty/PSCommon/BuildSystem/CommonDefs.mak b/ThirdParty/PSCommon/BuildSystem/CommonDefs.mak index dd88b04c..79514b1b 100644 --- a/ThirdParty/PSCommon/BuildSystem/CommonDefs.mak +++ b/ThirdParty/PSCommon/BuildSystem/CommonDefs.mak @@ -18,6 +18,8 @@ else ifneq (,$(findstring i386,$(MACHINE))) HOST_PLATFORM = x86 else ifneq (,$(findstring arm,$(MACHINE))) HOST_PLATFORM = Arm +else ifneq (,$(findstring aarch64,$(MACHINE))) + HOST_PLATFORM = AArch64 else DUMMY:=$(error Can't determine host platform) endif diff --git a/ThirdParty/PSCommon/BuildSystem/Platform.AArch64 b/ThirdParty/PSCommon/BuildSystem/Platform.AArch64 new file mode 100644 index 00000000..ae7abf89 --- /dev/null +++ b/ThirdParty/PSCommon/BuildSystem/Platform.AArch64 @@ -0,0 +1,14 @@ +ifeq "$(CFG)" "Release" + + # Hardware specifying flags + CFLAGS += -march=native -mtune=native + + # Optimization level, minus currently buggy optimizing methods (which break bit-exact) + CFLAGS += -O3 -fno-tree-pre -fno-strict-aliasing + + # More optimization flags + CFLAGS += -ftree-vectorize -ffast-math -funsafe-math-optimizations #-fsingle-precision-constant + + #DEFINES += XN_NEON + CFLAGS += -flax-vector-conversions +endif diff --git a/ThirdParty/PSCommon/XnLib/Include/Android-Arm/XnPlatformAndroid-Arm.h b/ThirdParty/PSCommon/XnLib/Include/Android-Arm/XnPlatformAndroid-Arm.h index 0bd1e182..f8db9f4c 100644 --- a/ThirdParty/PSCommon/XnLib/Include/Android-Arm/XnPlatformAndroid-Arm.h +++ b/ThirdParty/PSCommon/XnLib/Include/Android-Arm/XnPlatformAndroid-Arm.h @@ -55,4 +55,4 @@ #define XN_PLATFORM_LINUX_NO_SHM #define XN_PLATFORM_LINUX_NO_PTHREAD_CANCEL -#endif //_XN_PLATFORM_LINUX_ARM_H_ +#endif //_XN_PLATFORM_ANDROID_ARM_H_ diff --git a/ThirdParty/PSCommon/XnLib/Include/Linux-Arm/XnPlatformLinux-Arm.h b/ThirdParty/PSCommon/XnLib/Include/Linux-Arm/XnPlatformLinux-Arm.h index a71ceb99..b3863ed7 100644 --- a/ThirdParty/PSCommon/XnLib/Include/Linux-Arm/XnPlatformLinux-Arm.h +++ b/ThirdParty/PSCommon/XnLib/Include/Linux-Arm/XnPlatformLinux-Arm.h @@ -29,8 +29,13 @@ //--------------------------------------------------------------------------- #undef XN_PLATFORM #undef XN_PLATFORM_STRING +#ifdef __aarch64__ +#define XN_PLATFORM XN_PLATFORM_LINUX_AARCH64 +#define XN_PLATFORM_STRING "Linux-AArch64" +#else #define XN_PLATFORM XN_PLATFORM_LINUX_ARM #define XN_PLATFORM_STRING "Linux-Arm" +#endif #endif //_XN_PLATFORM_LINUX_ARM_H_ diff --git a/ThirdParty/PSCommon/XnLib/Include/XnOS.h b/ThirdParty/PSCommon/XnLib/Include/XnOS.h index 3e410606..d32f1d4b 100644 --- a/ThirdParty/PSCommon/XnLib/Include/XnOS.h +++ b/ThirdParty/PSCommon/XnLib/Include/XnOS.h @@ -43,7 +43,7 @@ //--------------------------------------------------------------------------- #if (XN_PLATFORM == XN_PLATFORM_WIN32) #include "Win32/XnOSWin32.h" -#elif (XN_PLATFORM == XN_PLATFORM_LINUX_X86 || XN_PLATFORM == XN_PLATFORM_LINUX_ARM || XN_PLATFORM == XN_PLATFORM_ANDROID_ARM) +#elif (XN_PLATFORM == XN_PLATFORM_LINUX_X86 || XN_PLATFORM == XN_PLATFORM_LINUX_ARM || XN_PLATFORM == XN_PLATFORM_ANDROID_ARM || XN_PLATFORM == XN_PLATFORM_LINUX_AARCH64) #include "Linux-x86/XnOSLinux-x86.h" #elif (XN_PLATFORM == XN_PLATFORM_MACOSX) #include "MacOSX/XnOSMacOSX.h" diff --git a/ThirdParty/PSCommon/XnLib/Include/XnPlatform.h b/ThirdParty/PSCommon/XnLib/Include/XnPlatform.h index 07e8192b..3fb21f28 100644 --- a/ThirdParty/PSCommon/XnLib/Include/XnPlatform.h +++ b/ThirdParty/PSCommon/XnLib/Include/XnPlatform.h @@ -31,6 +31,7 @@ #define XN_PLATFORM_LINUX_ARM 7 #define XN_PLATFORM_MACOSX 8 #define XN_PLATFORM_ANDROID_ARM 9 +#define XN_PLATFORM_LINUX_AARCH64 10 #define XN_PLATFORM_IS_LITTLE_ENDIAN 1 #define XN_PLATFORM_IS_BIG_ENDIAN 2 @@ -51,7 +52,7 @@ #include "Android-Arm/XnPlatformAndroid-Arm.h" #elif (__linux__ && (i386 || __x86_64__)) #include "Linux-x86/XnPlatformLinux-x86.h" -#elif (__linux__ && __arm__) +#elif (__linux__ && (__arm__ || __aarch64__)) #include "Linux-Arm/XnPlatformLinux-Arm.h" #elif _ARC #include "ARC/XnPlaformARC.h" diff --git a/ThirdParty/PSCommon/XnLib/Include/XnUSBDevice.h b/ThirdParty/PSCommon/XnLib/Include/XnUSBDevice.h index 94c729b8..19afec08 100644 --- a/ThirdParty/PSCommon/XnLib/Include/XnUSBDevice.h +++ b/ThirdParty/PSCommon/XnLib/Include/XnUSBDevice.h @@ -47,7 +47,7 @@ #define USB_DT_DEVICE_SIZE 0 #define USB_DT_DEVICE 0 -#elif (XN_PLATFORM == XN_PLATFORM_LINUX_X86 || XN_PLATFORM == XN_PLATFORM_LINUX_ARM) +#elif (XN_PLATFORM == XN_PLATFORM_LINUX_X86 || XN_PLATFORM == XN_PLATFORM_LINUX_ARM || XN_PLATFORM == XN_PLATFORM_LINUX_AARCH64) #include typedef struct usb_endpoint_descriptor XnUSBEndpointDescriptor; typedef struct usb_interface_descriptor XnUSBInterfaceDescriptor; diff --git a/ThirdParty/PSCommon/XnLib/Source/Linux/XnLinuxUSB.cpp b/ThirdParty/PSCommon/XnLib/Source/Linux/XnLinuxUSB.cpp index b886f827..0f9b5f2c 100644 --- a/ThirdParty/PSCommon/XnLib/Source/Linux/XnLinuxUSB.cpp +++ b/ThirdParty/PSCommon/XnLib/Source/Linux/XnLinuxUSB.cpp @@ -36,7 +36,7 @@ #include #include -#if (XN_PLATFORM == XN_PLATFORM_LINUX_X86 || XN_PLATFORM == XN_PLATFORM_LINUX_ARM) +#if (XN_PLATFORM == XN_PLATFORM_LINUX_X86 || XN_PLATFORM == XN_PLATFORM_LINUX_ARM || XN_PLATFORM == XN_PLATFORM_LINUX_AARCH64) #include #define XN_USE_UDEV #endif diff --git a/ThirdParty/PSCommon/XnLib/Source/Linux/XnLinuxUSBDevice.cpp b/ThirdParty/PSCommon/XnLib/Source/Linux/XnLinuxUSBDevice.cpp index 35593211..28a04170 100644 --- a/ThirdParty/PSCommon/XnLib/Source/Linux/XnLinuxUSBDevice.cpp +++ b/ThirdParty/PSCommon/XnLib/Source/Linux/XnLinuxUSBDevice.cpp @@ -23,7 +23,7 @@ //--------------------------------------------------------------------------- #include -#if (XN_PLATFORM == XN_PLATFORM_LINUX_ARM) +#if (XN_PLATFORM == XN_PLATFORM_LINUX_ARM || XN_PLATFORM == XN_PLATFORM_LINUX_AARCH64) #include #include @@ -1148,4 +1148,4 @@ XN_C_API XnStatus XN_C_DECL xnUSBDeviceResetEndpoint(XnUSBDevice* pDevice, XnUIn return XN_STATUS_OK; } -#endif // XN_PLATFORM == XN_PLATFORM_LINUX_ARM +#endif // XN_PLATFORM == XN_PLATFORM_LINUX_ARM || XN_PLATFORM == XN_PLATFORM_LINUX_AARCH64