Drop dependencies on non-distributable ADL/NVML headers. The needed glue
authormagnum <john.magnum@hushmail.com>
Wed, 27 Jan 2016 12:47:19 +0000 (13:47 +0100)
committermagnum <john.magnum@hushmail.com>
Wed, 27 Jan 2016 17:48:54 +0000 (18:48 +0100)
is copied into our respective local headers. Should close #120.

docs/BUILD.md
include/ext_ADL.h
include/ext_nvml.h
src/Makefile
tools/deps.sh

index 49a3828..456d345 100644 (file)
@@ -18,11 +18,9 @@ To compile **oclHashcat** the following third party libraries are required:
 The next thing to do is download all the third party libraries listed above and put these files into the *deps/tmp* directory.
 
 The following files are needed inside the *deps/tmp* directory:
-    
-    ADL_SDK9.zip
-    R352-developer.zip
-    gdk_linux_amd64_352_55_release.run
-    
+
+    R352-developer.zip  (only needed when cross-compiling for Windows)
+
 # Building oclHashcat
 First get a copy of the **oclHashcat** repository
 
index 1e5e86a..6490d97 100644 (file)
 
 #include <common.h>
 
-#include <adl_sdk.h>
+/**
+ * Declarations from adl_sdk.h and subheaders
+ */
+
+#define ADL_OK                                  0
+#define ADL_ERR                                 -1
+#define ADL_ERR_NOT_SUPPORTED                   -8
+
+#define ADL_MAX_PATH                            256
+
+#define ADL_DL_FANCTRL_SUPPORTS_PERCENT_READ    1
+#define ADL_DL_FANCTRL_SUPPORTS_PERCENT_WRITE   2
+#define ADL_DL_FANCTRL_SPEED_TYPE_PERCENT       1
+#define ADL_DL_FANCTRL_FLAG_USER_DEFINED_SPEED  1
+
+#define ADL_OD6_SETSTATE_PERFORMANCE            0x00000001
+#define ADL_OD6_GETSTATEINFO_CUSTOM_PERFORMANCE 0x00000004
+#define ADL_OD6_FANSPEED_TYPE_PERCENT           0x00000001
+
+typedef struct AdapterInfo
+{
+  int  iSize;
+  int  iAdapterIndex;
+  char strUDID[ADL_MAX_PATH];
+  int  iBusNumber;
+  int  iDeviceNumber;
+  int  iFunctionNumber;
+  int  iVendorID;
+  char strAdapterName[ADL_MAX_PATH];
+  char strDisplayName[ADL_MAX_PATH];
+  int  iPresent;
+
+#if defined (_WIN32) || defined (_WIN64)
+  int  iExist;
+  char strDriverPath[ADL_MAX_PATH];
+  char strDriverPathExt[ADL_MAX_PATH];
+  char strPNPString[ADL_MAX_PATH];
+  int  iOSDisplayIndex;
+#endif /* (_WIN32) || (_WIN64) */
+
+#if defined (__linux__)
+  int  iXScreenNum;
+  int  iDrvIndex;
+  char strXScreenConfigName[ADL_MAX_PATH];
+#endif /* (__linux__) */
+} AdapterInfo, *LPAdapterInfo;
+
+typedef struct ADLThermalControllerInfo
+{
+  int iSize;
+  int iThermalDomain;
+  int iDomainIndex;
+  int iFlags;
+} ADLThermalControllerInfo;
+
+typedef struct ADLTemperature
+{
+  int iSize;
+  int iTemperature;
+} ADLTemperature;
+
+typedef struct ADLFanSpeedInfo
+{
+  int iSize;
+  int iFlags;
+  int iMinPercent;
+  int iMaxPercent;
+  int iMinRPM;
+  int iMaxRPM;
+} ADLFanSpeedInfo;
+
+typedef struct ADLFanSpeedValue
+{
+  int iSize;
+  int iSpeedType;
+  int iFanSpeed;
+  int iFlags;
+} ADLFanSpeedValue;
+
+typedef struct ADLDisplayID
+{
+  int iDisplayLogicalIndex;
+  int iDisplayPhysicalIndex;
+  int iDisplayLogicalAdapterIndex;
+  int iDisplayPhysicalAdapterIndex;
+} ADLDisplayID, *LPADLDisplayID;
+
+typedef struct ADLDisplayInfo
+{
+  ADLDisplayID displayID;
+  int  iDisplayControllerIndex;
+  char strDisplayName[ADL_MAX_PATH];
+  char strDisplayManufacturerName[ADL_MAX_PATH];
+  int  iDisplayType;
+  int  iDisplayOutputType;
+  int  iDisplayConnector;
+  int  iDisplayInfoMask;
+  int  iDisplayInfoValue;
+} ADLDisplayInfo, *LPADLDisplayInfo;
+
+typedef struct ADLBiosInfo
+{
+  char strPartNumber[ADL_MAX_PATH];
+  char strVersion[ADL_MAX_PATH];
+  char strDate[ADL_MAX_PATH];
+} ADLBiosInfo, *LPADLBiosInfo;
+
+typedef struct ADLPMActivity
+{
+  int iSize;
+  int iEngineClock;
+  int iMemoryClock;
+  int iVddc;
+  int iActivityPercent;
+  int iCurrentPerformanceLevel;
+  int iCurrentBusSpeed;
+  int iCurrentBusLanes;
+  int iMaximumBusLanes;
+  int iReserved;
+} ADLPMActivity;
+
+typedef struct ADLODParameterRange
+{
+  int iMin;
+  int iMax;
+  int iStep;
+} ADLODParameterRange;
+
+typedef struct ADLODParameters
+{
+  int iSize;
+  int iNumberOfPerformanceLevels;
+  int iActivityReportingSupported;
+  int iDiscretePerformanceLevels;
+  int iReserved;
+  ADLODParameterRange sEngineClock;
+  ADLODParameterRange sMemoryClock;
+  ADLODParameterRange sVddc;
+} ADLODParameters;
+
+typedef struct ADLODPerformanceLevel
+{
+  int iEngineClock;
+  int iMemoryClock;
+  int iVddc;
+} ADLODPerformanceLevel;
+
+typedef struct ADLODPerformanceLevels
+{
+  int iSize;
+  int iReserved;
+  ADLODPerformanceLevel aLevels [1];
+} ADLODPerformanceLevels;
+
+typedef struct ADLOD6FanSpeedInfo
+{
+  int iSpeedType;
+  int iFanSpeedPercent;
+  int iFanSpeedRPM;
+  int iExtValue;
+  int iExtMask;
+} ADLOD6FanSpeedInfo;
+
+typedef struct ADLOD6FanSpeedValue
+{
+  int iSpeedType;
+  int iFanSpeed;
+  int iExtValue;
+  int iExtMask;
+} ADLOD6FanSpeedValue;
+
+typedef struct ADLOD6CurrentStatus
+{
+  int iEngineClock;
+  int iMemoryClock;
+  int iActivityPercent;
+  int iCurrentPerformanceLevel;
+  int iCurrentBusSpeed;
+  int iCurrentBusLanes;
+  int iMaximumBusLanes;
+  int iExtValue;
+  int iExtMask;
+} ADLOD6CurrentStatus;
+
+typedef struct ADLOD6ParameterRange
+{
+  int iMin;
+  int iMax;
+  int iStep;
+} ADLOD6ParameterRange;
+
+typedef struct ADLOD6Capabilities
+{
+  int iCapabilities;
+  int iSupportedStates;
+  int iNumberOfPerformanceLevels;
+  ADLOD6ParameterRange sEngineClockRange;
+  ADLOD6ParameterRange sMemoryClockRange;
+  int iExtValue;
+  int iExtMask;
+} ADLOD6Capabilities;
+
+typedef struct ADLOD6PerformanceLevel
+{
+  int iEngineClock;
+  int iMemoryClock;
+} ADLOD6PerformanceLevel;
+
+typedef struct ADLOD6StateInfo
+{
+  int iNumberOfPerformanceLevels;
+  int iExtValue;
+  int iExtMask;
+  ADLOD6PerformanceLevel aLevels [1];
+} ADLOD6StateInfo;
+
+typedef struct ADLOD6PowerControlInfo
+{
+  int iMinValue;
+  int iMaxValue;
+  int iStepValue;
+  int iExtValue;
+  int iExtMask;
+} ADLOD6PowerControlInfo;
+
+#if !(defined (_WIN32) || defined (_WIN64))
+#define __stdcall
+#endif
+
+typedef void* (__stdcall *ADL_MAIN_MALLOC_CALLBACK )( int );
+
+/*
+ * End of declarations from adl_sdk.h and subheaders
+ **/
 
 typedef int HM_ADAPTER_AMD;
 
