fpc/Makefile.fpc
daniel d19c95db8f * various bugfixes
- Disable shared linking for now since it since it simply breaks
    svn. (Already disabled in Makefile itself, likely accidentally
    done with an old FPCMake, but it "fixed" svn to compile.)

git-svn-id: trunk@2401 -
2006-02-02 08:22:35 +00:00

336 lines
7.5 KiB
Makefile

#
# Makefile.fpc for Free Pascal Source Tree
#
[package]
name=fpc
version=2.1.1
[target]
dirs=compiler rtl utils fcl fv 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
# 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
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)
# Not compile FV for following target(s)
ifneq ($(wildcard fv),)
NOFVTARGETS=wince
ifeq ($(findstring $(OS_TARGET),$(NOFVTARGETS)),)
FV=1
endif
endif
# 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),)
ifneq ($(wildcard fv),)
IDETARGETS=go32v2 win32 linux freebsd os2 emx
ifneq ($(findstring $(OS_TARGET),$(IDETARGETS)),)
IDE=1
endif
endif
endif
endif
[rules]
# 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
#######################################
# Packages
#######################################
.PHONY: packages_base_all packages_extra_all \
packages_base_smart packages_extra_smart
packages_base_all:
$(MAKE) -C packages base_all
packages_base_smart:
$(MAKE) -C packages base_smart
packages_base_shared:
$(MAKE) -C packages base_shared
packages_extra_all:
$(MAKE) -C packages extra_all
packages_extra_smart:
$(MAKE) -C packages extra_smart
packages_extra_shared:
$(MAKE) -C packages extra_shared
##########################################################################
# Packaging
##########################################################################
BUILDSTAMP=build-stamp.$(FULL_TARGET)
.PHONY: all clean distclean build install installbase installother zipinstallbase zipinstallotherzipinstall singlezipinstall
all: build
clean: $(addsuffix _distclean,$(TARGET_DIRS))
$(DEL) 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) fcl_clean $(CLEANOPTS)
ifdef FV
$(MAKE) fv_clean $(CLEANOPTS)
endif
$(MAKE) utils_clean $(CLEANOPTS)
ifdef IDE
$(MAKE) ide_clean $(CLEANOPTS)
endif
# build everything
$(MAKE) rtl_$(ALLTARGET) $(BUILDOPTS)
$(MAKE) packages_base_$(ALLTARGET) $(BUILDOPTS)
$(MAKE) fcl_$(ALLTARGET) $(BUILDOPTS)
ifdef FV
$(MAKE) fv_$(ALLTARGET) $(BUILDOPTS)
endif
$(MAKE) packages_extra_$(ALLTARGET) $(BUILDOPTS)
$(MAKE) utils_all $(BUILDOPTS)
ifdef IDE
$(MAKE) ide_all $(BUILDOPTS)
$(MAKE) installer_all $(BUILDOPTS)
endif
$(ECHOREDIR) Build > $(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) fcl_$(INSTALLTARGET) $(INSTALLOPTS)
ifdef FV
$(MAKE) fv_$(INSTALLTARGET) $(INSTALLOPTS)
endif
$(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) fcl_zip$(INSTALLTARGET) $(INSTALLOPTS) ZIPPREFIX=$(PKGUNITSPRE)
ifdef FV
$(MAKE) fv_zip$(INSTALLTARGET) $(INSTALLOPTS) ZIPPREFIX=$(PKGUNITSPRE)
endif
$(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 ZIPNAME=fpc-$(PACKAGE_VERSION) $(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)