fpc/Makefile.fpc
2010-12-15 19:16:48 +00:00

301 lines
6.7 KiB
Makefile

#
# Makefile.fpc for Free Pascal Source Tree
#
[package]
name=fpc
version=2.5.1
[target]
dirs=compiler rtl utils packages ide installer
[require]
nortl=y
[install]
fpcpackage=y
[default]
fpcdir=.
rule=help
[prerules]
# make versions < 3.77 (OS2 version) are buggy
ifndef inOS2
override FPCDIR:=$(BASEDIR)
export FPCDIR
endif
# Build dir
ifndef BUILDDIR
BUILDDIR=$(BASEDIR)/build
endif
# New ppc386 (or ppc68k if on m68k machine !)
ifndef PPNEW
ifeq ($(CPU_TARGET),m68k)
PPSUF=68k
endif
ifeq ($(CPU_TARGET),i386)
PPSUF=386
endif
ifeq ($(CPU_TARGET),x86_64)
PPSUF=x64
endif
ifeq ($(CPU_TARGET),sparc)
PPSUF=sparc
endif
ifeq ($(CPU_TARGET),powerpc)
PPSUF=ppc
endif
ifeq ($(CPU_TARGET),powerpc64)
PPSUF=ppc64
endif
ifeq ($(CPU_TARGET),alpha)
PPSUF=axp
endif
ifeq ($(CPU_TARGET),arm)
PPSUF=arm
endif
ifeq ($(CPU_TARGET),armeb)
PPSUF=arm
endif
# cross compilers uses full cpu_target, not just ppc-suffix.
ifdef CROSSCOMPILE
PPPRE=ppcross
else
PPPRE=ppc
endif
PPNEW=$(BASEDIR)/compiler/$(PPPRE)$(PPSUF)$(SRCEXEEXT)
endif
# Check if install/ subdir is available
ifneq ($(wildcard install),)
CVSINSTALL=install
else
CVSINSTALL=.
endif
# Install target, for snapshots we don't install examples.
# Cross installation only needs the .ppu files
ifdef SNAPSHOT
INSTALLTARGET=install
else
ifdef CROSSINSTALL
INSTALLTARGET=install
else
INSTALLTARGET=distinstall
endif
endif
# All target
ifdef SNAPSHOT
ALLTARGET=all
else
ifndef ALLTARGET
SHAREDTARGETS=
SMARTTARGETS=win32 go32v2 linux freebsd netbsd openbsd netware netwlibc darwin
ifneq ($(findstring $(OS_TARGET),$(SHAREDTARGETS)),)
ALLTARGET=shared
else
ifneq ($(findstring $(OS_TARGET),$(SMARTTARGETS)),)
ALLTARGET=smart
else
ALLTARGET=all
endif
endif
endif
endif
# Prefix for units
ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
PKGUNITSPRE=u
else
PKGUNITSPRE=units-
endif
# Cross compile needs a prefix to not conflict with original packages
ifdef CROSSINSTALL
PKGPRE=$(FULL_TARGET)-
else
PKGPRE=
endif
# Always compile for release
override RELEASE=1
export RELEASE
# We want to have the resulting .zips in the current dir
ifndef DIST_DESTDIR
export DIST_DESTDIR:=$(BASEDIR)
endif
# Temporary path to pack a file
BASEPACKDIR=$(BASEDIR)/basepack
# Newly created fpcmake
ifeq ($(FULL_SOURCE),$(FULL_TARGET))
FPCMAKENEW=$(BASEDIR)/utils/fpcm/fpcmake$(EXEEXT)
else
FPCMAKENEW=fpcmake
endif
# Build/install options
CLEANOPTS=FPC=$(PPNEW)
BUILDOPTS=FPC=$(PPNEW) RELEASE=1
INSTALLOPTS=FPC=$(PPNEW) ZIPDESTDIR=$(BASEDIR) FPCMAKE=$(FPCMAKENEW)
# Compile also IDE (check for ide and fv dir)
# Skipped by default for cross compiles, because it depends on libc
ifndef CROSSCOMPILE
ifneq ($(wildcard ide),)
IDETARGETS=go32v2 win32 win64 linux freebsd os2 emx beos haiku
ifneq ($(findstring $(OS_TARGET),$(IDETARGETS)),)
IDE=1
endif
endif
endif
[rules]
.NOTPARALLEL:
# These values can change
unexport FPC_VERSION FPC_COMPILERINFO OS_SOURCE
# Only process directories that really exists
override TARGET_DIRS:=$(wildcard $(TARGET_DIRS))
#####################################################################
# Main targets
#####################################################################
.PHONY: help
help:
@$(ECHO)
@$(ECHO) Targets
@$(ECHO) all Alias for build
@$(ECHO) build Build a new compiler and all packages
@$(ECHO) install Install newly build files
@$(ECHO) zipinstall Create zip/tar of installed files
@$(ECHO) singlezipinstall Alias for zipinstall
@$(ECHO)
@exit
#####################################################################
# Dependencies
#####################################################################
#######################################
# Compiler
#######################################
.PHONY: compiler_cycle
compiler_cycle:
$(MAKE) -C compiler cycle
##########################################################################
# Packaging
##########################################################################
BUILDSTAMP=build-stamp.$(FULL_TARGET)
.PHONY: all clean distclean build buildbase install installbase installother zipinstallbase zipinstallotherzipinstall singlezipinstall
all: build
clean: $(addsuffix _distclean,$(TARGET_DIRS))
-$(DEL) build-stamp.*
-$(DEL) base.build-stamp.*
distclean: clean
build: $(BUILDSTAMP)
$(BUILDSTAMP):
# create new compiler
$(MAKE) compiler_cycle RELEASE=1
# clean
$(MAKE) rtl_clean $(CLEANOPTS)
$(MAKE) packages_clean $(CLEANOPTS)
$(MAKE) utils_clean $(CLEANOPTS)
ifdef IDE
$(MAKE) ide_clean $(CLEANOPTS)
$(MAKE) installer_clean $(CLEANOPTS)
endif
# build everything
$(MAKE) rtl_$(ALLTARGET) $(BUILDOPTS)
$(MAKE) packages_$(ALLTARGET) $(BUILDOPTS)
$(MAKE) utils_all $(BUILDOPTS)
ifdef IDE
$(MAKE) ide_all $(BUILDOPTS)
$(MAKE) installer_all $(BUILDOPTS)
endif
$(ECHOREDIR) Build > $(BUILDSTAMP)
buildbase: base.$(BUILDSTAMP)
base.$(BUILDSTAMP):
# create new compiler
$(MAKE) compiler_cycle RELEASE=1
# clean
$(MAKE) rtl_clean $(CLEANOPTS)
# build everything
$(MAKE) rtl_$(ALLTARGET) $(BUILDOPTS)
$(ECHOREDIR) Build > base.$(BUILDSTAMP)
installbase:
# create dirs
$(MKDIR) $(INSTALL_BASEDIR)
$(MKDIR) $(INSTALL_BINDIR)
# install compiler+rtl
$(MAKE) compiler_$(INSTALLTARGET) $(INSTALLOPTS)
$(MAKE) rtl_$(INSTALLTARGET) $(INSTALLOPTS)
installother:
$(MAKE) packages_$(INSTALLTARGET) $(INSTALLOPTS)
$(MAKE) utils_$(INSTALLTARGET) $(INSTALLOPTS)
ifdef IDE
$(MAKE) ide_$(INSTALLTARGET) $(BUILDOPTS)
endif
zipinstallbase:
$(MAKE) fpc_zipinstall ZIPTARGET=installbase ZIPNAME=base $(INSTALLOPTS)
zipinstallother:
$(MAKE) packages_zip$(INSTALLTARGET) $(INSTALLOPTS) ZIPPREFIX=$(PKGUNITSPRE)
$(MAKE) utils_zip$(INSTALLTARGET) $(INSTALLOPTS)
ifdef IDE
$(MAKE) ide_zip$(INSTALLTARGET) $(INSTALLOPTS)
endif
install: $(BUILDSTAMP)
$(MAKE) installbase $(INSTALLOPTS)
$(MAKE) installother $(INSTALLOPTS)
singlezipinstall: zipinstall
zipinstall: $(BUILDSTAMP)
$(MAKE) fpc_zipinstall ZIPTARGET=install FULLZIPNAME=fpc-$(PACKAGE_VERSION).$(TARGETSUFFIX) $(INSTALLOPTS)
##########################################################################
# Cross installation (installation of cross compiler and units)
##########################################################################
.PHONY: crossall crossinstall crosszipinstall crosssinglezipinstall
crossall:
$(MAKE) all CROSSINSTALL=1
crossinstall:
$(MAKE) install CROSSINSTALL=1
crosszipinstall:
$(MAKE) zipinstall CROSSINSTALL=1
crosssinglezipinstall:
$(MAKE) fpc_zipinstall ZIPTARGET=crossinstall ZIPNAME=fpc $(INSTALLOPTS)