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