index 21d64e5..b998cf1 100644 (file)
 
 #include <common.h>
 
-#include <nvml.h>
+/**
+ * Declarations from nvml.h
+ */
+
+typedef struct nvmlDevice_st* nvmlDevice_t;
+
+typedef struct nvmlPciInfo_st {
+  char busId[16];
+  unsigned int domain;
+  unsigned int bus;
+  unsigned int device;
+  unsigned int pciDeviceId;
+  unsigned int pciSubSystemId;
+} nvmlPciInfo_t;
+
+typedef struct nvmlUtilization_st {
+  unsigned int gpu;    // GPU kernel execution last second, percent
+  unsigned int memory; // GPU memory read/write last second, percent
+} nvmlUtilization_t;
+
+typedef enum nvmlTemperatureSensors_enum {
+  NVML_TEMPERATURE_GPU = 0     // Temperature sensor for the GPU die
+} nvmlTemperatureSensors_t;
+
+typedef enum nvmlReturn_enum {
+  NVML_SUCCESS = 0,                   // The operation was successful
+  NVML_ERROR_UNINITIALIZED = 1,       // NVML was not first initialized with nvmlInit()
+  NVML_ERROR_INVALID_ARGUMENT = 2,    // A supplied argument is invalid
+  NVML_ERROR_NOT_SUPPORTED = 3,       // The requested operation is not available on target device
+  NVML_ERROR_NO_PERMISSION = 4,       // The current user does not have permission for operation
+  NVML_ERROR_ALREADY_INITIALIZED = 5, // Deprecated: Multiple initializations are now allowed through ref counting
+  NVML_ERROR_NOT_FOUND = 6,           // A query to find an object was unsuccessful
+  NVML_ERROR_INSUFFICIENT_SIZE = 7,   // An input argument is not large enough
+  NVML_ERROR_INSUFFICIENT_POWER = 8,  // A device's external power cables are not properly attached
+  NVML_ERROR_DRIVER_NOT_LOADED = 9,   // NVIDIA driver is not loaded
+  NVML_ERROR_TIMEOUT = 10,            // User provided timeout passed
+  NVML_ERROR_UNKNOWN = 999            // An internal driver error occurred
+} nvmlReturn_t;
+
+/*
+ * End of declarations from nvml.h
+ **/
 
 typedef nvmlDevice_t HM_ADAPTER_NV;
 
