view Makefile @ 151:e9c9404e3d1f ClockSync

Pff partially working. No PID. When setting the audio clock on the bbb to 44098 the master and slave clock keep diverging instead of converging ...
author Giulio Moro <giuliomoro@yahoo.it>
date Tue, 22 Sep 2015 04:10:07 +0100
parents 39962292dfb4
children 5bcf04234f80
line wrap: on
line source
# BeagleRT
# Low-latency, real-time audio and sensor processing on BeagleBone Black
# (c) 2015 Andrew McPherson, Victor Zappi, Giulio Moro
# Centre for Digital Music, Queen Mary University of London

# This Makefile is intended for use on the BeagleBone Black itself
# and not for cross-compiling

RM := rm -rf
STATIC_LIBS := ./libprussdrv.a ./libNE10.a
LIBS := -lrt -lnative -lxenomai

INCLUDES := -I/usr/include/ne10 -I/usr/xenomai/include -I/usr/arm-linux-gnueabihf/include/xenomai/include -I/usr/arm-linux-gnueabihf/include/ne10


ASM_SRCS := $(wildcard source/*.S)
ASM_OBJS := $(addprefix build/source/,$(notdir $(ASM_SRCS:.S=.o)))
ASM_DEPS := $(addprefix build/source/,$(notdir $(ASM_SRCS:.S=.d)))

C_SRCS := $(wildcard source/*.c)
C_OBJS := $(addprefix build/source/,$(notdir $(C_SRCS:.c=.o)))
C_DEPS := $(addprefix build/source/,$(notdir $(C_SRCS:.c=.d)))

CPP_SRCS := $(wildcard source/*.cpp)
CPP_OBJS := $(addprefix build/source/,$(notdir $(CPP_SRCS:.cpp=.o)))
CPP_DEPS := $(addprefix build/source/,$(notdir $(CPP_SRCS:.cpp=.d)))

# Core BeagleRT sources
CORE_CPP_SRCS := \
./core/GPIOcontrol.cpp \
./core/I2c_Codec.cpp \
./core/PRU.cpp \
./core/RTAudio.cpp \
./core/RTAudioCommandLine.cpp \
./core/Utilities.cpp \
./core/UdpClient.cpp

CORE_OBJS := \
./build/core/GPIOcontrol.o \
./build/core/I2c_Codec.o \
./build/core/PRU.o \
./build/core/RTAudio.o \
./build/core/RTAudioCommandLine.o \
./build/core/Utilities.o \
./build/core/UdpClient.o

CORE_CPP_DEPS := \
./build/core/GPIOcontrol.d \
./build/core/I2c_Codec.d \
./build/core/PRU.d \
./build/core/RTAudio.d \
./build/core/RTAudioCommandLine.d \
./build/core/Utilities.d \
./build/core/UdpClient.d

# Objects for a system-supplied default main() file, if the user
# only wants to provide the render functions.
DEFAULT_MAIN_CPP_SRCS := ./core/default_main.cpp
DEFAULT_MAIN_OBJS := ./build/core/default_main.o
DEFAULT_MAIN_CPP_DEPS := ./build/core/default_main.d

# All = build BeagleRT
all: SYNTAX_FLAG :=
all: BeagleRT

# syntax = check syntax
syntax: SYNTAX_FLAG := -fsyntax-only
syntax: BeagleRT

# Rule for BeagleRT core C++ files
build/core/%.o: ./core/%.cpp
	@echo 'Building file: $<'
	@echo 'Invoking: GCC C++ Compiler'
	g++ $(SYNTAX_FLAG) $(INCLUDES) -O2 -Wall -c -fmessage-length=0 -U_FORTIFY_SOURCE -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
	@echo 'Finished building: $<'
	@echo ' '

# Rule for user-supplied C++ files
build/source/%.o: ./source/%.cpp
	@echo 'Building file: $<'
	@echo 'Invoking: GCC C++ Compiler'
	g++ $(SYNTAX_FLAG) -I./include $(INCLUDES) -O2 -Wall -c -fmessage-length=0 -U_FORTIFY_SOURCE -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
	@echo 'Finished building: $<'
	@echo ' '

# Rule for user-supplied C files
build/source/%.o: ./source/%.c
	@echo 'Building file: $<'
	@echo 'Invoking: GCC C Compiler'
	gcc $(SYNTAX_FLAG) -I./include $(INCLUDES) -O2 -Wall -c -fmessage-length=0 -U_FORTIFY_SOURCE -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
	@echo 'Finished building: $<'
	@echo ' '

# Rule for user-supplied assembly files
build/source/%.o: ./source/%.S
	@echo 'Building file: $<'
	@echo 'Invoking: GCC Assembler'
	as  -o "$@" "$<"
	@echo 'Finished building: $<'
	@echo ' '

# This is a nasty kludge: we want to be able to optionally link in a default
# main file if the user hasn't supplied one. We check for the presence of the main()
# function, and conditionally call one of two recursive make targets depending on whether
# we want to link in the default main file or not. The kludge is the mess of a shell script
# line below. Surely there's a better way to do this?
BeagleRT: $(CORE_OBJS) $(ASM_OBJS) $(C_OBJS) $(CPP_OBJS) $(STATIC_LIBS)
	$(eval NEXT_TARGET := $(shell bash -c 'if [ `nm build/source/*.o | grep -w T | grep -w main | wc -l` == '0' ]; then echo "BeagleRT_with_main"; else echo "BeagleRT_without_main"; fi'))
	$(MAKE) $(NEXT_TARGET)
	@echo 'Finished building target: $@'
	@echo ' '
#	$(MAKE) --no-print-directory post-build	

# Rule for building BeagleRT including the default main file (no user-supplied main())
BeagleRT_with_main: $(CORE_OBJS) $(DEFAULT_MAIN_OBJS) $(ASM_OBJS) $(C_OBJS) $(CPP_OBJS) $(STATIC_LIBS)
	@echo 'Building target: $@'
	@echo 'Invoking: GCC C++ Linker'
	g++ $(SYNTAX_FLAG) -L/usr/xenomai/lib -L/usr/arm-linux-gnueabihf/lib -L/usr/arm-linux-gnueabihf/lib/xenomai -L/usr/lib/arm-linux-gnueabihf -pthread -Wpointer-arith -o "BeagleRT" $(CORE_OBJS) $(DEFAULT_MAIN_OBJS) $(ASM_OBJS) $(C_OBJS) $(CPP_OBJS) $(STATIC_LIBS) $(LIBS)

# Rule for building BeagleRT without the default main file (user-supplied main())
BeagleRT_without_main: $(CORE_OBJS) $(ASM_OBJS) $(C_OBJS) $(CPP_OBJS) $(STATIC_LIBS) 
	@echo 'Building target: $@'
	@echo 'Invoking: GCC C++ Linker'
	g++ $(SYNTAX_FLAG) -L/usr/xenomai/lib -L/usr/arm-linux-gnueabihf/lib -L/usr/arm-linux-gnueabihf/lib/xenomai -L/usr/lib/arm-linux-gnueabihf -pthread -Wpointer-arith -o "BeagleRT" $(CORE_OBJS) $(ASM_OBJS) $(C_OBJS) $(CPP_OBJS) $(STATIC_LIBS) $(LIBS)

# Other Targets:

# Remove the temporary user-supplied source, plus the objects built from them
sourceclean:
	-$(RM) source/* build/source/* BeagleRT
	-@echo ' '	

# Remove all the built objects, including the core BeagleRT objects
distclean:
	-$(RM) build/source/* $(CORE_OBJS) $(CORE_CPP_DEPS) $(DEFAULT_MAIN_OBJS) $(DEFAULT_MAIN_CPP_DEPS) BeagleRT
	-@echo ' '

# Remove only the user-generated objects
clean:
	-$(RM) build/source/* BeagleRT
	-@echo ' '

post-build:
# Nothing to do here (for now)

.PHONY: all clean distclean sourceclean dependents
.SECONDARY: post-build