Тестирование под несколько платформ через QEMU

Обсуждение вопросов, связанных с системой проведения турниров ejudge.
Post Reply
justforfun
Posts:2
Joined:29 December 2015, 13:53
Тестирование под несколько платформ через QEMU

Post by justforfun » 29 December 2015, 14:11

Добрый день!

Встала задача о тестировании решений на Си сразу под несколько платформ: грубо говоря, код должен быть таким, чтобы корректно проходить тесты сразу в нескольких окружениях (sparc, sparc64, mips, arm, ..., и всё это под разными ОС).

Часть решения уже есть -- сделаны QEMU-образы под все необходимые платформы и есть возможность устанавливать на них нужный софт и предоставлять им доступ к материнской (реальной) файловой системе или подключаться к ним по ssh чтобы что-то выполнить и прочитать результат.

Однако есть две проблемы.
Во-первых, код под целевую платформу нужно как-то скомпилировать. Здесь я пока что вижу только две опции: либо заставлять материнскую систему заниматься кросс-компиляцией и порождать сразу много исполняемых файлов (solution_sparc, solution_mips, ...), либо во избежание проблем с libc и прочими библиотеками -- подключаться в процессе сборки мейкфайлом по ssh к виртуальной машине и компилировать код прямо там.
Здесь же возникает и второй вопрос, гораздо более сложный: как запустить тестирование так, чтобы оно не пропустило программу, которая не выполняет тесты на одном из окружений? Если программа одна -- тут всё понятно, запустил на всех тестах и проверил, но если их несколько на один набор тестов -- не очень.

Какие есть способы найти решение для возникшей задачи, особенно в части её множественности?

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Тестирование под несколько платформ через QEMU

Post by cher » 29 December 2015, 20:53

Казалось бы, запустил программу на каждой платформе и проверил результат.

justforfun
Posts:2
Joined:29 December 2015, 13:53

Re: Тестирование под несколько платформ через QEMU

Post by justforfun » 01 January 2016, 12:48

Без ejudge понятно, что можно сделать так. А как сделать это через ejudge таким образом, что сохранить все его фишки?
Ведь насколько я понимаю, ejudge-execute запускает ровно одну программу, которая предварительно собирается тоже с использованием ejudge (и на этом этапе собрать сразу несколько программ -- это не проблема, а вот потом их запустить...).
Вероятно, вопрос глупый, но я пока что не очень понимаю как это можно сделать.

Post Reply