Skip to content

Commit 0228657

Browse files
committed
make: support picolib and newlib
use `make PICOLIB=1` to compile with picolib
1 parent 4302e4f commit 0228657

File tree

4 files changed

+72
-31
lines changed

4 files changed

+72
-31
lines changed

AppMakefile.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ $$(BUILDDIR)/$(1):
109109

110110
# First step doesn't actually compile, just generate header dependency information
111111
# More info on our approach here: http://stackoverflow.com/questions/97338
112-
$$(BUILDDIR)/$(1)/%.o: %.c | $$(BUILDDIR)/$(1) newlib-$$(NEWLIB_VERSION_$(1))
112+
$$(BUILDDIR)/$(1)/%.o: %.c | $$(BUILDDIR)/$(1) $$(TOCK_LIBC_FOLDER_$(1))
113113
$$(TRACE_CC)
114114
$$(Q)$$(TOOLCHAIN_$(1))$$(CC_$(1)) $$(CFLAGS) $$(CFLAGS_$(1)) $$(CPPFLAGS) $$(CPPFLAGS_$(1)) -MF"$$(@:.o=.d)" -MG -MM -MP -MT"$$(@:.o=.d)@" -MT"$$@" "$$<"
115115
$$(Q)$$(TOOLCHAIN_$(1))$$(CC_$(1)) $$(CFLAGS) $$(CFLAGS_$(1)) $$(CPPFLAGS) $$(CPPFLAGS_$(1)) -c -o $$@ $$<

Configuration.mk

Lines changed: 44 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -251,10 +251,20 @@ else ifeq ($(CC_rv32_version_major),13)
251251
else
252252
NEWLIB_VERSION_rv32 := 4.3.0.20230120
253253
endif
254-
NEWLIB_VERSION_rv32i := $(NEWLIB_VERSION_rv32)
255-
NEWLIB_VERSION_rv32imc := $(NEWLIB_VERSION_rv32)
256-
NEWLIB_VERSION_rv32imac := $(NEWLIB_VERSION_rv32)
257-
NEWLIB_BASE_DIR_rv32 := $(TOCK_USERLAND_BASE_DIR)/lib/libtock-newlib-$(NEWLIB_VERSION_rv32)
254+
255+
ifeq ($(PICOLIB),)
256+
# Use newlib
257+
TOCK_LIBC_FOLDER_rv32 := libtock-newlib-$(NEWLIB_VERSION_rv32)
258+
else
259+
# Use picolib
260+
TOCK_LIBC_FOLDER_rv32 := libtock-picolib-1.8.5
261+
endif
262+
263+
TOCK_LIBC_FOLDER_rv32i := $(TOCK_LIBC_FOLDER_rv32)
264+
TOCK_LIBC_FOLDER_rv32imc := $(TOCK_LIBC_FOLDER_rv32)
265+
TOCK_LIBC_FOLDER_rv32imac := $(TOCK_LIBC_FOLDER_rv32)
266+
TOCK_LIBC_BASE_DIR_rv32 := $(TOCK_USERLAND_BASE_DIR)/lib/$(TOCK_LIBC_FOLDER_rv32)
267+
258268

