Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Klipper3d/klipper.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile123
1 files changed, 123 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 000000000..8c8967ea5
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,123 @@
+# Klipper build system
+#
+# Copyright (C) 2016 Kevin O'Connor <kevin@koconnor.net>
+#
+# This file may be distributed under the terms of the GNU GPLv3 license.
+
+# Output directory
+OUT=out/
+
+# Kconfig includes
+export HOSTCC := $(CC)
+export CONFIG_SHELL := sh
+export KCONFIG_AUTOHEADER := autoconf.h
+export KCONFIG_CONFIG := $(CURDIR)/.config
+-include $(KCONFIG_CONFIG)
+
+# Common command definitions
+CC=$(CROSS_PREFIX)gcc
+AS=$(CROSS_PREFIX)as
+LD=$(CROSS_PREFIX)ld
+OBJCOPY=$(CROSS_PREFIX)objcopy
+OBJDUMP=$(CROSS_PREFIX)objdump
+STRIP=$(CROSS_PREFIX)strip
+CPP=cpp
+PYTHON=python
+
+# Source files
+src-y=sched.c command.c stepper.c basecmd.c gpiocmds.c spicmds.c endstop.c
+DIRS=src src/avr src/simulator
+
+# Default compiler flags
+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-y := -I$(OUT) -Isrc -Os -MD -g \
+ -Wall -Wold-style-definition $(call cc-option,$(CC),-Wtype-limits,) \
+ -ffunction-sections -fdata-sections
+CFLAGS-y += -flto -fwhole-program
+
+LDFLAGS-y := -Wl,--gc-sections
+
+CPPFLAGS = -P -MD -MT $@
+
+CFLAGS = $(CFLAGS-y)
+LDFLAGS = $(LDFLAGS-y)
+
+# Default targets
+target-y := $(OUT)klipper.elf
+
+all:
+
+# Run with "make V=1" to see the actual compile commands
+ifdef V
+Q=
+else
+Q=@
+MAKEFLAGS += --no-print-directory
+endif
+
+# Include board specific makefile
+-include src/$(patsubst "%",%,$(CONFIG_BOARD_DIRECTORY))/Makefile
+
+################ Common build rules
+
+$(OUT)%.o: %.c $(OUT)autoconf.h $(OUT)board-link
+ @echo " Compiling $@"
+ $(Q)$(CC) $(CFLAGS) -c $< -o $@
+
+################ Main build rules
+
+$(OUT)board-link: $(KCONFIG_CONFIG)
+ @echo " Creating symbolic link $(OUT)board"
+ $(Q)touch $@
+ $(Q)ln -Tsf $(PWD)/src/$(CONFIG_BOARD_DIRECTORY) $(OUT)board
+
+$(OUT)declfunc.lds: src/declfunc.lds.S
+ @echo " Precompiling $@"
+ $(Q)$(CPP) $(CPPFLAGS) -D__ASSEMBLY__ $< -o $@
+
+$(OUT)klipper.o: $(patsubst %.c, $(OUT)src/%.o,$(src-y)) $(OUT)declfunc.lds
+ @echo " Linking $@"
+ $(Q)$(CC) $(CFLAGS) -Wl,-r -Wl,-T,$(OUT)declfunc.lds -nostdlib $(patsubst %.c, $(OUT)src/%.o,$(src-y)) -o $@
+
+$(OUT)compile_time_request.o: $(OUT)klipper.o ./scripts/buildcommands.py
+ @echo " Building $@"
+ $(Q)$(OBJCOPY) -j '.compile_time_request' -O binary $< $(OUT)klipper.o.compile_time_request
+ $(Q)$(PYTHON) ./scripts/buildcommands.py $(OUT)klipper.o.compile_time_request $(OUT)autoconf.h $(OUT)compile_time_request.c
+ $(Q)$(CC) $(CFLAGS) -c $(OUT)compile_time_request.c -o $@
+
+$(OUT)klipper.elf: $(OUT)klipper.o $(OUT)compile_time_request.o
+ @echo " Linking $@"
+ $(Q)$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@
+
+################ Kconfig rules
+
+define do-kconfig
+$(Q)mkdir -p $(OUT)/scripts/kconfig/lxdialog
+$(Q)mkdir -p $(OUT)/include/config
+$(Q)mkdir -p $(addprefix $(OUT), $(DIRS))
+$(Q)$(MAKE) -C $(OUT) -f $(CURDIR)/scripts/kconfig/Makefile srctree=$(CURDIR) src=scripts/kconfig obj=scripts/kconfig Q=$(Q) Kconfig=$(CURDIR)/src/Kconfig $1
+endef
+
+$(OUT)autoconf.h : $(KCONFIG_CONFIG) ; $(call do-kconfig, silentoldconfig)
+$(KCONFIG_CONFIG): src/Kconfig ; $(call do-kconfig, olddefconfig)
+%onfig: ; $(call do-kconfig, $@)
+help: ; $(call do-kconfig, $@)
+
+
+################ Generic rules
+
+# Make definitions
+.PHONY : all clean distclean FORCE
+.DELETE_ON_ERROR:
+
+all: $(target-y)
+
+clean:
+ $(Q)rm -rf $(OUT)
+
+distclean: clean
+ $(Q)rm -f .config .config.old
+
+-include $(patsubst %,$(OUT)%/*.d,$(DIRS))