I am using arm-none-eabi-* (7 2018-q2-update) to link with newlib-nano to use the NE10 library in a bare metal envirolment.
It looks like i am unable to be successful in compiling the code with newlib nano as i get many undefined references. I have messed up the makefile (which may look shabby) code from what it used to be for which i have been trying to link withour success.
I do not know what am I missing. It looks like calls to : malloc memmove free should be included in newlib. I am also unable to link the math functions for which i try to include libm libgcc...
My link process just fails(fails when arm-none-eabi-ld is called!) a copy of the makefile is below
An extract of errors or output log while making :
arm-none-eabi-ld -T src/linker32.ld -Map output.map -o build/kernel7.elf -static build/gpio_test_c.o build/serial_c.o build/cstart_c.o build/NE10_sample_real_fft_c.o build/interrupts_c.o build/Ne10Test_c.o build/mailbox_c.o build/start32_s.o -L. -LC:/Users/Sheroy/Desktop/RpiBareMetal/Codes -lNE10
C:/Users/Sheroy/Desktop/RpiBareMetal/Codes\libNE10.a(NE10_abs.c.obj): In function `ne10_abs_float_c':
NE10_abs.c:(.text+0x14): undefined reference to `fabs'
C:/Users/Sheroy/Desktop/RpiBareMetal/Codes\libNE10.a(NE10_abs.c.obj): In function `ne10_abs_vec2f_c':
NE10_abs.c:(.text+0x44): undefined reference to `fabs'
NE10_abs.c:(.text+0x58): undefined reference to `fabs'
C:/Users/Sheroy/Desktop/RpiBareMetal/Codes\libNE10.a(NE10_abs.c.obj): In function `ne10_abs_vec3f_c':
NE10_abs.c:(.text+0x8a): undefined reference to `fabs'
NE10_abs.c:(.text+0x9e): undefined reference to `fabs'
NE10_fft.c:(.text+0x70): undefined reference to `cos'
NE10_fft.c:(.text+0x80): undefined reference to `sin'
C:/Users/Sheroy/Desktop/RpiBareMetal/Codes\libNE10.a(NE10_fft.c.obj): In function `ne10_fft_generate_twiddles_line_transposed_float32':
NE10_fft.c:(.text+0x128): undefined reference to `cos'
NE10_fft.c:(.text+0x138): undefined reference to `sin'
C:/Users/Sheroy/Desktop/RpiBareMetal/Codes\libNE10.a(NE10_fft.c.obj): In function `ne10_fft_generate_twiddles_line_int32':
NE10_fft.c:(.text+0x1e0): undefined reference to `cos'
NE10_fft.c:(.text+0x1f0): undefined reference to `floor'
NE10_fft.c:(.text+0x200): undefined reference to `sin'
NE10_fft.c:(.text+0x210): undefined reference to `floor'
C:/Users/Sheroy/Desktop/RpiBareMetal/Codes\libNE10.a(NE10_fft.c.obj): In function `ne10_factor.part.0':
NE10_fft.c:(.text+0x2a0): undefined reference to `__aeabi_idiv'
NE10_fft.c:(.text+0x31e): undefined reference to `__aeabi_idiv'
C:/Users/Sheroy/Desktop/RpiBareMetal/Codes\libNE10.a(NE10_fft.c.obj): In function `ne10_fft_generate_twiddles_int32':
NE10_fft.c:(.text+0x3a4): undefined reference to `__aeabi_idiv'
C:/Users/Sheroy/Desktop/RpiBareMetal/Codes\libNE10.a(NE10_fft.c.obj): In function `ne10_fft_generate_twiddles_impl_float32':
NE10_fft.c:(.text+0x454): undefined reference to `__aeabi_idiv'
C:/Users/Sheroy/Desktop/RpiBareMetal/Codes\libNE10.a(NE10_fft.c.obj): In function `ne10_fft_alloc_c2c_float32_neon':
NE10_fft.c:(.text+0x4b8): undefined reference to `malloc'
NE10_fft.c:(.text+0x542): undefined reference to `memmove'
NE10_fft.c:(.text+0x572): undefined reference to `free'
C:/Users/Sheroy/Desktop/RpiBareMetal/Codes\libNE10.a(NE10_fft.c.obj): In function `ne10_fft_alloc_c2c_int32_neon':
NE10_fft.c:(.text+0x5bc): undefined reference to `malloc'
NE10_fft.c:(.text+0x63a): undefined reference to `memmove'
NE10_fft.c:(.text+0x660): undefined reference to `free'
C:/Users/Sheroy/Desktop/RpiBareMetal/Codes\libNE10.a(NE10_fft.c.obj): In function `ne10_fft_destroy_c2c_float32':
NE10_fft.c:(.text+0x6b0): undefined reference to `free'
C:/Users/Sheroy/Desktop/RpiBareMetal/Codes\libNE10.a(NE10_fft.c.obj): In function `ne10_fft_destroy_c2c_int32':
NE10_fft.c:(.text+0x6b4): undefined reference to `free'
and a lot more undefined references...
The makefile is below:
ARMGNU ?= arm-none-eabi-
-IC:\Users\Sheroy\Desktop\RpiBareMetal\Codes\Ne10-master\Ne10-master\inc
INCPATH = -Iinclude \
-IC:/Users/Sheroy/Desktop/RpiBareMetal/Codes/Ne10-master/Ne10-master/inc
-LC:\Users\Sheroy\Desktop\RpiBareMetal\Codes\
SHLIB = -L. -LC:/Users/Sheroy/Desktop/RpiBareMetal/Codes -lNE10
libs = -lm -lc -lgcc -lnosys
Link for code size
GC=-Wl,--gc-sections
CPUOPS = -O2 -mfloat-abi=hard -mthumb -mcpu=cortex-a53 -mfpu=neon-vfpv4
--specs=nano.specs --specs=nosys.specs -nostdlib
COPS = --specs=nano.specs --specs=nosys.specs $(libs) \
$(CPUOPS) -Wall -nostartfiles -ffreestanding $(INCPATH) $(GC)
ASMOPS = $(INCPATH) $(CPUOPS) $(libs)
-u floor -u sin -u cos -u fabs -u malloc -u memcpy -u free -u __aeabi_idiv -u sqrt
LDOPS = -static $(OBJ_FILES) $(SHLIB)
BUILD_DIR = build
SRC_DIR = src
all :kernel7.img
clean:
del $(BUILD_DIR)*.o
del $(BUILD_DIR)*.d
del $(BUILD_DIR)*.elf
$(BUILD_DIR)/%_c.o: $(SRC_DIR)/%.c
mkdir -p $(@D)
$(ARMGNU)gcc $(COPS) -MD -H -c $< -o $@
$(BUILD_DIR)/%_s.o: $(SRC_DIR)/%.S
$(ARMGNU)gcc $(ASMOPS) -MD -c $< -o $@
C_FILES = $(wildcard src/*.c)
ASM_FILES = $(wildcard src/*.S)
OBJ_FILES = $(wildcard $(BUILD_DIR)/*.o)
OBJ_FILES = $(C_FILES:$(SRC_DIR)/%.c=$(BUILD_DIR)/%_c.o)
OBJ_FILES += $(ASM_FILES:$(SRC_DIR)/%.S=$(BUILD_DIR)/%_s.o)
DEP_FILES = $(OBJ_FILES:%.o=%.d)
-include $(DEP_FILES)
include the previously built object files
OBJ_FILES += $(wildcard $(BUILD_DIR)/*.o)
kernel7.img: $(SRC_DIR)/linker32.ld $(OBJ_FILES)
$(ARMGNU)ld $(SHLIB) -Map output.map -o $(BUILD_DIR)/kernel7.elf $(OBJ_FILES) $(SHLIB)
$(ARMGNU)ld -T src/linker32.ld -Map output.map -o $(BUILD_DIR)/kernel7.elf $(LDOPS)
$(ARMGNU)objcopy $(BUILD_DIR)/kernel7.elf -O binary kernel7.img
$(ARMGNU)nm -n $(BUILD_DIR)/kernel7.elf > $(BUILD_DIR)/output.symbol
$(ARMGNU)objdump -D $(BUILD_DIR)/kernel7.elf > $(BUILD_DIR)/output.list
readelf.exe -x .rodata $(BUILD_DIR)/kernel7.elf > $(BUILD_DIR)/rodata.list