diff --git a/.travis.yml b/.travis.yml
index 4fa9f0b95a2ae1a0f2f4acdde976023a1e9bcaa2..a82a62975a215038e5cb4b7d34236a6321a8bb7a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,7 +3,14 @@ language: c
 cache: apt
 
 env:
-    - NPROC_MAX=8
+    - NPROC_MAX=8 BUILDTEST_MCU_GROUP=avr8
+    - NPROC_MAX=8 BUILDTEST_MCU_GROUP=msp430
+    - NPROC_MAX=8 BUILDTEST_MCU_GROUP=x86
+    - NPROC_MAX=8 BUILDTEST_MCU_GROUP=arm7
+    - NPROC_MAX=8 BUILDTEST_MCU_GROUP=cortex_m0
+    - NPROC_MAX=8 BUILDTEST_MCU_GROUP=cortex_m3_1
+    - NPROC_MAX=8 BUILDTEST_MCU_GROUP=cortex_m3_2
+    - NPROC_MAX=8 BUILDTEST_MCU_GROUP=cortex_m4
 
 before_install:
     - sudo apt-get install emdebian-archive-keyring
@@ -18,21 +25,7 @@ before_install:
 
 install:
     - >
-        sudo apt-get install \
-            build-essential \
-            gcc-multilib \
-            gcc-arm-none-eabi \
-            gcc-msp430 \
-            pcregrep \
-            libpcre3 \
-            qemu-system-x86 \
-            python3 \
-            g++-multilib \
-            gcc-avr \
-            binutils-avr \
-            avr-libc \
-            cppcheck \
-            doxygen
+        sudo apt-get install $(./dist/tools/travis-scripts/get-pkg-list.py)
     - git config --global user.email "travis@example.com"
     - git config --global user.name "Travis CI"
 
@@ -41,33 +34,7 @@ install:
     - git log -1 --pretty=format:%H riot/master
 
 script:
-    - make -s -C ./examples/default info-concurrency
-    - git rebase riot/master || git rebase --abort
-
-    - ./dist/tools/whitespacecheck/check.sh master || exit
-
-    - ./dist/tools/licenses/check.sh master --diff-filter=MR --error-exitcode=0 || exit
-    - ./dist/tools/licenses/check.sh master --diff-filter=AC || exit
-
-    - ./dist/tools/doccheck/check.sh master || exit
-
-    - ./dist/tools/externc/check.sh master || exit
-
-# TODO:
-#   Remove all but `master` parameters to cppcheck (and remove second
-#   invocation) once all warnings of cppcheck have been taken care of
-#   in master.
-    - ./dist/tools/cppcheck/check.sh master --diff-filter=MR --error-exitcode=0 || exit
-    - ./dist/tools/cppcheck/check.sh master --diff-filter=AC || exit
-
-    - make -C ./tests/unittests all test BOARD=native || exit
-# TODO:
-#   Reenable once https://github.com/RIOT-OS/RIOT/issues/2300 is
-#   resolved:
-#   - make -C ./tests/unittests all test BOARD=qemu-i386 || exit
-
-    - ./dist/tools/compile_test/compile_test.py
-    - ./dist/tools/pr_check/pr_check.sh riot/master
+    - ./dist/tools/travis-scripts/build_and_test.sh
 
 notifications:
     email: false
