###############################################################################
#
#Microsoft Defender Network Filtering Platform
#
#Copyright (c) 2021 Microsoft Corporation.  All rights reserved.
#
###############################################################################
MKFILE := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
SRCDIR := $(dir $(abspath $(MKFILE)))
SRCROOT := $(SRCDIR:%/=%)

default: mde_netfilter client
all: mde_netfilter client

ifndef CC
CC := gcc
endif

GLIB_INCLUDES := -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include

INCLUDES := \
        -Isrc/include/ \
        -I/usr/include \
        -I/usr/lib/x86_64-linux-gnu/glib-2.0/include \
        $(GLIB_INCLUDES) \
        $(LIB_NETFILTER_INCLUDE)

CFLAGS := -Wall -Werror -Wextra  -Wno-unused-parameter -fPIC -g $(INCLUDES)

LDFLAGS := \
        -pie \
        -L/usr/lib64/ \
        -L/usr/lib/x86_64-linux-gnu/lib \
        -lpthread \
        -lglib-2.0 \
        -lmnl \
        -lnfnetlink \
        -lnetfilter_queue \
        -lsystemd\
        -lm

MDE_OPEN_SOURCE_BIN    := $(SRCROOT)/mde_netfilter
MDE_OPEN_SOURCE_CLIENT_BIN := $(SRCROOT)/test_client

MDE_OPEN_SOURCE_CLIENT_SRCS := \
        $(SRCROOT)/client/client.c \

MDE_OPEN_SOURCE_SRCS := \
        $(SRCROOT)/src/mde_netfilter.c \
        $(SRCROOT)/src/netfilter_platform.c

MDE_OPEN_SOURCE_OBJS := \
        $(SRCROOT)/src/mde_netfilter.o \
        $(SRCROOT)/src/netfilter_platform.o

$(MDE_OPEN_SOURCE_OBJS): %.o: %.c
	$(CC) $(CFLAGS) -c -o $@ $<

mde_netfilter: $(MDE_OPEN_SOURCE_OBJS)
	$(CC) -o $(MDE_OPEN_SOURCE_BIN) $(MDE_OPEN_SOURCE_OBJS) $(LDFLAGS)

client: $(MDE_OPEN_SOURCE_OBJS)
	$(CC) $(CFLAGS) -o $(MDE_OPEN_SOURCE_CLIENT_BIN) $(MDE_OPEN_SOURCE_CLIENT_SRCS) -lpthread

clean:
	rm -f $(MDE_OPEN_SOURCE_OBJS)
	rm -f $(MDE_OPEN_SOURCE_BIN)
	rm -f $(MDE_OPEN_SOURCE_CLIENT_BIN)
