From cceca0e34d3f98794ce72b7cbd8d2e4942ef203c Mon Sep 17 00:00:00 2001 From: Noah Gaeta Date: Fri, 6 Dec 2024 10:48:48 -0500 Subject: [PATCH] feat: improved build process --- .gitignore | 1 + Makefile | 143 ++++++++---------------- build/.gitignore | 4 - grbl/config.h | 14 ++- grbl/examples/grblUpload/grblUpload.ino | 10 +- grbl/grbl.ino | 1 + grbl/limits.c | 2 +- grbl/report.c | 2 +- grbl/spi.h | 6 +- grbl/vcm.c | 2 +- grbl/vcm.h | 6 +- 11 files changed, 73 insertions(+), 118 deletions(-) delete mode 100644 build/.gitignore create mode 100644 grbl/grbl.ino diff --git a/.gitignore b/.gitignore index b61325d..db7e021 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,6 @@ *.elf *.DS_Store *.d +build/ README.md diff --git a/Makefile b/Makefile index 9e20a43..1c43123 100644 --- a/Makefile +++ b/Makefile @@ -1,106 +1,53 @@ -# Part of Grbl -# -# Copyright (c) 2009-2011 Simen Svale Skogsrud -# Copyright (c) 2012-2016 Sungeun K. Jeon for Gnea Research LLC -# -# Grbl is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Grbl is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Grbl. If not, see . +PROJECT_NAME = grbl +SRC_DIR = $(PROJECT_NAME) +INO_FILE = $(PROJECT_NAME)/grbl.ino +BUILD_DIR = build +BOARD = arduino:avr:uno +PORT = $(shell ls /dev/cu.usbmodem* 2>/dev/null | head -n 1) -# This is a prototype Makefile. Modify it according to your needs. -# You should at least check the settings for -# DEVICE ....... The AVR device you compile for -# CLOCK ........ Target AVR clock rate in Hertz -# OBJECTS ...... The object files created from your source files. This list is -# usually the same as the list of source files with suffix ".o". -# PROGRAMMER ... Options to avrdude which define the hardware you use for -# uploading to the AVR and the interface where this hardware -# is connected. -# FUSES ........ Parameters for avrdude to flash the fuses appropriately. +# Default build target +.PHONY: all +all: build_rcmini build_bamboo -DEVICE ?= atmega328p -CLOCK = 16000000 -PROGRAMMER ?= -c avrisp2 -P usb -SOURCE = main.c motion_control.c gcode.c spindle_control.c coolant_control.c serial.c \ - protocol.c stepper.c eeprom.c settings.c planner.c nuts_bolts.c limits.c jog.c\ - print.c probe.c report.c system.c -BUILDDIR = build -SOURCEDIR = grbl -# FUSES = -U hfuse:w:0xd9:m -U lfuse:w:0x24:m -FUSES = -U hfuse:w:0xd2:m -U lfuse:w:0xff:m +# Build target for RC Mini +.PHONY: build_rcmini +build_rcmini: + @mkdir -p $(BUILD_DIR) + @arduino-cli compile --fqbn $(BOARD) --build-path $(BUILD_DIR)/rcmini --build-property compiler.cpp.extra_flags="-DMACHINE_TYPE=RCMINI" $(INO_FILE) + @mv $(BUILD_DIR)/rcmini/$(PROJECT_NAME).ino.hex $(BUILD_DIR)/rcmini.hex + @echo "Built RC Mini firmware: $(BUILD_DIR)/rcmini.hex" -# Tune the lines below only if you know what you are doing: +# Build target for Bamboo +.PHONY: build_bamboo +build_bamboo: + @mkdir -p $(BUILD_DIR) + @arduino-cli compile --fqbn $(BOARD) --build-path $(BUILD_DIR)/bamboo --build-property compiler.cpp.extra_flags="-DMACHINE_TYPE=BAMBOO" $(INO_FILE) + @mv $(BUILD_DIR)/bamboo/$(PROJECT_NAME).ino.hex $(BUILD_DIR)/bamboo.hex + @echo "Built Bamboo firmware: $(BUILD_DIR)/bamboo.hex" -AVRDUDE = avrdude $(PROGRAMMER) -p $(DEVICE) -B 10 -F +# Flash RC Mini firmware +.PHONY: flash_rcmini +flash_rcmini: build_rcmini +ifdef PORT + @arduino-cli upload -p $(PORT) --fqbn $(BOARD) --input-dir $(BUILD_DIR)/rcmini --verbose + @echo "Flashed RC Mini firmware to $(PORT)" +else + @echo "Error: Arduino not found" +endif -# Compile flags for avr-gcc v4.8.1. Does not produce -flto warnings. -# COMPILE = avr-gcc -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE) -I. -ffunction-sections - -# Compile flags for avr-gcc v4.9.2 compatible with the IDE. Or if you don't care about the warnings. -COMPILE = avr-gcc -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE) -I. -ffunction-sections -flto - - -OBJECTS = $(addprefix $(BUILDDIR)/,$(notdir $(SOURCE:.c=.o))) - -# symbolic targets: -all: grbl.hex - -$(BUILDDIR)/%.o: $(SOURCEDIR)/%.c - $(COMPILE) -MMD -MP -c $< -o $@ - -.S.o: - $(COMPILE) -x assembler-with-cpp -c $< -o $(BUILDDIR)/$@ -# "-x assembler-with-cpp" should not be necessary since this is the default -# file type for the .S (with capital S) extension. However, upper case -# characters are not always preserved on Windows. To ensure WinAVR -# compatibility define the file type manually. - -#.c.s: - $(COMPILE) -S $< -o $(BUILDDIR)/$@ - -flash: all - $(AVRDUDE) -U flash:w:grbl.hex:i - -fuse: - $(AVRDUDE) $(FUSES) - -# Xcode uses the Makefile targets "", "clean" and "install" -install: flash fuse - -# if you use a bootloader, change the command below appropriately: -load: all - bootloadHID grbl.hex +# Flash Bamboo firmware +.PHONY: flash_bamboo +flash_bamboo: build_bamboo +ifdef PORT + @arduino-cli upload -p $(PORT) --fqbn $(BOARD) --input-dir $(BUILD_DIR)/bamboo --verbose + @echo "Flashed Bamboo firmware to $(PORT)" +else + @echo "Error: Arduino not found" +endif +# Clean the build files +.PHONY: clean clean: - rm -f grbl.hex $(BUILDDIR)/*.o $(BUILDDIR)/*.d $(BUILDDIR)/*.elf - -# file targets: -$(BUILDDIR)/main.elf: $(OBJECTS) - $(COMPILE) -o $(BUILDDIR)/main.elf $(OBJECTS) -lm -Wl,--gc-sections - -grbl.hex: $(BUILDDIR)/main.elf - rm -f grbl.hex - avr-objcopy -j .text -j .data -O ihex $(BUILDDIR)/main.elf grbl.hex - avr-size --format=berkeley $(BUILDDIR)/main.elf -# If you have an EEPROM section, you must also create a hex file for the -# EEPROM and add it to the "flash" target. - -# Targets for code debugging and analysis: -disasm: main.elf - avr-objdump -d $(BUILDDIR)/main.elf - -cpp: - $(COMPILE) -E $(SOURCEDIR)/main.c - -# include generated header dependencies --include $(BUILDDIR)/$(OBJECTS:.o=.d) + @rm -rf $(BUILD_DIR) + @echo "Build directory cleaned" diff --git a/build/.gitignore b/build/.gitignore deleted file mode 100644 index 86d0cb2..0000000 --- a/build/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore everything in this directory -* -# Except this file -!.gitignore \ No newline at end of file diff --git a/grbl/config.h b/grbl/config.h index b6e8cba..cfe7211 100644 --- a/grbl/config.h +++ b/grbl/config.h @@ -29,13 +29,15 @@ #define config_h #include "grbl.h" // For Arduino IDE compatibility. -enum MachineType { - RCMINI, - BAMBOO -} - -#define MACHINE_TYPE MachineType::BAMBOO +typedef enum { + RCMINI, + BAMBOO +} machine; +// ? Default machine type to RCMINI if not provided by compiler +#ifndef MACHINE_TYPE +#define MACHINE_TYPE RCMINI +#endif // Define CPU pin map and default settings. // NOTE: OEMs can avoid the need to maintain/update the defaults.h and cpu_map.h files and use only diff --git a/grbl/examples/grblUpload/grblUpload.ino b/grbl/examples/grblUpload/grblUpload.ino index 581b6b3..e9bcabd 100644 --- a/grbl/examples/grblUpload/grblUpload.ino +++ b/grbl/examples/grblUpload/grblUpload.ino @@ -1,5 +1,5 @@ /*********************************************************************** -This sketch compiles and uploads Grbl to your 328p-based Arduino! +This sketch compiles and uploads Grbl to your 328p-based Arduino! To use: - First make sure you have imported Grbl source code into your Arduino @@ -13,12 +13,12 @@ To use: For advanced users: If you'd like to see what else Grbl can do, there are some additional - options for customization and features you can enable or disable. - Navigate your file system to where the Arduino IDE has stored the Grbl - source code files, open the 'config.h' file in your favorite text + options for customization and features you can enable or disable. + Navigate your file system to where the Arduino IDE has stored the Grbl + source code files, open the 'config.h' file in your favorite text editor. Inside are dozens of feature descriptions and #defines. Simply comment or uncomment the #defines or alter their assigned values, save - your changes, and then click 'Upload' here. + your changes, and then click 'Upload' here. Copyright (c) 2015 Sungeun K. Jeon Released under the MIT-license. See license.txt for details. diff --git a/grbl/grbl.ino b/grbl/grbl.ino new file mode 100644 index 0000000..c4f3d68 --- /dev/null +++ b/grbl/grbl.ino @@ -0,0 +1 @@ +#include "grbl.h" \ No newline at end of file diff --git a/grbl/limits.c b/grbl/limits.c index 5cd2df6..aff8b1e 100644 --- a/grbl/limits.c +++ b/grbl/limits.c @@ -97,7 +97,7 @@ uint8_t limits_get_state() uint8_t pinch_roller_get_state() { - if (MACHINE_TYPE === MachineType::BAMBOO) + if (MACHINE_TYPE == BAMBOO) { // Check PC3 state if (PINC & (1 << PINC3)) diff --git a/grbl/report.c b/grbl/report.c index 804cd11..7d61a79 100644 --- a/grbl/report.c +++ b/grbl/report.c @@ -369,7 +369,7 @@ void report_execute_startup_message(char *line, uint8_t status_code) // Prints build info line void report_build_info(char *line) { - printPgmString(PSTR("[VER:" GRBL_VERSION "." GRBL_VERSION_BUILD ":" MACHINE_TYPE ":" )); + printPgmString(PSTR("[VER:" GRBL_VERSION "." GRBL_VERSION_BUILD ":")); printString(line); report_util_feedback_line_feed(); printPgmString(PSTR("[OPT:")); // Generate compile-time build option list diff --git a/grbl/spi.h b/grbl/spi.h index 3fa0aba..342a4d0 100644 --- a/grbl/spi.h +++ b/grbl/spi.h @@ -1,2 +1,6 @@ +#ifndef spi_h +#define spi_h -void motor_spi_init(); \ No newline at end of file +void motor_spi_init(); + +#endif \ No newline at end of file diff --git a/grbl/vcm.c b/grbl/vcm.c index ca35548..971ce5a 100644 --- a/grbl/vcm.c +++ b/grbl/vcm.c @@ -2,7 +2,7 @@ void vcm_init() { - if (MACHINE_TYPE === MachineType::BAMBOO) + if (MACHINE_TYPE == BAMBOO) { DDRD |= (1 << DDD7); // Set pin 7 to HIGH diff --git a/grbl/vcm.h b/grbl/vcm.h index d3f8e1f..00f0b45 100644 --- a/grbl/vcm.h +++ b/grbl/vcm.h @@ -1,2 +1,6 @@ +#ifndef vcm_h +#define vcm_h -void vcm_init(); \ No newline at end of file +void vcm_init(); + +#endif \ No newline at end of file