| # Basic GNU -*-Makefile-*- to build GNU make | |
| # | |
| # NOTE: | |
| # If you have no 'make' program at all to process this makefile: | |
| # * On Windows, run ".\buildw32.bat" to bootstrap one. | |
| # * On MS-DOS, run ".\builddos.bat" to bootstrap one. | |
| # | |
| # Once you have a GNU make program created, you can use it with this makefile | |
| # to keep it up to date if you make changes, as: | |
| # | |
| # make.exe -f Basic.mk | |
| # | |
| # Copyright (C) 2017-2022 Free Software Foundation, Inc. | |
| # This file is part of GNU Make. | |
| # | |
| # GNU Make 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. | |
| # | |
| # GNU Make 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 | |
| # this program. If not, see <http://www.gnu.org/licenses/>. | |
| all: | |
| src = src/ | |
| lib = lib/ | |
| make_SOURCES = %make_SOURCES% | |
| glob_SOURCES = %glob_SOURCES% | |
| loadavg_SOURCES = %loadavg_SOURCES% | |
| alloca_SOURCES = %alloca_SOURCES% | |
| w32_SOURCES = %w32_SOURCES% | |
| vms_SOURCES = %vms_SOURCES% | |
| amiga_SOURCES = %amiga_SOURCES% | |
| posix_SOURCES = $(src)posixos.c | |
| remote_SOURCES = $(src)remote-stub.c | |
| OUTDIR = | |
| SRCDIR = . | |
| OBJEXT = o | |
| EXEEXT = | |
| PREFIX = /usr/local | |
| INCLUDEDIR = $(PREFIX)/include | |
| LIBDIR = $(PREFIX)/lib | |
| LOCALEDIR = $(PREFIX)/share | |
| PROG = $(OUTDIR)make$(EXEEXT) | |
| prog_SOURCES = $(make_SOURCES) $(remote_SOURCES) | |
| BUILT_SOURCES = | |
| OBJECTS = $(patsubst %.c,$(OUTDIR)%.$(OBJEXT),$(prog_SOURCES)) | |
| OBJDIRS = $(addsuffix .,$(sort $(dir $(OBJECTS)))) | |
| # Use the default value of CC | |
| LD = $(CC) | |
| # Reserved for command-line override | |
| CPPFLAGS = | |
| CFLAGS = -g -O2 | |
| LDFLAGS = | |
| extra_CPPFLAGS = -DHAVE_CONFIG_H -I$(OUTDIR)src -I$(SRCDIR)/src -I$(OUTDIR)lib -I$(SRCDIR)/lib \ | |
| -DLIBDIR=\"$(LIBDIR)\" -DINCLUDEDIR=\"$(INCLUDEDIR)\" -DLOCALEDIR=\"$(LOCALDIR)\" | |
| extra_CFLAGS = | |
| extra_LDFLAGS = $(extra_CFLAGS) $(CFLAGS) | |
| C_SOURCE = -c | |
| OUTPUT_OPTION = -o $@ | |
| LINK_OUTPUT = -o $@ | |
| # Command lines | |
| # $(call COMPILE.cmd,<src>,<tgt>) | |
| COMPILE.cmd = $(CC) $(extra_CFLAGS) $(CFLAGS) $(extra_CPPFLAGS) $(CPPFLAGS) $(TARGET_ARCH) $(OUTPUT_OPTION) $(C_SOURCE) $1 | |
| # $(call LINK.cmd,<objectlist>) | |
| LINK.cmd = $(LD) $(extra_LDFLAGS) $(LDFLAGS) $(TARGET_ARCH) $1 $(LDLIBS) $(LINK_OUTPUT) | |
| # $(CHECK.cmd) $(CHECK.args) | |
| CHECK.cmd = cd $(SRCDIR)/tests && ./run_make_tests -make $(shell cd $(<D) && pwd)/$(<F) | |
| CHECK.args ?= | |
| # $(call MKDIR.cmd,<dirlist>) | |
| MKDIR.cmd = mkdir -p $1 | |
| # $(call RM.cmd,<filelist>) | |
| RM.cmd = rm -f $1 | |
| # $(call CP.cmd,<from>,<to>) | |
| CP.cmd = cp $1 $2 | |
| CLEANSPACE = $(call RM.cmd,$(OBJECTS) $(PROG) $(BUILT_SOURCES)) | |
| # Load overrides for the above variables. | |
| include $(firstword $(wildcard $(SRCDIR)/mk/$(lastword $(subst -, ,$(MAKE_HOST)).mk) $(OUTDIR)mk/Posix.mk $(SRCDIR)/mk/Posix.mk)) | |
| VERSION = %VERSION% | |
| VPATH = $(SRCDIR) | |
| all: $(PROG) | |
| $(PROG): $(OBJECTS) | |
| $(call LINK.cmd,$^) | |
| $(OBJECTS): $(OUTDIR)%.$(OBJEXT): %.c | |
| $(call COMPILE.cmd,$<) | |
| $(OBJECTS): | $(OBJDIRS) $(BUILT_SOURCES) | |
| $(OBJDIRS): | |
| $(call MKDIR.cmd,$@) | |
| check: | |
| $(CHECK.cmd) $(CHECK.args) | |
| clean: | |
| $(CLEANSPACE) | |
| $(filter %.h,$(BUILT_SOURCES)): %.h : %.in.h | |
| $(call RM.cmd,$@) | |
| $(call CP.cmd,$<,$@) | |
| .PHONY: all check clean |