Связь 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);

Список некоторых из этих инструкций доступен здесь, и как вы можете вывести их самостоятельно, объясняется здесь.

Другие вопросы по тегам