259269
# Match compiler version to supported libtock-libc++ versions.
260270
ifeq ($(CC_rv32_version_major),10)
@@ -291,7 +301,7 @@ override CFLAGS_rv32imac += $(CFLAGS_rv32)
291301
# Set the base `CPPFLAGS` for all RISC-V variants based on the toolchain family.
292302
override CPPFLAGS_rv32 += \
293303
$(CPPFLAGS_toolchain_rv32) \
294-
-isystem $(NEWLIB_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/include \
304+
-isystem $(TOCK_LIBC_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/include \
295305
-isystem $(LIBCPP_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/include/c++/$(LIBCPP_VERSION_rv32) \
296306
-isystem $(LIBCPP_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/include/c++/$(LIBCPP_VERSION_rv32)/riscv64-unknown-elf
297307

@@ -325,22 +335,22 @@ override LINK_LIBS_rv32i += \
325335
$(LIBCPP_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/lib/rv32i/ilp32/libstdc++.a \
326336
$(LIBCPP_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/lib/rv32i/ilp32/libsupc++.a \
327337
$(LIBCPP_BASE_DIR_rv32)/riscv/lib/gcc/riscv64-unknown-elf/$(LIBCPP_VERSION_rv32)/rv32i/ilp32/libgcc.a \
328-
$(NEWLIB_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/lib/rv32i/ilp32/libc.a \
329-
$(NEWLIB_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/lib/rv32i/ilp32/libm.a
338+
$(TOCK_LIBC_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/lib/rv32i/ilp32/libc.a \
339+
$(TOCK_LIBC_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/lib/rv32i/ilp32/libm.a
330340

331341
override LINK_LIBS_rv32imc += \
332342
$(LIBCPP_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/lib/rv32im/ilp32/libstdc++.a \
333343
$(LIBCPP_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/lib/rv32im/ilp32/libsupc++.a \
334344
$(LIBCPP_BASE_DIR_rv32)/riscv/lib/gcc/riscv64-unknown-elf/$(LIBCPP_VERSION_rv32)/rv32im/ilp32/libgcc.a \
335-
$(NEWLIB_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/lib/rv32im/ilp32/libc.a \
336-
$(NEWLIB_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/lib/rv32im/ilp32/libm.a
345+
$(TOCK_LIBC_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/lib/rv32im/ilp32/libc.a \
346+
$(TOCK_LIBC_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/lib/rv32im/ilp32/libm.a
337347

338348
override LINK_LIBS_rv32imac += \
339349
$(LIBCPP_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/lib/rv32imac/ilp32/libstdc++.a \
340350
$(LIBCPP_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/lib/rv32imac/ilp32/libsupc++.a \
341351
$(LIBCPP_BASE_DIR_rv32)/riscv/lib/gcc/riscv64-unknown-elf/$(LIBCPP_VERSION_rv32)/rv32imac/ilp32/libgcc.a \
342-
$(NEWLIB_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/lib/rv32imac/ilp32/libc.a \
343-
$(NEWLIB_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/lib/rv32imac/ilp32/libm.a
352+
$(TOCK_LIBC_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/lib/rv32imac/ilp32/libc.a \
353+
$(TOCK_LIBC_BASE_DIR_rv32)/riscv/riscv64-unknown-elf/lib/rv32imac/ilp32/libm.a
344354

345355

346356
################################################################################
@@ -382,11 +392,20 @@ else ifeq ($(CC_cortex-m_version_major),13)
382392
else
383393
NEWLIB_VERSION_cortex-m := 4.3.0.20230120
384394
endif
385-
NEWLIB_VERSION_cortex-m0 := $(NEWLIB_VERSION_cortex-m)
386-
NEWLIB_VERSION_cortex-m3 := $(NEWLIB_VERSION_cortex-m)
387-
NEWLIB_VERSION_cortex-m4 := $(NEWLIB_VERSION_cortex-m)
388-
NEWLIB_VERSION_cortex-m7 := $(NEWLIB_VERSION_cortex-m)
389-
NEWLIB_BASE_DIR_cortex-m := $(TOCK_USERLAND_BASE_DIR)/lib/libtock-newlib-$(NEWLIB_VERSION_cortex-m)
395+
396+
ifeq ($(PICOLIB),)
397+
# Use newlib
398+
TOCK_LIBC_FOLDER_cortex-m := libtock-newlib-$(NEWLIB_VERSION_cortex-m)
399+
else
400+
# Use picolib
401+
TOCK_LIBC_FOLDER_cortex-m := libtock-picolib-1.8.5
402+
endif
403+
404+
TOCK_LIBC_FOLDER_cortex-m0 := $(TOCK_LIBC_FOLDER_cortex-m)
405+
TOCK_LIBC_FOLDER_cortex-m3 := $(TOCK_LIBC_FOLDER_cortex-m)
406+
TOCK_LIBC_FOLDER_cortex-m4 := $(TOCK_LIBC_FOLDER_cortex-m)
407+
TOCK_LIBC_FOLDER_cortex-m7 := $(TOCK_LIBC_FOLDER_cortex-m)
408+
TOCK_LIBC_BASE_DIR_cortex-m := $(TOCK_USERLAND_BASE_DIR)/lib/$(TOCK_LIBC_FOLDER_cortex-m)
390409

391410
# Match compiler version to supported libtock-libc++ versions.
392411
ifeq ($(CC_cortex-m_version_major),10)
@@ -423,7 +442,7 @@ override CPPFLAGS_cortex-m += \
423442
-msingle-pic-base\
424443
-mpic-register=r9\
425444
-mno-pic-data-is-text-relative\
426-
-isystem $(NEWLIB_BASE_DIR_cortex-m)/arm/arm-none-eabi/include\
445+
-isystem $(TOCK_LIBC_BASE_DIR_cortex-m)/arm/arm-none-eabi/include\
427446
-isystem $(LIBCPP_BASE_DIR_cortex-m)/arm/arm-none-eabi/include/c++/$(LIBCPP_VERSION_cortex-m)\
428447
-isystem $(LIBCPP_BASE_DIR_cortex-m)/arm/arm-none-eabi/include/c++/$(LIBCPP_VERSION_cortex-m)/arm-none-eabi
429448

@@ -445,29 +464,29 @@ override LINK_LIBS_cortex-m0 += \
445464
$(LIBCPP_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v6-m/nofp/libstdc++.a \
446465
$(LIBCPP_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v6-m/nofp/libsupc++.a \
447466
$(LIBCPP_BASE_DIR_cortex-m)/arm/lib/gcc/arm-none-eabi/$(LIBCPP_VERSION_cortex-m)/thumb/v6-m/nofp/libgcc.a \
448-
$(NEWLIB_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v6-m/nofp/libc.a \
449-
$(NEWLIB_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v6-m/nofp/libm.a
467+
$(TOCK_LIBC_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v6-m/nofp/libc.a \
468+
$(TOCK_LIBC_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v6-m/nofp/libm.a
450469

451470
override LINK_LIBS_cortex-m3 += \
452471
$(LIBCPP_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v7-m/nofp/libstdc++.a \
453472
$(LIBCPP_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v7-m/nofp/libsupc++.a \
454473
$(LIBCPP_BASE_DIR_cortex-m)/arm/lib/gcc/arm-none-eabi/$(LIBCPP_VERSION_cortex-m)/thumb/v7-m/nofp/libgcc.a \
455-
$(NEWLIB_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v7-m/nofp/libc.a \
456-
$(NEWLIB_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v7-m/nofp/libm.a
474+
$(TOCK_LIBC_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v7-m/nofp/libc.a \
475+
$(TOCK_LIBC_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v7-m/nofp/libm.a
457476

458477
override LINK_LIBS_cortex-m4 += \
459478
$(LIBCPP_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v7e-m/nofp/libstdc++.a \
460479
$(LIBCPP_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v7e-m/nofp/libsupc++.a \
461480
$(LIBCPP_BASE_DIR_cortex-m)/arm/lib/gcc/arm-none-eabi/$(LIBCPP_VERSION_cortex-m)/thumb/v7e-m/nofp/libgcc.a \
462-
$(NEWLIB_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v7e-m/nofp/libc.a \
463-
$(NEWLIB_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v7e-m/nofp/libm.a
481+
$(TOCK_LIBC_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v7e-m/nofp/libc.a \
482+
$(TOCK_LIBC_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v7e-m/nofp/libm.a
464483

465484
override LINK_LIBS_cortex-m7 += \
466485
$(LIBCPP_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v7e-m/nofp/libstdc++.a \
467486
$(LIBCPP_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v7e-m/nofp/libsupc++.a \
468487
$(LIBCPP_BASE_DIR_cortex-m)/arm/lib/gcc/arm-none-eabi/$(LIBCPP_VERSION_cortex-m)/thumb/v7e-m/nofp/libgcc.a \
469-
$(NEWLIB_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v7e-m/nofp/libc.a \
470-
$(NEWLIB_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v7e-m/nofp/libm.a
488+
$(TOCK_LIBC_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v7e-m/nofp/libc.a \
489+
$(TOCK_LIBC_BASE_DIR_cortex-m)/arm/arm-none-eabi/lib/thumb/v7e-m/nofp/libm.a
471490

472491
# Cortex-M needs an additional OBJDUMP flag.
473492
override OBJDUMP_FLAGS_cortex-m += --disassembler-options=force-thumb

Precompiled.mk

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,16 @@ $(TOCK_USERLAND_BASE_DIR)/lib/libtock-newlib-4.2.0.20211231:
3030
$(TOCK_USERLAND_BASE_DIR)/lib/libtock-newlib-4.3.0.20230120:
3131
cd $(TOCK_USERLAND_BASE_DIR)/lib; ./fetch-newlib.sh 4.3.0.20230120
3232

33+
# Target to download and extract newlib.
34+
$(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5:
35+
cd $(TOCK_USERLAND_BASE_DIR)/lib; ./fetch-picolib.sh 1.8.5
36+
3337
# Helper rule to specify newlib as a dependency in the libtock-c build system.
34-
newlib-4.2.0.20211231: | $(TOCK_USERLAND_BASE_DIR)/lib/libtock-newlib-4.2.0.20211231
38+
libtock-newlib-4.2.0.20211231: | $(TOCK_USERLAND_BASE_DIR)/lib/libtock-newlib-4.2.0.20211231
3539

36-
newlib-4.3.0.20230120: | $(TOCK_USERLAND_BASE_DIR)/lib/libtock-newlib-4.3.0.20230120
40+
libtock-newlib-4.3.0.20230120: | $(TOCK_USERLAND_BASE_DIR)/lib/libtock-newlib-4.3.0.20230120
41+
42+
libtock-picolib-1.8.5: | $(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5
3743

3844
# newlib 4.2.0.20211231
3945

@@ -67,6 +73,22 @@ $(TOCK_USERLAND_BASE_DIR)/lib/libtock-newlib-4.3.0.20230120/riscv/riscv64-unknow
6773
$(TOCK_USERLAND_BASE_DIR)/lib/libtock-newlib-4.3.0.20230120/riscv/riscv64-unknown-elf/lib/rv32imac/ilp32/libc.a: $(TOCK_USERLAND_BASE_DIR)/lib/libtock-newlib-4.3.0.20230120
6874
$(TOCK_USERLAND_BASE_DIR)/lib/libtock-newlib-4.3.0.20230120/riscv/riscv64-unknown-elf/lib/rv32imac/ilp32/libm.a: $(TOCK_USERLAND_BASE_DIR)/lib/libtock-newlib-4.3.0.20230120
6975

76+
# picolib 1.8.5
77+
78+
$(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5/arm/arm-none-eabi/lib/thumb/v6-m/nofp/libc.a: $(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5
79+
$(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5/arm/arm-none-eabi/lib/thumb/v6-m/nofp/libm.a: $(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5
80+
$(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5/arm/arm-none-eabi/lib/thumb/v7-m/nofp/libc.a: $(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5
81+
$(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5/arm/arm-none-eabi/lib/thumb/v7-m/nofp/libm.a: $(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5
82+
$(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5/arm/arm-none-eabi/lib/thumb/v7e-m/nofp/libc.a: $(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5
83+
$(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5/arm/arm-none-eabi/lib/thumb/v7e-m/nofp/libm.a: $(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5
84+
85+
$(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5/riscv/riscv64-unknown-elf/lib/rv32i/ilp32/libc.a: $(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5
86+
$(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5/riscv/riscv64-unknown-elf/lib/rv32i/ilp32/libm.a: $(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5
87+
$(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5/riscv/riscv64-unknown-elf/lib/rv32im/ilp32/libc.a: $(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5
88+
$(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5/riscv/riscv64-unknown-elf/lib/rv32im/ilp32/libm.a: $(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5
89+
$(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5/riscv/riscv64-unknown-elf/lib/rv32imac/ilp32/libc.a: $(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5
90+
$(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5/riscv/riscv64-unknown-elf/lib/rv32imac/ilp32/libm.a: $(TOCK_USERLAND_BASE_DIR)/lib/libtock-picolib-1.8.5
91+
7092

7193
################################################################################
7294
# LIBC++ Rules

TockLibrary.mk

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,12 @@ $$($(LIBNAME)_BUILDDIR)/$(1):
9999
$$(TRACE_DIR)
100100
$$(Q)mkdir -p $$@
101101

102-
$$($(LIBNAME)_BUILDDIR)/$(1)/%.o: %.c | $$($(LIBNAME)_BUILDDIR)/$(1) newlib-$$(NEWLIB_VERSION_$(1))
102+
$$($(LIBNAME)_BUILDDIR)/$(1)/%.o: %.c | $$($(LIBNAME)_BUILDDIR)/$(1) $$(TOCK_LIBC_FOLDER_$(1))
103103
$$(TRACE_CC)
104104
$$(Q)$$(TOOLCHAIN_$(1))$$(CC_$(1)) $$(CFLAGS) $$(CFLAGS_$(1)) $$(CPPFLAGS) $$(CPPFLAGS_$(1)) -MF"$$(@:.o=.d)" -MG -MM -MP -MT"$$(@:.o=.d)@" -MT"$$@" "$$<"
105105
$$(Q)$$(TOOLCHAIN_$(1))$$(CC_$(1)) $$(CFLAGS) $$(CFLAGS_$(1)) $$(CPPFLAGS) $$(CPPFLAGS_$(1)) -c -o $$@ $$<
106106

107-
$$($(LIBNAME)_BUILDDIR)/$(1)/%.o: %.S | $$($(LIBNAME)_BUILDDIR)/$(1) newlib-$$(NEWLIB_VERSION_$(1))
107+
$$($(LIBNAME)_BUILDDIR)/$(1)/%.o: %.S | $$($(LIBNAME)_BUILDDIR)/$(1) $$(TOCK_LIBC_FOLDER_$(1))
108108
$$(TRACE_AS)
109109
$$(Q)$$(TOOLCHAIN_$(1))$$(AS) $$(ASFLAGS) $$(CPPFLAGS) $$(CPPFLAGS_$(1)) -c -o $$@ $$<
110110

@@ -126,7 +126,7 @@ $(LIBNAME)_OBJS_$(1) += $$(patsubst %.cxx,$$($(LIBNAME)_BUILDDIR)/$(1)/%.o,$$(fi
126126
# $$(info $(LIBNAME)_OBJS_$(1): $$($(LIBNAME)_OBJS_$(1)))
127127
# $$(info =====================================================)
128128

129-
$$($(LIBNAME)_BUILDDIR)/$(1)/$(LIBNAME).a: $$($(LIBNAME)_OBJS_$(1)) | $$($(LIBNAME)_BUILDDIR)/$(1) newlib-$$(NEWLIB_VERSION_$(1))
129+
$$($(LIBNAME)_BUILDDIR)/$(1)/$(LIBNAME).a: $$($(LIBNAME)_OBJS_$(1)) | $$($(LIBNAME)_BUILDDIR)/$(1) $$(TOCK_LIBC_FOLDER_$(1))
130130
$$(TRACE_AR)
131131
$$(Q)$$(TOOLCHAIN_$(1))$$(AR) rc $$@ $$^
132132
$$(Q)$$(TOOLCHAIN_$(1))$$(RANLIB) $$@

0 commit comments

Comments
 (0)