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