1 # Copyright © 1995-2011, The AROS Development Team. All rights reserved.
4 # Static makefile rule file for AROS.
6 ifneq ($(AROS_TARGET_VARIANT),)
7 AROS_TARGET_SUFFIX=-$(AROS_TARGET_VARIANT)
12 # All files corresponding to a specific host go here.
13 HOSTDIR := $(TOP)/bin/$(AROS_HOST_ARCH)-$(AROS_HOST_CPU)
14 TOOLDIR := $(HOSTDIR)/tools
16 HOSTGENDIR := $(HOSTDIR)/gen
18 # All files corresponding to a specific target go here.
19 TARGETDIR := $(TOP)/bin/$(AROS_TARGET_ARCH)-$(AROS_TARGET_CPU)$(AROS_TARGET_SUFFIX)
21 GENDIR := $(TARGETDIR)/gen
23 -include $(GENDIR)/config/make.defaults
24 -include $(GENDIR)/config/make.opts
26 # target.cfg *must* come before host.cfg
27 include $(GENDIR)/config/target.cfg
28 include $(HOSTGENDIR)/config/host.cfg
30 # Cross tools installation directory.
31 CROSSTOOLSDIR := @AROS_CROSSTOOLSDIR@
33 # Files downloaded from the net are put here
34 PORTSSOURCEDIR := @AROS_PORTSSRCDIR@
35 PORTSDIR := $(TARGETDIR)/Ports
37 # Distributable Files we generate are put here
38 DISTDIR := @AROS_BUILDDIR_UNIX@/distfiles
40 # File for AROS gcc cross compiler spec file
41 SPECS := $(GENDIR)/config/specs
43 # This is the directory structure for an AROS system.
44 AROSDIR := $(TARGETDIR)/AROS
46 # Relative paths for standard directories
48 AROS_DIR_CLASSES := Classes
49 AROS_DIR_DATATYPES := $(AROS_DIR_CLASSES)/Datatypes
50 AROS_DIR_GADGETS := $(AROS_DIR_CLASSES)/Gadgets
54 AROS_DIR_LOCALE := Locale
56 AROS_DIR_DEVELOPMENT := Development
57 AROS_DIR_INCLUDE := $(AROS_DIR_DEVELOPMENT)/include
58 AROS_DIR_LIB := $(AROS_DIR_DEVELOPMENT)/lib
59 AROS_DIR_CONTRIB := Extras
61 # Absolute paths for standard directories
62 AROS_C := $(AROSDIR)/$(AROS_DIR_C)
63 AROS_CLASSES := $(AROSDIR)/$(AROS_DIR_CLASSES)
64 AROS_DATATYPES := $(AROSDIR)/$(AROS_DIR_DATATYPES)
65 AROS_GADGETS := $(AROSDIR)/$(AROS_DIR_GADGETS)
66 AROS_DEVS := $(AROSDIR)/$(AROS_DIR_DEVS)
67 AROS_FS := $(AROSDIR)/$(AROS_DIR_FS)
68 AROS_RESOURCES := $(AROS_DEVS)
69 AROS_DRIVERS := $(AROS_DEVS)/Drivers
70 AROS_LIBS := $(AROSDIR)/$(AROS_DIR_LIBS)
71 AROS_LOCALE := $(AROSDIR)/$(AROS_DIR_LOCALE)
72 AROS_CATALOGS := $(AROS_LOCALE)/Catalogs
73 AROS_HELP := $(AROS_LOCALE)/Help
74 AROS_PREFS := $(AROSDIR)/Prefs
75 AROS_ENVARC := $(AROS_PREFS)/Env-Archive
76 AROS_PACKAGES := $(AROS_ENVARC)/SYS/Packages
77 AROS_S := $(AROSDIR)/$(AROS_DIR_S)
78 AROS_SYSTEM := $(AROSDIR)/System
79 AROS_WANDERER := $(AROS_SYSTEM)/Wanderer
80 AROS_THEMES := $(AROS_SYSTEM)/Themes
81 AROS_IMAGES := $(AROS_SYSTEM)/Images
82 AROS_TOOLS := $(AROSDIR)/Tools
83 AROS_UTILITIES := $(AROSDIR)/Utilities
84 AROS_TESTS := $(AROSDIR)/Tests
86 AROS_DEVELOPMENT := $(AROSDIR)/$(AROS_DIR_DEVELOPMENT)
87 AROS_INCLUDES := $(AROSDIR)/$(AROS_DIR_INCLUDE)
88 AROS_LIB := $(AROSDIR)/$(AROS_DIR_LIB)
90 AROS_CONTRIB := $(AROSDIR)/$(AROS_DIR_CONTRIB)
92 # The generated files all go under the GENDIR path
93 SCRIPTDIR := $(GENDIR)/scripts
95 MKDEPEND := $(SRCDIR)/scripts/mkdep
96 FETCH := $(SRCDIR)/scripts/fetch.sh
98 # The paths to the generated tools
99 TOOLDIR := $(HOSTDIR)/tools
100 TOOLLIB := $(TOOLDIR)/libtool.a
101 MMAKE := $(TOOLDIR)/mmake$(HOST_EXE_SUFFIX)
102 ARCHTOOL := $(TOOLDIR)/archtool$(HOST_EXE_SUFFIX)
103 ELF2HUNK := $(TOOLDIR)/elf2hunk$(HOST_EXE_SUFFIX)
104 GENMF := $(TOOLDIR)/genmf.py
105 FLEXCAT := $(TOOLDIR)/FlexCat$(HOST_EXE_SUFFIX)
106 FD2INLINE := $(TOOLDIR)/fd2inline$(HOST_EXE_SUFFIX)
107 FD2PRAGMA := $(TOOLDIR)/fd2pragma$(HOST_EXE_SUFFIX)
108 SFDC := $(TOOLDIR)/sfdc
109 MODTOOL := $(TOOLDIR)/modtool$(HOST_EXE_SUFFIX)
110 CREATEDTDESC := $(TOOLDIR)/createdtdesc$(HOST_EXE_SUFFIX)
111 AFSLIB := $(TOOLDIR)/libafs.a
112 COPYTOAFS := $(TOOLDIR)/copytoafs$(HOST_EXE_SUFFIX)
113 ILBMTOC := $(TOOLDIR)/ilbmtoc$(HOST_EXE_SUFFIX)
114 ILBMTOICON := $(TOOLDIR)/ilbmtoicon$(HOST_EXE_SUFFIX)
115 GENSETS := $(TOOLDIR)/gensets$(HOST_EXE_SUFFIX)
116 COLLECT-AROS := $(TOOLDIR)/collect-aros$(HOST_EXE_SUFFIX)
117 GENMODULE := $(TOOLDIR)/genmodule$(HOST_EXE_SUFFIX)
118 CXREF := $(TOOLDIR)/cxref$(HOST_EXE_SUFFIX)
119 SETREV := $(TOOLDIR)/setrev$(HOST_EXE_SUFFIX)
121 RESIDENT_BEGIN := compiler/libinit/libentry
123 AROS_CC := $(TARGET_CC)
124 AROS_AS := $(TARGET_AS)
125 AROS_LD := $(TARGET_LD)
127 STRIP := $(TARGET_STRIP)
129 CALL := env AROS_HOST_ARCH=$(AROS_HOST_ARCH) AROS_HOST_CPU=$(AROS_HOST_CPU) \
130 AROS_TARGET_ARCH=$(AROS_TARGET_ARCH) AROS_TARGET_CPU=$(AROS_TARGET_CPU) \
131 AROS_TARGET_VARIANT=$(AROS_TARGET_VARIANT) AROS_TARGET_SUFFIX=$(AROS_TARGET_SUFFIX)
133 # At the moment we have two copies of the includes...
134 # This is the AROS includes, minus clib/mlib.
135 GENINCDIR := $(GENDIR)/include
137 # Basic make configuration. No need to edit anything else under here.
140 .SUFFIXES : .c .h .d .s .S
142 .PHONY : all clean setup subdirs
144 # Was debugging enabled? Better set up the options.
146 CONFIG_CFLAGS += $(DEBUG_CFLAGS)
147 CONFIG_AFLAGS += $(DEBUG_AFLAGS)
148 CONFIG_LDFLAGS += $(DEBUG_LDFLAGS)
149 HOST_CFLAGS += $(DEBUG_CFLAGS)
150 HOST_AFLAGS += $(DEBUG_AFLAGS)
151 HOST_LDFLAGS += $(DEBUG_LDFLAGS)
157 # C and assembly flags are set depending upon the directory
158 CFLAGS = $(USER_INCLUDES) $(CONFIG_CFLAGS) $(USER_CFLAGS)
159 AFLAGS = $(USER_AFLAGS) $(CONFIG_AFLAGS)
160 LDFLAGS = $(USER_LDFLAGS) $(CONFIG_LDFLAGS)
162 # Apple iOS stuff for gcc
163 IOS_LDFLAGS := -F$(IOS_SDK_PATH)/System/Library/Frameworks
165 # Compatibility with old variables
168 OBJDIR := $(GENDIR)/$(CURDIR)
170 EXEDIR := $(AROSDIR)/C
171 LIBDIR := $(AROS_LIB)
172 CONTRIBDIR := $(AROS_CONTRIB)
173 OSGENDIR := $(GENDIR)/rom
174 KOBJSDIR := $(GENDIR)/kobjs
175 PKGDIR := $(GENDIR)/pkg
177 # the build system needs to have some tools in the PATH
179 ifeq ($(AROS_PATH_SET),)
180 TMP_TOOLDIR := $(shell echo $(TOOLDIR) | sed 's/^\(.\):\//\/\1\//')
181 TMP_CROSSTOOLSDIR := $(shell echo $(CROSSTOOLSDIR) | sed 's/^\(.\):\//\/\1\//')
182 PATH := $(TMP_CROSSTOOLSDIR):$(TMP_TOOLDIR):$(TMP_TOOLDIR)/$(AROS_TARGET_CPU)-$(AROS_TARGET_ARCH)$(AROS_TARGET_SUFFIX):$(PATH)
184 export PATH AROS_PATH_SET
187 # Here follow some global variables that can get values through the makefile
188 # and will be handled in make.tail
190 # Dirs to create a makedir rule for
193 # Source directory is added to the target search path
194 VPATH := $(shell echo $(SRCDIR)/$(CURDIR) | sed 's/^\(.\):\//\/\1\//')
196 # Macro for expanding wildcards in source directory
197 # We use shell script here in order to avoid Unicode file names that are listed by pattern expansion but can't be accessed
198 # because of failing Unicode->ACP conversion under Windows
199 WILDCARD = $(shell cd $(SRCDIR)/$(CURDIR); for file in $(1); do if [ -f $$file ]; then printf "%s" "$$file "; fi; done)