A metronome using the FRDM K64F board

Revision:
0:a7a43371b306
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/BUILD_TEST_mbedOS.mk	Sun May 14 18:40:18 2017 +0000
@@ -0,0 +1,163 @@
+# -----------------------------------------------------------------------
+# Copyright (c) 2016 ARM Limited. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -----------------------------------------------------------------------
+
+
+###########################################################################
+# Define test targets based on PROJECT
+# Make files that include this must define PROJECT and TARGET_PLATFORM
+# Requirements
+# - mbed-cli must be installed
+# - MORPHEUS_ROOT must be defined ( e.g. $(PAL_ROOT)/mbed-os)
+#
+# To install mbed-os the following may help:
+#pip uninstall mbed-cli
+#cd mbed-client-pal
+#mbed new
+#mbed deploy
+#mbed config root mbed-client-pal/mbed-os
+#cd mbed-os
+#sudo pip install -r core/requirements.txt
+#sudo pip install -U colorama
+#sudo pip install -U jinja2
+#mbed remove frameworks/unity
+#
+# The following targets may also be defined:
+# $(PROJECT)_ADDITIONAL_SOURCES
+#
+# Clive Bluston
+###########################################################################
+
+# Add targets for platform/project combination
+.PHONY: $(TARGET_PLATFORM)_all $(TARGET_PLATFORM)_clean $(TARGET_PLATFORM)_check
+$(TARGET_PLATFORM)_all: $(TARGET_PLATFORM)_$(PROJECT) 
+$(TARGET_PLATFORM)_clean: $(TARGET_PLATFORM)_clean_$(PROJECT)
+$(TARGET_PLATFORM)_check: $(TARGET_PLATFORM)_check_$(PROJECT)
+
+# Process command line argument of the form INCLUDE=, in order to pass it to the compilation.
+# One or more tests can be selected in this way. If the argument is not present then all tests are selected.
+$(info PAL_TEST=$(PAL_TEST))
+ifeq ($(strip $(PAL_TEST)),)
+  CC_TESTS = PAL_INCLUDE=1
+else
+  CC_TESTS = PAL_INCLUDE=0 $(patsubst %,%=1, $(PAL_TEST))
+endif
+
+# Define variables to be used in the recipes of the targets in the context of the main target.
+# We do this because the original variables will be overridden by other make files by the time the
+# recipe is executed. Note that these variables are recursively inherited by all prerequisites.
+$(TARGET_PLATFORM)_$(PROJECT) : MORPHEUS_CC_TESTS_D := $(patsubst %,-D%, $(CC_TESTS))
+#################################################################################################################
+# Target platform dependant definitions.
+# All os references relative to the root.
+# Can define a MBEDOS_ROOT somewhere else
+
+ifeq ($(strip $(MBEDOS_ROOT)),)
+  MORPHEUS_ROOT := $(PAL_ROOT)/Test
+else
+  MORPHEUS_ROOT := $(strip $(MBEDOS_ROOT))
+endif
+
+
+ifeq ($(DEBUG), 1)
+  $(info "DEBUG")
+  $(TARGET_PLATFORM)_$(PROJECT) : DEBUG_FLAGS += -DDEBUG
+endif
+
+ifeq ($(PAL_IGNORE_UNIQUE_THREAD_PRIORITY), 1)
+  $(info "PAL_IGNORE_UNIQUE_THREAD_PRIORITY")
+  $(TARGET_PLATFORM)_$(PROJECT) : DEBUG_FLAGS += -DPAL_IGNORE_UNIQUE_THREAD_PRIORITY
+endif
+
+ifeq ($(VERBOSE), 1)
+  $(info "VERBOSE")
+  $(TARGET_PLATFORM)_$(PROJECT) : DEBUG_FLAGS += -DVERBOSE
+endif
+
+#################################################################################################################
+
+### UNITY FILES ###
+UNITY_ROOT=$(PAL_ROOT)/Test/Unity
+UNITY_INCLUDE_PATHS=$(UNITY_ROOT)/src $(UNITY_ROOT)/extras/fixture/src
+INCLUDE_PATHS = $(UNITY_INCLUDE_PATHS) $(PAL_ROOT)/Source/PAL-Impl/Services-API $(PAL_ROOT)/Source/Port/Platform-API  $(PAL_ROOT)/Test/Common
+# mbed compile command searches include folders for c files, so it will find unity c files
+# If we were to specify them here, they would be muliply defined.
+UNITY_OBJECTS =
+#UNITY_OBJECTS = $(UNITY_ROOT)/src/unity.c $(UNITY_ROOT)/extras/fixture/src/unity_fixture.c  
+###################
+
+# Add this optional file to the dependencies only if it exists.
+ifneq ("$(wildcard $(PAL_ROOT)/Test/Common/$(PROJECT)_test_utils.c)","")
+# mbed compile command searches include folders for c files, so it will find /Test/Common c files
+# If we were to specify them here, they would be muliply defined.
+#  $(PROJECT)_ADDITIONAL_SOURCES += $(PAL_ROOT)/Test/Common/$(PROJECT)_test_utils.c
+endif
+
+# Fixed list of test files for each test executable.
+TST_SOURCES:=	$(INCLUDE_PATHS) \
+				$(UNITY_OBJECTS) \
+				$(MORPHEUS_ROOT)/mbed-os \
+				$(PAL_ROOT)/Test/$(TYPE)/$(PROJECT)_test.c \
+				$(PAL_ROOT)/Test/$(TYPE)/$(PROJECT)_test_runner.c \
+				$(PAL_ROOT)/Test/$(TYPE)/$(PROJECT)_test_main_$(TARGET_PLATFORM).cpp \
+				$($(PROJECT)_ADDITIONAL_SOURCES)
+ifeq ($(findstring HAS_UPDATE,$(TARGET_CONFIGURATION_DEFINES)),HAS_UPDATE)
+TST_SOURCES:= 	$(TST_SOURCES) \
+				$(MORPHEUS_ROOT)/storage-volume-manager \
+				$(MORPHEUS_ROOT)/storage-abstraction/ \
+				$(MORPHEUS_ROOT)/mbed-client-libservice \
+				$(MORPHEUS_ROOT)/mbed-trace/
+
+endif
+
+# Build executables and listings.
+.PHONY: $(TARGET_PLATFORM)_$(PROJECT) 
+$(TARGET_PLATFORM)_$(PROJECT):  $(MORPHEUS_ROOT) $(OUTOBJ)  $(OUT)/$(PROJECT).bin 
+
+$(TARGET_PLATFORM)_$(PROJECT):  MORPHEUS_ROOT:=$(MORPHEUS_ROOT) 
+
+
+$(OUT)/$(PROJECT).bin:  $(TST_SOURCES) 
+	# Always remove the test runner since PAL_TEST argument change requires that it is recompiled
+	$(RM) $(dir $@)obj/$(PROJECT)_test_runner.o
+	# Ignore some mbed libraries in the subsequent build. (The minus ignores the error if the library does not exist)
+	-$(ECHO) "*" > $(strip $(MORPHEUS_ROOT))/mbed-os/features/frameworks/unity/.mbedignore
+	# Morpheus build.
+	mbed compile -v -N ../$(notdir $(basename $@)) --build $(dir $@)obj -t GCC_ARM -m K64F $(addprefix  --source=, $^) $(MORPHEUS_CC_TESTS_D) $(DEBUG_FLAGS)
+
+# Create a list of files to delete for each target on the first pass of the make
+$(TARGET_PLATFORM)_clean_$(PROJECT) : OUTPUTS:= $(OUT)
+
+
+# Remove files in the list $(PROJECT)_OUTPUTS. 
+# We dynamically create the list variable from the target
+PHONY: $(TARGET_PLATFORM)_clean_$(PROJECT) 
+$(TARGET_PLATFORM)_clean_$(PROJECT): 
+	$(RM) $(OUTPUTS)
+
+# Check that the script exists
+$(PAL_ROOT)/Test/Scripts/perform_test_mbedos.py:
+
+# This makes sure anyone who is dependant on it always executes its recipe
+.FORCE:
+
+# Always run the test.
+$(OUT)/$(PROJECT)_result.txt: $(PAL_ROOT)/Test/Scripts/perform_test_mbedOS.py $(TARGET_PLATFORM)_$(PROJECT) $(OUT)/$(PROJECT).bin .FORCE
+	# Install and run the test. Pass script and binary file. 
+	python   $(word 1, $^) $(word 3, $^)
+
+# check. Install and run tests
+.PHONY: $(TARGET_PLATFORM)check_$(PROJECT)
+$(TARGET_PLATFORM)_check_$(PROJECT):  $(OUT)/$(PROJECT)_result.txt