diff --git a/Makefile.buildtests b/Makefile.buildtests
index 4781c2c691255d3b619f71d7106e4cd7f9eeab55..1d669a271a527a870c1636c185fd5b4d0e969426 100644
--- a/Makefile.buildtests
+++ b/Makefile.buildtests
@@ -216,11 +216,14 @@ ifneq (, $(filter info-boards-supported info-boards-features-missing info-build,
   define board_missing_features
     FEATURES_PROVIDED := $(FEATURES_PROVIDED_BAK)
     -include $${RIOTBOARD}/${1}/Makefile.features
+    ifneq ($(BUILDTEST_MCU_GROUP), $$(FEATURES_MCU_GROUP))
+      BOARDS_FEATURES_MISSING += "${1} $${BUILDTEST_MCU_GROUP}"
+      BOARDS_WITH_MISSING_FEATURES += ${1}
+    endif
 
     FEATURES_MISSING := $$(filter-out $$(FEATURES_PROVIDED), $$(FEATURES_REQUIRED))
     ifneq (, $${FEATURES_MISSING})
       BOARDS_FEATURES_MISSING += "${1} $${FEATURES_MISSING}"
-
       ifneq (, $$(filter-out $$(FEATURES_OPTIONAL), $$(FEATURES_MISSING)))
         BOARDS_WITH_MISSING_FEATURES += ${1}
       endif
diff --git a/boards/airfy-beacon/Makefile.features b/boards/airfy-beacon/Makefile.features
index 498e6d7eeb2084810b918081ab08b782f64fdc98..f7dc503f5c86b409e0db7616cefd740ef3c182fa 100644
--- a/boards/airfy-beacon/Makefile.features
+++ b/boards/airfy-beacon/Makefile.features
@@ -1,2 +1,3 @@
 FEATURES_PROVIDED += cpp
 FEATURES_PROVIDED += periph_uart periph_gpio periph_random periph_rtt periph_cpuid
+FEATURES_MCU_GROUP = cortex_m0
diff --git a/boards/arduino-due/Makefile.features b/boards/arduino-due/Makefile.features
index 1cae147202cd7ce6f53b541b94cfb0be24adcabc..0f13ae3cacdade6243a3576ecd927e812b0d6e00 100644
--- a/boards/arduino-due/Makefile.features
+++ b/boards/arduino-due/Makefile.features
@@ -1,2 +1,3 @@
 FEATURES_PROVIDED += cpp
 FEATURES_PROVIDED += periph_uart periph_gpio periph_spi periph_random
+FEATURES_MCU_GROUP = cortex_m3_1
diff --git a/boards/arduino-mega2560/Makefile.features b/boards/arduino-mega2560/Makefile.features
index 285b07a6c6b28cc77d476d5b1e4a2594f5627645..675243084d23e384927a15248e183d2266e2ed59 100644
--- a/boards/arduino-mega2560/Makefile.features
+++ b/boards/arduino-mega2560/Makefile.features
@@ -1 +1,2 @@
 FEATURES_PROVIDED += periph_uart
+FEATURES_MCU_GROUP = avr8
diff --git a/boards/avsextrem/Makefile.features b/boards/avsextrem/Makefile.features
index a62395a35018fc9241b74e2f05075df4a1709846..b0d2b6d3aab01dd077cf0e458a87076ee293b052 100644
--- a/boards/avsextrem/Makefile.features
+++ b/boards/avsextrem/Makefile.features
@@ -1 +1,2 @@
 FEATURES_PROVIDED += transceiver periph_rtc
+FEATURES_MCU_GROUP = arm7
diff --git a/boards/cc2538dk/Makefile.features b/boards/cc2538dk/Makefile.features
index 8c7ec59b6845975515484b57ca5fea2d10bd7b7d..62702bae3ff0e6f037692b9655736c04c4a9d036 100644
--- a/boards/cc2538dk/Makefile.features
+++ b/boards/cc2538dk/Makefile.features
@@ -1,2 +1,3 @@
 FEATURES_PROVIDED += cpp
 FEATURES_PROVIDED += periph_uart periph_gpio periph_random periph_cpuid
+FEATURES_MCU_GROUP = cortex_m3_1
diff --git a/boards/chronos/Makefile.features b/boards/chronos/Makefile.features
index a62395a35018fc9241b74e2f05075df4a1709846..ca6ca1295adfc448e7b54528bd93d7392f554ec8 100644
--- a/boards/chronos/Makefile.features
+++ b/boards/chronos/Makefile.features
@@ -1 +1,2 @@
 FEATURES_PROVIDED += transceiver periph_rtc
+FEATURES_MCU_GROUP = msp430
diff --git a/boards/f4vi1/Makefile.features b/boards/f4vi1/Makefile.features
index 4e85a0c0fa90de1512df91b054386e7eeadb091e..ad65d4af319d3d9b83a4e388a3701dbfe1d542c6 100644
--- a/boards/f4vi1/Makefile.features
+++ b/boards/f4vi1/Makefile.features
@@ -1,2 +1,3 @@
 FEATURES_PROVIDED += cpp
 FEATURES_PROVIDED += periph_uart
+FEATURES_MCU_GROUP = cortex_m4
diff --git a/boards/fox/Makefile.features b/boards/fox/Makefile.features
index 1fd4646dd7985d5c6018d313e739bde4158e2d48..dde11483cfeee9ca054f2e8c39c1176ae058a136 100644
--- a/boards/fox/Makefile.features
+++ b/boards/fox/Makefile.features
@@ -1 +1,2 @@
 FEATURES_PROVIDED += transceiver periph_gpio periph_uart periph_spi periph_i2c periph_rtt periph_cpuid cpp
+FEATURES_MCU_GROUP = cortex_m3_1
diff --git a/boards/iot-lab_M3/Makefile.features b/boards/iot-lab_M3/Makefile.features
index 1fd4646dd7985d5c6018d313e739bde4158e2d48..dde11483cfeee9ca054f2e8c39c1176ae058a136 100644
--- a/boards/iot-lab_M3/Makefile.features
+++ b/boards/iot-lab_M3/Makefile.features
@@ -1 +1,2 @@
 FEATURES_PROVIDED += transceiver periph_gpio periph_uart periph_spi periph_i2c periph_rtt periph_cpuid cpp
+FEATURES_MCU_GROUP = cortex_m3_1
diff --git a/boards/mbed_lpc1768/Makefile.features b/boards/mbed_lpc1768/Makefile.features
index 4e85a0c0fa90de1512df91b054386e7eeadb091e..a94364238f63f0e5701f0b099f015e0416c7f3f9 100644
--- a/boards/mbed_lpc1768/Makefile.features
+++ b/boards/mbed_lpc1768/Makefile.features
@@ -1,2 +1,3 @@
 FEATURES_PROVIDED += cpp
 FEATURES_PROVIDED += periph_uart
+FEATURES_MCU_GROUP = cortex_m3_1
diff --git a/boards/msb-430/Makefile.features b/boards/msb-430/Makefile.features
new file mode 100644
index 0000000000000000000000000000000000000000..3b961e07b1401452571d4cc5190012de1f6af9af
--- /dev/null
+++ b/boards/msb-430/Makefile.features
@@ -0,0 +1 @@
+FEATURES_MCU_GROUP = msp430
diff --git a/boards/msb-430h/Makefile.features b/boards/msb-430h/Makefile.features
index 3f4b26f74272d2d70a1e9d620e63eee14d91fb62..404ff76b5c05ea1ea824c95d7ae1cdd1fd60a5cc 100644
--- a/boards/msb-430h/Makefile.features
+++ b/boards/msb-430h/Makefile.features
@@ -1 +1,2 @@
 FEATURES_PROVIDED += transceiver config
+FEATURES_MCU_GROUP = msp430
diff --git a/boards/msba2/Makefile.features b/boards/msba2/Makefile.features
index f853e7d3de5005ff380768f46475d2636a5d9f07..3c838174e456502faefca1ee7254281a54f36769 100644
--- a/boards/msba2/Makefile.features
+++ b/boards/msba2/Makefile.features
@@ -1 +1,2 @@
 FEATURES_PROVIDED += transceiver periph_pwm periph_rtc cpp config
+FEATURES_MCU_GROUP = arm7
diff --git a/boards/msbiot/Makefile.features b/boards/msbiot/Makefile.features
index 9c23182ee1b14ef738a7a30fe128bea4c9f7ec29..1826fdc268184446f27c793e275fa951c8e40c26 100644
--- a/boards/msbiot/Makefile.features
+++ b/boards/msbiot/Makefile.features
@@ -1,3 +1,4 @@
 FEATURES_PROVIDED += cpp
 FEATURES_PROVIDED += periph_uart periph_gpio periph_spi periph_i2c periph_pwm
 FEATURES_PROVIDED += transceiver
+FEATURES_MCU_GROUP = cortex_m4
diff --git a/boards/native/Makefile.features b/boards/native/Makefile.features
index 4ad14738b855c91095eaa3ee6d7d584a87556480..ef4f15ffd5b86bf54265b36dd638afb0d04332d9 100644
--- a/boards/native/Makefile.features
+++ b/boards/native/Makefile.features
@@ -1,3 +1,4 @@
 FEATURES_PROVIDED += transceiver periph_cpuid config cpp
 FEATURES_PROVIDED += periph_random
 FEATURES_PROVIDED += periph_rtc
+FEATURES_MCU_GROUP = x86
diff --git a/boards/nucleo-f334/Makefile.features b/boards/nucleo-f334/Makefile.features
index 0e8316f9258085f6f8400c49645fe7d90eff417f..2aa1179ca3c4e1e65fb3a685e03b9ae6a8059c7f 100644
--- a/boards/nucleo-f334/Makefile.features
+++ b/boards/nucleo-f334/Makefile.features
@@ -1,2 +1,3 @@
 FEATURES_PROVIDED += periph_uart
 FEATURES_PROVIDED += cpp
+FEATURES_MCU_GROUP = cortex_m4
diff --git a/boards/nucleo-l1/Makefile.features b/boards/nucleo-l1/Makefile.features
index 67643f6de21596d0468afc0a190df0cbddcb6717..9ede20035642ff8bc9952087ed5b7ef8e6e70b3e 100644
--- a/boards/nucleo-l1/Makefile.features
+++ b/boards/nucleo-l1/Makefile.features
@@ -1,2 +1,3 @@
 FEATURES_PROVIDED += periph_gpio periph_uart periph_spi periph_i2c periph_cpuid
 FEATURES_PROVIDED += cpp
+FEATURES_MCU_GROUP = cortex_m3_2
diff --git a/boards/openmote/Makefile.features b/boards/openmote/Makefile.features
index 8c7ec59b6845975515484b57ca5fea2d10bd7b7d..6d5613490482bdaf48138bf3c1d2dc680d9fd18d 100644
--- a/boards/openmote/Makefile.features
+++ b/boards/openmote/Makefile.features
@@ -1,2 +1,3 @@
 FEATURES_PROVIDED += cpp
 FEATURES_PROVIDED += periph_uart periph_gpio periph_random periph_cpuid
+FEATURES_MCU_GROUP = cortex_m3_2
diff --git a/boards/pca10000/Makefile.features b/boards/pca10000/Makefile.features
index 498e6d7eeb2084810b918081ab08b782f64fdc98..f7dc503f5c86b409e0db7616cefd740ef3c182fa 100644
--- a/boards/pca10000/Makefile.features
+++ b/boards/pca10000/Makefile.features
@@ -1,2 +1,3 @@
 FEATURES_PROVIDED += cpp
 FEATURES_PROVIDED += periph_uart periph_gpio periph_random periph_rtt periph_cpuid
+FEATURES_MCU_GROUP = cortex_m0
diff --git a/boards/pca10005/Makefile.features b/boards/pca10005/Makefile.features
index 498e6d7eeb2084810b918081ab08b782f64fdc98..f7dc503f5c86b409e0db7616cefd740ef3c182fa 100644
--- a/boards/pca10005/Makefile.features
+++ b/boards/pca10005/Makefile.features
@@ -1,2 +1,3 @@
 FEATURES_PROVIDED += cpp
 FEATURES_PROVIDED += periph_uart periph_gpio periph_random periph_rtt periph_cpuid
+FEATURES_MCU_GROUP = cortex_m0
diff --git a/boards/pttu/Makefile.features b/boards/pttu/Makefile.features
index 54bc2978ab495f4d7f36b66b06ea8467b1da5fdf..26efb4612c735ac7d7eb74e328d671df3feafccc 100644
--- a/boards/pttu/Makefile.features
+++ b/boards/pttu/Makefile.features
@@ -1,3 +1,4 @@
 # Enable this after fixing https://github.com/RIOT-OS/RIOT/issues/659
 #FEATURES_PROVIDED += transceiver
 FEATURES_PROVIDED += periph_rtc
+FEATURES_MCU_GROUP = arm7
diff --git a/boards/qemu-i386/Makefile.features b/boards/qemu-i386/Makefile.features
new file mode 100644
index 0000000000000000000000000000000000000000..24a62d088eabf713ff21dc37447292f838cb6dfe
--- /dev/null
+++ b/boards/qemu-i386/Makefile.features
@@ -0,0 +1 @@
+FEATURES_MCU_GROUP = x86
diff --git a/boards/redbee-econotag/Makefile.features b/boards/redbee-econotag/Makefile.features
index af23a974c8974d60533aea93ea25168a1cb04c66..5bc079ac1ecb02ac55364fbceb551777a7c52408 100644
--- a/boards/redbee-econotag/Makefile.features
+++ b/boards/redbee-econotag/Makefile.features
@@ -1 +1,2 @@
 FEATURES_PROVIDED += transceiver
+FEATURES_MCU_GROUP = arm7
diff --git a/boards/samr21-xpro/Makefile.features b/boards/samr21-xpro/Makefile.features
index fc8df2c7087bd31a401412b697f12839d68af0da..3266fbb712f2ab91f4d2bc02545e97d0b670228a 100644
--- a/boards/samr21-xpro/Makefile.features
+++ b/boards/samr21-xpro/Makefile.features
@@ -1 +1,2 @@
 FEATURES_PROVIDED += transceiver periph_gpio periph_spi cpp periph_timer periph_uart periph_i2c cpp periph_rtc periph_cpuid
+FEATURES_MCU_GROUP = cortex_m0
diff --git a/boards/spark-core/Makefile.features b/boards/spark-core/Makefile.features
index 4e85a0c0fa90de1512df91b054386e7eeadb091e..6bc98fbf6f4f61be812023df417988342920f6b4 100644
--- a/boards/spark-core/Makefile.features
+++ b/boards/spark-core/Makefile.features
@@ -1,2 +1,3 @@
 FEATURES_PROVIDED += cpp
 FEATURES_PROVIDED += periph_uart
+FEATURES_MCU_GROUP = cortex_m3_2
diff --git a/boards/stm32f0discovery/Makefile.features b/boards/stm32f0discovery/Makefile.features
index 19f1b8ce421ae4083526b376737a137428a1bc6c..172ca8e8be9747ec087e3d7d0ebbd800cae50349 100644
--- a/boards/stm32f0discovery/Makefile.features
+++ b/boards/stm32f0discovery/Makefile.features
@@ -1 +1,2 @@
 FEATURES_PROVIDED += periph_adc periph_gpio periph_spi periph_uart cpp
+FEATURES_MCU_GROUP = cortex_m0
diff --git a/boards/stm32f3discovery/Makefile.features b/boards/stm32f3discovery/Makefile.features
index 4dfa4fad14db903672c15a38d30c0e54532a3470..d81085ab262756cd818aec12bc7fe1fbaef82022 100644
--- a/boards/stm32f3discovery/Makefile.features
+++ b/boards/stm32f3discovery/Makefile.features
@@ -1,2 +1,3 @@
 FEATURES_PROVIDED += cpp
 FEATURES_PROVIDED += periph_uart periph_gpio periph_pwm periph_spi
+FEATURES_MCU_GROUP = cortex_m3_2
diff --git a/boards/stm32f4discovery/Makefile.features b/boards/stm32f4discovery/Makefile.features
index c2fa3d8542c60067a08bb400827afbd7ae41115a..488ed7842b5e2124d146cb62ff1cdd2df2944042 100644
--- a/boards/stm32f4discovery/Makefile.features
+++ b/boards/stm32f4discovery/Makefile.features
@@ -1,3 +1,4 @@
 FEATURES_PROVIDED += cpp
 FEATURES_PROVIDED += periph_uart periph_gpio periph_spi periph_i2c periph_pwm periph_random \
                      periph_adc periph_dac
+FEATURES_MCU_GROUP = cortex_m4
diff --git a/boards/telosb/Makefile.features b/boards/telosb/Makefile.features
index af23a974c8974d60533aea93ea25168a1cb04c66..b73c21bb32f60fa4073db791860dc82d41f6f575 100644
--- a/boards/telosb/Makefile.features
+++ b/boards/telosb/Makefile.features
@@ -1 +1,2 @@
 FEATURES_PROVIDED += transceiver
+FEATURES_MCU_GROUP = msp430
diff --git a/boards/udoo/Makefile.features b/boards/udoo/Makefile.features
index 1cae147202cd7ce6f53b541b94cfb0be24adcabc..fb64f1ac0b0b6622330a014017d4b47a5a3f4182 100644
--- a/boards/udoo/Makefile.features
+++ b/boards/udoo/Makefile.features
@@ -1,2 +1,3 @@
 FEATURES_PROVIDED += cpp
 FEATURES_PROVIDED += periph_uart periph_gpio periph_spi periph_random
+FEATURES_MCU_GROUP = cortex_m3_2
diff --git a/boards/wsn430-v1_3b/Makefile.features b/boards/wsn430-v1_3b/Makefile.features
index 3f4b26f74272d2d70a1e9d620e63eee14d91fb62..404ff76b5c05ea1ea824c95d7ae1cdd1fd60a5cc 100644
--- a/boards/wsn430-v1_3b/Makefile.features
+++ b/boards/wsn430-v1_3b/Makefile.features
@@ -1 +1,2 @@
 FEATURES_PROVIDED += transceiver config
+FEATURES_MCU_GROUP = msp430
diff --git a/boards/wsn430-v1_4/Makefile.features b/boards/wsn430-v1_4/Makefile.features
index 3f4b26f74272d2d70a1e9d620e63eee14d91fb62..404ff76b5c05ea1ea824c95d7ae1cdd1fd60a5cc 100644
--- a/boards/wsn430-v1_4/Makefile.features
+++ b/boards/wsn430-v1_4/Makefile.features
@@ -1 +1,2 @@
 FEATURES_PROVIDED += transceiver config
+FEATURES_MCU_GROUP = msp430
diff --git a/boards/yunjia-nrf51822/Makefile.features b/boards/yunjia-nrf51822/Makefile.features
index 498e6d7eeb2084810b918081ab08b782f64fdc98..f7dc503f5c86b409e0db7616cefd740ef3c182fa 100644
--- a/boards/yunjia-nrf51822/Makefile.features
+++ b/boards/yunjia-nrf51822/Makefile.features
@@ -1,2 +1,3 @@
 FEATURES_PROVIDED += cpp
 FEATURES_PROVIDED += periph_uart periph_gpio periph_random periph_rtt periph_cpuid
+FEATURES_MCU_GROUP = cortex_m0
diff --git a/boards/z1/Makefile.features b/boards/z1/Makefile.features
index af23a974c8974d60533aea93ea25168a1cb04c66..b73c21bb32f60fa4073db791860dc82d41f6f575 100644
--- a/boards/z1/Makefile.features
+++ b/boards/z1/Makefile.features
@@ -1 +1,2 @@
 FEATURES_PROVIDED += transceiver
+FEATURES_MCU_GROUP = msp430
diff --git a/dist/tools/travis-scripts/build_and_test.sh b/dist/tools/travis-scripts/build_and_test.sh
new file mode 100755
index 0000000000000000000000000000000000000000..0f9763dad1988cdbd3f8fe6e2484cd813197a500
--- /dev/null
+++ b/dist/tools/travis-scripts/build_and_test.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+set -e
+
+make -s -C ./examples/default info-concurrency
+git rebase riot/master || git rebase --abort
+
+./dist/tools/whitespacecheck/check.sh master || exit
+
+./dist/tools/licenses/check.sh master --diff-filter=MR --error-exitcode=0 || exit
+./dist/tools/licenses/check.sh master --diff-filter=AC || exit
+
+./dist/tools/doccheck/check.sh master || exit
+
+./dist/tools/externc/check.sh master || exit
+
+# TODO:
+#   Remove all but `master` parameters to cppcheck (and remove second
+#   invocation) once all warnings of cppcheck have been taken care of
+#   in master.
+./dist/tools/cppcheck/check.sh master --diff-filter=MR --error-exitcode=0 || exit
+./dist/tools/cppcheck/check.sh master --diff-filter=AC || exit
+
+if [[ $BUILDTEST_MCU_GROUP ]]
+then
+	if [ "$BUILDTEST_MCU_GROUP" == "x86" ]
+	then
+
+		make -C ./tests/unittests all test BOARD=native || exit
+		# TODO:
+		#   Reenable once https://github.com/RIOT-OS/RIOT/issues/2300 is
+		#   resolved:
+		#   - make -C ./tests/unittests all test BOARD=qemu-i386 || exit
+	fi
+	./dist/tools/compile_test/compile_test.py
+	./dist/tools/pr_check/pr_check.sh riot/master
+fi
diff --git a/dist/tools/travis-scripts/get-pkg-list.py b/dist/tools/travis-scripts/get-pkg-list.py
new file mode 100755
index 0000000000000000000000000000000000000000..3f990a96d65db3d3dc6c6fb287646c80f117eadf
--- /dev/null
+++ b/dist/tools/travis-scripts/get-pkg-list.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+
+import os
+
+arm_mcu_groups = ["arm7", "cortex_m0", "cortex_m3", "cortex_m3_2", "cortex_m4"]
+msp_mcu_groups = ["msp430"]
+x86_mcu_groups = ["x86"]
+avr8_mcu_groups = ["avr8"]
+known_mcu_groups = arm_mcu_groups + msp_mcu_groups + x86_mcu_groups + avr8_mcu_groups
+
+common_pkgs = ["pcregrep", "libpcre3", "python3", "cppcheck", "doxygen"]
+arm_pkgs    = ["gcc-arm-none-eabi"]
+msp_pkgs    = ["gcc-msp430"]
+x86_pkgs    = ["qemu-system-x86", "g++-multilib", "gcc-multilib", \
+               "build-essential"]
+avr8_pkgs   = ["gcc-avr", "binutils-avr", "avr-libc"]
+all_mcu_pkgs    = arm_pkgs + msp_pkgs + x86_pkgs + avr8_pkgs
+
+
+pkgs_to_install = common_pkgs
+if "BUILDTEST_MCU_GROUP" in os.environ:
+	mcu_group = os.environ["BUILDTEST_MCU_GROUP"]
+	if mcu_group not in known_mcu_groups:
+		pkgs_to_install += all_mcu_pkgs
+	elif mcu_group in arm_mcu_groups:
+		pkgs_to_install += arm_pkgs
+	elif mcu_group in msp_mcu_groups:
+		pkgs_to_install += msp_pkgs
+	elif mcu_group in x86_mcu_groups:
+		pkgs_to_install += x86_pkgs
+	elif mcu_group in avr8_mcu_groups:
+		pkgs_to_install += avr8_pkgs
+else:
+	pkgs_to_install += all_mcu_pkgs
+
+print " ".join(pkgs_to_install)