Testcases: add support for running on mips & mipsel with qemu (#543)
diff --git a/tests/SConstruct b/tests/SConstruct
index b48c327..c1b0a75 100644
--- a/tests/SConstruct
+++ b/tests/SConstruct
@@ -14,6 +14,7 @@
 PROTOC      Path to protoc binary
 PROTOCFLAGS Arguments to pass protoc
 NODEFARGS   Do not add the default CCFLAGS
+NOVALGRIND  Do not use valgrind for memory checks
 
 For example, for a clang build, use:
 scons CC=clang CXX=clang++
@@ -25,10 +26,13 @@
 env.SConsignFile("build/sconsign")
 env.Replace(CONFIGUREDIR = "build/config")
 
-if ARGUMENTS.get('PLATFORM') == 'STM32':
-    set_stm32_platform(env)
-elif ARGUMENTS.get('PLATFORM') == 'AVR':
-    set_avr_platform(env)
+if ARGUMENTS.get('PLATFORM'):
+    platform_func = platforms.get(ARGUMENTS.get('PLATFORM'))
+    if not platform_func:
+        print("Supported platforms: " + str(platforms.keys()))
+        raise Exception("Unsupported platform: " + ARGUMENTS.get('PLATFORM'))
+    else:
+        platform_func(env)
 
 # Limit memory usage. This is to catch problems like issue #338
 try:
@@ -54,6 +58,7 @@
 if 'PROTOC' in ARGUMENTS: env.Replace(PROTOC = ARGUMENTS['PROTOC'])
 if 'PROTOCFLAGS' in ARGUMENTS: env.Replace(PROTOCFLAGS = ARGUMENTS['PROTOCFLAGS'])
 if 'NODEFARGS' in ARGUMENTS: env.Replace(NODEFARGS = ARGUMENTS['NODEFARGS'])
+if 'NOVALGRIND' in ARGUMENTS: env.Replace(NOVALGRIND = ARGUMENTS['NOVALGRIND'])
 
 # Add the builders defined in site_init.py
 add_nanopb_builders(env)
@@ -199,7 +204,7 @@
 
 env.SetDefault(CORECFLAGS = '')
 
-if not env.get("EMBEDDED"):
+if not env.get("EMBEDDED") and not env.get("NOVALGRIND"):
     valgrind = env.WhereIs('valgrind')
     if valgrind:
         env.SetDefault(VALGRIND = valgrind)
diff --git a/tests/site_scons/platforms/mips/__init__.py b/tests/site_scons/platforms/mips/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/site_scons/platforms/mips/__init__.py
diff --git a/tests/site_scons/platforms/mips/mips.py b/tests/site_scons/platforms/mips/mips.py
new file mode 100644
index 0000000..039907f
--- /dev/null
+++ b/tests/site_scons/platforms/mips/mips.py
@@ -0,0 +1,11 @@
+# Compiler settings for running the tests on mips-linux-gnu (big endian)
+# using qemu. Requires following packages to be installed:
+# gcc-mips-linux-gnu g++-mips-linux-gnu qemu-user
+
+def set_mips_platform(env):
+    env.Replace(EMBEDDED = "MIPS")
+    env.Replace(CC  = "mips-linux-gnu-gcc",
+                CXX = "mips-linux-gnu-g++")
+    env.Replace(TEST_RUNNER = "/usr/bin/qemu-mips")
+    env.Append(LINKFLAGS = "-static")
+    
diff --git a/tests/site_scons/platforms/mipsel/__init__.py b/tests/site_scons/platforms/mipsel/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/site_scons/platforms/mipsel/__init__.py
diff --git a/tests/site_scons/platforms/mipsel/mipsel.py b/tests/site_scons/platforms/mipsel/mipsel.py
new file mode 100644
index 0000000..46b7aba
--- /dev/null
+++ b/tests/site_scons/platforms/mipsel/mipsel.py
@@ -0,0 +1,11 @@
+# Compiler settings for running the tests on mipsel-linux-gnu using
+# qemu. Requires following packages to be installed:
+# gcc-mipsel-linux-gnu g++-mipsel-linux-gnu qemu-user
+
+def set_mipsel_platform(env):
+    env.Replace(EMBEDDED = "MIPSEL")
+    env.Replace(CC  = "mipsel-linux-gnu-gcc",
+                CXX = "mipsel-linux-gnu-g++")
+    env.Replace(TEST_RUNNER = "/usr/bin/qemu-mipsel")
+    env.Append(LINKFLAGS = "-static")
+    
diff --git a/tests/site_scons/site_init.py b/tests/site_scons/site_init.py
index 0e485ac..c0031b8 100644
--- a/tests/site_scons/site_init.py
+++ b/tests/site_scons/site_init.py
@@ -3,6 +3,15 @@
 import re
 from platforms.stm32.stm32 import set_stm32_platform
 from platforms.avr.avr import set_avr_platform
+from platforms.mips.mips import set_mips_platform
+from platforms.mipsel.mipsel import set_mipsel_platform
+
+platforms = {
+    'STM32': set_stm32_platform,
+    'AVR': set_avr_platform,
+    'MIPS': set_mips_platform,
+    'MIPSEL': set_mipsel_platform,
+}
 
 try:
     # Make terminal colors work on windows