139 lines
3.2 KiB
Makefile
139 lines
3.2 KiB
Makefile
|
# If Windows, then assume the compiler is `gcc` for the
|
||
|
# MinGW environment. I can't figure out how to tell if it's
|
||
|
# actually MingGW. FIXME TODO
|
||
|
ifeq ($(OS),Windows_NT)
|
||
|
CC = gcc
|
||
|
endif
|
||
|
|
||
|
# Try to figure out the default compiler. I dont know the best
|
||
|
# way to do this with `gmake`. If you have better ideas, please
|
||
|
# submit a pull request on github.
|
||
|
ifeq ($(CC),)
|
||
|
ifneq (, $(shell which clang))
|
||
|
CC = clang
|
||
|
else ifneq (, $(shell which gcc))
|
||
|
CC = gcc
|
||
|
else
|
||
|
CC = cc
|
||
|
endif
|
||
|
endif
|
||
|
|
||
|
PREFIX ?= /usr
|
||
|
BINDIR ?= $(PREFIX)/bin
|
||
|
SYS := $(shell $(CC) -dumpmachine)
|
||
|
GITVER := $(shell git describe --tags)
|
||
|
INSTALL_DATA := -pDm755
|
||
|
|
||
|
ifeq ($(GITVER),)
|
||
|
GITVER = "unknown"
|
||
|
endif
|
||
|
|
||
|
# LINUX
|
||
|
# The automated regression tests run on Linux, so this is the one
|
||
|
# environment where things likely will work -- as well as anything
|
||
|
# works on the bajillion of different Linux environments
|
||
|
ifneq (, $(findstring linux, $(SYS)))
|
||
|
ifneq (, $(findstring musl, $(SYS)))
|
||
|
LIBS =
|
||
|
else
|
||
|
LIBS = -lm -lrt -ldl -lpthread
|
||
|
endif
|
||
|
INCLUDES =
|
||
|
FLAGS2 =
|
||
|
endif
|
||
|
|
||
|
# MAC OS X
|
||
|
# I occassionally develope code on Mac OS X, but it's not part of
|
||
|
# my regularly regression-test environment. That means at any point
|
||
|
# in time, something might be minorly broken in Mac OS X.
|
||
|
ifneq (, $(findstring darwin, $(SYS)))
|
||
|
LIBS = -lm
|
||
|
INCLUDES = -I.
|
||
|
FLAGS2 =
|
||
|
INSTALL_DATA = -pm755
|
||
|
endif
|
||
|
|
||
|
# MinGW on Windows
|
||
|
# I develope on Visual Studio 2010, so that's the Windows environment
|
||
|
# that'll work. However, 'git' on Windows runs under MingGW, so one
|
||
|
# day I acccidentally typed 'make' instead of 'git, and felt compelled
|
||
|
# to then fix all the errors, so this kinda works now. It's not the
|
||
|
# intended environment, so it make break in the future.
|
||
|
ifneq (, $(findstring mingw, $(SYS)))
|
||
|
INCLUDES = -Ivs10/include
|
||
|
LIBS = -L vs10/lib -lIPHLPAPI -lWs2_32
|
||
|
#FLAGS2 = -march=i686
|
||
|
endif
|
||
|
|
||
|
# Cygwin
|
||
|
# I hate Cygwin, use Visual Studio or MingGW instead. I just put this
|
||
|
# second here for completeness, or in case I gate tired of hitting my
|
||
|
# head with a hammer and want to feel a different sort of pain.
|
||
|
ifneq (, $(findstring cygwin, $(SYS)))
|
||
|
INCLUDES = -I.
|
||
|
LIBS =
|
||
|
FLAGS2 =
|
||
|
endif
|
||
|
|
||
|
# OpenBSD
|
||
|
ifneq (, $(findstring openbsd, $(SYS)))
|
||
|
LIBS = -lm -lpthread
|
||
|
INCLUDES = -I.
|
||
|
FLAGS2 =
|
||
|
endif
|
||
|
|
||
|
# FreeBSD
|
||
|
ifneq (, $(findstring freebsd, $(SYS)))
|
||
|
LIBS = -lm -lpthread
|
||
|
INCLUDES = -I.
|
||
|
FLAGS2 =
|
||
|
endif
|
||
|
|
||
|
# NetBSD
|
||
|
ifneq (, $(findstring netbsd, $(SYS)))
|
||
|
LIBS = -lm -lpthread
|
||
|
INCLUDES = -I.
|
||
|
FLAGS2 =
|
||
|
endif
|
||
|
|
||
|
|
||
|
DEFINES =
|
||
|
CFLAGS = -g -ggdb $(FLAGS2) $(INCLUDES) $(DEFINES) -Wall -O2
|
||
|
.SUFFIXES: .c .cpp
|
||
|
|
||
|
all: bin/masscan
|
||
|
|
||
|
|
||
|
tmp/main-conf.o: src/main-conf.c src/*.h
|
||
|
$(CC) $(CFLAGS) -c $< -o $@ -DGIT=\"$(GITVER)\"
|
||
|
|
||
|
|
||
|
# just compile everything in the 'src' directory. Using this technique
|
||
|
# means that include file dependencies are broken, so sometimes when
|
||
|
# the program crashes unexpectedly, 'make clean' then 'make' fixes the
|
||
|
# problem that a .h file was out of date
|
||
|
tmp/%.o: src/%.c src/*.h
|
||
|
$(CC) $(CFLAGS) -c $< -o $@
|
||
|
|
||
|
|
||
|
SRC = $(sort $(wildcard src/*.c))
|
||
|
OBJ = $(addprefix tmp/, $(notdir $(addsuffix .o, $(basename $(SRC)))))
|
||
|
|
||
|
|
||
|
bin/masscan: $(OBJ)
|
||
|
$(CC) $(CFLAGS) -o $@ $(OBJ) $(LDFLAGS) $(LIBS)
|
||
|
|
||
|
clean:
|
||
|
rm -f tmp/*.o
|
||
|
rm -f bin/masscan
|
||
|
|
||
|
regress: bin/masscan
|
||
|
bin/masscan --selftest
|
||
|
|
||
|
test: regress
|
||
|
|
||
|
install: bin/masscan
|
||
|
install $(INSTALL_DATA) bin/masscan $(DESTDIR)$(BINDIR)/masscan
|
||
|
|
||
|
default: bin/masscan
|