FRDM K64F Metronome

Committer:
ram54288
Date:
Sun May 14 18:37:05 2017 +0000
Revision:
0:dbad57390bd1
Initial commit

Who changed what in which revision?

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