index b92dee9..c01aec5 100644 (file)
@@ -45,8 +45,6 @@ DOCUMENT_FOLDER          ?= $(PREFIX)/share/doc/$(PROG_NAME)
 ## Dependencies
 ##
 
-ADL                      := deps/adl-sdk
-GDK                      := deps/nvidia-gdk
 NVAPI                    := deps/R352-developer
 
 ##
@@ -65,25 +63,15 @@ NVML                     := $(GDK)/usr/include/nvidia/gdk
 ## Check dependencies
 ##
 
-FOUND_ADL                := 0
-FOUND_NVML               := 0
+WITH_ADL                 := 1
+WITH_NVML                := 1
 FOUND_NVAPI              := 0
 
-ifneq ($(wildcard $(ADL)/include/adl_sdk.h),)
-FOUND_ADL                := 1
-endif
-
-ifneq ($(wildcard $(NVML)/nvml.h),)
-FOUND_NVML               := 1
-endif
-
 ifneq ($(wildcard $(NVAPI)/nvapi.h),)
 FOUND_NVAPI              := 1
 endif
 
 ifeq ($(DEBUG),1)
-$(warning "## ADL is found ? $(FOUND_ADL)")
-$(warning "## NVML is found ? $(FOUND_NVML)")
 $(warning "## NVAPI is found ? $(FOUND_NVAPI)")
 endif
 
@@ -144,8 +132,8 @@ CFLAGS_NATIVE            += $(CFLAGS)
 
 LFLAGS_NATIVE            := -lpthread
 
-FOUND_ADL                := 0
-FOUND_NVML               := 0
+WITH_ADL                 := 0
+WITH_NVML                := 0
 endif
 
 ifeq ($(UNAME),Linux)
@@ -154,13 +142,13 @@ CFLAGS_NATIVE            += -s $(CFLAGS)
 
 LFLAGS_NATIVE            := -lpthread -ldl
 
-ifneq (,$(filter 1,$(FOUND_ADL) $(FOUND_NVML)))
+ifneq (,$(filter 1,$(WITH_ADL) $(WITH_NVML)))
 CFLAGS_NATIVE            += -DHAVE_HWMON
