Поскольку вы делаете это для модульного тестирования, я предполагаю, что у вас нет проблем с компиляцией специально для модульных тестов (возможно, даже не для целевой архитектуры).
env.h
:
#ifdef UNIT_TESTING
extern int stack[0x2000];
#define BOOT_DATA_ADDRESS (stack)
#endif
boot.h
:
#include "env.h"
#ifndef BOOT_DATA_ADDRESS
#define BOOT_DATA_ADDRESS ((void *)0xdeadbeef)
#endif
void BootDataReadTable(void);
boot.c
:
#include <stdio.h>
#include "boot.h"
void BootDataReadTable(void)
{
printf("BOOT_DATA_ADDRESS = %p\n", BOOT_DATA_ADDRESS);
}
main.c
:
#include "boot.h"
int main(int argc, char **argv)
{
BootDataReadTable();
}
test_boot.c
:
#include "boot.h"
int stack[0x2000] = {0};
void test_BootDataReadTable(void)
{
BootDataReadTable();
}
int main(int argc, char **argv)
{
test_BootDataReadTable();
}
Makefile
:
demo: main test_boot
./main
./test_boot
main::
cc -o main main.c boot.c
test_boot::
cc -DUNIT_TESTING -o test_boot test_boot.c boot.c
вывод:
cc -o main main.c boot.c
cc -DUNIT_TESTING -o test_boot test_boot.c boot.c
./main
BOOT_DATA_ADDRESS = 0xdeadbeef
./test_boot
BOOT_DATA_ADDRESS = 0x601060