From 36316c2e4a9dbeab28b97fa18fefc37eed4a6782 Mon Sep 17 00:00:00 2001
From: Daniel Friesel <derf@finalrewind.org>
Date: Tue, 13 Nov 2018 15:33:41 +0100
Subject: [PATCH] Support C targets

---
 Makefile                               |  1 +
 src/arch/arduino-nano-168/Makefile.inc |  5 ++++-
 src/arch/arduino-nano/Makefile.inc     |  5 ++++-
 src/arch/blinkenrocket/Makefile.inc    |  7 +++++--
 src/arch/esp8266/Makefile.inc          | 10 +++++++---
 src/arch/msp430fr5969lp/Makefile.inc   |  5 ++++-
 src/arch/posix/Makefile.inc            |  7 +++++--
 7 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/Makefile b/Makefile
index d80ff74..bd20f73 100644
--- a/Makefile
+++ b/Makefile
@@ -5,6 +5,7 @@ COMMON_FLAGS = -g -Os -Wall -Wextra -fno-rtti -fno-threadsafe-statics
 CFLAGS = -std=c99
 CXXFLAGS = -std=c++14
 
+C_TARGETS =
 CXX_TARGETS = src/app/${app}/main.cc src/os/object/cpp_helpers.cc src/os/object/outputstream.cc
 
 QUIET = @
diff --git a/src/arch/arduino-nano-168/Makefile.inc b/src/arch/arduino-nano-168/Makefile.inc
index e1e1028..2f501f6 100644
--- a/src/arch/arduino-nano-168/Makefile.inc
+++ b/src/arch/arduino-nano-168/Makefile.inc
@@ -64,11 +64,14 @@ endif
 
 COMMON_FLAGS += -DBAUD=${uart_baud}UL
 
-OBJECTS = ${CXX_TARGETS:.cc=.o}
+OBJECTS = ${CXX_TARGETS:.cc=.o} ${C_TARGETS:.c=.o}
 
 .cc.o:
 	${QUIET}${CXX} ${INCLUDES} ${COMMON_FLAGS} ${CXXFLAGS} -c -o $@ ${@:.o=.cc}
 
+.c.o:
+	${QUIET}${CC} ${INCLUDES} ${COMMON_FLAGS} ${CFLAGS} -c -o $@ ${@:.o=.c}
+
 build/system.elf: ${OBJECTS}
 	${QUIET}${CXX} ${COMMON_FLAGS} ${CXXFLAGS} -Wl,--gc-sections -o $@ ${OBJECTS}
 	${QUIET}avr-size --format=avr --mcu=${MCU} $@
diff --git a/src/arch/arduino-nano/Makefile.inc b/src/arch/arduino-nano/Makefile.inc
index dd8eb30..9a3c1e3 100644
--- a/src/arch/arduino-nano/Makefile.inc
+++ b/src/arch/arduino-nano/Makefile.inc
@@ -45,11 +45,14 @@ else
 	COMMON_FLAGS += -DF_CPU=16000000UL
 endif
 
-OBJECTS = ${CXX_TARGETS:.cc=.o}
+OBJECTS = ${CXX_TARGETS:.cc=.o} ${C_TARGETS:.c=.o}
 
 .cc.o:
 	${QUIET}${CXX} ${INCLUDES} ${COMMON_FLAGS} ${CXXFLAGS} -c -o $@ ${@:.o=.cc}
 
+.c.o:
+	${QUIET}${CC} ${INCLUDES} ${COMMON_FLAGS} ${CFLAGS} -c -o $@ ${@:.o=.c}
+
 build/system.elf: ${OBJECTS}
 	${QUIET}${CXX} ${COMMON_FLAGS} ${CXXFLAGS} -Wl,--gc-sections -o $@ ${OBJECTS}
 	${QUIET}avr-size --format=avr --mcu=${MCU} $@
diff --git a/src/arch/blinkenrocket/Makefile.inc b/src/arch/blinkenrocket/Makefile.inc
index c3ae7ea..277ab33 100644
--- a/src/arch/blinkenrocket/Makefile.inc
+++ b/src/arch/blinkenrocket/Makefile.inc
@@ -27,10 +27,13 @@ else ifneq ($(findstring i2c,${arch_drivers}), )
 	CXX_TARGETS += src/arch/blinkenrocket/driver/i2c.cc
 endif
 
-OBJECTS = ${CXX_TARGETS:.cc=.o}
+OBJECTS = ${CXX_TARGETS:.cc=.o} ${C_TARGETS:.c=.o}
 
 .cc.o:
-	${CXX} ${INCLUDES} ${COMMON_FLAGS} ${CXXFLAGS} -c -o $@ ${@:.o=.cc}
+	${QUIET}${CXX} ${INCLUDES} ${COMMON_FLAGS} ${CXXFLAGS} -c -o $@ ${@:.o=.cc}
+
+.cc.o:
+	${QUIET}${CC} ${INCLUDES} ${COMMON_FLAGS} ${CFLAGS} -c -o $@ ${@:.o=.c}
 
 build/system.elf: ${OBJECTS}
 	${CXX} ${COMMON_FLAGS} ${CXXFLAGS} -Wl,--gc-sections -o $@ ${OBJECTS}
