feat: improved build process

pull/1276/head
Noah Gaeta 2024-12-06 10:48:48 -05:00
rodzic ee9ff9faed
commit cceca0e34d
11 zmienionych plików z 73 dodań i 118 usunięć

1
.gitignore vendored
Wyświetl plik

@ -3,5 +3,6 @@
*.elf
*.DS_Store
*.d
build/
README.md

143
Makefile
Wyświetl plik

@ -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 <http://www.gnu.org/licenses/>.
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"

4
build/.gitignore vendored
Wyświetl plik

@ -1,4 +0,0 @@
# Ignore everything in this directory
*
# Except this file
!.gitignore

Wyświetl plik

@ -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

Wyświetl plik

@ -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.

1
grbl/grbl.ino 100644
Wyświetl plik

@ -0,0 +1 @@
#include "grbl.h"

Wyświetl plik

@ -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))

Wyświetl plik

@ -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

Wyświetl plik

@ -1,2 +1,6 @@
#ifndef spi_h
#define spi_h
void motor_spi_init();
void motor_spi_init();
#endif

Wyświetl plik

@ -2,7 +2,7 @@
void vcm_init()
{
if (MACHINE_TYPE === MachineType::BAMBOO)
if (MACHINE_TYPE == BAMBOO)
{
DDRD |= (1 << DDD7);
// Set pin 7 to HIGH

Wyświetl plik

@ -1,2 +1,6 @@
#ifndef vcm_h
#define vcm_h
void vcm_init();
void vcm_init();
#endif