1
0
mirror of https://github.com/hashcat/hashcat.git synced 2024-12-04 22:08:40 +00:00
hashcat/src/Makefile
anthraxx a4e1692647 fallback for Makefile version if its not a git checkout (tarball)
This makes use of git export-subst to insert the current ref names.
If git describe fails because because an extracted tarball is used
to build from source then the fallback will get called and the last
part of the ref names will be used for the version variable.

if it is a git checkout and HEAD is the current tag:
- v3.00-beta

If it is a git checkout and HEAD is ahead of the latest tag:
- v3.00-beta-36-g24a6095

If it is a tarball from a tag created via 'git archive HEAD --format=tar':
- v3.00-beta

If it is a tarball from the master created via 'git archive HEAD --format=tar':
- master

NOTE: If a tarball is manually created (without git archive) then the
version will "$Format:%D$", however before this commit it would not be
possible to build a release tarball that is not a git checkout (because
git describe would fail)
2016-05-18 19:20:42 +02:00

332 lines
9.1 KiB
Makefile

##
## Authors.....: Jens Steube <jens.steube@gmail.com>
## Gabriele Gristina <matrix@hashcat.net>
## magnum <john.magnum@hushmail.com>
##
## License.....: MIT
##
PROG_NAME := hashcat
##
## 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
ifneq ($(findstring clean,$(MAKECMDGOALS)),)
MAKEFLAGS += -j 1
endif
##
## Installation paths (Linux only)
##
PREFIX ?= /usr/local
INSTALL_FOLDER ?= $(PREFIX)/bin
SHARED_FOLDER ?= $(PREFIX)/share/$(PROG_NAME)
DOCUMENT_FOLDER ?= $(PREFIX)/share/doc/$(PROG_NAME)
##
## Dependencies
## You may ignore them if you have your own headers somewhere
##
OPENCL_HEADERS_KHRONOS := deps/OpenCL-Headers
##
WITH_ADL := 1
WITH_NVML := 1
WITH_NVAPI := 1
##
## Native compiler paths
##
CP := cp
RM := rm
INSTALL := install
CC_NATIVE := gcc
##
## Cross compiler paths
##
CC_LINUX_32 := gcc
CC_LINUX_64 := gcc
CC_WIN_32 := i686-w64-mingw32-gcc
CC_WIN_64 := x86_64-w64-mingw32-gcc
##
## Misc stuff
##
COMPTIME := $(shell date +%s)
VERSION_TAG := $(shell git describe --tags --dirty=+ || echo '$Format:%D$'|sed -r 's/.* ([^ ]+$)/\1/')
##
## Compiler flags
##
CFLAGS := -pipe -W -Wall -std=c99 -Iinclude/ -I$(OPENCL_HEADERS_KHRONOS)/
ifndef DEBUG
CFLAGS += -O2
else
CFLAGS += -DDEBUG -g -ggdb
ifeq ($(DEBUG),2)
CFLAGS += -fsanitize=address -fno-omit-frame-pointer
endif
endif
##
## Native compilation target
##
BINARY_NATIVE := $(PROG_NAME)
ifeq ($(UNAME),Darwin)
export MACOSX_DEPLOYMENT_TARGET=10.9
BINARY_NATIVE := $(PROG_NAME).app
CFLAGS_NATIVE := -D_POSIX -DOSX
CFLAGS_NATIVE += $(CFLAGS)
LFLAGS_NATIVE := -lpthread
WITH_ADL := 0
WITH_NVML := 0
endif # darwin
ifeq ($(UNAME),Linux)
CFLAGS_NATIVE := -D_POSIX -DLINUX
ifndef DEBUG
CFLAGS_NATIVE += -s
endif
CFLAGS_NATIVE += $(CFLAGS)
LFLAGS_NATIVE := -lpthread -ldl
ifneq (,$(filter 1,$(WITH_ADL) $(WITH_NVML)))
CFLAGS_NATIVE += -DHAVE_HWMON
ifeq ($(WITH_ADL),1)
CFLAGS_NATIVE += -DHAVE_ADL
endif
ifeq ($(WITH_NVML),1)
CFLAGS_NATIVE += -DHAVE_NVML
endif
endif
endif # linux
##
## Cross compilation target
##
CFLAGS_CROSS_LINUX := -D_POSIX -DLINUX
ifndef DEBUG
CFLAGS_CROSS_LINUX += -s
endif
CFLAGS_CROSS_LINUX += $(CFLAGS)
CFLAGS_CROSS_LINUX +=
ifneq (,$(filter 1,$(WITH_ADL) $(WITH_NVML)))
CFLAGS_CROSS_LINUX += -DHAVE_HWMON
ifeq ($(WITH_ADL),1)
CFLAGS_CROSS_LINUX += -DHAVE_ADL
endif
ifeq ($(WITH_NVML),1)
CFLAGS_CROSS_LINUX += -DHAVE_NVML
endif
endif
CFLAGS_CROSS_WIN := -D_WIN -DWIN -D__MSVCRT__ -D__USE_MINGW_ANSI_STDIO=1
ifndef DEBUG
CFLAGS_CROSS_WIN += -s
endif
CFLAGS_CROSS_WIN += $(filter-out -fsanitize=address,$(CFLAGS))
ifneq (,$(filter 1,$(WITH_ADL) $(WITH_NVAPI)))
CFLAGS_CROSS_WIN += -DHAVE_HWMON
ifeq ($(WITH_ADL),1)
CFLAGS_CROSS_WIN += -DHAVE_ADL
endif
ifeq ($(WITH_NVAPI),1)
CFLAGS_CROSS_WIN += -DHAVE_NVAPI
endif
endif
CFLAGS_CROSS_32 := -m32
CFLAGS_CROSS_64 := -m64
LFLAGS_CROSS_LINUX := -lpthread -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,$(WITH_ADL) $(WITH_NVML)))
ifeq ($(WITH_ADL),1)
NATIVE_OBJS += obj/ext_ADL.NATIVE.o
endif
ifeq ($(WITH_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 ($(WITH_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 ($(WITH_NVML),1)
LINUX_32_OBJS += obj/ext_nvml.LINUX.32.o
LINUX_64_OBJS += obj/ext_nvml.LINUX.64.o
endif
ifeq ($(WITH_NVAPI),1)
WIN_32_OBJS += obj/ext_nvapi.WIN.32.o
WIN_64_OBJS += obj/ext_nvapi.WIN.64.o
endif
##
## Targets: Global
##
native: hashcat
binaries: linux32 linux64 win32 win64
clean:
$(RM) -f obj/*.o *.bin *.exe *.app *.restore *.out *.pot *.dictstat *.log hashcat core
$(RM) -rf *.induct
$(RM) -rf *.outfiles
$(RM) -rf *.dSYM
$(RM) -rf kernels
linux32: hashcat32.bin
linux64: hashcat64.bin
win32: hashcat32.exe
win64: hashcat64.exe
##
## Targets: Linux install
## How to make /usr/bin/install doing recursive??
##
install: native
$(INSTALL) -m 755 -d $(DOCUMENT_FOLDER)
$(CP) -a docs/* $(DOCUMENT_FOLDER)/
$(CP) -a example*.sh $(DOCUMENT_FOLDER)/
$(CP) -a example*.hash $(DOCUMENT_FOLDER)/
$(INSTALL) -m 644 example.dict $(DOCUMENT_FOLDER)/
$(INSTALL) -m 755 -d $(DOCUMENT_FOLDER)/extra
$(CP) -a extra/* $(DOCUMENT_FOLDER)/extra/
$(INSTALL) -m 755 -d $(SHARED_FOLDER)
$(INSTALL) -m 755 -d $(SHARED_FOLDER)/charsets
$(CP) -a charsets/* $(SHARED_FOLDER)/charsets/
$(INSTALL) -m 755 -d $(SHARED_FOLDER)/masks
$(CP) -a masks/* $(SHARED_FOLDER)/masks/
$(INSTALL) -m 755 -d $(SHARED_FOLDER)/include
$(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 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 644 hashcat.hctune $(SHARED_FOLDER)/
$(INSTALL) -m 755 $(BINARY_NATIVE) $(INSTALL_FOLDER)/
uninstall:
$(RM) -f $(INSTALL_FOLDER)/$(BINARY_NATIVE)
$(RM) -rf $(SHARED_FOLDER)
$(RM) -rf $(DOCUMENT_FOLDER)
##
## native compiled hashcat
##
obj/%.NATIVE.o: src/%.c
$(CC_NATIVE) $(CFLAGS_NATIVE) -c -o $@ $<
hashcat: src/hashcat.c $(NATIVE_OBJS)
$(CC_NATIVE) $(CFLAGS_NATIVE) -o $(BINARY_NATIVE) $^ $(LFLAGS_NATIVE) -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\" -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\"
##
## cross compiled hashcat for binary release version
##
obj/%.LINUX.32.o: src/%.c
$(CC_LINUX_32) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_32) -c -o $@ $<
obj/%.LINUX.64.o: src/%.c
$(CC_LINUX_64) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_64) -c -o $@ $<
obj/%.WIN.32.o: src/%.c
$(CC_WIN_32) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_32) -c -o $@ $<
obj/%.WIN.64.o: src/%.c
$(CC_WIN_64) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_64) -c -o $@ $<
hashcat32.bin: src/hashcat.c $(LINUX_32_OBJS)
$(CC_LINUX_32) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_32) -o $@ $^ $(LFLAGS_CROSS_LINUX) -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\" -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\"
hashcat64.bin: src/hashcat.c $(LINUX_64_OBJS)
$(CC_LINUX_64) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_64) -o $@ $^ $(LFLAGS_CROSS_LINUX) -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\" -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\"
hashcat32.exe: src/hashcat.c $(WIN_32_OBJS)
$(CC_WIN_32) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_32) -o $@ $^ $(LFLAGS_CROSS_WIN) -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\" -static-libgcc
hashcat64.exe: src/hashcat.c $(WIN_64_OBJS)
$(CC_WIN_64) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_64) -o $@ $^ $(LFLAGS_CROSS_WIN) -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\" -static-libgcc