Packages

Bonjour/Zeroconf DNS Service Discovery for the Nerves platform

Current section

Files

Jump to
Raw

Makefile

# Variables to override
#
# CC C compiler
# CROSSCOMPILE crosscompiler prefix, if any
# CFLAGS compiler flags for compiling all C files
# ERL_CFLAGS additional compiler flags for files using Erlang header files
# ERL_EI_LIBDIR path to libei.a
# LDFLAGS linker flags for linking all binaries
# ERL_LDFLAGS additional linker flags for projects referencing Erlang libraries
# mDNSResponder version
VERSION = 765.50.9
UNAME = $(shell uname -s)
ifneq ($(NERVES_SYSTEM),)
TARGET_OS = linux
TARGET_OPTS = HAVE_IPV6=0
else ifeq ($(UNAME),Linux)
TARGET_OS ?= linux
TARGET_OPTS =
else ifeq ($(UNAME),Darwin)
TARGET_OS ?= x
TARGET_OPTS =
else
$(error No configuration for system $(UNAME))
endif
CC ?= $(CROSSCOMPILER)gcc
ifeq ($(TARGET_OS),x)
LD = $(CC) -bundle -flat_namespace -undefined suppress
else
# Assume Linux/Nerves
LD = $(CC) -shared
endif
CFLAGS += -fPIC
LDFLAGS +=
BUILD_DIR ?= _build/make
BUILD_DRV_DIR = $(BUILD_DIR)/dnssd_drv
INSTALL_DIR ?= .
# Set Erlang-specific compile and linker flags
ERL_EI_INCLUDE_DIR ?= $(ROOTDIR)/usr/include
ERL_EI_LIBDIR ?= $(ROOTDIR)/usr/lib
ERL_CFLAGS ?= -I$(ERL_EI_INCLUDE_DIR)
ERL_LDFLAGS ?= -L$(ERL_EI_LIBDIR) -lei
###
# from mDNSResponder-$(VERSION)/mDNSPosix/Makefile:
CLIENTLIBOBJS = $(BUILD_DRV_DIR)/dnssd_clientlib.c.so.o $(BUILD_DRV_DIR)/dnssd_clientstub.c.so.o $(BUILD_DRV_DIR)/dnssd_ipc.c.so.o
.PHONY: all clean daemon lib
all: daemon lib driver
daemon: $(INSTALL_DIR)/priv/sbin/mdnsd
@echo $^ installed
lib: $(BUILD_DRV_DIR)/libdns_sd.so.1
@echo $^ compiled
driver: lib $(INSTALL_DIR)/priv/dnssd_drv.so
@echo $^ installed
deps/mDNSResponder-$(VERSION).tar.gz:
curl https://opensource.apple.com/tarballs/mDNSResponder/mDNSResponder-$(VERSION).tar.gz -o deps/mDNSResponder-$(VERSION).tar.gz --create-dirs
$(BUILD_DIR)/mDNSResponder-$(VERSION): deps/mDNSResponder-$(VERSION).tar.gz
mkdir -p $(BUILD_DIR)
tar xzf deps/mDNSResponder-$(VERSION).tar.gz -C $(BUILD_DIR)
##
# The daemon
#
# TODO: can be done in one shot
$(BUILD_DIR)/mdnsd/mdnsd: $(BUILD_DIR)/mDNSResponder-$(VERSION)
make -C $(BUILD_DIR)/mDNSResponder-$(VERSION)/mDNSPosix Daemon os=$(TARGET_OS) CC=$(CC) BUILDDIR=$(BUILD_DIR)/mdnsd $(TARGET_OPTS)
$(INSTALL_DIR)/priv/sbin/mdnsd: $(BUILD_DIR)/mdnsd/mdnsd
mkdir -p $(INSTALL_DIR)/priv/sbin
# Do a simple copy, since we do not want the initd script copied as well
cp $^ $@
##
# The port driver
#
$(BUILD_DRV_DIR)/libdns_sd.so.1: $(BUILD_DIR)/mDNSResponder-$(VERSION)
make -C $(BUILD_DIR)/mDNSResponder-$(VERSION)/mDNSPosix libdns_sd os=$(TARGET_OS) CC=$(CC) BUILDDIR=$(BUILD_DRV_DIR) OBJDIR=$(BUILD_DRV_DIR)
$(BUILD_DRV_DIR)/dnssd.o: c_src/dnssd.c
$(CC) -c $(ERL_CFLAGS) $(CFLAGS) -I $(BUILD_DIR)/mDNSResponder-$(VERSION)/mDNSShared -o $@ $<
$(INSTALL_DIR)/priv/dnssd_drv.so: $(BUILD_DRV_DIR)/dnssd.o $(CLIENTLIBOBJS)
mkdir -p $(INSTALL_DIR)/priv
$(LD) $+ $(ERL_LDFLAGS) $(LDFLAGS) -o $@
clean:
rm -rf $(BUILD_DIR)/mDNSResponder-$(VERSION) $(BUILD_DIR)/dnssd_drv $(BUILD_DIR)/mdnsd priv/dnssd_drv.so priv/sbin/mdnsd