diff --git a/.gitignore b/.gitignore index 2fa0c5147..72993231b 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ oclHashcat *.dictstat *.pot *.log +*.dSYM deps/** kernels/** lib/*.a diff --git a/include/common.h b/include/common.h index 23d8c32ab..3e703942d 100644 --- a/include/common.h +++ b/include/common.h @@ -43,11 +43,15 @@ #ifdef OSX #include #include +#include #endif +#ifdef HAVE_HWMON typedef void *HM_LIB; #endif +#endif // _POSIX + #ifdef _WIN #define WIN32_LEAN_AND_MEAN #include @@ -70,11 +74,13 @@ typedef INT64 int64_t; typedef UINT32 uint; typedef UINT64 uint64_t; +#ifdef HAVE_HWMON typedef HINSTANCE HM_LIB; +#endif #define mkdir(name,mode) mkdir (name) -#endif +#endif // _WIN typedef uint8_t u8; typedef uint16_t u16; @@ -104,4 +110,4 @@ void log_error (const char *fmt, ...); #define MIN(a,b) (((a) < (b)) ? (a) : (b)) #define MAX(a,b) (((a) > (b)) ? (a) : (b)) -#endif +#endif // COMMON_H diff --git a/include/ext_ADL.h b/include/ext_ADL.h index 8604b280d..1e5e86a81 100644 --- a/include/ext_ADL.h +++ b/include/ext_ADL.h @@ -6,6 +6,8 @@ #ifndef EXT_ADL_H #define EXT_ADL_H +#if defined(HAVE_HWMON) && defined(HAVE_ADL) + #include #include @@ -89,4 +91,6 @@ int hc_ADL_Overdrive_State_Set (HM_LIB hDLL, int iAdapterIndex, int type, ADLOD6 int hc_ADL_Overdrive6_PowerControl_Caps (HM_LIB hDLL, int iAdapterIndex, int *lpSupported); int hc_ADL_Overdrive6_TargetTemperatureData_Get (HM_LIB hDLL, int iAdapterIndex, int *cur_temp, int *default_temp); -#endif +#endif // HAVE_HWMON && HAVE_ADL + +#endif // EXT_ADL_H diff --git a/include/ext_OpenCL.h b/include/ext_OpenCL.h index d86b12499..5ba3fa63e 100644 --- a/include/ext_OpenCL.h +++ b/include/ext_OpenCL.h @@ -8,6 +8,9 @@ #include +#define CL_USE_DEPRECATED_OPENCL_1_2_APIS +#define CL_USE_DEPRECATED_OPENCL_2_0_APIS + #ifdef OSX #include #endif diff --git a/include/ext_dummy.h b/include/ext_dummy.h index d2939b693..c5139ae5a 100644 --- a/include/ext_dummy.h +++ b/include/ext_dummy.h @@ -6,6 +6,10 @@ #ifndef EXT_SMI_H #define EXT_SMI_H +#ifdef HAVE_HWMON + #include +#endif // HAVE_HWMON + #endif diff --git a/include/ext_nvapi.h b/include/ext_nvapi.h index 22783943e..83ba9156a 100644 --- a/include/ext_nvapi.h +++ b/include/ext_nvapi.h @@ -6,6 +6,8 @@ #ifndef EXT_NVAPI_H #define EXT_NVAPI_H +#if defined(HAVE_HWMON) && defined(HAVE_NVAPI) + #include // Just annotations (they do nothing special) @@ -61,4 +63,6 @@ int hc_NvAPI_GPU_GetThermalSettings (NvPhysicalGpuHandle hPhysicalGpu, NvU32 sen int hc_NvAPI_GPU_GetTachReading (NvPhysicalGpuHandle hPhysicalGPU, NvU32 *pValue); int hc_NvAPI_GPU_GetDynamicPstatesInfoEx (NvPhysicalGpuHandle hPhysicalGpu, NV_GPU_DYNAMIC_PSTATES_INFO_EX *pDynamicPstatesInfoEx); +#endif // HAVE_HWMON && HAVE_NVAPI + #endif diff --git a/include/ext_nvml.h b/include/ext_nvml.h index 102e07215..21d64e5cb 100644 --- a/include/ext_nvml.h +++ b/include/ext_nvml.h @@ -6,6 +6,8 @@ #ifndef EXT_NVML_H #define EXT_NVML_H +#if defined(HAVE_HWMON) && defined(HAVE_NVML) + #include #include @@ -31,4 +33,6 @@ nvmlReturn_t hc_NVML_nvmlDeviceGetFanSpeed (HM_LIB hDLL, int, nvmlDevice_t devic nvmlReturn_t hc_NVML_nvmlDeviceGetPowerUsage (HM_LIB hDLL, nvmlDevice_t device, unsigned int *power); nvmlReturn_t hc_NVML_nvmlDeviceGetUtilizationRates (HM_LIB hDLL, nvmlDevice_t device, nvmlUtilization_t *utilization); +#endif // HAVE_HWMON && HAVE_NVML + #endif diff --git a/include/ext_smi.h b/include/ext_smi.h index 5ca5abfba..3e88bde33 100644 --- a/include/ext_smi.h +++ b/include/ext_smi.h @@ -6,6 +6,8 @@ #ifndef EXT_SMI_H #define EXT_SMI_H +#ifdef HAVE_HWMON + #include #define SMI_OK 0 @@ -13,4 +15,6 @@ int hc_nvidia_smi (int dev, int *temperature, int *gpu); +#endif // HAVE_HWMON + #endif diff --git a/include/shared.h b/include/shared.h index f3b1e27fc..66cf10171 100644 --- a/include/shared.h +++ b/include/shared.h @@ -1670,14 +1670,19 @@ void logfile_append (const char *fmt, ...); void fsync (int fd); #endif +#ifdef HAVE_HWMON + +#if defined(HAVE_NVML) || defined(HAVE_NVAPI) int hm_get_adapter_index_nv (HM_ADAPTER_NV nvGPUHandle[DEVICES_MAX]); +#endif -int get_adapters_num_amd (HM_LIB hm_dll_amd, int *iNumberAdapters); - -int hm_get_device_num (HM_LIB hm_dll_amd, HM_ADAPTER_AMD hm_adapter_index, int *hm_device_num); +// int hm_get_device_num (HM_LIB hm_dll_amd, HM_ADAPTER_AMD hm_adapter_index, int *hm_device_num); // void hm_get_opencl_busid_devid (hm_attrs_t *hm_device, uint opencl_num_devices, cl_device_id *devices); +#ifdef HAVE_ADL +int get_adapters_num_amd (HM_LIB hm_dll_amd, int *iNumberAdapters); + int hm_get_adapter_index_amd (hm_attrs_t *hm_device, u32 *valid_adl_device_list, int num_adl_adapters, LPAdapterInfo lpAdapterInfo); LPAdapterInfo hm_get_adapter_info_amd (HM_LIB hm_dll_amd, int iNumberAdapters); @@ -1686,10 +1691,13 @@ u32 *hm_get_list_valid_adl_adapters (int iNumberAdapters, int *num_adl_adapters, int hm_get_overdrive_version (HM_LIB hm_dll_amd, hm_attrs_t *hm_device, u32 *valid_adl_device_list, int num_adl_adapters, LPAdapterInfo lpAdapterInfo); int hm_check_fanspeed_control (HM_LIB hm_dll_amd, hm_attrs_t *hm_device, u32 *valid_adl_device_list, int num_adl_adapters, LPAdapterInfo lpAdapterInfo); +#endif // HAVE_ADL +#if defined(HAVE_ADL) || defined(HAVE_NVML) void hm_close (HM_LIB hm_dll); HM_LIB hm_init (const cl_uint vendor_id); +#endif int hm_get_temperature_with_device_id (const uint device_id); int hm_get_fanspeed_with_device_id (const uint device_id); @@ -1698,6 +1706,7 @@ int hm_get_utilization_with_device_id (const uint device_id); int hm_set_fanspeed_with_device_id_amd (const uint device_id, const int fanspeed); void hm_device_val_to_str (char *target_buf, int max_buf_size, char *suffix, int value); +#endif // HAVE_HWMON void myabort (); void myquit (); @@ -1955,4 +1964,4 @@ void *thread_runtime (void *p); #include "cpu-aes.h" -#endif +#endif // SHARED_H diff --git a/include/types.h b/include/types.h index 6a1f7e1ee..1b2225110 100644 --- a/include/types.h +++ b/include/types.h @@ -978,12 +978,18 @@ struct __hc_device_param typedef struct __hc_device_param hc_device_param_t; +#ifdef HAVE_HWMON typedef struct { union { + #ifdef HAVE_ADL HM_ADAPTER_AMD amd; + #endif + + #if defined(HAVE_NVML) || defined(HAVE_NVAPI) HM_ADAPTER_NV nv; + #endif } adapter_index; @@ -995,6 +1001,7 @@ typedef struct // int devid; // used for CL_DEVICE_TOPOLOGY_AMD but broken for dual GPUs } hm_attrs_t; +#endif // HAVE_HWMON typedef struct { @@ -1044,9 +1051,11 @@ typedef struct * hardware watchdog */ + #ifdef HAVE_HWMON HM_LIB hm_dll_nv; HM_LIB hm_dll_amd; hm_attrs_t hm_device[DEVICES_MAX]; + #endif /** * hashes @@ -1154,9 +1163,11 @@ typedef struct uint dgst_pos2; uint dgst_pos3; + #ifdef HAVE_HWMON uint gpu_temp_disable; uint gpu_temp_abort; uint gpu_temp_retain; + #endif char **rp_files; uint rp_files_cnt; diff --git a/src/Makefile b/src/Makefile index d5c971343..4cc1975d6 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,16 +1,34 @@ ## -## Author......: Jens Steube +## Authors.....: Jens Steube +## Gabriele Gristina +## ## License.....: MIT ## +PROG_NAME := oclHashcat + +## +## Detect Operating System +## + +UNAME := $(shell uname -s) + +ifeq (,$(filter $(UNAME),Linux Darwin)) +$(error "! Your Operating System ($(UNAME)) is not supported by $(PROG_NAME) Makefile") +endif + +ifeq ($(DEBUG),1) +$(warning "## Detected Operating System : $(UNAME)") +endif + ## ## Makefile flags ## -MAKEFLAGS += -l -j -rR --no-print-directory +MAKEFLAGS += -l -j -rR --no-print-directory ifneq ($(findstring clean,$(MAKECMDGOALS)),) -MAKEFLAGS += -j 1 +MAKEFLAGS += -j 1 endif ## @@ -20,11 +38,11 @@ endif PREFIX ?= /usr/local INSTALL_FOLDER ?= $(PREFIX)/bin -SHARED_FOLDER ?= $(PREFIX)/share/oclHashcat -DOCUMENT_FOLDER ?= $(PREFIX)/share/doc/oclHashcat +SHARED_FOLDER ?= $(PREFIX)/share/$(PROG_NAME) +DOCUMENT_FOLDER ?= $(PREFIX)/share/doc/$(PROG_NAME) ## -## Depencies +## Dependencies ## ADL := deps/adl-sdk @@ -32,7 +50,7 @@ GDK := deps/nvidia-gdk NVAPI := deps/R352-developer ## -## Depencies, cross compilation only +## Dependencies, cross compilation only ## OPENCL_HEADERS_KHRONOS := deps/OpenCL-Headers @@ -43,6 +61,32 @@ OPENCL_HEADERS_KHRONOS := deps/OpenCL-Headers NVML := $(GDK)/usr/include/nvidia/gdk +## +## Check dependencies +## + +FOUND_ADL := 0 +FOUND_NVML := 0 +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 + ## ## Native compiler paths ## @@ -76,35 +120,86 @@ NOW := $(shell date +%s) ## Compiler flags ## -CFLAGS := -O2 -s -pipe -W -Wall -std=c99 -Iinclude/ -#CFLAGS := -g -ggdb -pipe -W -Wall -std=c99 -Iinclude/ -fsanitize=undefined -fno-omit-frame-pointer +CFLAGS := -O2 -pipe -W -Wall -std=c99 -Iinclude/ + +ifeq ($(DEBUG),1) +CFLAGS += -g -ggdb -fsanitize=address -fno-omit-frame-pointer +endif ## ## Native compilation target ## -CFLAGS_NATIVE := -D_POSIX -DLINUX -CFLAGS_NATIVE += $(CFLAGS) -CFLAGS_NATIVE += -I$(ADL)/include/ -CFLAGS_NATIVE += -I$(NVML)/ +BINARY_NATIVE := $(PROG_NAME) -LFLAGS_NATIVE := -lpthread -lOpenCL -ldl +ifeq ($(UNAME),Darwin) +export MACOSX_DEPLOYMENT_TARGET=10.9 + +BINARY_NATIVE := $(PROG_NAME).app + +CFLAGS_NATIVE := -D_POSIX -DOSX +CFLAGS_NATIVE += $(CFLAGS) + +LFLAGS_NATIVE := -framework OpenCL -lpthread + +FOUND_ADL := 0 +FOUND_NVML := 0 +endif + +ifeq ($(UNAME),Linux) +CFLAGS_NATIVE := -D_POSIX -DLINUX +CFLAGS_NATIVE += -s $(CFLAGS) + +LFLAGS_NATIVE := -lOpenCL -lpthread + +ifneq (,$(filter 1,$(FOUND_ADL) $(FOUND_NVML))) +LFLAGS_NATIVE += -ldl +CFLAGS_NATIVE += -DHAVE_HWMON +ifeq ($(FOUND_ADL),1) +CFLAGS_NATIVE += -DHAVE_ADL -I$(ADL)/include/ +endif +ifeq ($(FOUND_NVML),1) +CFLAGS_NATIVE += -DHAVE_NVML -I$(NVML)/ +endif +endif + +endif ## ## Cross compilation target ## CFLAGS_CROSS_LINUX := -D_POSIX -DLINUX -CFLAGS_CROSS_LINUX += $(CFLAGS) +CFLAGS_CROSS_LINUX += -s $(CFLAGS) CFLAGS_CROSS_LINUX += -I$(OPENCL_HEADERS_KHRONOS)/ -CFLAGS_CROSS_LINUX += -I$(ADL)/include/ -CFLAGS_CROSS_LINUX += -I$(NVML)/ + +ifneq (,$(filter 1,$(FOUND_ADL) $(FOUND_NVML))) +CFLAGS_CROSS_LINUX += -DHAVE_HWMON + +ifeq ($(FOUND_ADL),1) +CFLAGS_CROSS_LINUX += -DHAVE_ADL -I$(ADL)/include/ +endif + +ifeq ($(FOUND_NVML),1) +CFLAGS_CROSS_LINUX += -DHAVE_NVML -I$(NVML)/ +endif +endif CFLAGS_CROSS_WIN := -D_WIN -DWIN -D__MSVCRT__ -D__USE_MINGW_ANSI_STDIO=1 -CFLAGS_CROSS_WIN += $(CFLAGS) +CFLAGS_CROSS_WIN += -s $(filter-out -fsanitize=address,$(CFLAGS)) CFLAGS_CROSS_WIN += -I$(OPENCL_HEADERS_KHRONOS)/ -CFLAGS_CROSS_WIN += -I$(ADL)/include/ -CFLAGS_CROSS_WIN += -I$(NVAPI)/ + +ifneq (,$(filter 1,$(FOUND_ADL) $(FOUND_NVAPI))) +CFLAGS_CROSS_WIN += -DHAVE_HWMON + +ifeq ($(FOUND_ADL),1) +CFLAGS_CROSS_WIN += -DHAVE_ADL -I$(ADL)/include/ +endif + +ifeq ($(FOUND_NVAPI),1) +CFLAGS_CROSS_WIN += -DHAVE_NVAPI -I$(NVAPI)/ +endif +endif CFLAGS_CROSS_32 := -m32 CFLAGS_CROSS_64 := -m64 @@ -112,6 +207,46 @@ CFLAGS_CROSS_64 := -m64 LFLAGS_CROSS_LINUX := -lpthread -lOpenCL -ldl LFLAGS_CROSS_WIN := -lpsapi +## +## Objects +## + +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) +NATIVE_OBJS += obj/ext_ADL.NATIVE.o +endif + +ifeq ($(FOUND_NVML),1) +NATIVE_OBJS += obj/ext_nvml.NATIVE.o +endif +endif + +LINUX_32_OBJS := obj/ext_OpenCL.LINUX.32.o obj/shared.LINUX.32.o obj/rp_kernel_on_cpu.LINUX.32.o +LINUX_64_OBJS := obj/ext_OpenCL.LINUX.64.o obj/shared.LINUX.64.o obj/rp_kernel_on_cpu.LINUX.64.o + +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) +LINUX_32_OBJS += obj/ext_ADL.LINUX.32.o +LINUX_64_OBJS += obj/ext_ADL.LINUX.64.o + +WIN_32_OBJS += obj/ext_ADL.WIN.32.o +WIN_64_OBJS += obj/ext_ADL.WIN.64.o +endif + +ifeq ($(FOUND_NVML),1) +LINUX_32_OBJS += obj/ext_nvml.LINUX.32.o +LINUX_64_OBJS += obj/ext_nvml.LINUX.64.o +endif + +ifeq ($(FOUND_NVAPI),1) +WIN_32_OBJS += obj/ext_nvapi.WIN.32.o $(NVAPI)/x86/nvapi.lib +WIN_64_OBJS += obj/ext_nvapi.WIN.64.o $(NVAPI)/amd64/nvapi64.lib +endif + ## ## Targets: Global ## @@ -121,16 +256,17 @@ native: oclHashcat binaries: linux32 linux64 win32 win64 clean: - $(RM) -f obj/*.o lib/*.a ./*.bin ./*.exe ./*.app *.restore *.out *.pot *.dictstat *.log oclHashcat core + $(RM) -f obj/*.o lib/*.a *.bin *.exe *.app *.restore *.out *.pot *.dictstat *.log oclHashcat core $(RM) -rf *.induct $(RM) -rf *.outfiles + $(RM) -rf *.dSYM $(RM) -rf kernels -linux32: oclHashcat32.bin -linux64: oclHashcat64.bin +linux32: oclHashcat32.bin +linux64: oclHashcat64.bin -win32: oclHashcat32.exe -win64: oclHashcat64.exe +win32: oclHashcat32.exe +win64: oclHashcat64.exe ## ## Targets: Linux install @@ -154,16 +290,16 @@ install: native $(INSTALL) -m 644 include/constants.h $(SHARED_FOLDER)/include/ $(INSTALL) -m 644 include/kernel_functions.c $(SHARED_FOLDER)/include/ $(INSTALL) -m 644 include/kernel_vendor.h $(SHARED_FOLDER)/include/ - $(INSTALL) -m 644 include/rp_kernel.h $(SHARED_FOLDER)/include/ + $(INSTALL) -m 644 include/rp_kernel.h $(SHARED_FOLDER)/include/ $(INSTALL) -m 755 -d $(SHARED_FOLDER)/OpenCL $(CP) -a OpenCL/* $(SHARED_FOLDER)/OpenCL/ $(INSTALL) -m 755 -d $(SHARED_FOLDER)/rules $(CP) -a rules/* $(SHARED_FOLDER)/rules/ $(INSTALL) -m 644 hashcat.hcstat $(SHARED_FOLDER)/ - $(INSTALL) -m 755 oclHashcat $(INSTALL_FOLDER)/ + $(INSTALL) -m 755 $(BINARY_NATIVE) $(INSTALL_FOLDER)/ uninstall: - $(RM) -f $(INSTALL_FOLDER)/oclHashcat + $(RM) -f $(INSTALL_FOLDER)/$(BINARY_NATIVE) $(RM) -rf $(SHARED_FOLDER) $(RM) -rf $(DOCUMENT_FOLDER) @@ -172,45 +308,45 @@ uninstall: ## lib/libOpenCL.a: - ${DLL_WIN_32} -A -k -l lib/libOpenCL.a -d lib/OpenCL.def + $(DLL_WIN_32) -A -k -l lib/libOpenCL.a -d lib/OpenCL.def lib/libOpenCL64.a: - ${DLL_WIN_64} -A -k -l lib/libOpenCL64.a -d lib/OpenCL64.def + $(DLL_WIN_64) -A -k -l lib/libOpenCL64.a -d lib/OpenCL64.def ## ## native compiled oclHashcat ## -obj/%.oclHashcat.NATIVE.o: src/%.c +obj/%.NATIVE.o: src/%.c $(CC_NATIVE) $(CFLAGS_NATIVE) -c -o $@ $< -oclHashcat: src/oclHashcat.c obj/ext_OpenCL.oclHashcat.NATIVE.o obj/ext_nvml.oclHashcat.NATIVE.o obj/ext_ADL.oclHashcat.NATIVE.o obj/shared.oclHashcat.NATIVE.o obj/rp_kernel_on_cpu.oclHashcat.NATIVE.o - $(CC_NATIVE) $(CFLAGS_NATIVE) -o $@ $^ $(LFLAGS_NATIVE) -DCOMPTIME=$(NOW) -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\" +oclHashcat: src/oclHashcat.c $(NATIVE_OBJS) + $(CC_NATIVE) $(CFLAGS_NATIVE) -o $(BINARY_NATIVE) $^ $(LFLAGS_NATIVE) -DCOMPTIME=$(NOW) -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\" ## ## cross compiled oclHashcat for binary release version ## -obj/%.oclHashcat.LINUX.32.o: src/%.c - $(CC_LINUX_32) $(CFLAGS_CROSS) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_32) -c -o $@ $< +obj/%.LINUX.32.o: src/%.c + $(CC_LINUX_32) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_32) -c -o $@ $< -obj/%.oclHashcat.LINUX.64.o: src/%.c - $(CC_LINUX_64) $(CFLAGS_CROSS) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_64) -c -o $@ $< +obj/%.LINUX.64.o: src/%.c + $(CC_LINUX_64) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_64) -c -o $@ $< -obj/%.oclHashcat.WIN.32.o: src/%.c - $(CC_WIN_32) $(CFLAGS_CROSS) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_32) -c -o $@ $< +obj/%.WIN.32.o: src/%.c + $(CC_WIN_32) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_32) -c -o $@ $< -obj/%.oclHashcat.WIN.64.o: src/%.c - $(CC_WIN_64) $(CFLAGS_CROSS) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_64) -c -o $@ $< +obj/%.WIN.64.o: src/%.c + $(CC_WIN_64) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_64) -c -o $@ $< -oclHashcat32.bin: src/oclHashcat.c obj/ext_OpenCL.oclHashcat.LINUX.32.o obj/ext_nvml.oclHashcat.LINUX.32.o obj/ext_ADL.oclHashcat.LINUX.32.o obj/shared.oclHashcat.LINUX.32.o obj/rp_kernel_on_cpu.oclHashcat.LINUX.32.o - $(CC_LINUX_32) $(CFLAGS_CROSS) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_32) -o $@ $^ $(LFLAGS_CROSS_LINUX) -DCOMPTIME=$(NOW) -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\" +oclHashcat32.bin: src/oclHashcat.c $(LINUX_32_OBJS) + $(CC_LINUX_32) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_32) -o $@ $^ $(LFLAGS_CROSS_LINUX) -DCOMPTIME=$(NOW) -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\" -oclHashcat64.bin: src/oclHashcat.c obj/ext_OpenCL.oclHashcat.LINUX.64.o obj/ext_nvml.oclHashcat.LINUX.64.o obj/ext_ADL.oclHashcat.LINUX.64.o obj/shared.oclHashcat.LINUX.64.o obj/rp_kernel_on_cpu.oclHashcat.LINUX.64.o - $(CC_LINUX_64) $(CFLAGS_CROSS) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_64) -o $@ $^ $(LFLAGS_CROSS_LINUX) -DCOMPTIME=$(NOW) -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\" +oclHashcat64.bin: src/oclHashcat.c $(LINUX_64_OBJS) + $(CC_LINUX_64) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_64) -o $@ $^ $(LFLAGS_CROSS_LINUX) -DCOMPTIME=$(NOW) -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\" -oclHashcat32.exe: src/oclHashcat.c obj/ext_OpenCL.oclHashcat.WIN.32.o obj/ext_nvapi.oclHashcat.WIN.32.o obj/ext_ADL.oclHashcat.WIN.32.o obj/shared.oclHashcat.WIN.32.o obj/rp_kernel_on_cpu.oclHashcat.WIN.32.o lib/libOpenCL.a /usr/i686-w64-mingw32/lib/CRT_glob.o $(NVAPI)/x86/nvapi.lib - $(CC_WIN_32) $(CFLAGS_CROSS) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_32) -o $@ $^ $(LFLAGS_CROSS_WIN) -DCOMPTIME=$(NOW) -static-libgcc +oclHashcat32.exe: src/oclHashcat.c $(WIN_32_OBJS) lib/libOpenCL.a + $(CC_WIN_32) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_32) -o $@ $^ $(LFLAGS_CROSS_WIN) -DCOMPTIME=$(NOW) -static-libgcc -oclHashcat64.exe: src/oclHashcat.c obj/ext_OpenCL.oclHashcat.WIN.64.o obj/ext_nvapi.oclHashcat.WIN.64.o obj/ext_ADL.oclHashcat.WIN.64.o obj/shared.oclHashcat.WIN.64.o obj/rp_kernel_on_cpu.oclHashcat.WIN.64.o lib/libOpenCL64.a /usr/x86_64-w64-mingw32/lib/CRT_glob.o $(NVAPI)/amd64/nvapi64.lib - $(CC_WIN_64) $(CFLAGS_CROSS) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_64) -o $@ $^ $(LFLAGS_CROSS_WIN) -DCOMPTIME=$(NOW) -static-libgcc +oclHashcat64.exe: src/oclHashcat.c $(WIN_64_OBJS) lib/libOpenCL64.a + $(CC_WIN_64) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_64) -o $@ $^ $(LFLAGS_CROSS_WIN) -DCOMPTIME=$(NOW) -static-libgcc diff --git a/src/oclHashcat.c b/src/oclHashcat.c index 9ce612f41..f153d777b 100644 --- a/src/oclHashcat.c +++ b/src/oclHashcat.c @@ -3,6 +3,10 @@ * License.....: MIT */ +#ifdef OSX +#include +#endif + #include #include #include @@ -215,7 +219,7 @@ static uint default_benchmark_algorithms[NUM_DEFAULT_BENCHMARK_ALGORITHMS] = 1000, 1100, 2100, - 12800, + 12800, 1500, 12400, 500, @@ -385,7 +389,11 @@ const char *USAGE_BIG[] = " -c, --segment-size=NUM Size in MB to cache from the wordfile", " --bitmap-min=NUM Minimum number of bits allowed for bitmaps", " --bitmap-max=NUM Maximum number of bits allowed for bitmaps", + #ifndef OSX " --cpu-affinity=STR Locks to CPU devices, separate with comma", + #else + " --cpu-affinity=STR Locks to CPU devices, separate with comma (disabled on OSX)", + #endif " --opencl-platforms=STR OpenCL platforms to use, separate with comma", " -d, --opencl-devices=STR OpenCL devices to use, separate with comma", " --opencl-device-types=STR OpenCL device-types to use, separate with comma, see references below", @@ -393,10 +401,14 @@ const char *USAGE_BIG[] = " -w, --workload-profile=NUM Enable a specific workload profile, see references below", " -n, --kernel-accel=NUM Workload tuning: 1, 8, 40, 80, 160", " -u, --kernel-loops=NUM Workload fine-tuning: 8 - 1024", + #ifdef HAVE_HWMON " --gpu-temp-disable Disable temperature and fanspeed readings and triggers", " --gpu-temp-abort=NUM Abort session if GPU temperature reaches NUM degrees celsius", " --gpu-temp-retain=NUM Try to retain GPU temperature at NUM degrees celsius (AMD only)", + #ifdef HAVE_ADL " --powertune-enable Enable automatic power tuning option (AMD OverDrive 6 only)", + #endif + #endif " --scrypt-tmto=NUM Manually override automatically calculated TMTO value for scrypt", "", "* Distributed:", @@ -843,6 +855,7 @@ void status_display_automat () * temperature */ + #ifdef HAVE_HWMON if (data.gpu_temp_disable == 0) { fprintf (out, "TEMP\t"); @@ -862,6 +875,7 @@ void status_display_automat () hc_thread_mutex_unlock (mux_adl); } + #endif // HAVE_HWMON #ifdef _WIN fputc ('\r', out); @@ -1507,6 +1521,7 @@ void status_display () } } + #ifdef HAVE_HWMON if (data.gpu_temp_disable == 0) { hc_thread_mutex_lock (mux_adl); @@ -1557,6 +1572,7 @@ void status_display () hc_thread_mutex_unlock (mux_adl); } + #endif // HAVE_HWMON } static void status_benchmark () @@ -3366,13 +3382,15 @@ static void *thread_monitor (void *p) uint runtime_check = 0; uint remove_check = 0; uint status_check = 0; - uint hwmon_check = 0; uint restore_check = 0; uint restore_left = data.restore_timer; uint remove_left = data.remove_timer; uint status_left = data.status_timer; + #ifdef HAVE_HWMON + uint hwmon_check = 0; + // these variables are mainly used for fan control (AMD only) int *fan_speed_chgd = (int *) mycalloc (data.devices_cnt, sizeof (int)); @@ -3382,12 +3400,15 @@ static void *thread_monitor (void *p) int *temp_diff_old = (int *) mycalloc (data.devices_cnt, sizeof (int)); int *temp_diff_sum = (int *) mycalloc (data.devices_cnt, sizeof (int)); + #ifdef HAVE_ADL int temp_threshold = 1; // degrees celcius int fan_speed_min = 15; // in percentage int fan_speed_max = 100; + #endif // HAVE_ADL time_t last_temp_check_time; + #endif // HAVE_HWMON uint sleep_time = 1; @@ -3411,15 +3432,20 @@ static void *thread_monitor (void *p) status_check = 1; } + #ifdef HAVE_HWMON if (data.gpu_temp_disable == 0) { time (&last_temp_check_time); hwmon_check = 1; } + #endif - if ((runtime_check == 0) && (remove_check == 0) && (status_check == 0) && (hwmon_check == 0) && (restore_check == 0)) + if ((runtime_check == 0) && (remove_check == 0) && (status_check == 0) && (restore_check == 0)) { + #ifdef HAVE_HWMON + if (hwmon_check == 0) + #endif return (p); } @@ -3429,6 +3455,7 @@ static void *thread_monitor (void *p) if (data.devices_status != STATUS_RUNNING) continue; + #ifdef HAVE_HWMON if (hwmon_check == 1) { hc_thread_mutex_lock (mux_adl); @@ -3460,6 +3487,7 @@ static void *thread_monitor (void *p) break; } + #ifdef HAVE_ADL const int gpu_temp_retain = data.gpu_temp_retain; if (gpu_temp_retain) // VENDOR_ID_AMD implied @@ -3514,10 +3542,12 @@ static void *thread_monitor (void *p) } } } + #endif // HAVE_ADL } hc_thread_mutex_unlock (mux_adl); } + #endif // HAVE_HWMON if (restore_check == 1) { @@ -3590,10 +3620,12 @@ static void *thread_monitor (void *p) } } + #ifdef HAVE_HWMON myfree (fan_speed_chgd); myfree (temp_diff_old); myfree (temp_diff_sum); + #endif p = NULL; @@ -4948,10 +4980,12 @@ static uint hlfmt_detect (FILE *fp, uint max_check) // wrapper around mymalloc for ADL +#if defined(HAVE_HWMON) && defined(HAVE_ADL) void *__stdcall ADL_Main_Memory_Alloc (const int iSize) { return mymalloc (iSize); } +#endif static uint generate_bitmaps (const uint digests_cnt, const uint dgst_size, const uint dgst_shifts, char *digests_buf_ptr, const uint bitmap_mask, const uint bitmap_size, uint *bitmap_a, uint *bitmap_b, uint *bitmap_c, uint *bitmap_d, const u64 collisions_max) { @@ -5109,7 +5143,9 @@ int main (int argc, char **argv) uint increment = INCREMENT; uint increment_min = INCREMENT_MIN; uint increment_max = INCREMENT_MAX; + #ifndef OSX char *cpu_affinity = NULL; + #endif char *opencl_devices = NULL; char *opencl_platforms = NULL; char *opencl_device_types = NULL; @@ -5118,10 +5154,14 @@ int main (int argc, char **argv) uint workload_profile = WORKLOAD_PROFILE; uint kernel_accel = KERNEL_ACCEL; uint kernel_loops = KERNEL_LOOPS; + #ifdef HAVE_HWMON uint gpu_temp_disable = GPU_TEMP_DISABLE; uint gpu_temp_abort = GPU_TEMP_ABORT; uint gpu_temp_retain = GPU_TEMP_RETAIN; + #ifdef HAVE_ADL uint powertune_enable = POWERTUNE_ENABLE; + #endif + #endif uint logfile_disable = LOGFILE_DISABLE; uint segment_size = SEGMENT_SIZE; uint scrypt_tmto = SCRYPT_TMTO; @@ -5267,7 +5307,9 @@ int main (int argc, char **argv) {"markov-classic", no_argument, 0, IDX_MARKOV_CLASSIC}, {"markov-threshold", required_argument, 0, IDX_MARKOV_THRESHOLD}, {"markov-hcstat", required_argument, 0, IDX_MARKOV_HCSTAT}, + #ifndef OSX {"cpu-affinity", required_argument, 0, IDX_CPU_AFFINITY}, + #endif {"opencl-devices", required_argument, 0, IDX_OPENCL_DEVICES}, {"opencl-platforms", required_argument, 0, IDX_OPENCL_PLATFORMS}, {"opencl-device-types", required_argument, 0, IDX_OPENCL_DEVICE_TYPES}, @@ -5275,10 +5317,14 @@ int main (int argc, char **argv) {"workload-profile", required_argument, 0, IDX_WORKLOAD_PROFILE}, {"kernel-accel", required_argument, 0, IDX_KERNEL_ACCEL}, {"kernel-loops", required_argument, 0, IDX_KERNEL_LOOPS}, + #ifdef HAVE_HWMON {"gpu-temp-disable", no_argument, 0, IDX_GPU_TEMP_DISABLE}, {"gpu-temp-abort", required_argument, 0, IDX_GPU_TEMP_ABORT}, {"gpu-temp-retain", required_argument, 0, IDX_GPU_TEMP_RETAIN}, + #ifdef HAVE_ADL {"powertune-enable", no_argument, 0, IDX_POWERTUNE_ENABLE}, + #endif + #endif // HAVE_HWMON {"logfile-disable", no_argument, 0, IDX_LOGFILE_DISABLE}, {"truecrypt-keyfiles", required_argument, 0, IDX_TRUECRYPT_KEYFILES}, {"segment-size", required_argument, 0, IDX_SEGMENT_SIZE}, @@ -5303,12 +5349,11 @@ int main (int argc, char **argv) char **rp_files = (char **) mycalloc (argc, sizeof (char *)); - int option_index; - int c; + int option_index = 0; + int c = -1; optind = 1; optopt = 0; - option_index = 0; while (((c = getopt_long (argc, argv, short_options, long_options, &option_index)) != -1) && optopt == 0) { @@ -5499,8 +5544,10 @@ int main (int argc, char **argv) uint remove_timer_chgd = 0; uint increment_min_chgd = 0; uint increment_max_chgd = 0; - uint gpu_temp_abort_chgd = 0; + #if defined(HAVE_HWMON) && defined(HAVE_ADL) uint gpu_temp_retain_chgd = 0; + uint gpu_temp_abort_chgd = 0; + #endif optind = 1; optopt = 0; @@ -5571,7 +5618,9 @@ int main (int argc, char **argv) case IDX_HEX_CHARSET: hex_charset = 1; break; case IDX_HEX_SALT: hex_salt = 1; break; case IDX_HEX_WORDLIST: hex_wordlist = 1; break; + #ifndef OSX case IDX_CPU_AFFINITY: cpu_affinity = optarg; break; + #endif case IDX_OPENCL_DEVICES: opencl_devices = optarg; break; case IDX_OPENCL_PLATFORMS: opencl_platforms = optarg; break; case IDX_OPENCL_DEVICE_TYPES: @@ -5583,12 +5632,22 @@ int main (int argc, char **argv) kernel_accel_chgd = 1; break; case IDX_KERNEL_LOOPS: kernel_loops = atoi (optarg); kernel_loops_chgd = 1; break; + #ifdef HAVE_HWMON case IDX_GPU_TEMP_DISABLE: gpu_temp_disable = 1; break; - case IDX_GPU_TEMP_ABORT: gpu_temp_abort_chgd = 1; - gpu_temp_abort = atoi (optarg); break; - case IDX_GPU_TEMP_RETAIN: gpu_temp_retain_chgd = 1; - gpu_temp_retain = atoi (optarg); break; + case IDX_GPU_TEMP_ABORT: gpu_temp_abort = atoi (optarg); + #ifdef HAVE_ADL + gpu_temp_abort_chgd = 1; + #endif + break; + case IDX_GPU_TEMP_RETAIN: gpu_temp_retain = atoi (optarg); + #ifdef HAVE_ADL + gpu_temp_retain_chgd = 1; + #endif + break; + #ifdef HAVE_ADL case IDX_POWERTUNE_ENABLE: powertune_enable = 1; break; + #endif + #endif // HAVE_HWMON case IDX_LOGFILE_DISABLE: logfile_disable = 1; break; case IDX_TRUECRYPT_KEYFILES: truecrypt_keyfiles = optarg; break; case IDX_SEGMENT_SIZE: segment_size = atoi (optarg); break; @@ -6299,7 +6358,9 @@ int main (int argc, char **argv) data.benchmark = benchmark; data.skip = skip; data.limit = limit; + #if defined(HAVE_HWMON) && defined(HAVE_ADL) data.powertune_enable = powertune_enable; + #endif data.logfile_disable = logfile_disable; data.truecrypt_keyfiles = truecrypt_keyfiles; data.scrypt_tmto = scrypt_tmto; @@ -6308,10 +6369,12 @@ int main (int argc, char **argv) * cpu affinity */ + #ifndef OSX if (cpu_affinity) { set_cpu_affinity (cpu_affinity); } + #endif if (rp_gen_seed_chgd == 0) { @@ -6375,9 +6438,11 @@ int main (int argc, char **argv) logfile_top_uint (force); logfile_top_uint (kernel_accel); logfile_top_uint (kernel_loops); + #ifdef HAVE_HWMON logfile_top_uint (gpu_temp_abort); logfile_top_uint (gpu_temp_disable); logfile_top_uint (gpu_temp_retain); + #endif logfile_top_uint (hash_mode); logfile_top_uint (hex_charset); logfile_top_uint (hex_salt); @@ -6396,7 +6461,9 @@ int main (int argc, char **argv) logfile_top_uint (outfile_check_timer); logfile_top_uint (outfile_format); logfile_top_uint (potfile_disable); + #if defined(HAVE_HWMON) && defined(HAVE_ADL) logfile_top_uint (powertune_enable); + #endif logfile_top_uint (scrypt_tmto); logfile_top_uint (quiet); logfile_top_uint (remove); @@ -6422,7 +6489,9 @@ int main (int argc, char **argv) logfile_top_uint64 (limit); logfile_top_uint64 (skip); logfile_top_char (separator); + #ifndef OSX logfile_top_string (cpu_affinity); + #endif logfile_top_string (custom_charset_1); logfile_top_string (custom_charset_2); logfile_top_string (custom_charset_3); @@ -12421,6 +12490,8 @@ int main (int argc, char **argv) hc_clGetPlatformInfo (platform, CL_PLATFORM_VENDOR, sizeof (platform_vendor), platform_vendor, NULL); + #ifdef HAVE_HWMON + #if defined(HAVE_NVML) || defined(HAVE_NVAPI) if (strcmp (platform_vendor, CL_VENDOR_NV) == 0) { // make sure that we do not directly control the fan for NVidia @@ -12429,6 +12500,8 @@ int main (int argc, char **argv) data.gpu_temp_retain = gpu_temp_retain; } + #endif // HAVE_NVML || HAVE_NVAPI + #endif } /** @@ -12789,11 +12862,15 @@ int main (int argc, char **argv) * OpenCL devices: allocate buffer for device specific information */ + #ifdef HAVE_HWMON int *temp_retain_fanspeed_value = (int *) mycalloc (devices_cnt, sizeof (int)); + #ifdef HAVE_ADL ADLOD6MemClockState *od_clock_mem_status = (ADLOD6MemClockState *) mycalloc (devices_cnt, sizeof (ADLOD6MemClockState)); int *od_power_control_status = (int *) mycalloc (devices_cnt, sizeof (int)); + #endif // ADL + #endif /** * enable custom signal handler(s) @@ -12812,6 +12889,7 @@ int main (int argc, char **argv) * User-defined GPU temp handling */ + #ifdef HAVE_HWMON if (gpu_temp_disable == 1) { gpu_temp_abort = 0; @@ -12831,6 +12909,7 @@ int main (int argc, char **argv) data.gpu_temp_disable = gpu_temp_disable; data.gpu_temp_abort = gpu_temp_abort; data.gpu_temp_retain = gpu_temp_retain; + #endif /** * inform the user @@ -12863,6 +12942,7 @@ int main (int argc, char **argv) * Watchdog and Temperature balance */ + #ifdef HAVE_HWMON if (gpu_temp_abort == 0) { log_info ("Watchdog: Temperature abort trigger disabled"); @@ -12880,6 +12960,7 @@ int main (int argc, char **argv) { log_info ("Watchdog: Temperature retain trigger set to %uc", gpu_temp_retain); } + #endif } if (data.quiet == 0) log_info (""); @@ -12888,12 +12969,18 @@ int main (int argc, char **argv) * HM devices: init */ + #ifdef HAVE_HWMON + #if defined(HAVE_NVML) || defined(HAVE_NVAPI) hm_attrs_t hm_adapters_nv[DEVICES_MAX] = { { { 0 }, 0, 0 } }; + #endif + + #ifdef HAVE_ADL hm_attrs_t hm_adapters_amd[DEVICES_MAX] = { { { 0 }, 0, 0 } }; + #endif if (gpu_temp_disable == 0) { - #ifdef WIN + #if defined(WIN) && defined(HAVE_NVAPI) if (NvAPI_Initialize () == NVAPI_OK) { HM_ADAPTER_NV nvGPUHandle[DEVICES_MAX]; @@ -12914,9 +13001,9 @@ int main (int argc, char **argv) if (NvAPI_GPU_GetTachReading (hm_adapters_nv[i].adapter_index.nv, &speed) != NVAPI_NOT_SUPPORTED) hm_adapters_nv[i].fan_supported = 1; } } - #endif + #endif // WIN && HAVE_NVAPI - #ifdef LINUX + #if defined(LINUX) && defined(HAVE_NVML) HM_LIB hm_dll_nv = hm_init (VENDOR_ID_NV); data.hm_dll_nv = hm_dll_nv; @@ -12944,8 +13031,9 @@ int main (int argc, char **argv) } } } - #endif + #endif // LINUX && HAVE_NVML + #ifdef HAVE_ADL HM_LIB hm_dll_amd = hm_init (VENDOR_ID_AMD); data.hm_dll_amd = hm_dll_amd; @@ -12990,6 +13078,7 @@ int main (int argc, char **argv) myfree (lpAdapterInfo); } } + #endif // HAVE_ADL } /** @@ -13008,15 +13097,19 @@ int main (int argc, char **argv) const uint platform_devices_id = device_param->platform_devices_id; + #if defined(HAVE_NVML) || defined(HAVE_NVAPI) if (device_param->vendor_id == VENDOR_ID_NV) { memcpy (&data.hm_device[device_id], &hm_adapters_nv[platform_devices_id], sizeof (hm_attrs_t)); } + #endif + #ifdef HAVE_ADL if (device_param->vendor_id == VENDOR_ID_AMD) { memcpy (&data.hm_device[device_id], &hm_adapters_amd[platform_devices_id], sizeof (hm_attrs_t)); } + #endif } } @@ -13028,6 +13121,7 @@ int main (int argc, char **argv) * Driver / ADL bug? */ + #ifdef HAVE_ADL if (powertune_enable == 1) { hc_thread_mutex_lock (mux_adl); @@ -13077,6 +13171,8 @@ int main (int argc, char **argv) hc_thread_mutex_unlock (mux_adl); } + #endif // HAVE_ADK + #endif // HAVE_HWMON uint kernel_blocks_all = 0; @@ -14092,6 +14188,7 @@ int main (int argc, char **argv) * Store initial fanspeed if gpu_temp_retain is enabled */ + #if defined(HAVE_HWMON) && defined(HAVE_ADL) int gpu_temp_retain_set = 0; if (gpu_temp_disable == 0) @@ -14262,6 +14359,7 @@ int main (int argc, char **argv) hc_thread_mutex_unlock (mux_adl); } + #endif // HAVE_HWMON && HAVE_ADL } data.kernel_blocks_all = kernel_blocks_all; @@ -16365,8 +16463,10 @@ int main (int argc, char **argv) // reset default fan speed + #ifdef HAVE_HWMON if (gpu_temp_disable == 0) { + #ifdef HAVE_ADL if (gpu_temp_retain != 0) // VENDOR_ID_AMD is implied here { hc_thread_mutex_lock (mux_adl); @@ -16391,10 +16491,12 @@ int main (int argc, char **argv) hc_thread_mutex_unlock (mux_adl); } + #endif // HAVE_ADL } // reset power tuning + #ifdef HAVE_ADL if (powertune_enable == 1) // VENDOR_ID_AMD is implied here { hc_thread_mutex_lock (mux_adl); @@ -16454,10 +16556,11 @@ int main (int argc, char **argv) hc_thread_mutex_unlock (mux_adl); } + #endif // HAVE_ADL if (gpu_temp_disable == 0) { - #ifdef LINUX + #if defined(LINUX) && defined(HAVE_NVML) if (data.hm_dll_nv) { hc_NVML_nvmlShutdown (data.hm_dll_nv); @@ -16466,17 +16569,20 @@ int main (int argc, char **argv) } #endif - #ifdef WIN + #if defined(WIN) && (HAVE_NVAPI) NvAPI_Unload (); #endif + #ifdef HAVE_ADL if (data.hm_dll_amd) { hc_ADL_Main_Control_Destroy (data.hm_dll_amd); hm_close (data.hm_dll_amd); } + #endif } + #endif // HAVE_HWMON // free memory @@ -16515,9 +16621,13 @@ int main (int argc, char **argv) local_free (bitmap_s2_c); local_free (bitmap_s2_d); + #ifdef HAVE_HWMON local_free (temp_retain_fanspeed_value); + #ifdef HAVE_ADL local_free (od_clock_mem_status); local_free (od_power_control_status); + #endif // ADL + #endif global_free (devices_param); diff --git a/src/shared.c b/src/shared.c index fd8894959..f280dd4e2 100644 --- a/src/shared.c +++ b/src/shared.c @@ -1,8 +1,14 @@ /** - * Author......: Jens Steube + * Authors.....: Jens Steube + * Gabriele Gristina + * * License.....: MIT */ +#ifdef OSX +#include +#endif + #include #include @@ -2634,7 +2640,8 @@ void fsync (int fd) * thermal */ -#ifdef _WIN +#ifdef HAVE_HWMON +#if defined(_WIN) && defined(HAVE_NVAPI) int hm_get_adapter_index_nv (HM_ADAPTER_NV nvGPUHandle[DEVICES_MAX]) { NvU32 pGpuCount; @@ -2650,9 +2657,9 @@ int hm_get_adapter_index_nv (HM_ADAPTER_NV nvGPUHandle[DEVICES_MAX]) return (pGpuCount); } -#endif +#endif // _WIN && HAVE_NVAPI -#ifdef LINUX +#if defined(LINUX) && defined(HAVE_NVML) int hm_get_adapter_index_nv (HM_ADAPTER_NV nvGPUHandle[DEVICES_MAX]) { int pGpuCount = 0; @@ -2677,8 +2684,9 @@ int hm_get_adapter_index_nv (HM_ADAPTER_NV nvGPUHandle[DEVICES_MAX]) return (pGpuCount); } -#endif +#endif // LINUX && HAVE_NVML +#if defined(HAVE_ADL) || defined(HAVE_NVML) void hm_close (HM_LIB hm_dll) { #ifdef _POSIX @@ -2694,6 +2702,7 @@ HM_LIB hm_init (const cl_uint vendor_id) { HM_LIB hm_dll = NULL; + #ifdef HAVE_ADL if (vendor_id == VENDOR_ID_AMD) { #ifdef _POSIX @@ -2709,8 +2718,9 @@ HM_LIB hm_init (const cl_uint vendor_id) #endif } + #endif - #ifdef LINUX + #if defined(LINUX) && defined(HAVE_NVML) if (vendor_id == VENDOR_ID_NV) { hm_dll = dlopen ("libnvidia-ml.so", RTLD_LAZY | RTLD_GLOBAL); @@ -2719,7 +2729,9 @@ HM_LIB hm_init (const cl_uint vendor_id) return hm_dll; } +#endif // HAVE_ADL || HAVE_NVML +#ifdef HAVE_ADL int get_adapters_num_amd (HM_LIB hm_dll_amd, int *iNumberAdapters) { if (hc_ADL_Adapter_NumberOfAdapters_Get (hm_dll_amd, iNumberAdapters) != ADL_OK) return -1; @@ -3058,11 +3070,13 @@ int hm_get_adapter_index_amd (hm_attrs_t *hm_device, u32 *valid_adl_device_list, return num_adl_adapters; } +#endif // HAVE_ADL int hm_get_temperature_with_device_id (const uint device_id) { if ((data.devices_param[device_id].device_type & CL_DEVICE_TYPE_GPU) == 0) return -1; + #ifdef HAVE_ADL if (data.devices_param[device_id].vendor_id == VENDOR_ID_AMD) { if (data.hm_dll_amd) @@ -3087,9 +3101,12 @@ int hm_get_temperature_with_device_id (const uint device_id) } } } - else if (data.devices_param[device_id].vendor_id == VENDOR_ID_NV) + #endif + + #if defined(HAVE_NVML) || defined(HAVE_NVAPI) + if (data.devices_param[device_id].vendor_id == VENDOR_ID_NV) { - #ifdef LINUX + #if defined(LINUX) && defined(HAVE_NVML) int temperature = 0; hc_NVML_nvmlDeviceGetTemperature (data.hm_dll_nv, data.hm_device[device_id].adapter_index.nv, NVML_TEMPERATURE_GPU, (unsigned int *) &temperature); @@ -3097,7 +3114,7 @@ int hm_get_temperature_with_device_id (const uint device_id) return temperature; #endif - #ifdef WIN + #if defined(WIN) && defined(HAVE_NVAPI) NV_GPU_THERMAL_SETTINGS pThermalSettings; pThermalSettings.version = NV_GPU_THERMAL_SETTINGS_VER; @@ -3108,8 +3125,9 @@ int hm_get_temperature_with_device_id (const uint device_id) if (hc_NvAPI_GPU_GetThermalSettings (data.hm_device[device_id].adapter_index.nv, 0, &pThermalSettings) != NVAPI_OK) return -1; return pThermalSettings.sensor[0].currentTemp; - #endif + #endif // WIN && HAVE_NVAPI } + #endif // HAVE_NVML || HAVE_NVAPI return -1; } @@ -3121,6 +3139,7 @@ int hm_get_fanspeed_with_device_id (const uint device_id) if (data.hm_device[device_id].fan_supported == 1) { + #ifdef HAVE_ADL if (data.devices_param[device_id].vendor_id == VENDOR_ID_AMD) { if (data.hm_dll_amd) @@ -3151,9 +3170,12 @@ int hm_get_fanspeed_with_device_id (const uint device_id) } } } - else if (data.devices_param[device_id].vendor_id == VENDOR_ID_NV) + #endif // HAVE_ADL + + #if defined(HAVE_NVML) || defined(HAVE_NVAPI) + if (data.devices_param[device_id].vendor_id == VENDOR_ID_NV) { - #ifdef LINUX + #if defined(LINUX) && defined(HAVE_NVML) int speed = 0; hc_NVML_nvmlDeviceGetFanSpeed (data.hm_dll_nv, 1, data.hm_device[device_id].adapter_index.nv, (unsigned int *) &speed); @@ -3161,7 +3183,7 @@ int hm_get_fanspeed_with_device_id (const uint device_id) return speed; #endif - #ifdef WIN + #if defined(WIN) && defined(HAVE_NVAPI) NvU32 speed = 0; hc_NvAPI_GPU_GetTachReading (data.hm_device[device_id].adapter_index.nv, &speed); @@ -3169,6 +3191,7 @@ int hm_get_fanspeed_with_device_id (const uint device_id) return speed; #endif } + #endif // HAVE_NVML || HAVE_NVAPI } return -1; @@ -3178,6 +3201,7 @@ int hm_get_utilization_with_device_id (const uint device_id) { if ((data.devices_param[device_id].device_type & CL_DEVICE_TYPE_GPU) == 0) return -1; + #ifdef HAVE_ADL if (data.devices_param[device_id].vendor_id == VENDOR_ID_AMD) { if (data.hm_dll_amd) @@ -3191,9 +3215,12 @@ int hm_get_utilization_with_device_id (const uint device_id) return PMActivity.iActivityPercent; } } - else if (data.devices_param[device_id].vendor_id == VENDOR_ID_NV) + #endif // HAVE_ADL + + #if defined(HAVE_NVML) || defined(HAVE_NVAPI) + if (data.devices_param[device_id].vendor_id == VENDOR_ID_NV) { - #ifdef LINUX + #if defined(LINUX) && defined(HAVE_NVML) nvmlUtilization_t utilization; hc_NVML_nvmlDeviceGetUtilizationRates (data.hm_dll_nv, data.hm_device[device_id].adapter_index.nv, &utilization); @@ -3201,7 +3228,7 @@ int hm_get_utilization_with_device_id (const uint device_id) return utilization.gpu; #endif - #ifdef WIN + #if defined(WIN) && defined(HAVE_NVAPI) NV_GPU_DYNAMIC_PSTATES_INFO_EX pDynamicPstatesInfoEx; pDynamicPstatesInfoEx.version = NV_GPU_DYNAMIC_PSTATES_INFO_EX_VER; @@ -3211,10 +3238,12 @@ int hm_get_utilization_with_device_id (const uint device_id) return pDynamicPstatesInfoEx.utilization[0].percentage; #endif } + #endif // HAVE_NVML || HAVE_NVAPI return -1; } +#ifdef HAVE_ADL int hm_set_fanspeed_with_device_id_amd (const uint device_id, const int fanspeed) { if (data.hm_device[device_id].fan_supported == 1) @@ -3254,6 +3283,7 @@ int hm_set_fanspeed_with_device_id_amd (const uint device_id, const int fanspeed return -1; } +#endif // helper function for status display @@ -3270,6 +3300,7 @@ void hm_device_val_to_str (char *target_buf, int max_buf_size, char *suffix, int snprintf (target_buf, max_buf_size, "%2d%s", value, suffix); } } +#endif // HAVE_HWMON /** * maskprocessor @@ -4105,12 +4136,25 @@ char *get_exec_path () const int len = readlink (tmp, exec_path, exec_path_len - 1); - #endif - - #ifdef WIN + #elif WIN const int len = GetModuleFileName (NULL, exec_path, exec_path_len - 1); + #elif OSX + + uint size = exec_path_len; + + if (_NSGetExecutablePath (exec_path, &size) != 0) + { + log_error("! executable path buffer too small\n"); + + exit (-1); + } + + const int len = strlen (exec_path); + + #else + #error Your Operating System is not supported or detected #endif exec_path[len] = 0; @@ -4204,11 +4248,8 @@ void set_cpu_affinity (char *cpu_affinity) { #ifdef WIN DWORD_PTR aff_mask = 0; - #endif - - #ifdef LINUX + #elif LINUX cpu_set_t cpuset; - CPU_ZERO (&cpuset); #endif @@ -4226,9 +4267,7 @@ void set_cpu_affinity (char *cpu_affinity) { #ifdef WIN aff_mask = 0; - #endif - - #ifdef LINUX + #elif LINUX CPU_ZERO (&cpuset); #endif @@ -4244,9 +4283,7 @@ void set_cpu_affinity (char *cpu_affinity) #ifdef WIN aff_mask |= 1 << (cpu_id - 1); - #endif - - #ifdef LINUX + #elif LINUX CPU_SET ((cpu_id - 1), &cpuset); #endif @@ -4258,9 +4295,7 @@ void set_cpu_affinity (char *cpu_affinity) #ifdef WIN SetProcessAffinityMask (GetCurrentProcess (), aff_mask); SetThreadAffinityMask (GetCurrentThread (), aff_mask); - #endif - - #ifdef LINUX + #elif LINUX pthread_t thread = pthread_self (); pthread_setaffinity_np (thread, sizeof (cpu_set_t), &cpuset); #endif @@ -4472,7 +4507,7 @@ int sort_by_dictstat (const void *s1, const void *s2) dictstat_t *d1 = (dictstat_t *) s1; dictstat_t *d2 = (dictstat_t *) s2; - #ifdef _POSIX + #ifdef LINUX d2->stat.st_atim = d1->stat.st_atim; #else d2->stat.st_atime = d1->stat.st_atime; @@ -4835,7 +4870,7 @@ void format_output (FILE *out_fp, char *out_buf, unsigned char *plain_ptr, const #ifdef _POSIX #ifdef __x86_64__ - fprintf (out_fp, "%lu", crackpos); + fprintf (out_fp, "%lu", (unsigned long) crackpos); #else fprintf (out_fp, "%llu", crackpos); #endif @@ -5405,14 +5440,31 @@ char **scan_directory (const char *path) int num_files = 0; - DIR *d; + DIR *d = NULL; if ((d = opendir (tmp_path)) != NULL) { + #ifdef OSX + struct dirent e; + + for (;;) { + memset (&e, 0, sizeof (e)); + struct dirent *de = NULL; + + if (readdir_r (d, &e, &de) != 0) + { + log_error ("ERROR: readdir_r() failed"); + + break; + } + + if (de == NULL) break; + #else struct dirent *de; while ((de = readdir (d)) != NULL) { + #endif if ((strcmp (de->d_name, ".") == 0) || (strcmp (de->d_name, "..") == 0)) continue; int path_size = strlen (tmp_path) + 1 + strlen (de->d_name);