mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-15 22:00:12 +02:00

- 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 -
336 lines
7.5 KiB
Makefile
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)
|