TSREQ$(1)_T_$(2)_H_$(3) = \
$$(HSREQ$(1)_H_$(3)) \
$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_RUNTIME) \
- $$(TLIB$(1)_T_$(2)_H_$(3))/libmorestack.a
+ $$(TLIB$(1)_T_$(2)_H_$(3))/libmorestack.a \
+ $$(TLIB$(1)_T_$(2)_H_$(3))/liblinenoise.a
# Prerequisites for complete stageN targets
SREQ$(1)_T_$(2)_H_$(3) = \
include $(CFG_SRC_DIR)mk/stage0.mk
include $(CFG_SRC_DIR)mk/rt.mk
include $(CFG_SRC_DIR)mk/rustllvm.mk
+include $(CFG_SRC_DIR)mk/linenoise.mk
include $(CFG_SRC_DIR)mk/tools.mk
include $(CFG_SRC_DIR)mk/docs.mk
include $(CFG_SRC_DIR)mk/llvm.mk
--- /dev/null
+######################################################################
+# linenoise - minimalistic readline alternative used by the REPL
+######################################################################
+
+define DEF_LINENOISE_TARGETS
+
+LINENOISE_CS_$(1) := $$(addprefix linenoise/, linenoise.c)
+LINENOISE_OBJS_$(1) := $(LINENOISE_CS_$(1):linenoise/%.c=linenoise/$(1)/%.o)
+
+ALL_OBJ_FILES += $$(LINENOISE_OBJS_$(1))
+
+linenoise/$(1)/liblinenoise.a: $$(LINENOISE_OBJS_$(1))
+ @$$(call E, link: $$@)
+ $$(Q)ar rcs $$@ $$<
+
+linenoise/$(1)/%.o: linenoise/%.c $$(MKFILE_DEPS)
+ @$$(call E, compile: $$@)
+ $$(Q)$$(call CFG_COMPILE_C_$(1), $$@,) $$<
+endef
+
+# Instantiate template for all stages
+$(foreach target,$(CFG_TARGET_TRIPLES), \
+ $(eval $(call DEF_LINENOISE_TARGETS,$(target))))
USE_SNAPSHOT_CORELIB=0
USE_SNAPSHOT_STDLIB=0
-LINENOISE_OBJS_$(2) := linenoise/$(2)/linenoise.o
-ALL_OBJ_FILES += $$(LINENOISE_OBJS_$(2))
-
-linenoise/$(2)/linenoise.o: linenoise/linenoise.c $$(MKFILE_DEPS)
- @$$(call E, compile: $$@)
- $$(Q)$$(call CFG_COMPILE_C_$(2), $$@,) $$<
-
-linenoise/$(2)/liblinenoise.a: $$(LINENOISE_OBJS_$(2))
- @$$(call E, link: $$@)
- $$(Q)ar rcs $$@ $$<
-
define TARGET_STAGE_N
$$(TLIB$(1)_T_$(2)_H_$(3))/libmorestack.a: \