X-Git-Url: https://git.hcoop.net/clinton/Smoothieware.git/blobdiff_plain/60ccbb76d459a4501d0ae29d7a7b167464a1b25f..721b502e381a8abf6e843f629164823450e4b16b:/Rakefile diff --git a/Rakefile b/Rakefile index 9c7aa719..1e7536c3 100644 --- a/Rakefile +++ b/Rakefile @@ -4,6 +4,7 @@ require 'fileutils' verbose(ENV['verbose'] == '1') DEBUG = ENV['debug'] == '1' +TESTING = ENV['testing'] == '1' def pop_path(path) Pathname(path).each_filename.to_a[1..-1] @@ -73,8 +74,10 @@ SIZE = "#{TOOLSBIN}size" # include a defaults file if present load 'rakefile.defaults' if File.exists?('rakefile.defaults') +if TESTING + BUILDTYPE= 'Testing' -if DEBUG +elsif DEBUG BUILDTYPE= 'Debug' ENABLE_DEBUG_MONITOR= '0' end @@ -89,11 +92,11 @@ ENABLE_DEBUG_MONITOR = ENV['ENABLE_DEBUG_MONITOR'] || '0' unless defined? ENABLE DEFAULT_SERIAL_BAUD_RATE= ENV['BAUDRATE'] || '115200' unless defined? DEFAULT_SERIAL_BAUD_RATE # set to true to eliminate all the network code -NONETWORK= false unless defined? NONETWORK +unless defined? NONETWORK + NONETWORK= false || TESTING +end # list of modules to exclude, include directory it is in -EXCLUDE_MODULES= %w(tools/touchprobe) unless defined? EXCLUDE_MODULES - # e.g for a CNC machine #EXCLUDE_MODULES = %w(tools/touchprobe tools/laser tools/temperaturecontrol tools/extruder) @@ -109,9 +112,31 @@ else nonetwork= false end -SRC = FileList['src/**/*.{c,cpp}'].exclude(/#{excludes.join('|')}/) +# see if CNC build +if ENV['CNC'] || CNC + cnc= true + excludes << 'panel\/screens\/3dprinter' + puts "CNC build" +else + excludes << 'panel\/screens\/cnc' + cnc= false +end -puts "WARNING Excluding modules: #{EXCLUDE_MODULES.join(' ')}" unless exclude_defines.empty? +if TESTING + # add modules to be tested here + TESTMODULES= %w(tools/temperatureswitch) unless defined? EXCLUDE_MODULES + puts "Modules under test: #{TESTMODULES}" + excludes << %w(Kernel.cpp main.cpp) # we replace these with mock versions in testframework + + frameworkfiles= FileList['src/testframework/*.{c,cpp}', 'src/testframework/easyunit/*.{c,cpp}'] + extrafiles= FileList['src/modules/communication/SerialConsole.cpp', 'src/modules/communication/utils/Gcode.cpp', 'src/modules/robot/Conveyor.cpp', 'src/modules/robot/Block.cpp'] + testmodules= FileList['src/libs/**/*.{c,cpp}'].include(TESTMODULES.collect { |e| "src/modules/#{e}/**/*.{c,cpp}"}).include(TESTMODULES.collect { |e| "src/testframework/unittests/#{e}/*.{c,cpp}"}).exclude(/#{excludes.join('|')}/) + SRC = frameworkfiles + extrafiles + testmodules +else + excludes << %w(testframework) + SRC = FileList['src/**/*.{c,cpp}'].exclude(/#{excludes.join('|')}/) + puts "WARNING Excluding modules: #{EXCLUDE_MODULES.join(' ')}" unless exclude_defines.empty? +end OBJDIR = 'OBJ' OBJ = SRC.collect { |fn| File.join(OBJDIR, pop_path(File.dirname(fn)), File.basename(fn).ext('o')) } + @@ -155,6 +180,10 @@ when 'checked' OPTIMIZATION = 2 MRI_ENABLE = 1 MRI_SEMIHOST_STDIO = 1 unless defined? MRI_SEMIHOST_STDIO +when 'testing' + OPTIMIZATION = 0 + MRI_ENABLE = 1 + MRI_SEMIHOST_STDIO = 0 unless defined? MRI_SEMIHOST_STDIO end MRI_ENABLE = 1 unless defined? MRI_ENABLE # set to 0 to disable MRI @@ -172,13 +201,15 @@ defines += MRI_DEFINES defines << "-DDEFAULT_SERIAL_BAUD_RATE=#{DEFAULT_SERIAL_BAUD_RATE}" defines << '-DDEBUG' if OPTIMIZATION == 0 defines << '-DNONETWORK' if nonetwork +defines << '-DCNC' if cnc DEFINES= defines.join(' ') # Compiler flags used to enable creation of header dependencies. DEPFLAGS = '-MMD ' -CFLAGS = DEPFLAGS + "-Wall -Wextra -Wno-unused-parameter -Wcast-align -Wpointer-arith -Wredundant-decls -Wcast-qual -Wcast-align -O#{OPTIMIZATION} -g3 -mcpu=cortex-m3 -mthumb -mthumb-interwork -ffunction-sections -fdata-sections -fno-exceptions -fno-delete-null-pointer-checks" -CPPFLAGS = CFLAGS + ' -fno-rtti -std=gnu++11' +CFLAGS = DEPFLAGS + "-Wall -Wextra -Wno-unused-parameter -Wcast-align -Wpointer-arith -Wredundant-decls -Wcast-qual -Wcast-align -O#{OPTIMIZATION} -g3 -mcpu=cortex-m3 -mthumb -mthumb-interwork -ffunction-sections -fdata-sections -fno-delete-null-pointer-checks" +CPPFLAGS = CFLAGS + ' -fno-rtti -std=gnu++11 -fno-exceptions' +CXXFLAGS = CFLAGS + ' -fno-rtti -std=gnu++11 -fexceptions' # used for a .cxx file that needs to be compiled with exceptions MRI_WRAPS = MRI_ENABLE == 1 ? ',--wrap=_read,--wrap=_write,--wrap=semihost_connected' : '' @@ -251,7 +282,7 @@ file MBED_LIB do end file "#{OBJDIR}/mbed_custom.o" => ['./build/mbed_custom.cpp'] do |t| - puts "Compiling #{t.source}" + puts "Compiling mbed_custom.cpp" sh "#{CCPP} #{CPPFLAGS} #{INCLUDE} #{DEFINES} -c -o #{t.name} #{t.prerequisites[0]}" end @@ -264,7 +295,7 @@ file "#{PROG}.bin" => ["#{PROG}.elf"] do end file "#{PROG}.elf" => OBJ do |t| - puts "Linking #{t.source}" + puts "Linking" sh "#{LD} #{LDFLAGS} #{OBJ} #{LIBS} -o #{OBJDIR}/#{t.name}" end @@ -276,6 +307,11 @@ rule '.o' => lambda{ |objfile| obj2src(objfile, 'cpp') } do |t| sh "#{CCPP} #{CPPFLAGS} #{INCLUDE} #{DEFINES} #{VERSION} -c -o #{t.name} #{t.source}" end +rule '.o' => lambda{ |objfile| obj2src(objfile, 'cxx') } do |t| + puts "Compiling #{t.source}" + sh "#{CCPP} #{CXXFLAGS} #{INCLUDE} #{DEFINES} #{VERSION} -c -o #{t.name} #{t.source}" +end + rule '.o' => lambda{ |objfile| obj2src(objfile, 'c') } do |t| puts "Compiling #{t.source}" sh "#{CC} #{CFLAGS} #{INCLUDE} #{DEFINES} #{VERSION} -c -o #{t.name} #{t.source}"