diff --git a/Makefile b/Makefile index d194b530a0..f5e098d12f 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ # -# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013/01/16] +# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013/02/20] # default: help MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android @@ -268,6 +268,19 @@ ifdef CROSSCOMPILE ifndef DARWIN2DARWIN ifneq ($(CPU_TARGET),jvm) BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)- +ifeq ($(OS_TARGET),android) +ifeq ($(CPU_TARGET),arm) +BINUTILSPREFIX=arm-linux-androideabi- +else +ifeq ($(CPU_TARGET),i386) +BINUTILSPREFIX=i686-linux-android- +else +ifeq ($(CPU_TARGET),mips) +BINUTILSPREFIX=mipsel-linux-android- +endif +endif +endif +endif endif endif endif @@ -360,6 +373,13 @@ PPPRE=ppc endif PPNEW=$(BASEDIR)/compiler/$(PPPRE)$(PPSUF)$(SRCEXEEXT) endif +ifndef FPCFPMAKENEW +ifdef CROSSCOMPILE +FPCFPMAKENEW=$(BASEDIR)/compiler/ppc$(SRCEXEEXT) +else +FPCFPMAKENEW=$(PPNEW) +endif +endif ifneq ($(wildcard install),) CVSINSTALL=install else @@ -407,17 +427,11 @@ ifndef DIST_DESTDIR export DIST_DESTDIR:=$(BASEDIR) endif BASEPACKDIR=$(BASEDIR)/basepack -ifndef FPCMAKE -ifeq ($(FULL_SOURCE),$(FULL_TARGET)) -FPCMAKENEW=$(BASEDIR)/utils/fpcm/fpcmake$(EXEEXT) -else -FPCMAKENEW=fpcmake -endif -else -FPCMAKENEW=$(FPCMAKE) +ifndef FPCMAKENEW +FPCMAKENEW=$(BASEDIR)/utils/fpcm/fpcmake$(SRCEXEEXT) endif CLEANOPTS=FPC=$(PPNEW) -BUILDOPTS=FPC=$(PPNEW) RELEASE=1 +BUILDOPTS=FPC=$(PPNEW) FPCFPMAKE=$(FPCFPMAKENEW) RELEASE=1 INSTALLOPTS=FPC=$(PPNEW) ZIPDESTDIR=$(BASEDIR) FPCMAKE=$(FPCMAKENEW) ifndef CROSSCOMPILE ifneq ($(wildcard ide),) @@ -2676,6 +2690,9 @@ distclean: clean build: $(BUILDSTAMP) $(BUILDSTAMP): $(MAKE) compiler_cycle RELEASE=1 +ifdef CROSSCOMPILE + $(MAKE) -C utils/fpcm bootstrap $(BUILDOPTS) +endif $(MAKE) rtl_clean $(CLEANOPTS) $(MAKE) packages_clean $(CLEANOPTS) ifdef UTILS diff --git a/Makefile.fpc b/Makefile.fpc index f4d854aeec..78d0e6978e 100644 --- a/Makefile.fpc +++ b/Makefile.fpc @@ -88,6 +88,18 @@ endif PPNEW=$(BASEDIR)/compiler/$(PPPRE)$(PPSUF)$(SRCEXEEXT) endif +# Use FPCFPMAKENEW to explicitly specify FPCFPMAKE later. +# Otherwise pmkunit build will use wrong (starting) compiler +# if there has been no compiler binary available in the compiler +# dir before running make. +ifndef FPCFPMAKENEW +ifdef CROSSCOMPILE +FPCFPMAKENEW=$(BASEDIR)/compiler/ppc$(SRCEXEEXT) +else +FPCFPMAKENEW=$(PPNEW) +endif +endif + # Check if install/ subdir is available ifneq ($(wildcard install),) CVSINSTALL=install @@ -151,20 +163,14 @@ endif # Temporary path to pack a file BASEPACKDIR=$(BASEDIR)/basepack -# Newly created fpcmake -ifndef FPCMAKE -ifeq ($(FULL_SOURCE),$(FULL_TARGET)) -FPCMAKENEW=$(BASEDIR)/utils/fpcm/fpcmake$(EXEEXT) -else -FPCMAKENEW=fpcmake -endif -else -FPCMAKENEW=$(FPCMAKE) +# Always use newly created fpcmake +ifndef FPCMAKENEW +FPCMAKENEW=$(BASEDIR)/utils/fpcm/fpcmake$(SRCEXEEXT) endif # Build/install options CLEANOPTS=FPC=$(PPNEW) -BUILDOPTS=FPC=$(PPNEW) RELEASE=1 +BUILDOPTS=FPC=$(PPNEW) FPCFPMAKE=$(FPCFPMAKENEW) RELEASE=1 INSTALLOPTS=FPC=$(PPNEW) ZIPDESTDIR=$(BASEDIR) FPCMAKE=$(FPCMAKENEW) # Compile also IDE (check for ide and fv dir) @@ -268,6 +274,11 @@ build: $(BUILDSTAMP) $(BUILDSTAMP): # create new compiler $(MAKE) compiler_cycle RELEASE=1 +ifdef CROSSCOMPILE +# Buld a new native fpcmake when cross-compiling. +# Fresh native compiler and RTL are ready at this stage. + $(MAKE) -C utils/fpcm bootstrap $(BUILDOPTS) +endif # clean $(MAKE) rtl_clean $(CLEANOPTS) $(MAKE) packages_clean $(CLEANOPTS) diff --git a/utils/fpcm/Makefile b/utils/fpcm/Makefile index a2102f60d5..dfa7a8901b 100644 --- a/utils/fpcm/Makefile +++ b/utils/fpcm/Makefile @@ -1,5 +1,5 @@ # -# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013/01/16] +# Don't edit, this file is generated by FPCMake Version 2.0.0 [2013/02/20] # default: all MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux jvm-java jvm-android @@ -268,6 +268,19 @@ ifdef CROSSCOMPILE ifndef DARWIN2DARWIN ifneq ($(CPU_TARGET),jvm) BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)- +ifeq ($(OS_TARGET),android) +ifeq ($(CPU_TARGET),arm) +BINUTILSPREFIX=arm-linux-androideabi- +else +ifeq ($(CPU_TARGET),i386) +BINUTILSPREFIX=i686-linux-android- +else +ifeq ($(CPU_TARGET),mips) +BINUTILSPREFIX=mipsel-linux-android- +endif +endif +endif +endif endif endif endif @@ -302,6 +315,7 @@ FPMAKE_SKIP_CONFIG=-n FPCFPMAKE=$(FPC) endif endif +BS_UNITDIR=$(BASEDIR)/units/$(SOURCESUFFIX) ifeq ($(FULL_TARGET),i386-linux) override TARGET_PROGRAMS+=fpcmake endif @@ -3027,3 +3041,7 @@ fpcmake.inc: fpcmake.ini $(DATA2INC) -b -s fpcmake.ini fpcmake.inc fpcmakeini endif fpcmake$(EXEEXT): $(wildcard fpcm*.pp) fpcmake.inc +$(BS_UNITDIR): + $(MKDIRTREE) $(BS_UNITDIR) +bootstrap: $(BS_UNITDIR) fpcmake.inc + $(FPCFPMAKE) fpcmake.pp $(FPMAKE_SKIP_CONFIG) -Fu$(UNITDIR_FPMAKE_RTL) -FU$(BS_UNITDIR) $(OPT) diff --git a/utils/fpcm/Makefile.fpc b/utils/fpcm/Makefile.fpc index 4cb6623f16..3bf5262b88 100644 --- a/utils/fpcm/Makefile.fpc +++ b/utils/fpcm/Makefile.fpc @@ -19,6 +19,9 @@ fpcpackage=y [default] fpcdir=../.. +[prerules] +BS_UNITDIR=$(BASEDIR)/units/$(SOURCESUFFIX) + [rules] .NOTPARALLEL: ifneq ($(DATA2INC),) @@ -27,3 +30,8 @@ fpcmake.inc: fpcmake.ini endif fpcmake$(EXEEXT): $(wildcard fpcm*.pp) fpcmake.inc + +$(BS_UNITDIR): + $(MKDIRTREE) $(BS_UNITDIR) +bootstrap: $(BS_UNITDIR) fpcmake.inc + $(FPCFPMAKE) fpcmake.pp $(FPMAKE_SKIP_CONFIG) -Fu$(UNITDIR_FPMAKE_RTL) -FU$(BS_UNITDIR) $(OPT)