comparison Makefile @ 463:c47709e8b5c9 prerelease

Makefile automatically links in default_libpd_render.cpp if there is a _main.pd file and there is no render symbol
author Giulio Moro <giuliomoro@yahoo.it>
date Mon, 20 Jun 2016 15:10:12 +0100
parents f96238bdbb18
children 1d585c5fa663
comparison
equal deleted inserted replaced
462:d9a4fc5357e7 463:c47709e8b5c9
120 CPP_DEPS := $(addprefix $(PROJECT_DIR)/build/,$(notdir $(CPP_SRCS:.cpp=.d))) 120 CPP_DEPS := $(addprefix $(PROJECT_DIR)/build/,$(notdir $(CPP_SRCS:.cpp=.d)))
121 121
122 PROJECT_OBJS = $(ASM_OBJS) $(C_OBJS) $(CPP_OBJS) 122 PROJECT_OBJS = $(ASM_OBJS) $(C_OBJS) $(CPP_OBJS)
123 123
124 # Core Bela sources 124 # Core Bela sources
125 CORE_CPP_SRCS = $(filter-out core/default_main.cpp, $(wildcard core/*.cpp)) 125 CORE_CPP_SRCS = $(filter-out core/default_main.cpp core/default_libpd_render.cpp, $(wildcard core/*.cpp))
126 CORE_OBJS := $(addprefix build/core/,$(notdir $(CORE_CPP_SRCS:.cpp=.o))) 126 CORE_OBJS := $(addprefix build/core/,$(notdir $(CORE_CPP_SRCS:.cpp=.o)))
127 CORE_CPP_DEPS := $(addprefix build/core/,$(notdir $(CORE_CPP_SRCS:.cpp=.d))) 127 CORE_CPP_DEPS := $(addprefix build/core/,$(notdir $(CORE_CPP_SRCS:.cpp=.d)))
128 128
129 CORE_ASM_SRCS := $(wildcard core/*.S) 129 CORE_ASM_SRCS := $(wildcard core/*.S)
130 CORE_ASM_OBJS := $(addprefix build/core/,$(notdir $(CORE_ASM_SRCS:.S=.o))) 130 CORE_ASM_OBJS := $(addprefix build/core/,$(notdir $(CORE_ASM_SRCS:.S=.o)))
135 # only wants to provide the render functions. 135 # only wants to provide the render functions.
136 DEFAULT_MAIN_CPP_SRCS := ./core/default_main.cpp 136 DEFAULT_MAIN_CPP_SRCS := ./core/default_main.cpp
137 DEFAULT_MAIN_OBJS := ./build/core/default_main.o 137 DEFAULT_MAIN_OBJS := ./build/core/default_main.o
138 DEFAULT_MAIN_CPP_DEPS := ./build/core/default_main.d 138 DEFAULT_MAIN_CPP_DEPS := ./build/core/default_main.d
139 139
140 Bela: ## Builds the Bela program with all the opimizations 140 # Objects for a system-supplied default render() file for libpd projects,
141 # if the user only wants to provide the Pd files.
142 DEFAULT_PD_CPP_SRCS := ./core/default_libpd_render.cpp
143 DEFAULT_PD_OBJS := ./build/core/default_libpd_render.o
144 DEFAULT_PD_CPP_DEPS := ./build/core/default_libpd_render.d
145
146 Bela: ## Builds the Bela program with all the optimizations
141 Bela: $(OUTPUT_FILE) 147 Bela: $(OUTPUT_FILE)
142 148
143 # all = build Bela 149 # all = build Bela
144 all: ## Same as Bela 150 all: ## Same as Bela
145 all: SYNTAX_FLAG := 151 all: SYNTAX_FLAG :=
200 # main file if the user hasn't supplied one. We check for the presence of the main() 206 # main file if the user hasn't supplied one. We check for the presence of the main()
201 # function, and conditionally call one of two recursive make targets depending on whether 207 # function, and conditionally call one of two recursive make targets depending on whether
202 # we want to link in the default main file or not. The kludge is the mess of a shell script 208 # we want to link in the default main file or not. The kludge is the mess of a shell script
203 # line below. Surely there's a better way to do this? 209 # line below. Surely there's a better way to do this?
204 $(OUTPUT_FILE): $(CORE_ASM_OBJS) $(CORE_OBJS) $(PROJECT_OBJS) $(STATIC_LIBS) $(DEFAULT_MAIN_OBJS) 210 $(OUTPUT_FILE): $(CORE_ASM_OBJS) $(CORE_OBJS) $(PROJECT_OBJS) $(STATIC_LIBS) $(DEFAULT_MAIN_OBJS)
205 $(eval DEFAULT_MAIN_CONDITIONAL := $(shell bash -c 'if [ `nm $(PROJECT_OBJS) | grep -w T | grep -w main | wc -l` == '0' ]; then echo "$(DEFAULT_MAIN_OBJS)"; else echo ""; fi')) 211 $(eval DEFAULT_MAIN_CONDITIONAL :=\
212 $(shell bash -c '[ `nm $(PROJECT_OBJS) 2>/dev/null | grep -w T | grep -w main | wc -l` == '0' ] && echo "$(DEFAULT_MAIN_OBJS)" || : '))
213 @#If there is a _main.pd file AND there is no "render" symbol then link in the $(DEFAULT_PD_OBJS)
214 $(eval DEFAULT_PD_CONDITIONAL :=\
215 $(shell bash -c '{ [ -f "$(PROJECT_DIR)/_main.pd" ] && [ `nm $(PROJECT_OBJS) 2>/dev/null | grep -w T | grep -w render | wc -l` = '0' ]; } && echo '$(DEFAULT_PD_OBJS)' || : ' ))
216 @echo $(DEFAULT_MAIN_CONDITIONAL) $(DEFAULT_PD_CONDITIONAL)
206 @echo 'Linking...' 217 @echo 'Linking...'
207 @$(CXX) $(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 "$(PROJECT_DIR)/$(PROJECT)" $(CORE_ASM_OBJS) $(CORE_OBJS) $(DEFAULT_MAIN_CONDITIONAL) $(ASM_OBJS) $(C_OBJS) $(CPP_OBJS) $(STATIC_LIBS) $(LIBS) 218 $(CXX) $(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 "$(PROJECT_DIR)/$(PROJECT)" $(CORE_ASM_OBJS) $(CORE_OBJS) $(DEFAULT_MAIN_CONDITIONAL) $(DEFAULT_PD_CONDITIONAL) $(ASM_OBJS) $(C_OBJS) $(CPP_OBJS) $(STATIC_LIBS) $(LIBS)
208 @echo ' ...done' 219 @echo ' ...done'
209 220
210 # Other Targets: 221 # Other Targets:
211 projectclean:## Remove the PROJECT's build objects & binary 222 projectclean:## Remove the PROJECT's build objects & binary
212 -$(RM) $(PROJECT_DIR)/build/* $(OUTPUT_FILE) 223 -$(RM) $(PROJECT_DIR)/build/* $(OUTPUT_FILE)