-ifeq ($(FOUND_ADL),1)
-CFLAGS_NATIVE            += -DHAVE_ADL -I$(ADL)/include/
+ifeq ($(WITH_ADL),1)
+CFLAGS_NATIVE            += -DHAVE_ADL
 endif
-ifeq ($(FOUND_NVML),1)
-CFLAGS_NATIVE            += -DHAVE_NVML -I$(NVML)/
+ifeq ($(WITH_NVML),1)
+CFLAGS_NATIVE            += -DHAVE_NVML
 endif
 endif
 
@@ -174,15 +162,15 @@ CFLAGS_CROSS_LINUX       := -D_POSIX -DLINUX
 CFLAGS_CROSS_LINUX       += -s $(CFLAGS)
 CFLAGS_CROSS_LINUX       += -I$(OPENCL_HEADERS_KHRONOS)/
 
-ifneq (,$(filter 1,$(FOUND_ADL) $(FOUND_NVML)))
+ifneq (,$(filter 1,$(WITH_ADL) $(WITH_NVML)))
 CFLAGS_CROSS_LINUX       += -DHAVE_HWMON
 
-ifeq ($(FOUND_ADL),1)
-CFLAGS_CROSS_LINUX       += -DHAVE_ADL -I$(ADL)/include/
+ifeq ($(WITH_ADL),1)
+CFLAGS_CROSS_LINUX       += -DHAVE_ADL
 endif
 
-ifeq ($(FOUND_NVML),1)
-CFLAGS_CROSS_LINUX       += -DHAVE_NVML -I$(NVML)/
+ifeq ($(WITH_NVML),1)
+CFLAGS_CROSS_LINUX       += -DHAVE_NVML
 endif
 endif
 
@@ -190,15 +178,15 @@ CFLAGS_CROSS_WIN         := -D_WIN   -DWIN -D__MSVCRT__ -D__USE_MINGW_ANSI_STDIO
 CFLAGS_CROSS_WIN         += -s $(filter-out -fsanitize=address,$(CFLAGS))
 CFLAGS_CROSS_WIN         += -I$(OPENCL_HEADERS_KHRONOS)/
 
-ifneq (,$(filter 1,$(FOUND_ADL) $(FOUND_NVAPI)))
+ifneq (,$(filter 1,$(WITH_ADL) $(FOUND_NVAPI)))
 CFLAGS_CROSS_WIN         += -DHAVE_HWMON
 
-ifeq ($(FOUND_ADL),1)
-CFLAGS_CROSS_WIN         += -DHAVE_ADL -I$(ADL)/include/
+ifeq ($(WITH_ADL),1)
+CFLAGS_CROSS_WIN         += -DHAVE_ADL
 endif
 
 ifeq ($(FOUND_NVAPI),1)
-CFLAGS_CROSS_WIN         += -DHAVE_NVAPI -I$(NVAPI)/
+CFLAGS_CROSS_WIN         += -DHAVE_NVAPI
 endif
 endif
 
@@ -214,12 +202,12 @@ LFLAGS_CROSS_WIN         := -lpsapi
 
 NATIVE_OBJS              := obj/ext_OpenCL.NATIVE.o obj/shared.NATIVE.o obj/rp_kernel_on_cpu.NATIVE.o
 
-ifneq (,$(filter 1,$(FOUND_ADL) $(FOUND_NVML)))
-ifeq ($(FOUND_ADL),1)
+ifneq (,$(filter 1,$(WITH_ADL) $(WITH_NVML)))
+ifeq ($(WITH_ADL),1)
 NATIVE_OBJS              += obj/ext_ADL.NATIVE.o
 endif
 
-ifeq ($(FOUND_NVML),1)
+ifeq ($(WITH_NVML),1)
 NATIVE_OBJS              += obj/ext_nvml.NATIVE.o
 endif
 endif
@@ -230,7 +218,7 @@ LINUX_64_OBJS            := obj/ext_OpenCL.LINUX.64.o obj/shared.LINUX.64.o obj/
 WIN_32_OBJS              := obj/ext_OpenCL.WIN.32.o obj/shared.WIN.32.o obj/rp_kernel_on_cpu.WIN.32.o
 WIN_64_OBJS              := obj/ext_OpenCL.WIN.64.o obj/shared.WIN.64.o obj/rp_kernel_on_cpu.WIN.64.o
 
