Связь m5ops.h с проектом C
У меня есть приложение C, которое использует функцию из операций Gem5 под названием "m5_dumpreset_stats()".
Итак, я сделал следующее, я включил заголовочный файл этой функции:
#include "../gem5-stable/util/m5/m5op.h"
Затем в моем исходном файле я вызвал функцию:
void foo()
{
m5_dumpreset_stats(0,0);
/* For loop */
m5_dumpreset_stats(0,0);
}
Для создания моего проекта я использую Makefile:
CC=arm-linux-gnueabi-gcc
CFLAGS=-g -c -Wall -O3 -mfpu=neon
LDFLAGS=-static
SOURCES=$ foo.c
OBJECTS=$(SOURCES:.c=.o)
EXECUTABLE=foo
all: $(TASKMAP) $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -lm -o $@
.c.o:
$(CC) $(CFLAGS) $< -lm -o $@
clean:
rm -fr $(OBJECTS) $(EXECUTABLE)
Мое первое предположение - я должен связать библиотеку с помощью Makefile, но, честно говоря, я не знаю, как? Может ли кто-нибудь показать мне правильный способ сделать это?
PS: m5_dumpreset_stats (задержка, период): сохранение и сброс статистики моделирования в файл с задержкой наносекунд; повторять это каждый период наносекунд.
3 ответа
Спасибо за ваш вклад. Это было мое решение: посмотрите, что я использую ядро ARM для моделирования. Я использовал Makefile.arm для создания библиотеки под названием "m5", затем мне пришлось внести следующие изменения в свой собственный Makefile:
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -lm -L"/home/anoir/gem5-stable/util/m5" -lm5 -o $@
и я сохранил включение в мой заголовочный файл для вызова m5op.h так:
#include "/home/anoir/gem5-stable/util/m5/m5op.h"
Наконец, я протестировал его в симуляторе, проверил файл статистики и отлично работает. Спасибо вам.
Поскольку ваш заголовок находится в каталоге, который обычно не ищется, скорее всего, это верно и для вашей библиотеки. Итак, вам понадобятся два флага: -l
ссылаться на библиотеку и -L
добавить другой каталог библиотеки для поиска.
Если бы моя библиотека была libm5op.a, расположенной в "../gem5-stable/util/m5", я мог бы сделать:
$(CC) $(LDFLAGS) $(OBJECTS) -lm -L"../gem5-stable/util/m5" -lm5op -o $@
или некоторые такие, которые соответствуют вашей ситуации.
Жесткий код сборки напрямую
Иногда проще взломать его и добавить встроенную сборку. Например, на aarch64
, чтобы сбросить статистику вы можете сделать:
mov x0, #0; mov x1, #0; .inst 0xFF000110 | (0x41 << 16);
Список некоторых из этих инструкций доступен здесь, и как вы можете вывести их самостоятельно, объясняется здесь.