Skip to content

Commit

Permalink
Make hardware SPI, I2C, ADC optional and add config to optimize for s…
Browse files Browse the repository at this point in the history
…ize (#560)
  • Loading branch information
vvuk authored Feb 1, 2025
1 parent fe89074 commit fab96a3
Show file tree
Hide file tree
Showing 8 changed files with 60 additions and 28 deletions.
10 changes: 8 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ LD=$(CROSS_PREFIX)ld
OBJCOPY=$(CROSS_PREFIX)objcopy
OBJDUMP=$(CROSS_PREFIX)objdump
STRIP=$(CROSS_PREFIX)strip
CPP=cpp
CPP=$(CROSS_PREFIX)cpp
PYTHON=python3

# Source files
Expand All @@ -30,11 +30,17 @@ cc-option=$(shell if test -z "`$(1) $(2) -S -o /dev/null -xc /dev/null 2>&1`" \
; then echo "$(2)"; else echo "$(3)"; fi ;)

CFLAGS := -iquote $(OUT) -iquote src -iquote $(OUT)board-generic/ \
-std=gnu11 -O2 -MD -Wall \
-std=gnu11 -MD -Wall \
-Wold-style-definition $(call cc-option,$(CC),-Wtype-limits,) \
-ffunction-sections -fdata-sections -fno-delete-null-pointer-checks
CFLAGS += -flto=auto -fwhole-program -fno-use-linker-plugin -ggdb3

ifeq ($(CONFIG_WANT_OPTIMIZE_SIZE), y)
CFLAGS += -Os
else
CFLAGS += -O2
endif

OBJS_klipper.elf = $(patsubst %.c, $(OUT)src/%.o,$(src-y))
OBJS_klipper.elf += $(OUT)compile_time_request.o
CFLAGS_klipper.elf = $(CFLAGS) -Wl,--gc-sections
Expand Down
42 changes: 34 additions & 8 deletions src/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -108,23 +108,23 @@ config WANT_DISPLAYS
default y
config WANT_SENSORS
bool
depends on HAVE_GPIO_I2C || HAVE_GPIO_SPI
depends on WANT_GPIO_I2C || WANT_GPIO_SPI
default y
config WANT_LIS2DW
bool
depends on HAVE_GPIO_SPI || HAVE_GPIO_I2C
depends on WANT_GPIO_SPI || WANT_GPIO_I2C
default y
config WANT_LDC1612
bool
depends on HAVE_GPIO_I2C
depends on WANT_GPIO_I2C
default y
config WANT_HX71X
bool
depends on WANT_GPIO_BITBANGING
default y
config WANT_ADS1220
bool
depends on HAVE_GPIO_SPI
depends on WANT_GPIO_SPI
default y
config WANT_SOFTWARE_I2C
bool
Expand All @@ -134,13 +134,37 @@ config WANT_SOFTWARE_SPI
bool
depends on HAVE_GPIO && HAVE_GPIO_SPI
default y
config WANT_GPIO_SPI
bool
depends on HAVE_GPIO && HAVE_GPIO_SPI
default y
config WANT_GPIO_ADC
bool
depends on HAVE_GPIO && HAVE_GPIO_ADC
default y
config WANT_GPIO_I2C
bool
depends on HAVE_GPIO && HAVE_GPIO_I2C
default y
config NEED_SENSOR_BULK
bool
depends on WANT_SENSORS || WANT_LIS2DW || WANT_LDC1612 || WANT_HX71X \
|| WANT_ADS1220
default y
config WANT_OPTIMIZE_SIZE
bool
default n
menu "Optional features (to reduce code size)"
depends on HAVE_LIMITED_CODE_SIZE
config WANT_GPIO_SPI
bool "Support hardware SPI"
depends on HAVE_GPIO && HAVE_GPIO_SPI
config WANT_GPIO_ADC
bool "Support hardware ADC"
depends on HAVE_GPIO && HAVE_GPIO_ADC
config WANT_GPIO_I2C
bool "Support hardware I2C"
depends on HAVE_GPIO && HAVE_GPIO_I2C
config WANT_GPIO_BITBANGING
bool "Support GPIO \"bit-banging\" devices"
depends on HAVE_GPIO
Expand All @@ -149,25 +173,27 @@ config WANT_DISPLAYS
depends on HAVE_GPIO
config WANT_SENSORS
bool "Support external sensor devices"
depends on HAVE_GPIO_I2C || HAVE_GPIO_SPI
depends on WANT_GPIO_I2C || WANT_GPIO_SPI
config WANT_LIS2DW
bool "Support lis2dw and lis3dh 3-axis accelerometers"
depends on HAVE_GPIO_SPI || HAVE_GPIO_I2C
depends on WANT_GPIO_SPI || WANT_GPIO_I2C
config WANT_LDC1612
bool "Support ldc1612 eddy current sensor"
depends on HAVE_GPIO_I2C
depends on WANT_GPIO_I2C
config WANT_HX71X
bool "Support HX711 and HX717 ADC chips"
depends on WANT_GPIO_BITBANGING
config WANT_ADS1220
bool "Support ADS 1220 ADC chip"
depends on HAVE_GPIO_SPI
depends on WANT_GPIO_SPI
config WANT_SOFTWARE_I2C
bool "Support software based I2C \"bit-banging\""
depends on HAVE_GPIO && HAVE_GPIO_I2C
config WANT_SOFTWARE_SPI
bool "Support software based SPI \"bit-banging\""
depends on HAVE_GPIO && HAVE_GPIO_SPI
config WANT_OPTIMIZE_SIZE
bool "Optimize for code size (-Os) not speed (-O2)"
endmenu

# Generic configuration options for CANbus
Expand Down
10 changes: 5 additions & 5 deletions src/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,20 @@
src-y += sched.c command.c basecmd.c debugcmds.c
src-$(CONFIG_HAVE_GPIO) += initial_pins.c gpiocmds.c stepper.c endstop.c \
trsync.c
src-$(CONFIG_HAVE_GPIO_ADC) += adccmds.c
src-$(CONFIG_HAVE_GPIO_SPI) += spicmds.c
src-$(CONFIG_WANT_GPIO_ADC) += adccmds.c
src-$(CONFIG_WANT_GPIO_SPI) += spicmds.c
src-$(CONFIG_HAVE_GPIO_SDIO) += sdiocmds.c
src-$(CONFIG_HAVE_GPIO_I2C) += i2ccmds.c
src-$(CONFIG_WANT_GPIO_I2C) += i2ccmds.c
src-$(CONFIG_HAVE_GPIO_HARD_PWM) += pwmcmds.c

src-$(CONFIG_WANT_GPIO_BITBANGING) += buttons.c tmcuart.c neopixel.c \
pulse_counter.c
src-$(CONFIG_WANT_DISPLAYS) += lcd_st7920.c lcd_hd44780.c
src-$(CONFIG_WANT_SOFTWARE_SPI) += spi_software.c
src-$(CONFIG_WANT_SOFTWARE_I2C) += i2c_software.c
sensors-src-$(CONFIG_HAVE_GPIO_SPI) := thermocouple.c sensor_adxl345.c \
sensors-src-$(CONFIG_WANT_GPIO_SPI) := thermocouple.c sensor_adxl345.c \
sensor_angle.c
sensors-src-$(CONFIG_HAVE_GPIO_I2C) += sensor_mpu9250.c
sensors-src-$(CONFIG_WANT_GPIO_I2C) += sensor_mpu9250.c
src-$(CONFIG_WANT_SENSORS) += $(sensors-src-y)
src-$(CONFIG_WANT_LIS2DW) += sensor_lis2dw.c
src-$(CONFIG_WANT_LDC1612) += sensor_ldc1612.c
Expand Down
6 changes: 3 additions & 3 deletions src/atsamd/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ canbus-src-y := generic/canserial.c ../lib/fast-hash/fasthash.c
canbus-src-y += atsamd/fdcan.c atsamd/chipid.c
src-$(CONFIG_USBCANBUS) += $(canbus-src-y) atsamd/usbserial.c generic/usb_canbus.c
src-$(CONFIG_CANSERIAL) += $(canbus-src-y) generic/canbus.c
src-$(CONFIG_HAVE_GPIO_ADC) += atsamd/adc.c
src-$(CONFIG_HAVE_GPIO_I2C) += atsamd/i2c.c
src-$(CONFIG_HAVE_GPIO_SPI) += atsamd/spi.c
src-$(CONFIG_WANT_GPIO_ADC) += atsamd/adc.c
src-$(CONFIG_WANT_GPIO_I2C) += atsamd/i2c.c
src-$(CONFIG_WANT_GPIO_SPI) += atsamd/spi.c
src-$(CONFIG_HAVE_SERCOM) += atsamd/sercom.c
src-$(CONFIG_HAVE_GPIO_HARD_PWM) += atsamd/hard_pwm.c
src-$(CONFIG_MACH_SAMC21) += atsamd/samd51_watchdog.c
Expand Down
6 changes: 3 additions & 3 deletions src/avr/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ CFLAGS += -mmcu=$(CONFIG_MCU)
# Add avr source files
src-y += avr/main.c avr/timer.c
src-$(CONFIG_HAVE_GPIO) += avr/gpio.c
src-$(CONFIG_HAVE_GPIO_ADC) += avr/adc.c
src-$(CONFIG_HAVE_GPIO_SPI) += avr/spi.c
src-$(CONFIG_HAVE_GPIO_I2C) += avr/i2c.c
src-$(CONFIG_WANT_GPIO_ADC) += avr/adc.c
src-$(CONFIG_WANT_GPIO_SPI) += avr/spi.c
src-$(CONFIG_WANT_GPIO_I2C) += avr/i2c.c
src-$(CONFIG_HAVE_GPIO_HARD_PWM) += avr/hard_pwm.c
src-$(CONFIG_AVR_WATCHDOG) += avr/watchdog.c
src-$(CONFIG_USBSERIAL) += avr/usbserial.c generic/usb_cdc.c
Expand Down
6 changes: 3 additions & 3 deletions src/lpc176x/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ src-y += lpc176x/main.c lpc176x/gpio.c
src-y += generic/armcm_boot.c generic/armcm_irq.c generic/armcm_timer.c
src-y += generic/armcm_reset.c generic/crc16_ccitt.c
src-y += ../lib/lpc176x/device/system_LPC17xx.c
src-$(CONFIG_HAVE_GPIO_ADC) += lpc176x/adc.c
src-$(CONFIG_HAVE_GPIO_I2C) += lpc176x/i2c.c
src-$(CONFIG_HAVE_GPIO_SPI) += lpc176x/spi.c
src-$(CONFIG_WANT_GPIO_ADC) += lpc176x/adc.c
src-$(CONFIG_WANT_GPIO_I2C) += lpc176x/i2c.c
src-$(CONFIG_WANT_GPIO_SPI) += lpc176x/spi.c
src-$(CONFIG_USBSERIAL) += lpc176x/usbserial.c lpc176x/chipid.c
src-$(CONFIG_USBSERIAL) += generic/usb_cdc.c
src-$(CONFIG_SERIAL) += lpc176x/serial.c generic/serial_irq.c
Expand Down
6 changes: 3 additions & 3 deletions src/rp2040/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ src-$(CONFIG_USBCANBUS) += rp2040/can.c rp2040/chipid.c ../lib/can2040/can2040.c
src-$(CONFIG_USBCANBUS) += generic/canserial.c generic/usb_canbus.c
src-$(CONFIG_USBCANBUS) += ../lib/fast-hash/fasthash.c rp2040/usbserial.c
src-$(CONFIG_HAVE_GPIO_HARD_PWM) += rp2040/hard_pwm.c
src-$(CONFIG_HAVE_GPIO_SPI) += rp2040/spi.c
src-$(CONFIG_HAVE_GPIO_I2C) += rp2040/i2c.c
src-$(CONFIG_WANT_GPIO_SPI) += rp2040/spi.c
src-$(CONFIG_WANT_GPIO_I2C) += rp2040/i2c.c

# rp2040 stage2 building
STAGE2_FILE := $(shell echo $(CONFIG_RP2040_STAGE2_FILE))
Expand All @@ -45,7 +45,7 @@ $(OUT)stage2.o: lib/pico-sdk/$(MCU)/boot_stage2/$(STAGE2_FILE) $(OUT)autoconf.h
# Binary output file rules when using stage2
$(OUT)lib/elf2uf2/elf2uf2: lib/elf2uf2/main.cpp
@echo " Building $@"
$(Q)g++ -g -O -Ilib/pico-sdk $< -o $@
$(Q)g++ --std=c++11 -g -O -Ilib/pico-sdk $< -o $@

$(OUT)klipper.uf2: $(OUT)klipper.elf $(OUT)lib/elf2uf2/elf2uf2
@echo " Creating uf2 file $@"
Expand Down
2 changes: 1 addition & 1 deletion src/stm32/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ src-$(CONFIG_MACH_STM32L4) += stm32/gpioperiph.c
src-$(CONFIG_MACH_STM32L4) += stm32/stm32h7_adc.c stm32/stm32f0_i2c.c
spi-src-y := stm32/spi.c
spi-src-$(CONFIG_MACH_STM32H7) := stm32/stm32h7_spi.c
src-$(CONFIG_HAVE_GPIO_SPI) += $(spi-src-y)
src-$(CONFIG_WANT_GPIO_SPI) += $(spi-src-y)
sdio-src-y := stm32/sdio.c
src-$(CONFIG_HAVE_GPIO_SDIO) += $(sdio-src-y)
usb-src-$(CONFIG_HAVE_STM32_USBFS) := stm32/usbfs.c
Expand Down

0 comments on commit fab96a3

Please sign in to comment.