-ifeq ($(FOUND_ADL),1)
+ifeq ($(WITH_ADL),1)
 LINUX_32_OBJS            += obj/ext_ADL.LINUX.32.o
 LINUX_64_OBJS            += obj/ext_ADL.LINUX.64.o
 
@@ -238,7 +226,7 @@ WIN_32_OBJS              += obj/ext_ADL.WIN.32.o
 WIN_64_OBJS              += obj/ext_ADL.WIN.64.o
 endif
 
-ifeq ($(FOUND_NVML),1)
+ifeq ($(WITH_NVML),1)
 LINUX_32_OBJS            += obj/ext_nvml.LINUX.32.o
 LINUX_64_OBJS            += obj/ext_nvml.LINUX.64.o
 endif
index 52745fc..41a8685 100755 (executable)
@@ -5,7 +5,8 @@
 ## global vars
 DEPS="make gcc g++ gcc-multilib g++-multilib libc6-dev-i386 mingw-w64 build-essential unzip opencl-headers ocl-icd-libopencl1 dos2unix"
 DEPS_AMD_DEV="ocl-icd-opencl-dev"
-DOWNLOAD_DEPS="ADL_SDK9.zip R352-developer.zip gdk_linux_amd64_352_55_release.run"
+## Now suppressed: ADL_SDK9.zip gdk_linux_amd64_352_55_release.run
+DOWNLOAD_DEPS="R352-developer.zip"
 
 ## enter the deps directory
 cur_directory=$(dirname ${0})
@@ -17,7 +18,8 @@ cd ${deps_dir}
 
 ## cleanup the directories under the 'deps' folder
 rm -rf {adl-sdk*,nvidia-gdk,R352-developer} && \
-mkdir -p {tmp,adl-sdk,nvidia-gdk,R352-developer} && \
+#mkdir -p {tmp,adl-sdk,nvidia-gdk,R352-developer} && \
+mkdir -p {tmp,R352-developer} && \
 cd tmp/
 
 if [ $? -ne 0 ]; then
@@ -54,20 +56,20 @@ for pkg in ${DEPS}; do
 done
 
 ## extract ADL SDK
-unzip ADL_SDK9.zip -d ${deps_dir}/adl-sdk-9
-ret=$?
-
-if [[ ${ret} -ne 0 ]] && [[ ${ret} -ne 1 ]]; then
-  echo "! failed to extract ADL SDK"
-  exit 1
-fi
-
-rm -rf ${deps_dir}/adl-sdk && ln -s ${deps_dir}/adl-sdk-9 ${deps_dir}/adl-sdk
-
-if [ $? -ne 0 ]; then
-  echo "! failed to setup ADL SDK link"
-  exit 1
-fi
+#unzip ADL_SDK9.zip -d ${deps_dir}/adl-sdk-9
+#ret=$?
+#
+#if [[ ${ret} -ne 0 ]] && [[ ${ret} -ne 1 ]]; then
+#  echo "! failed to extract ADL SDK"
+#  exit 1
+#fi
+#
+#rm -rf ${deps_dir}/adl-sdk && ln -s ${deps_dir}/adl-sdk-9 ${deps_dir}/adl-sdk
+#
+#if [ $? -ne 0 ]; then
+#  echo "! failed to setup ADL SDK link"
+#  exit 1
+#fi
 
 ## extract NVAPI
 unzip R352-developer.zip -d ${deps_dir}
@@ -79,13 +81,13 @@ if [[ ${ret} -ne 0 ]] && [[ ${ret} -ne 1 ]]; then
 fi
 
 ## install NVIDIA GPU Deployment Kit
-chmod +x gdk_linux_amd64_352_55_release.run && \
-./gdk_linux_amd64_352_55_release.run --silent --installdir=${deps_dir}/nvidia-gdk
-
-if [ $? -ne 0 ]; then
-  echo "! failed to install NVIDIA GPU Deployment Kit"
-  exit 1
-fi
+#chmod +x gdk_linux_amd64_352_55_release.run && \
+#./gdk_linux_amd64_352_55_release.run --silent --installdir=${deps_dir}/nvidia-gdk
+#
+#if [ $? -ne 0 ]; then
+#  echo "! failed to install NVIDIA GPU Deployment Kit"
+#  exit 1
+#fi
 
 ## check if libOpenCL.so is available (and if not install DEPS_AMD_DEV)