# Makefile for Dante Application Library (DAL) examples on Darwin / macOS

.PHONY: all prebuild clean

TOP   ?= "$(shell pwd)/.."

VPATH = ..

CC  = gcc
CXX = g++

# Xcode 12.2 and later is a requirement for building universal binaries.
# Earlier versions of Xcode don't contain the support needed to build and
# test universal versions of your macOS code.
MIN_UNIVERSAL_XCODE_VER = "12.2"
INSTALLED_XCODE_VER = "$(shell xcodebuild -version | head -n 1 | cut -d ' ' -f 2 | cut -d '.' -f 1-2)"
UNIVERSAL_BUILD = "$(shell bc <<< "$(INSTALLED_XCODE_VER) >= $(MIN_UNIVERSAL_XCODE_VER)")"

ifeq ($(UNIVERSAL_BUILD),"1")
	TARGET_ARCHS = -arch x86_64 -arch arm64
else
	TARGET_ARCHS =
endif

DAL_INC = $(TOP)/include
DAL_LIB = $(TOP)/lib
DAL_BIN = $(TOP)/bin

DAL_LIBDIRS = -L$(DAL_LIB) -rpath "$$(PWD)" -rpath "@executable_path/../lib" -rpath "@executable_path/../../lib"
DAL_LIBS = -ldal -ldal_api -laud-protobuf-lite -lsodium

CFLAGS = -g -std=c99 -Wall -Werror -I$(DAL_INC) $(TARGET_ARCHS)
CXXFLAGS = -g -std=c++11 -Wall -Werror -I$(DAL_INC) $(TARGET_ARCHS)

BUILD_DIR = build
COMMON_OBJS = access_token.o ArgumentParser.o DalAppBase.o
WAVE_COMMON_OBJS = $(COMMON_OBJS) wave.o

APPS = DalLoopbackTest DalConnectionsTest DalWavePlay DalWaveRecord

default: all

all: prebuild
	cp -vp $(DAL_BIN)/* $(BUILD_DIR)
	cp -vp $(DAL_LIB)/*.dylib $(BUILD_DIR)
	$(MAKE) TOP='$(TOP)' -C $(BUILD_DIR) -f ../Makefile $(APPS)

prebuild:
	[ -d $(BUILD_DIR) ] || mkdir $(BUILD_DIR)

DalLoopbackTest: DalLoopbackTest.o $(COMMON_OBJS)
	$(CXX) -o $@ $^ $(DAL_LIBDIRS) $(DAL_LIBS) $(TARGET_ARCHS)

DalConnectionsTest: DalConnectionsTest.o DalConnectionsTestMain.o $(COMMON_OBJS)
	$(CXX) -o $@ $^ $(DAL_LIBDIRS) $(DAL_LIBS) $(TARGET_ARCHS)

DalWavePlay: DalWavePlay.o $(WAVE_COMMON_OBJS)
	$(CXX) -o $@ $^ $(DAL_LIBDIRS) $(DAL_LIBS) $(TARGET_ARCHS)

DalWaveRecord: DalWaveRecord.o $(WAVE_COMMON_OBJS)
	$(CXX) -o $@ $^ $(DAL_LIBDIRS) $(DAL_LIBS) $(TARGET_ARCHS)

clean:
	rm -fr $(BUILD_DIR)