diff --git a/src/arch/esp8266/Makefile.inc b/src/arch/esp8266/Makefile.inc
index fdd5636..ed9f05a 100644
--- a/src/arch/esp8266/Makefile.inc
+++ b/src/arch/esp8266/Makefile.inc
@@ -23,7 +23,7 @@ LDFLAGS += -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static
 CXX_TARGETS += src/arch/esp8266/arch.cc src/arch/esp8266/driver/gpio.cc
 CXX_TARGETS += src/arch/esp8266/driver/stdout.cc src/arch/esp8266/driver/uptime.cc
 
-OBJECTS = ${CXX_TARGETS:.cc=.o}
+OBJECTS = ${CXX_TARGETS:.cc=.o} ${C_TARGETS:.c=.o}
 
 ifeq (${esp8266_led2}, 1)
 	COMMON_FLAGS += -DLED_ON_GPIO16
@@ -34,8 +34,12 @@ ifneq ($(findstring stdin,${arch_drivers}), )
 endif
 
 .cc.o:
-	${CXX} ${INCLUDES} ${COMMON_FLAGS} ${CXXFLAGS} -c -o $@ ${@:.o=.cc}
-	${OBJCOPY} --rename-section .text=.irom0.text --rename-section .literal=.irom0.literal $@
+	${QUIET}${CXX} ${INCLUDES} ${COMMON_FLAGS} ${CXXFLAGS} -c -o $@ ${@:.o=.cc}
+	${QUIET}${OBJCOPY} --rename-section .text=.irom0.text --rename-section .literal=.irom0.literal $@
+
+.c.o:
+	${QUIET}${CC} ${INCLUDES} ${COMMON_FLAGS} ${CFLAGS} -c -o $@ ${@:.o=.c}
+	${QUIET}${OBJCOPY} --rename-section .text=.irom0.text --rename-section .literal=.irom0.literal $@
 
 build/system.ar: ${OBJECTS}
 	${AR} cru $@ ${OBJECTS}
diff --git a/src/arch/msp430fr5969lp/Makefile.inc b/src/arch/msp430fr5969lp/Makefile.inc
index 4d7fe35..49e0725 100644
--- a/src/arch/msp430fr5969lp/Makefile.inc
+++ b/src/arch/msp430fr5969lp/Makefile.inc
@@ -56,11 +56,14 @@ else
 endif
 
 
-OBJECTS = ${CXX_TARGETS:.cc=.o}
+OBJECTS = ${CXX_TARGETS:.cc=.o} ${C_TARGETS:.c=.o}
 
 .cc.o:
 	${QUIET}${CXX} ${INCLUDES} ${COMMON_FLAGS} ${CXXFLAGS} -c -o $@ ${@:.o=.cc}
 
+.c.o:
+	${QUIET}${CC} ${INCLUDES} ${COMMON_FLAGS} ${CFLAGS} -c -o $@ ${@:.o=.c}
+
 build/system.elf: ${OBJECTS}
 	${QUIET}${CXX} ${INCLUDES} ${COMMON_FLAGS} ${CXXFLAGS} \
 		-Wl,--library-path=/opt/msp430/ti/gcc/include/ \
diff --git a/src/arch/posix/Makefile.inc b/src/arch/posix/Makefile.inc
index 5162abd..bbca35d 100644
--- a/src/arch/posix/Makefile.inc
+++ b/src/arch/posix/Makefile.inc
@@ -12,7 +12,7 @@ endif
 CXX_TARGETS += src/arch/posix/arch.cc src/arch/posix/driver/gpio.cc
 CXX_TARGETS += src/arch/posix/driver/stdout.cc src/arch/posix/driver/uptime.cc
 
-OBJECTS = ${CXX_TARGETS:.cc=.o}
+OBJECTS = ${CXX_TARGETS:.cc=.o} ${C_TARGETS:.c=.o}
 
 ifneq (${gpio_trace}, )
 	COMMON_FLAGS += -DGPIO_TRACE
@@ -21,6 +21,9 @@ endif
 .cc.o:
 	${CXX} ${INCLUDES} ${COMMON_FLAGS} ${CXXFLAGS} -c -o $@ ${@:.o=.cc}
 
+.c.o:
+	${CC} ${INCLUDES} ${COMMON_FLAGS} ${CFLAGS} -c -o $@ ${@:.o=.c}
+
 build/system.elf: ${OBJECTS}
 	${CXX} ${INCLUDES} ${COMMON_FLAGS} ${CXXFLAGS} \
 		-o $@ ${OBJECTS}
@@ -30,7 +33,7 @@ run: build/system.elf
 
 monitor: run
 
-program: run
+program:
 
 arch_clean:
 	rm -f ${OBJECTS}
-- 
GitLab