Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make hardware SPI, I2C, ADC optional and add config to optimize for size #560

Merged
merged 1 commit into from
Feb 1, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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