AROS-v0/Makefile.in

358 lines
15 KiB
Makefile

# Copyright © 2000-2020, The AROS Development Team. All rights reserved.
# $Id$
#
# Main makefile for AROS
default: all
AROS_BUILD_HOST ?= @aros_build_host@
AROS_HOST_CPU ?= @aros_host_cpu@
AROS_HOST_ARCH ?= @aros_host_arch@
AROS_TARGET_CPU ?= @aros_target_cpu@
AROS_TARGET_CPU_TYPE ?= @aros_target_cpu_extra@
AROS_TARGET_CPU_MODE ?= @aros_target_cpu_mode@
AROS_TARGET_ARCH ?= @aros_target_arch@
AROS_TARGET_VARIANT ?= @aros_target_variant@
AMIGAOSNDKDIR ?= $(SRCDIR)/local/NDK_3.1
# normally, these variable's should go in mmake.config/globalvarfile
export AROS_TARGET_BOOTLOADER := @aros_target_bootloader@
export AROS_TARGET_ICONSET := @aros_target_iconset@
export AROS_GUI_THEME := @aros_target_guitheme@
TOP := @AROS_BUILDDIR@
SRCDIR := @SRCDIR@
include $(TOP)/config/make.cfg
ifneq ($(CROSSTOOLS_TARGET),)
include $(SRCDIR)/tools/crosstools/$(AROS_TOOLCHAIN).cfg
include $(SRCDIR)/tools/crosstools/$(AROS_TOOLCHAIN).deps
CROSSTOOLS_BUILDFLAG:=$(CROSSTOOLSDIR)/.installflag-crosstools
AROS_TOOLCHAIN_DEPS:=$(AROS_TOOLCHAIN_DEPS) $(SRCDIR)/tools/crosstools/$(AROS_TOOLCHAIN).cfg $(SRCDIR)/tools/crosstools/$(AROS_TOOLCHAIN).deps $(SRCDIR)/tools/crosstools/$(AROS_TOOLCHAIN)/mmakefile.src
else
CROSSTOOLS_BUILDFLAG:=
endif
MMAKE_OPTIONS ?= --srcdir=$(SRCDIR) --builddir=$(TOP)
ifneq (,$(findstring s,$(MAKEFLAGS)))
MMAKE_OPTIONS += -q
endif
#
# Rules for Configure generated files ...
#
$(TOP)/config.status: $(SRCDIR)/configure
@echo "****"
@echo "**** The configure script must be executed before running '$(MAKE)'."
@echo "**** Please run \"./configure\"."
@echo "****"
@exit 1
#$(TOP)/Makefile: $(SRCDIR)/Makefile.in $(TOP)/config.status
# @+$(ECHO) "Regenerating " $(subst $(TOP)/,,$@); \
# @$(TOP)/config.status --silent --file=$@:$<
#
#CONFIGUREFILES += $(TOP)/Makefile
$(TOP)/mmake.config: $(SRCDIR)/mmake.config.in $(TOP)/config.status
@+$(ECHO) "Regenerating " $(subst $(TOP)/,,$@); \
$(TOP)/config.status --silent --file=$@:$<
CONFIGUREFILES += $(TOP)/mmake.config
CONFIGBUILDFILES += $(TOP)/mmake.config
$(TOP)/config/make.cfg: $(SRCDIR)/config/make.cfg.in $(TOP)/config.status
@+$(ECHO) "Regenerating " $(subst $(TOP)/,,$@); \
$(TOP)/config.status --silent --file=$@:$<
CONFIGUREFILES += $(TOP)/config/make.cfg
CONFIGBUILDARCHFILES += $(TOP)/config/make.cfg
$(TOP)/compiler/include/geninc.cfg: $(SRCDIR)/compiler/include/geninc.cfg.in $(TOP)/config.status
@+$(ECHO) "Regenerating " $(subst $(TOP)/,,$@); \
$(TOP)/config.status --silent --file=$@:$<
CONFIGUREFILES += $(TOP)/compiler/include/geninc.cfg
$(GENDIR)/buildsdks/config/include/aros/config.h: $(SRCDIR)/config/config.h.in $(TOP)/config.status
@+$(ECHO) "Regenerating " $(subst $(TOP)/,,$@); \
$(TOP)/config.status --silent --file=$@:$<
CONFIGUREFILES += $(GENDIR)/buildsdks/config/include/aros/config.h
$(GENINCDIR)/aros/config.h: $(SRCDIR)/config/config.h.in $(TOP)/config.status
@+$(ECHO) "Regenerating " $(subst $(TOP)/,,$@); \
$(TOP)/config.status --silent --file=$@:$<
CONFIGUREFILES += $(GENINCDIR)/aros/config.h
$(GENDIR)/config/target.cfg: $(SRCDIR)/config/target.cfg.in $(TOP)/config.status
@+$(ECHO) "Regenerating " $(subst $(TOP)/,,$@); \
$(TOP)/config.status --silent --file=$@:$<
CONFIGUREFILES += $(GENDIR)/config/target.cfg
CONFIGBUILDARCHFILES += $(GENDIR)/config/target.cfg
$(GENDIR)/config/build.cfg: $(SRCDIR)/config/build.cfg.in $(TOP)/config.status
@+$(ECHO) "Regenerating " $(subst $(TOP)/,,$@); \
$(TOP)/config.status --silent --file=$@:$<
CONFIGUREFILES += $(GENDIR)/config/build.cfg
CONFIGBUILDARCHFILES += $(GENDIR)/config/build.cfg
$(GENDIR)/config/make.defaults: $(SRCDIR)/config/make.defaults.in $(TOP)/config.status
@+$(ECHO) "Regenerating " $(subst $(TOP)/,,$@); \
$(TOP)/config.status --silent --file=$@:$<
CONFIGUREFILES += $(GENDIR)/config/make.defaults
$(HOSTGENDIR)/config/host.cfg: $(SRCDIR)/config/host.cfg.in $(TOP)/config.status
@+$(ECHO) "Regenerating " $(subst $(TOP)/,,$@); \
$(TOP)/config.status --silent --file=$@:$<
CONFIGUREFILES += $(HOSTGENDIR)/config/host.cfg
#
# Standard Rules ...
#
all: $(CONFIGUREFILES) crosstools-toolchain features
@+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.AROS
AROSGDBFILES=
$(AROSDIR)/.gdbinit: $(SRCDIR)/developer/debug/gdb/_gdbinit makedirs
@$(ECHO) Copying host .gdbinit for AROS ...
@$(CP) $(SRCDIR)/developer/debug/gdb/_gdbinit $(AROSDIR)/.gdbinit ;
$(AROSDIR)/.gdb_ignore_errors.py: $(SRCDIR)/developer/debug/gdb/ignore_errors.py makedirs
@$(ECHO) Copying host gdb support files for AROS ...
@$(CP) $(SRCDIR)/developer/debug/gdb/ignore_errors.py $(AROSDIR)/.gdb_ignore_errors.py ; \
ifeq (@aros_flavour@,emulation)
AROSGDBFILES += $(AROSDIR)/.gdbinit $(AROSDIR)/.gdb_ignore_errors.py
endif
gdbinit: $(AROSGDBFILES)
@$(NOP)
makedirs:
@$(RM) $(TOP)/errors
@$(FOR) dir in $(AROSDIR) $(GENDIR) $(TOOLDIR) ; do \
$(IF) [ ! -d $$dir ]; then \
$(MECHO) $(MKDIR) "$$dir" ; \
$(MKDIR) "$$dir" ; \
else true ; fi ; \
done
$(PARSEOFFSETS): $(wildcard $(SRCDIR)/tools/parseoffsets/*.[ch])
@$(ECHO) Building parseoffsets...
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/parseoffsets SRCDIR=$(SRCDIR) TOP=$(TOP)
parsesdkoffsets : $(PARSEOFFSETS)
@$(IF) [ ! -d $(AMIGAOSNDKDIR) ]; then \
$(ECHO) "Please copy the AmigaOS 3.1 (tm) NDK files to $(AMIGAOSNDKDIR)" ; \
else \
$(ECHO) "Parsing Structure.Offsets file..." ; \
$(PARSEOFFSETS) --offsetsfile=$(AMIGAOSNDKDIR)/Includes_Libs/StructOffsets/Structure.Offsets --gendir=$(GENDIR)/tools/parseoffsets --bindir=$(AROS_TESTS)/sdk --sdkdir=$(AROS_INCLUDES) ; \
fi ;
# Create the tools that are used to build AROS.
tools : makedirs gdbinit mmake $(GENMFSCRIPT) $(ARCHTOOL) $(ELF2HUNK) \
$(FLEXCAT) $(CREATEDTDESC) \
$(ILBMTOC) $(ILBMTOICON) $(INFOINFO) \
$(COLLECT-AROS) $(AFSLIB) $(COPYTOAFS) \
$(FD2INLINE) $(FD2PRAGMA) $(SFDC) $(SETREV) $(PARSEOFFSETS) $(PATCHELF)
@$(NOP)
# rebuild the crosstools if we are reconfigured, or its dependencies change.
$(CROSSTOOLSDIR)/.installflag-crosstools: $(TOP)/config.status $(AROS_TOOLCHAIN_DEPS) tools
@+$(IF) ! $(TEST) -f $@ ; then \
$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.$(CROSSTOOLS_TARGET) && $(TOUCH) $@ ; \
fi
crosstools-toolchain: tools $(CROSSTOOLS_BUILDFLAG)
@$(NOP)
crosstools : crosstools-toolchain features
@$(MAKE) $(MKARGS) linklibs-libatomic
$(TOP)/config/features.status: $(SRCDIR)/config/features $(CROSSTOOLS_BUILDFLAG)
@$(IF) ! $(TEST) -f $@ ; then \
$(ECHO) "Querying target compiler features..." ; \
cd $(TOP)/config ; AROS_TARGET_CPU="$(AROS_TARGET_CPU)" CC="$(TARGET_CC) $(TARGET_SYSROOT)" CFLAGS="$(TARGET_CFLAGS) $(DEBUG_CFLAGS) $(OPTIMIZATION_CFLAGS)" CPP="$(TARGET_CPP) $(TARGET_SYSROOT)" CXX="$(TARGET_CXX) $(TARGET_SYSROOT)" CXXFLAGS=" $(TARGET_CXXFLAGS) $(DEBUG_CFLAGS) $(OPTIMIZATION_CFLAGS)" AROS_DEVELOPMENT="$(AROS_DEVELOPMENT)" CONFIG_STATUS="features.status" $(SRCDIR)/config/features --host=$(AROS_BUILD_HOST) --with-config-dir=$(GENDIR)/config ; \
fi
CONFIGBUILDARCHFILES += $(TOP)/config/features.status
features: crosstools-toolchain $(TOP)/config/features.status
@$(NOP)
NATIVEBUILDFILES = $(addprefix $(AROS_DEVELOPMENT)/,$(notdir $(CONFIGBUILDFILES)))
NATIVEBUILDARCHFILES = $(addprefix $(AROS_ARCH_DEVELOPMENT)/config/,$(notdir $(CONFIGBUILDARCHFILES)))
$(NATIVEBUILDFILES) $(NATIVEBUILDARCHFILES) : $(CONFIGBUILDFILES) $(CONFIGBUILDARCHFILES)
@$(ECHO) "Generating " $(subst $(TOP)/,,$@)
$(GENMFSCRIPT): $(SRCDIR)/tools/genmf/genmf.py
@$(ECHO) Generating $(subst $(TOP)/,,$(GENMFSCRIPT))...
@$(TOP)/config.status --silent --file=$(subst $(TOP)/,,$@):$<
$(ELF2HUNK): $(SRCDIR)/tools/elf2hunk/elf2hunk.c
@$(ECHO) Building elf2hunk...
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/elf2hunk SRCDIR=$(SRCDIR) TOP=$(TOP)
$(ARCHTOOL): $(SRCDIR)/tools/archtools/archtool.c
@$(ECHO) Building archtool...
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/archtools SRCDIR=$(SRCDIR) TOP=$(TOP)
$(FLEXCAT): $(wildcard $(SRCDIR)/tools/flexcat/src/*.[ch]) $(wildcard $(SRCDIR)/tools/flexcat/src/sd/*.sd)
@$(ECHO) Building flexcat...
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/flexcat/src -f Makefile.aros SRCDIR=$(SRCDIR) TOP=$(TOP)
$(CREATEDTDESC): $(wildcard $(SRCDIR)/tools/dtdesc/*.[ch]) $(wildcard $(SRCDIR)/tools/dtdesc/c_iff/*.[ch])
@$(ECHO) Building createdtdesc...
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/dtdesc -f Makefile.aros SRCDIR=$(SRCDIR) TOP=$(TOP)
$(AFSLIB): $(wildcard $(SRCDIR)/rom/filesys/afs/*.[ch])
@$(ECHO) Building afslib...
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/copytoafs -f Makefile.afslib SRCDIR=$(SRCDIR) TOP=$(TOP)
$(COPYTOAFS): $(AFSLIB) $(SRCDIR)/tools/copytoafs/copytoafs.c
@$(ECHO) Building copytoafs...
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/copytoafs SRCDIR=$(SRCDIR) TOP=$(TOP)
$(ILBMTOC): $(SRCDIR)/tools/ilbmtoc/ilbmtoc.c
@$(ECHO) Building ilbmtoc...
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/ilbmtoc SRCDIR=$(SRCDIR) TOP=$(TOP)
$(ILBMTOICON): $(SRCDIR)/tools/ilbmtoicon/ilbmtoicon.c $(SRCDIR)/tools/ilbmtoicon/infoinfo.c
@$(ECHO) Building ilbmtoicon...
@$(CALL) $(MAKE) $(MKARGS) $@ -C $(SRCDIR)/tools/ilbmtoicon SRCDIR=$(SRCDIR) TOP=$(TOP)
$(INFOINFO): $(SRCDIR)/tools/ilbmtoicon/infoinfo.c
@$(ECHO) Building infoinfo...
@$(CALL) $(MAKE) $(MKARGS) $@ -C $(SRCDIR)/tools/ilbmtoicon SRCDIR=$(SRCDIR) TOP=$(TOP)
$(COLLECT-AROS): $(wildcard $(SRCDIR)/tools/collect-aros/*.[hc])
@$(ECHO) Building collect-aros...
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/collect-aros SRCDIR=$(SRCDIR) TOP=$(TOP)
$(FD2INLINE): $(SRCDIR)/tools/fd2inline/fd2inline.c
@$(ECHO) Building fd2inline...
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/fd2inline SRCDIR=$(SRCDIR) TOP=$(TOP)
$(FD2PRAGMA): $(SRCDIR)/tools/fd2pragma/fd2pragma.c
@$(ECHO) Building fd2pragma...
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/fd2pragma SRCDIR=$(SRCDIR) TOP=$(TOP)
$(SFDC): $(SRCDIR)/tools/sfdc/*.pl
@$(ECHO) Building sfdc...
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/sfdc SRCDIR=$(SRCDIR) TOP=$(TOP)
$(SETREV): $(SRCDIR)/tools/setrev/setrev.c
@$(ECHO) Building setrev...
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/setrev SRCDIR=$(SRCDIR) TOP=$(TOP)
$(PATCHELF): $(SRCDIR)/tools/patchelf/patchelf.cc
@$(ECHO) Building patchelf...
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/patchelf SRCDIR=$(SRCDIR) TOP=$(TOP)
# MetaMake apparently requires a slighty different compilation. Probably
# because it is sort-of an external package as well.
mmake: $(TOP)/tools/MetaMake/Makefile $(MMAKE)
@$(NOP)
$(SRCDIR)/tools/MetaMake/configure: $(SRCDIR)/tools/MetaMake/configure.in
@$(ECHO) Building MetaMake...
@cd $(SRCDIR)/tools/MetaMake && @aros_host_aclocal@ && @aros_host_autoconf@
$(TOP)/tools/MetaMake/Makefile: $(SRCDIR)/tools/MetaMake/configure $(SRCDIR)/tools/MetaMake/Makefile.in
@$(IF) [ ! -d $(TOP)/tools/MetaMake ]; then \
$(MECHO) $(MKDIR) "$(TOP)/tools/MetaMake" ; \
$(MKDIR) "$(TOP)/tools/MetaMake"; \
fi;
@cd $(TOP)/tools/MetaMake ; CC="$(HOST_CC)" CFLAGS="$(HOST_CFLAGS) -D_FILE_OFFSET_BITS=64" LDFLAGS="$(HOST_LDFLAGS)" $(SRCDIR)/tools/MetaMake/configure --prefix=$(TOOLDIR) --bindir=$(TOOLDIR) --with-objfiledir=$(HOSTGENDIR)/tools/MetaMake
$(MMAKE): $(TOP)/tools/MetaMake/Makefile $(wildcard $(SRCDIR)/tools/MetaMake/*.[ch]) $(GENMFSCRIPT)
@$(MAKE) $(MKARGS) AUTOHEADER=@aros_host_autoheader@ -C $(TOP)/tools/MetaMake all
@$(MAKE) $(MKARGS) -C $(TOP)/tools/MetaMake install
# Clean the sources and tools
clean:
@+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.clean
@$(MAKE) $(MKARGS) -C $(TOP)/tools/MetaMake clean SRCDIR=$(SRCDIR) TOP=$(TOP)
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/flexcat/src -f Makefile.aros clean SRCDIR=$(SRCDIR) TOP=$(TOP)
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/archtools clean SRCDIR=$(SRCDIR) TOP=$(TOP)
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/genmf clean
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/dtdesc -f Makefile.aros clean SRCDIR=$(SRCDIR) TOP=$(TOP)
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/collect-aros clean SRCDIR=$(SRCDIR) TOP=$(TOP)
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/fd2inline clean SRCDIR=$(SRCDIR) TOP=$(TOP)
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/fd2pragma clean SRCDIR=$(SRCDIR) TOP=$(TOP)
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/sfdc clean SRCDIR=$(SRCDIR) TOP=$(TOP)
@$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/setrev clean SRCDIR=$(SRCDIR) TOP=$(TOP)
-@$(RM) $(ARCHDIR) Makefile config.cache config.status config.log \
mmake.cache mmake.config rom/mmakefile config/make.cfg \
$(GENDIR)/buildsdks/config/include/aros/config.h \
$(GENDIR)/include/aros/config.h $(HOSTGENDIR)/config/host.cfg \
$(GENDIR)/config/target.cfg $(GENDIR)/config/make.defaults \
$(GENDIR)/config/specs \
$(TOOLDIR)/$(AROS_TARGET_CPU)-$(AROS_TARGET_ARCH)$(AROS_TARGET_SUFFIX)-aros-gcc \
$(TOOLDIR)/$(AROS_TARGET_CPU)-$(AROS_TARGET_ARCH)$(AROS_TARGET_SUFFIX)-aros-ld \
$(GENDIR)/scripts/genshared $(TOOLDIR)/genmf.py \
tools/ADFlib/myconf.aros tools/collect-aros/env.h
# Clean the sources and tools
arch-clean: clean
@$(NOP)
# Really clean all - like a clean checkout
dist-clean: arch-clean
@$(NOP)
sdk : crosstools features $(CONFIGUREFILES) $(NATIVEBUILDFILES) $(NATIVEBUILDARCHFILES)
@+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.$@
sdk-test: parsesdkoffsets crosstools features $(CONFIGUREFILES)
@$(CALL) $(MAKE) $(MKARGS) -C $(GENDIR)/tools/parseoffsets SRCDIR=$(SRCDIR) TOP=$(TOP) test-sdk-headers-genfiles
# Don't try to generate $(TOP)/bin/$(AROS_TARGET_ARCH)-$(AROS_TARGET_CPU)$(AROS_TARGET_SUFFIX)/gen/config/make.opts
$(TOP)/bin/$(AROS_TARGET_ARCH)-$(AROS_TARGET_CPU)$(AROS_TARGET_SUFFIX)/gen/config/make.opts:
@$(NOP)
# targets which do not generate files or for which a file/directory exists
.PHONY: default all makedirs gdbinit tools crosstools features docs clean arch-clean dist-clean install \
$(TOP)/bin/$(AROS_TARGET_ARCH)-$(AROS_TARGET_CPU)$(AROS_TARGET_SUFFIX)/gen/config/make.opts \
test kernel boot workbench compiler contrib ports sdk mmake query
# Workaround for bug in make v3.81 (should normally be handled by .DEFAULT)
install test kernel boot workbench compiler contrib ports : crosstools-toolchain features $(CONFIGUREFILES)
@+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.$@
# Bypass crosstools target.
query: tools
@+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.$@
# Map MetaTargets to make targets : Call mmake with AROS.target
# This does not allow to check for dependancies, so it is not suitable for
# Calling standard main targets, but is usable as a shortcut for MetaMake
# if it was not installed globally
#
distfiles::
@+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.$@
# The '%-quick' and '%-clean' targets are special - we don't want to wait around
# for building crosstools if we just want to build one subtarget
%-quick %-clean:
@+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.$@
.DEFAULT: $(CONFIGUREFILES)
@$(MAKE) $(MKARGS) crosstools-toolchain
@$(MAKE) $(MKARGS) crosstools-toolchain features
@+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.$@