A metronome using the FRDM K64F board

Committer:
ram54288
Date:
Sun May 14 18:40:18 2017 +0000
Revision:
0:a7a43371b306
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ram54288 0:a7a43371b306 1 # ==========================================
ram54288 0:a7a43371b306 2 # Unity Project - A Test Framework for C
ram54288 0:a7a43371b306 3 # Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
ram54288 0:a7a43371b306 4 # [Released under MIT License. Please refer to license.txt for details]
ram54288 0:a7a43371b306 5 # ==========================================
ram54288 0:a7a43371b306 6
ram54288 0:a7a43371b306 7 require 'yaml'
ram54288 0:a7a43371b306 8 require 'fileutils'
ram54288 0:a7a43371b306 9 require HERE+'../../auto/unity_test_summary'
ram54288 0:a7a43371b306 10 require HERE+'../../auto/generate_test_runner'
ram54288 0:a7a43371b306 11 require HERE+'../../auto/colour_reporter'
ram54288 0:a7a43371b306 12
ram54288 0:a7a43371b306 13 module RakefileHelpers
ram54288 0:a7a43371b306 14
ram54288 0:a7a43371b306 15 C_EXTENSION = '.c'
ram54288 0:a7a43371b306 16
ram54288 0:a7a43371b306 17 def load_configuration(config_file)
ram54288 0:a7a43371b306 18 unless ($configured)
ram54288 0:a7a43371b306 19 $cfg_file = HERE+"../../test/targets/#{config_file}" unless (config_file =~ /[\\|\/]/)
ram54288 0:a7a43371b306 20 $cfg = YAML.load(File.read($cfg_file))
ram54288 0:a7a43371b306 21 $colour_output = false unless $cfg['colour']
ram54288 0:a7a43371b306 22 $configured = true if (config_file != DEFAULT_CONFIG_FILE)
ram54288 0:a7a43371b306 23 end
ram54288 0:a7a43371b306 24 end
ram54288 0:a7a43371b306 25
ram54288 0:a7a43371b306 26 def configure_clean
ram54288 0:a7a43371b306 27 CLEAN.include($cfg['compiler']['build_path'] + '*.*') unless $cfg['compiler']['build_path'].nil?
ram54288 0:a7a43371b306 28 end
ram54288 0:a7a43371b306 29
ram54288 0:a7a43371b306 30 def configure_toolchain(config_file=DEFAULT_CONFIG_FILE)
ram54288 0:a7a43371b306 31 config_file += '.yml' unless config_file =~ /\.yml$/
ram54288 0:a7a43371b306 32 config_file = config_file unless config_file =~ /[\\|\/]/
ram54288 0:a7a43371b306 33 load_configuration(config_file)
ram54288 0:a7a43371b306 34 configure_clean
ram54288 0:a7a43371b306 35 end
ram54288 0:a7a43371b306 36
ram54288 0:a7a43371b306 37 def tackit(strings)
ram54288 0:a7a43371b306 38 if strings.is_a?(Array)
ram54288 0:a7a43371b306 39 result = "\"#{strings.join}\""
ram54288 0:a7a43371b306 40 else
ram54288 0:a7a43371b306 41 result = strings
ram54288 0:a7a43371b306 42 end
ram54288 0:a7a43371b306 43 return result
ram54288 0:a7a43371b306 44 end
ram54288 0:a7a43371b306 45
ram54288 0:a7a43371b306 46 def squash(prefix, items)
ram54288 0:a7a43371b306 47 result = ''
ram54288 0:a7a43371b306 48 items.each { |item| result += " #{prefix}#{tackit(item)}" }
ram54288 0:a7a43371b306 49 return result
ram54288 0:a7a43371b306 50 end
ram54288 0:a7a43371b306 51
ram54288 0:a7a43371b306 52 def build_compiler_fields
ram54288 0:a7a43371b306 53 command = tackit($cfg['compiler']['path'])
ram54288 0:a7a43371b306 54 if $cfg['compiler']['defines']['items'].nil?
ram54288 0:a7a43371b306 55 defines = ''
ram54288 0:a7a43371b306 56 else
ram54288 0:a7a43371b306 57 defines = squash($cfg['compiler']['defines']['prefix'], $cfg['compiler']['defines']['items'] + ['UNITY_OUTPUT_CHAR=UnityOutputCharSpy_OutputChar'])
ram54288 0:a7a43371b306 58 end
ram54288 0:a7a43371b306 59 options = squash('', $cfg['compiler']['options'])
ram54288 0:a7a43371b306 60 includes = squash($cfg['compiler']['includes']['prefix'], $cfg['compiler']['includes']['items'])
ram54288 0:a7a43371b306 61 includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR)
ram54288 0:a7a43371b306 62 return {:command => command, :defines => defines, :options => options, :includes => includes}
ram54288 0:a7a43371b306 63 end
ram54288 0:a7a43371b306 64
ram54288 0:a7a43371b306 65 def compile(file, defines=[])
ram54288 0:a7a43371b306 66 compiler = build_compiler_fields
ram54288 0:a7a43371b306 67 unity_include = $cfg['compiler']['includes']['prefix']+'../../src'
ram54288 0:a7a43371b306 68 cmd_str = "#{compiler[:command]}#{compiler[:defines]}#{compiler[:options]}#{compiler[:includes]} #{unity_include} #{file} " +
ram54288 0:a7a43371b306 69 "#{$cfg['compiler']['object_files']['prefix']}#{$cfg['compiler']['object_files']['destination']}" +
ram54288 0:a7a43371b306 70 "#{File.basename(file, C_EXTENSION)}#{$cfg['compiler']['object_files']['extension']}"
ram54288 0:a7a43371b306 71 execute(cmd_str)
ram54288 0:a7a43371b306 72 end
ram54288 0:a7a43371b306 73
ram54288 0:a7a43371b306 74 def build_linker_fields
ram54288 0:a7a43371b306 75 command = tackit($cfg['linker']['path'])
ram54288 0:a7a43371b306 76 if $cfg['linker']['options'].nil?
ram54288 0:a7a43371b306 77 options = ''
ram54288 0:a7a43371b306 78 else
ram54288 0:a7a43371b306 79 options = squash('', $cfg['linker']['options'])
ram54288 0:a7a43371b306 80 end
ram54288 0:a7a43371b306 81 if ($cfg['linker']['includes'].nil? || $cfg['linker']['includes']['items'].nil?)
ram54288 0:a7a43371b306 82 includes = ''
ram54288 0:a7a43371b306 83 else
ram54288 0:a7a43371b306 84 includes = squash($cfg['linker']['includes']['prefix'], $cfg['linker']['includes']['items'])
ram54288 0:a7a43371b306 85 end
ram54288 0:a7a43371b306 86 includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR)
ram54288 0:a7a43371b306 87 return {:command => command, :options => options, :includes => includes}
ram54288 0:a7a43371b306 88 end
ram54288 0:a7a43371b306 89
ram54288 0:a7a43371b306 90 def link_it(exe_name, obj_list)
ram54288 0:a7a43371b306 91 linker = build_linker_fields
ram54288 0:a7a43371b306 92 cmd_str = "#{linker[:command]}#{linker[:options]}#{linker[:includes]} " +
ram54288 0:a7a43371b306 93 (obj_list.map{|obj|"#{$cfg['linker']['object_files']['path']}#{obj} "}).join +
ram54288 0:a7a43371b306 94 $cfg['linker']['bin_files']['prefix'] + ' ' +
ram54288 0:a7a43371b306 95 $cfg['linker']['bin_files']['destination'] +
ram54288 0:a7a43371b306 96 exe_name + $cfg['linker']['bin_files']['extension']
ram54288 0:a7a43371b306 97 execute(cmd_str)
ram54288 0:a7a43371b306 98 end
ram54288 0:a7a43371b306 99
ram54288 0:a7a43371b306 100 def build_simulator_fields
ram54288 0:a7a43371b306 101 return nil if $cfg['simulator'].nil?
ram54288 0:a7a43371b306 102 if $cfg['simulator']['path'].nil?
ram54288 0:a7a43371b306 103 command = ''
ram54288 0:a7a43371b306 104 else
ram54288 0:a7a43371b306 105 command = (tackit($cfg['simulator']['path']) + ' ')
ram54288 0:a7a43371b306 106 end
ram54288 0:a7a43371b306 107 if $cfg['simulator']['pre_support'].nil?
ram54288 0:a7a43371b306 108 pre_support = ''
ram54288 0:a7a43371b306 109 else
ram54288 0:a7a43371b306 110 pre_support = squash('', $cfg['simulator']['pre_support'])
ram54288 0:a7a43371b306 111 end
ram54288 0:a7a43371b306 112 if $cfg['simulator']['post_support'].nil?
ram54288 0:a7a43371b306 113 post_support = ''
ram54288 0:a7a43371b306 114 else
ram54288 0:a7a43371b306 115 post_support = squash('', $cfg['simulator']['post_support'])
ram54288 0:a7a43371b306 116 end
ram54288 0:a7a43371b306 117 return {:command => command, :pre_support => pre_support, :post_support => post_support}
ram54288 0:a7a43371b306 118 end
ram54288 0:a7a43371b306 119
ram54288 0:a7a43371b306 120 def execute(command_string, verbose=true)
ram54288 0:a7a43371b306 121 report command_string
ram54288 0:a7a43371b306 122 output = `#{command_string}`.chomp
ram54288 0:a7a43371b306 123 report(output) if (verbose && !output.nil? && (output.length > 0))
ram54288 0:a7a43371b306 124 if ($?.exitstatus != 0)
ram54288 0:a7a43371b306 125 raise "Command failed. (Returned #{$?.exitstatus})"
ram54288 0:a7a43371b306 126 end
ram54288 0:a7a43371b306 127 return output
ram54288 0:a7a43371b306 128 end
ram54288 0:a7a43371b306 129
ram54288 0:a7a43371b306 130 def report_summary
ram54288 0:a7a43371b306 131 summary = UnityTestSummary.new
ram54288 0:a7a43371b306 132 summary.set_root_path(HERE)
ram54288 0:a7a43371b306 133 results_glob = "#{$cfg['compiler']['build_path']}*.test*"
ram54288 0:a7a43371b306 134 results_glob.gsub!(/\\/, '/')
ram54288 0:a7a43371b306 135 results = Dir[results_glob]
ram54288 0:a7a43371b306 136 summary.set_targets(results)
ram54288 0:a7a43371b306 137 summary.run
ram54288 0:a7a43371b306 138 end
ram54288 0:a7a43371b306 139
ram54288 0:a7a43371b306 140 def run_tests
ram54288 0:a7a43371b306 141 report 'Running Unity system tests...'
ram54288 0:a7a43371b306 142
ram54288 0:a7a43371b306 143 # Tack on TEST define for compiling unit tests
ram54288 0:a7a43371b306 144 load_configuration($cfg_file)
ram54288 0:a7a43371b306 145 test_defines = ['TEST']
ram54288 0:a7a43371b306 146 $cfg['compiler']['defines']['items'] = [] if $cfg['compiler']['defines']['items'].nil?
ram54288 0:a7a43371b306 147
ram54288 0:a7a43371b306 148 # Get a list of all source files needed
ram54288 0:a7a43371b306 149 src_files = Dir[HERE+'src/*.c']
ram54288 0:a7a43371b306 150 src_files += Dir[HERE+'test/*.c']
ram54288 0:a7a43371b306 151 src_files += Dir[HERE+'test/main/*.c']
ram54288 0:a7a43371b306 152 src_files << '../../src/unity.c'
ram54288 0:a7a43371b306 153
ram54288 0:a7a43371b306 154 # Build object files
ram54288 0:a7a43371b306 155 src_files.each { |f| compile(f, test_defines) }
ram54288 0:a7a43371b306 156 obj_list = src_files.map {|f| File.basename(f.ext($cfg['compiler']['object_files']['extension'])) }
ram54288 0:a7a43371b306 157
ram54288 0:a7a43371b306 158 # Link the test executable
ram54288 0:a7a43371b306 159 test_base = "framework_test"
ram54288 0:a7a43371b306 160 link_it(test_base, obj_list)
ram54288 0:a7a43371b306 161
ram54288 0:a7a43371b306 162 # Execute unit test and generate results file
ram54288 0:a7a43371b306 163 simulator = build_simulator_fields
ram54288 0:a7a43371b306 164 executable = $cfg['linker']['bin_files']['destination'] + test_base + $cfg['linker']['bin_files']['extension']
ram54288 0:a7a43371b306 165 if simulator.nil?
ram54288 0:a7a43371b306 166 cmd_str = executable + " -v -r"
ram54288 0:a7a43371b306 167 else
ram54288 0:a7a43371b306 168 cmd_str = "#{simulator[:command]} #{simulator[:pre_support]} #{executable} #{simulator[:post_support]}"
ram54288 0:a7a43371b306 169 end
ram54288 0:a7a43371b306 170 output = execute(cmd_str)
ram54288 0:a7a43371b306 171 test_results = $cfg['compiler']['build_path'] + test_base
ram54288 0:a7a43371b306 172 if output.match(/OK$/m).nil?
ram54288 0:a7a43371b306 173 test_results += '.testfail'
ram54288 0:a7a43371b306 174 else
ram54288 0:a7a43371b306 175 test_results += '.testpass'
ram54288 0:a7a43371b306 176 end
ram54288 0:a7a43371b306 177 File.open(test_results, 'w') { |f| f.print output }
ram54288 0:a7a43371b306 178 end
ram54288 0:a7a43371b306 179 end