diff --git a/rtl/linux/Makefile b/rtl/linux/Makefile index 2ae4b2aa6a..ab3c503be6 100644 --- a/rtl/linux/Makefile +++ b/rtl/linux/Makefile @@ -1,62 +1,140 @@ # -# $Id$ -# This file is part of the Free Pascal run time library. -# Copyright (c) 1996-98 by Michael van Canneyt -# -# Makefile for the Free Pascal Linux Runtime Library -# -# See the file COPYING.FPC, included in this distribution, -# for details about the copyright. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# Makefile generated from Makefile.fpc on 1999-11-08 19:21 # -# Warning: this file contains TAB (#9) characters that are required for -# make. Make sure you use an editor that does not replace TABs with -# spaces, or the makefile won't work anymore after you save. +defaultrule: Makefile all + +Makefile: Makefile.fpc + fpcmake + ##################################################################### -# Makefile Defaults +# Autodetect OS (Linux or Dos or Windows NT) +# define inlinux when running under linux +# define inWinNT when running under WinNT ##################################################################### -# Default place of the makefile.fpc -DEFAULTFPCDIR=../.. +# We need only / in the path +override PATH:=$(subst \,/,$(PATH)) -# set target and cpu which are required -override OS_TARGET=linux -override CPU=i386 +# Search for PWD and determine also if we are under linux +PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(subst ;, ,$(PATH))))) +ifeq ($(PWD),) +PWD:=$(strip $(wildcard $(addsuffix /pwd,$(subst :, ,$(PATH))))) +ifeq ($(PWD),) +nopwd: + @echo You need the GNU utils package to use this Makefile! + @echo Get ftp://ftp.freepascal.org/pub/fpc/dist/go32v2/utilgo32.zip + @exit +else +inlinux=1 +endif +else +PWD:=$(firstword $(PWD)) +endif -# Where are the include files -RTL=.. -INC=$(RTL)/inc -PROCINC=$(RTL)/$(CPU) +# Detect NT - NT sets OS to Windows_NT +ifndef inlinux +ifeq ($(OS),Windows_NT) +inWinNT=1 +endif +endif -# Where to place the result files -TARGETDIR=. +# Detect OS/2 - OS/2 has OS2_SHELL defined +ifndef inlinux +ifndef inWinNT +ifdef OS2_SHELL +inOS2=1 +endif +endif +endif -# These units belong to the RTL -UNITPREFIX=rtl +# The extension of executables +ifdef inlinux +EXEEXT= +else +EXEEXT=.exe +endif -# Default library name -LIBNAME=fprtl - -# -# Use new Graph unit ? -# -NEWGRAPH=YES -# -# Use LibGGI ? -# -ifndef USELIBGGI -USELIBGGI=NO +# The path which is search separated by spaces +ifdef inlinux +SEARCHPATH=$(subst :, ,$(PATH)) +else +SEARCHPATH=$(subst ;, ,$(PATH)) endif ##################################################################### -# Own defaults +# Default target ##################################################################### +override OS_TARGET:=linux +override CPU_TARGET:=i386 + +##################################################################### +# FPC version/target Detection +##################################################################### + +# What compiler to use ? +ifndef FPC +ifdef inOS2 +export FPC=ppos2$(EXEEXT) +else +export FPC=ppc386$(EXEEXT) +endif +endif + +# Target OS +ifndef OS_TARGET +export OS_TARGET:=$(shell $(FPC) -iTO) +endif + +# Source OS +ifndef OS_SOURCE +export OS_SOURCE:=$(shell $(FPC) -iSO) +endif + +# Target CPU +ifndef CPU_TARGET +export CPU_TARGET:=$(shell $(FPC) -iTP) +endif + +# Source CPU +ifndef CPU_SOURCE +export CPU_SOURCE:=$(shell $(FPC) -iSP) +endif + +# FPC version +ifndef FPC_VERSION +export FPC_VERSION:=$(shell $(FPC) -iV) +endif + +##################################################################### +# Default Settings +##################################################################### + +# Release ? Then force OPT and don't use extra opts via commandline +ifdef RELEASE +override OPT:=-Xs -OG2p3 -n +endif + +# Verbose settings (warning,note,info) +ifdef VERBOSE +override OPT+=-vwni +endif + +##################################################################### +# User Settings +##################################################################### + + +# Pre Settings + +RTL=.. +INC=$(RTL)/inc +PROCINC=$(RTL)/$(CPU_TARGET) + +UNITPREFIX=rtl + # Paths OBJPASDIR=$(RTL)/objpas GRAPHDIR=$(INC)/graph @@ -64,112 +142,46 @@ GRAPHDIR=$(INC)/graph # Define Go32v2 Units SYSTEMUNIT=syslinux - -# Define Loaders -ifdef AOUT -PRT=prt0 -else -PRT=prt1 +# +# Use LibGGI ? +# +ifndef USELIBGGI +USELIBGGI=NO endif -LOADERAS=$(CPU)/$(PRT).as -GLOADERAS=$(CPU)/g$(PRT).as +# Targets -LOADEROBJECTS=prt0 gprt0 +LOADEROBJECTS=prt0 cprt0 gprt0 cprt21 gprt21 +UNITOBJECTS=$(SYSTEMUNIT) objpas strings linux ports dos crt objects printer graph sysutils typinfo math cpu mmx getopts heaptrc errors sockets gpm ipc -ifndef AOUT -LOADEROBJECTS+=cprt0 cprt21 gprt21 -endif +# Clean -# Unit Objects -UNITOBJECTS=$(SYSTEMUNIT) objpas strings \ - linux ports \ - dos crt objects printer graph \ - sysutils typinfo math \ - cpu mmx getopts heaptrc \ - errors sockets gpm ipc - -# Unit Objects Which are placed in libfpc.so, this can't contain units -# that need to be linked with other libs like graph, gpm -SHAREDLIBUNITOBJECTS=$(SYSTEMUNIT) objpas strings \ - linux ports \ - dos crt objects printer \ - sysutils typinfo math \ - cpu mmx getopts heaptrc \ - sockets ipc +# Install -##################################################################### -# Common targets -##################################################################### +# Defaults -.PHONY: all clean install info \ - staticlib sharedlib libsclean \ - staticinstall sharedinstall libinstall \ +DEFAULTUNITS=1 -all: testfpcmake fpc_all - -clean: testfpcmake fpc_clean - -install: testfpcmake fpc_install - -info: testfpcmake fpc_info - -staticlib: testfpcmake fpc_staticlib - -sharedlib: testfpcmake fpc_sharedlib - -libsclean: testfpcmake fpc_libsclean - -staticinstall: testfpcmake fpc_staticinstall - -sharedinstall: testfpcmake fpc_sharedinstall - -libinstall: testfpcmake fpc_libinstall - - -##################################################################### -# Include default makefile -##################################################################### - -# test if FPCMAKE is still valid -ifdef FPCMAKE -ifeq ($(strip $(wildcard $(FPCMAKE))),) -FPCDIR= -FPCMAKE= -endif -endif +# Directories ifndef FPCDIR -ifdef DEFAULTFPCDIR -FPCDIR=$(DEFAULTFPCDIR) +FPCDIR=. endif +override NEEDINCDIR=$(INC) $(PROCINC) +ifndef TARGETDIR +TARGETDIR=. endif -ifndef FPCMAKE -ifdef FPCDIR -FPCMAKE=$(FPCDIR)/makefile.fpc -else -FPCMAKE=makefile.fpc -endif -endif - -override FPCMAKE:=$(strip $(wildcard $(FPCMAKE))) -ifeq ($(FPCMAKE),) -testfpcmake: - @echo makefile.fpc not found! - @echo Check the FPCMAKE and FPCDIR environment variables. - @exit -else -include $(FPCMAKE) -testfpcmake: -endif +# Libraries -##################################################################### -# Include system unit dependencies -##################################################################### +# Info + +FPCINFO=fpc_infocfg fpc_infoobjects fpc_infoinstall + +# Post Settings SYSTEMPPU=$(addsuffix $(PPUEXT),$(SYSTEMUNIT)) @@ -188,17 +200,788 @@ SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES)) # Put system unit dependencies together. SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS) - ##################################################################### -# Dependencies +# Compiler Command Line ##################################################################### -# Options needed -ifneq ("$(FPC_VERSION)","0.99.10") -ifndef BROWSER -NEEDOPT=-b- +# Load commandline OPTDEF and add FPC_CPU define +override FPCOPTDEF:=-d$(CPU_TARGET) + +# Load commandline OPT and add target and unit dir to be sure +ifneq ($(OS_TARGET),$(OS_SOURCE)) +override FPCOPT+=-T$(OS_TARGET) endif -endif + + +ifdef NEEDOPT +override FPCOPT+=$(NEEDOPT) +endif + +# RTL first and then Unit dir (a unit can override RTLunit). Don't add the +# dirs if fpcdir=. which can be used for the rtl makefiles +ifdef FPCDIR +ifneq ($(FPCDIR),.) +override FPCOPT+=-Fu$(FPCDIR)/rtl/$(OS_TARGET) -Fu$(FPCDIR)/units/$(OS_TARGET) +endif +endif + +ifdef NEEDINCDIR +override FPCOPT+=$(addprefix -Fi,$(NEEDINCDIR)) +endif + + +# Target dirs +ifdef TARGETDIR +override FPCOPT+=-FE$(TARGETDIR) +endif + +# Smartlinking +ifeq ($(SMARTLINK),YES) +override FPCOPT+=-Cx +endif + +# Add commandline options +ifdef OPT +override FPCOPT+=$(OPT) +endif +ifdef UNITDIR +override FPCOPT+=$(addprefix -Fu,$(UNITDIR)) +endif +ifdef LIBDIR +override FPCOPT+=$(addprefix -Fl,$(LIBDIR)) +endif +ifdef OBJDIR +override FPCOPT+=$(addprefix -Fo,$(OBJDIR)) +endif +ifdef INCDIR +override FPCOPT+=$(addprefix -Fi,$(INCDIR)) +endif + +# Add defines from FPCOPTDEF to FPCOPT +ifdef FPCOPTDEF +override FPCOPT+=$(FPCOPTDEF) +endif + +# Was a config file specified ? +ifdef CFGFILE +override FPCOPT+=@$(CFGFILE) +endif + +override COMPILER=$(FPC) $(FPCOPT) + +##################################################################### +# Shell tools +##################################################################### + +# To copy pograms +ifndef COPY +export COPY:=cp -fp +endif + +# To move pograms +ifndef MOVE +export MOVE:=mv -f +endif + +# Check delete program +ifndef DEL +export DEL:=rm -f +endif + +# Check deltree program +ifndef DELTREE +export DELTREE:=rm -rf +endif + +# To install files +ifndef INSTALL +ifdef inlinux +export INSTALL:=install -m 644 +else +export INSTALL:=$(COPY) +endif +endif + +# To install programs +ifndef INSTALLEXE +ifdef inlinux +export INSTALLEXE:=install -m 755 +else +export INSTALLEXE:=$(COPY) +endif +endif + +# To make a directory. +ifndef MKDIR +ifdef inlinux +export MKDIR:=install -m 755 -d +else +export MKDIR:=ginstall -m 755 -d +endif +endif + +##################################################################### +# Default Tools +##################################################################### + +# assembler, redefine it if cross compiling +ifndef AS +AS=as +endif + +# linker, but probably not used +ifndef LD +LD=ld +endif + +# Where is the ppumove program ? +ifndef PPUMOVE +PPUMOVE=ppumove +endif + +# Where is the ppdep program ? +ifndef PPDEP +PPDEP=ppdep +endif + +# ppas.bat / ppas.sh +ifdef inlinux +PPAS=ppas.sh +else +ifdef inOS2 +PPAS=ppas.cmd +else +PPAS=ppas.bat +endif +endif + +# also call ppas if with command option -s +ifeq (,$(findstring -s ,$(COMPILER))) +EXECPPAS= +else +EXECPPAS=@$(PPAS) +endif + +# ldconfig to rebuild .so cache +ifdef inlinux +LDCONFIG=ldconfig +else +LDCONFIG= +endif + +# echo +ifndef ECHO +ECHO:=$(strip $(wildcard $(addsuffix /echo$(EXEEXT),$(SEARCHPATH)))) +ifeq ($(ECHO),) +export ECHO:=echo +else +export ECHO:=$(firstword $(ECHO)) +endif +endif + +# Look if UPX is found for go32v2 and win32. We can't use $UPX becuase +# upx uses that one itself (PFV) +ifndef UPXPROG +ifeq ($(OS_TARGET),go32v2) +UPXPROG:=1 +endif +ifeq ($(OS_TARGET),win32) +UPXPROG:=1 +endif +ifdef UPXPROG +UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(EXEEXT),$(SEARCHPATH)))) +ifeq ($(UPX),) +UPXPROG= +else +export UPXPROG:=$(firstword $(UPX)) +endif +else +UPXPROG= +endif +endif + +# gdate/date +ifndef DATE +DATE:=$(strip $(wildcard $(addsuffix /date$(EXEEXT),$(SEARCHPATH)))) +ifeq ($(DATE),) +DATE:=$(strip $(wildcard $(addsuffix /gdate$(EXEEXT),$(SEACHPATH)))) +ifeq ($(DATE),) +DATE= +else +export DATE:=$(firstword $(DATE)) +endif +else +export DATE:=$(firstword $(DATE)) +endif +endif + +ifdef DATE +DATESTR:=$(shell $(DATE) +%Y%m%d) +else +DATESTR= +endif + +# ZipProg, you can't use Zip as the var name (PFV) +ifndef ZIPPROG +ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(EXEEXT),$(SEARCHPATH)))) +ifeq ($(ZIPPROG),) +ZIPPROG= +else +export ZIPPROG:=$(firstword $(ZIPPROG)) -D9 -r +endif +endif + +ifndef ZIPEXT +ZIPEXT=.zip +endif + +##################################################################### +# Default Directories +##################################################################### + +# Base dir +ifdef PWD +BASEDIR:=$(shell $(PWD)) +else +BASEDIR=. +endif + +# set the prefix directory where to install everything +ifndef PREFIXINSTALLDIR +ifdef inlinux +export PREFIXINSTALLDIR=/usr +else +export PREFIXINSTALLDIR=/pp +endif +endif + +# set the directory to the rtl base +ifndef RTLDIR +ifdef RTL +RTLDIR:=$(RTL)/$(OS_TARGET) +else +RTLDIR:=$(FPCDIR)/rtl/$(OS_TARGET) +endif +endif + +# specify where units are. +ifndef UNITDIR +ifdef UNITS +UNITDIR=$(UNITS)/$(OS_TARGET) +else +UNITDIR=$(FPCDIR)/units/$(OS_TARGET) +endif +endif +ifeq ($(strip $(wildcard $(UNITDIR)/*)),) +UNITDIR= +endif + +# On linux, try to find where libgcc.a is. +ifdef inlinux +ifndef GCCLIBDIR +export GCCLIBDIR:=$(shell dirname `(gcc -v 2>&1)| head -n 1| awk '{ print $$4 } '`) +endif +endif + +# Where to find other libraries +ifdef inlinux +ifndef OTHERLIBDIR +export OTHERLIBDIR:=$(shell grep -v "^\#" /etc/ld.so.conf | awk '{ ORS=" "; print $1 }') +endif +endif + +##################################################################### +# Install Directories based on BASEINSTALLDIR +##################################################################### + +# set the base directory where to install everything +ifndef BASEINSTALLDIR +ifdef inlinux +BASEINSTALLDIR=$(PREFIXINSTALLDIR)/lib/fpc/$(FPC_VERSION) +else +BASEINSTALLDIR=$(PREFIXINSTALLDIR) +endif +endif + + +# Linux binary really goes to baseinstalldir +ifndef LIBINSTALLDIR +ifdef inlinux +LIBINSTALLDIR=$(BASEINSTALLDIR) +else +LIBINSTALLDIR=$(BASEINSTALLDIR)/lib +endif +endif + +# set the directory where to install the binaries +ifndef BININSTALLDIR +ifdef inlinux +BININSTALLDIR=$(PREFIXINSTALLDIR)/bin +else +BININSTALLDIR=$(BASEINSTALLDIR)/bin/$(OS_TARGET) +endif +endif + +# Where the .msg files will be stored +ifndef MSGINSTALLDIR +MSGINSTALLDIR=$(BASEINSTALLDIR)/msg +endif + +# Where the .msg files will be stored +ifndef SOURCEINSTALLDIR +SOURCEINSTALLDIR=$(BASEINSTALLDIR)/source +endif + +# Where the doc files will be stored +ifndef DOCINSTALLDIR +ifdef inlinux +DOCINSTALLDIR=$(PREFIXINSTALLDIR)/doc/fpc/$(FPC_VERSION) +else +DOCINSTALLDIR=$(BASEINSTALLDIR)/doc +endif +endif + +######################## +# Unit Directories +######################## + +# this can be set to 'rtl' when the RTL units are installed +ifndef UNITPREFIX +UNITPREFIX=units +endif + +# set the directory where to install the units. +ifndef UNITINSTALLDIR +UNITINSTALLDIR=$(BASEINSTALLDIR)/$(UNITPREFIX)/$(OS_TARGET) +endif + +# set the directory where to install the units. +ifndef STATIC_UNITINSTALLDIR +STATIC_UNITINSTALLDIR=$(UNITINSTALLDIR)/static +endif + +# set the directory where to install the units. +ifndef SHARED_UNITINSTALLDIR +SHARED_UNITINSTALLDIR=$(UNITINSTALLDIR)/shared +endif + +# set the directory where to install the libs (must exist) +ifndef STATIC_LIBINSTALLDIR +STATIC_LIBINSTALLDIR=$(STATIC_UNITINSTALLDIR) +endif + +# set the directory where to install the libs (must exist) +ifndef SHARED_LIBINSTALLDIR +ifdef inlinux +SHARED_LIBINSTALLDIR=$(PREFIXINSTALLDIR)/lib +else +SHARED_LIBINSTALLDIR=$(SHARED_UNITINSTALLDIR) +endif +endif + +##################################################################### +# Default extensions +##################################################################### + +# Default needed extensions (Go32v2,Linux) +LOADEREXT=.as +PPLEXT=.ppl +PPUEXT=.ppu +OEXT=.o +ASMEXT=.s +SMARTEXT=.sl +STATICLIBEXT=.a +SHAREDLIBEXT=.so +PACKAGESUFFIX= + +# Go32v1 +ifeq ($(OS_TARGET),go32v1) +PPUEXT=.pp1 +OEXT=.o1 +ASMEXT=.s1 +SMARTEXT=.sl1 +STATICLIBEXT=.a1 +SHAREDLIBEXT=.so1 +PACKAGESUFFIX=v1 +endif + +# Go32v2 +ifeq ($(OS_TARGET),go32v2) +PACKAGESUFFIX=go32 +endif + +# Linux +ifeq ($(OS_TARGET),linux) +PACKAGESUFFIX=linux +endif + +# Win32 +ifeq ($(OS_TARGET),win32) +PPUEXT=.ppw +OEXT=.ow +ASMEXT=.sw +SMARTEXT=.slw +STATICLIBEXT=.aw +SHAREDLIBEXT=.dll +PACKAGESUFFIX=win32 +endif + +# OS/2 +ifeq ($(OS_TARGET),os2) +PPUEXT=.ppo +ASMEXT=.so2 +OEXT=.oo2 +SMARTEXT=.so +STATICLIBEXT=.ao2 +SHAREDLIBEXT=.dll +PACKAGESUFFIX=os2 +endif + +# library prefix +LIBPREFIX=lib +ifeq ($(OS_TARGET),go32v2) +LIBPREFIX= +endif +ifeq ($(OS_TARGET),go32v1) +LIBPREFIX= +endif + +# determine which .pas extension is used +ifndef PASEXT +ifdef EXEOBJECTS +override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(EXEOBJECTS))))) +else +override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(UNITOBJECTS))))) +endif +ifeq ($(TESTPAS),) +PASEXT=.pp +else +PASEXT=.pas +endif +endif + +##################################################################### +# Default rules +##################################################################### + +.PHONY: defaultrule all staticlib sharedlib showinstall install \ + staticinstall sharedinstall libinstall zipinstall zipinstalladd \ + clean cleanall depend info + +all: fpc_all + +staticlib: fpc_staticlib + +sharedlib: fpc_sharedlib + +showinstall: fpc_showinstall + +install: fpc_install + +staticinstall: fpc_staticinstall + +sharedinstall: fpc_sharedinstall + +libinstall: fpc_libinstall + +zipinstall: fpc_zipinstall + +zipinstalladd: fpc_zipinstalladd + +clean: fpc_clean + +clean_all: fpc_clean_all + +depend: fpc_depend + +info: fpc_info + +##################################################################### +# General compile rules +##################################################################### + +.PHONY: fpc_all fpc_units fpc_exes fpc_loaders + +# Create Filenames +LOADEROFILES=$(addsuffix $(OEXT),$(LOADEROBJECTS)) +EXEFILES=$(addsuffix $(EXEEXT),$(EXEOBJECTS)) +EXEOFILES=$(addsuffix $(OEXT),$(EXEOBJECTS)) +UNITPPUFILES=$(addsuffix $(PPUEXT),$(UNITOBJECTS)) +UNITOFILES=$(addsuffix $(OEXT),$(UNITOBJECTS)) +UNITAFILES=$(addsuffix $(STATICLIBEXT),$(UNITOBJECTS)) + +.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .pp + +ifdef DEFAULTUNITS +fpc_all: fpc_loaders fpc_units +else +fpc_all: fpc_loaders fpc_units fpc_exes +endif + +fpc_loaders: $(LOADEROFILES) + +fpc_units: $(UNITPPUFILES) + +fpc_exes: $(EXEFILES) + +# General compile rules, available for both possible PASEXT +%$(PPUEXT): %.pp + $(COMPILER) $< $(REDIR) + $(EXECPASS) + +%$(PPUEXT): %.pas + $(COMPILER) $< $(REDIR) + $(EXECPASS) + +%$(EXEEXT): %.pp + $(COMPILER) $< $(REDIR) + $(EXECPASS) + +%$(EXEEXT): %.pas + $(COMPILER) $< $(REDIR) + $(EXECPASS) + +%$(OEXT): %$(LOADEREXT) + $(AS) -o $*$(OEXT) $< + +##################################################################### +# Library +##################################################################### + +.PHONY: fpc_staticlib fpc_sharedlib + +# Default sharedlib units are all unit objects +ifndef SHAREDLIBUNITOBJECTS +SHAREDLIBUNITOBJECTS=$(UNITOBJECTS) +endif + +fpc_staticlib: + $(MAKE) libsclean + $(MAKE) all SMARTLINK=YES + +fpc_sharedlib: all +ifdef inlinux +ifndef LIBNAME + @$(ECHO) LIBNAME not set +else + $(PPUMOVE) $(SHAREDLIBUNITOBJECTS) -o$(LIBNAME) +endif +else + @$(ECHO) Shared Libraries not supported +endif + +##################################################################### +# Install rules +##################################################################### + +.PHONY: fpc_showinstallfiles fpc_install + +ifdef UNITOBJECTS +override UNITINSTALLFILES=$(wildcard $(UNITPPUFILES) $(UNITOFILES) $(UNITAFILES)) +endif +ifdef EXTRAINSTALLUNITS +override EXTRAINSTALLFILES+=$(wildcard $(addsuffix $(OEXT),$(EXTRAINSTALLUNITS)) $(addsuffix $(STATICLIBEXT),$(EXTRAINSTALLUNITS)) $(addsuffix $(PPUEXT),$(EXTRAINSTALLUNITS))) +endif + +fpc_showinstallfiles : all +ifndef DEFAULTUNITS +ifdef EXEOBJECTS + @$(ECHO) $(addprefix "\n"$(BININSTALLDIR)/,$(EXEFILES)) +endif +endif +ifdef LOADEROBJECTS + @$(ECHO) $(addprefix "\n"$(UNITINSTALLDIR)/,$(LOADEROFILES)) +endif +ifdef UNITINSTALLFILES + @$(ECHO) $(addprefix "\n"$(UNITINSTALLDIR)/,$(UNITINSTALLFILES)) +endif +ifdef EXTRAINSTALLFILES + @$(ECHO) $(addprefix "\n"$(UNITINSTALLDIR)/,$(EXTRAINSTALLFILES)) +endif + +fpc_install: +# Create UnitInstallFiles +ifndef DEFAULTUNITS +ifdef EXEOBJECTS + $(MKDIR) $(BININSTALLDIR) +# Compress the exes if upx is defined +ifdef UPXPROG + -$(UPXPROG) $(EXEFILES) +endif + $(INSTALLEXE) $(EXEFILES) $(BININSTALLDIR) +endif +endif +ifdef LOADEROBJECTS + $(MKDIR) $(UNITINSTALLDIR) + $(INSTALL) $(LOADEROFILES) $(UNITINSTALLDIR) +endif +ifdef UNITINSTALLFILES + $(MKDIR) $(UNITINSTALLDIR) + $(INSTALL) $(UNITINSTALLFILES) $(UNITINSTALLDIR) +endif +ifdef EXTRAINSTALLFILES + $(MKDIR) $(UNITINSTALLDIR) + $(INSTALL) $(EXTRAINSTALLFILES) $(UNITINSTALLDIR) +endif + +##################################################################### +# Zip +##################################################################### + +.PHONY: fpc_zipinstall fpc_zipinstalladd + +# Temporary path to pack a file +ifndef PACKDIR +ifndef inlinux +PACKDIR=pack_tmp +else +PACKDIR=/tmp/fpc-pack +endif +endif + +# Test dir if none specified +ifndef PACKAGEDIR +PACKAGEDIR=$(BASEDIR) +endif + +# Add .zip/.tar.gz extension +ifdef ZIPNAME +ifndef inlinux +override ZIPNAME:=$(ZIPNAME)$(ZIPEXT) +endif +endif + +# Default target which is call before zipping +ifndef ZIPTARGET +ZIPTARGET=install +endif + +# Note: This will not remove the zipfile first +fpc_zipinstalladd: +ifndef ZIPNAME + @$(ECHO) Please specify ZIPNAME! + @exit +else + $(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR) +ifdef inlinux + gzip -d $(PACKAGEDIR)/$(ZIPNAME).tar.gz + cd $(PACKDIR) ; tar rv --file $(PACKAGEDIR)/$(ZIPNAME).tar * ; cd $(BASEDIR) + gzip $(PACKAGEDIR)/$(ZIPNAME).tar +else + cd $(PACKDIR) ; $(ZIPPROG) $(PACKAGEDIR)/$(ZIPNAME) * ; cd $(BASEDIR) +endif + $(DELTREE) $(PACKDIR) +endif + +# First remove the zip and then install +fpc_zipinstall: +ifndef ZIPNAME + @$(ECHO) Please specify ZIPNAME! + @exit +else + $(DEL) $(PACKAGEDIR)/$(ZIPNAME) + $(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR) +ifdef inlinux + cd $(PACKDIR) ; tar cvz --file $(PACKAGEDIR)/$(ZIPNAME).tar.gz * ; cd $(BASEDIR) +else + cd $(PACKDIR) ; $(ZIPPROG) $(PACKAGEDIR)/$(ZIPNAME) * ; cd $(BASEDIR) +endif + $(DELTREE) $(PACKDIR) +endif + +##################################################################### +# Clean rules +##################################################################### + +.PHONY: fpc_clean fpc_libsclean fpc_cleanall + +ifdef UNITOBJECTS +override UNITCLEANFILES=$(wildcard $(UNITPPUFILES) $(UNITOFILES) $(UNITAFILES)) +endif +ifdef EXTRACLEANUNITS +override EXTRACLEANFILES+=$(wildcard $(addsuffix $(OEXT),$(EXTRACLEANUNITS)) $(addsuffix $(STATICLIBEXT),$(EXTRACLEANUNITS)) $(addsuffix $(PPUEXT),$(EXTRACLEANUNITS))) +endif + +fpc_clean: +ifdef EXEOBJECTS + -$(DEL) $(EXEFILES) $(EXEOFILES) +endif +ifdef LOADEROBJECTS + -$(DEL) $(LOADEROFILES) +endif +ifdef UNITCLEANFILES + -$(DEL) $(UNITCLEANFILES) +endif +ifdef EXTRACLEANFILES + -$(DEL) $(EXTRACLEANFILES) +endif + -$(DEL) $(PPAS) link.res log + +fpc_libsclean: clean + -$(DEL) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT) + +fpc_cleanall: +ifdef EXEOBJECTS + -$(DEL) $(EXEFILES) +endif + -$(DEL) *$(OEXT) *$(PPUEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT) + -$(DELTREE) *$(SMARTEXT) + +##################################################################### +# Depend rules +##################################################################### + +.PHONY: fpc_depend + +fpc_depend: + $(PPDEP) $(UNITOBJECTS) + +##################################################################### +# Info rules +##################################################################### + +.PHONY: fpc_info fpc_cfginfo fpc_objectinfo fpc_toolsinfo fpc_installinfo \ + fpc_dirinfo + +fpc_info: $(FPCINFO) + +fpc_infocfg: + @$(ECHO) + @$(ECHO) == Configuration info == + @$(ECHO) + @$(ECHO) FPC....... $(FPC) + @$(ECHO) Version... $(FPC_VERSION) + @$(ECHO) CPU....... $(CPU_TARGET) + @$(ECHO) Source.... $(OS_SOURCE) + @$(ECHO) Target.... $(OS_TARGET) + @$(ECHO) + + +fpc_infoinstall: + @$(ECHO) + @$(ECHO) == Install info == + @$(ECHO) +ifdef DATE + @$(ECHO) DateStr.............. $(DATESTR) +endif + @$(ECHO) PackageSuffix........ $(PACKAGESUFFIX) + @$(ECHO) + @$(ECHO) BaseInstallDir....... $(BASEINSTALLDIR) + @$(ECHO) BinInstallDir........ $(BININSTALLDIR) + @$(ECHO) UnitInstallDir....... $(UNITINSTALLDIR) + @$(ECHO) StaticUnitInstallDir. $(STATIC_UNITINSTALLDIR) + @$(ECHO) SharedUnitInstallDir. $(SHARED_UNITINSTALLDIR) + @$(ECHO) LibInstallDir........ $(LIBINSTALLDIR) + @$(ECHO) StaticLibInstallDir.. $(STATIC_LIBINSTALLDIR) + @$(ECHO) SharedLibInstallDir.. $(SHARED_LIBINSTALLDIR) + @$(ECHO) MsgInstallDir........ $(MSGINSTALLDIR) + @$(ECHO) DocInstallDir........ $(DOCINSTALLDIR) + @$(ECHO) + +##################################################################### +# Users rules +##################################################################### + vpath %$(PASEXT) $(INC) $(PROCINC) @@ -206,25 +989,22 @@ vpath %$(PASEXT) $(INC) $(PROCINC) # Loaders # -prt0$(OEXT) : $(LOADERAS) - $(AS) -o prt0$(OEXT) $(LOADERAS) +prt0$(OEXT) : $(CPU_TARGET)/prt0.as + $(AS) -o prt0$(OEXT) $(CPU_TARGET)/prt0.as -gprt0$(OEXT) : $(GLOADERAS) - $(AS) -o gprt0$(OEXT) $(GLOADERAS) +gprt0$(OEXT) : $(CPU_TARGET)/gprt0.as + $(AS) -o gprt0$(OEXT) $(CPU_TARGET)/gprt0.as -ifndef AOUT +cprt0$(OEXT) : $(CPU_TARGET)/cprt0.as + $(AS) -o cprt0$(OEXT) $(CPU_TARGET)/cprt0.as -cprt0$(OEXT) : $(CPU)/cprt1.as - $(AS) -o cprt0$(OEXT) $(CPU)/cprt1.as - -cprt21$(OEXT) : $(CPU)/cprt21.as - $(AS) -o cprt21$(OEXT) $(CPU)/cprt21.as +cprt21$(OEXT) : $(CPU_TARGET)/cprt21.as + $(AS) -o cprt21$(OEXT) $(CPU_TARGET)/cprt21.as # still need to use gprt1, because gprt21 crashes -gprt21$(OEXT) : $(CPU)/gprt1.as - $(AS) -o gprt21$(OEXT) $(CPU)/gprt1.as +gprt21$(OEXT) : $(CPU_TARGET)/gprt0.as + $(AS) -o gprt21$(OEXT) $(CPU_TARGET)/gprt0.as -endif # # System Units (System, Objpas, Strings) @@ -284,7 +1064,7 @@ endif # sysutils$(PPUEXT) : $(OBJPASDIR)/sysutils.pp $(wildcard $(OBJPASDIR)/*.inc) \ - filutil.inc disk.inc objpas$(PPUEXT) linux$(PPUEXT) + filutil.inc disk.inc objpas$(PPUEXT) linux$(PPUEXT) $(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/sysutils.pp $(REDIR) typinfo$(PPUEXT): $(OBJPASDIR)/typinfo.pp objpas$(PPUEXT) @@ -319,69 +1099,3 @@ sockets$(PPUEXT) : sockets.pp $(INC)/textrec.inc $(INC)/filerec.inc \ errors$(PPUEXT) : errors.pp strings$(PPUEXT) $(SYSTEMPPU) ipc$(PPUEXT) : ipc.pp linux$(PPUEXT) $(SYSTEMPPU) - - -# -# $Log$ -# Revision 1.33 1999-11-08 00:08:43 michael -# * Fist working version of svgalib new graph unit -# * Initial implementation of ggi new graph unit -# -# Revision 1.32 1999/11/07 16:57:26 michael -# + Start of common graph implementation -# -# Revision 1.31 1999/08/04 11:30:05 michael -# * moved gettext to fcl -# -# Revision 1.30 1999/07/29 01:39:09 peter -# * shared lib units fixed -# -# Revision 1.29 1999/07/01 19:39:42 peter -# + gpm unit -# -# Revision 1.28 1999/06/03 09:36:32 peter -# * first things for sharedlib to work again -# -# Revision 1.27 1999/05/28 11:28:30 peter -# * ipc unit can be compiled with 0.99.10 again -# -# Revision 1.26 1999/05/28 11:21:06 peter -# * moved fpc_version check so it works correct -# -# Revision 1.25 1999/05/13 07:39:07 michael -# + Fix in heaptrc target: needs -Sg -# -# Revision 1.24 1999/05/05 22:24:08 peter -# * 0.99.10 check for browser -# -# Revision 1.23 1999/05/04 11:59:45 peter -# * browser off by default -# -# Revision 1.22 1999/05/03 23:30:28 peter -# * small update -# * uses gprt1 again for gprt21 becuase gprt21.as crashes -# -# Revision 1.21 1999/05/03 21:29:35 peter -# + glibc 2.1 support -# -# Revision 1.20 1999/04/22 10:56:32 peter -# * fixed sysutils dependencys -# * objpas files are agian in the main Makefile, makefile.op is obsolete -# -# Revision 1.19 1999/04/14 09:07:17 peter -# * fixed strings dependency -# -# Revision 1.18 1999/03/22 13:09:10 peter -# - ipc unit because it crashes on 0.99.10 -# -# Revision 1.17 1999/03/16 00:47:09 peter -# * makefile.fpc targets start with fpc_ -# * small updates for install scripts -# -# Revision 1.16 1999/03/12 21:07:51 michael -# + clean and libsclean added -# -# Revision 1.15 1999/03/09 01:35:55 peter -# * makefile.fpc updates and defaultfpcdir var -# -# diff --git a/rtl/linux/Makefile.fpc b/rtl/linux/Makefile.fpc new file mode 100644 index 0000000000..f50cf5755b --- /dev/null +++ b/rtl/linux/Makefile.fpc @@ -0,0 +1,194 @@ +# +# Makefile.fpc for Free Pascal Linux RTL +# + +[targets] +loaders=prt0 cprt0 gprt0 cprt21 gprt21 +units=$(SYSTEMUNIT) objpas strings \ + linux ports \ + dos crt objects printer graph \ + sysutils typinfo math \ + cpu mmx getopts heaptrc \ + errors sockets gpm ipc +programs= + + +[defaults] +defaultunits=1 +defaulttarget=linux +defaultcpu=i386 + + +[dirs] +fpcdir=. +incdir=$(INC) $(PROCINC) +targetdir=. + + +[libs] +libname=fprtl +libunits=$(SYSTEMUNIT) objpas strings \ + linux ports \ + dos crt objects printer \ + sysutils typinfo math \ + cpu mmx getopts heaptrc \ + errors sockets gpm ipc + +[presettings] +RTL=.. +INC=$(RTL)/inc +PROCINC=$(RTL)/$(CPU_TARGET) + +UNITPREFIX=rtl + +# Paths +OBJPASDIR=$(RTL)/objpas +GRAPHDIR=$(INC)/graph + +# Define Go32v2 Units +SYSTEMUNIT=syslinux + +# +# Use LibGGI ? +# +ifndef USELIBGGI +USELIBGGI=NO +endif + + +[postsettings] +SYSTEMPPU=$(addsuffix $(PPUEXT),$(SYSTEMUNIT)) + +# Get the system independent include file names. +# This will set the following variables : +# SYSINCNAMES +include $(INC)/makefile.inc +SYSINCDEPS=$(addprefix $(INC)/,$(SYSINCNAMES)) + +# Get the processor dependent include file names. +# This will set the following variables : +# CPUINCNAMES +include $(PROCINC)/makefile.cpu +SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES)) + +# Put system unit dependencies together. +SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS) + + +[rules] +vpath %$(PASEXT) $(INC) $(PROCINC) + +# +# Loaders +# + +prt0$(OEXT) : $(CPU_TARGET)/prt0.as + $(AS) -o prt0$(OEXT) $(CPU_TARGET)/prt0.as + +gprt0$(OEXT) : $(CPU_TARGET)/gprt0.as + $(AS) -o gprt0$(OEXT) $(CPU_TARGET)/gprt0.as + +cprt0$(OEXT) : $(CPU_TARGET)/cprt0.as + $(AS) -o cprt0$(OEXT) $(CPU_TARGET)/cprt0.as + +cprt21$(OEXT) : $(CPU_TARGET)/cprt21.as + $(AS) -o cprt21$(OEXT) $(CPU_TARGET)/cprt21.as + +# still need to use gprt1, because gprt21 crashes +gprt21$(OEXT) : $(CPU_TARGET)/gprt0.as + $(AS) -o gprt21$(OEXT) $(CPU_TARGET)/gprt0.as + + +# +# System Units (System, Objpas, Strings) +# + +$(SYSTEMPPU) : syslinux.pp sysconst.inc systypes.inc syscalls.inc $(SYSDEPS) + $(COMPILER) -Us -Sg syslinux.pp $(REDIR) + +objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMPPU) + $(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/objpas.pp $(REDIR) + +strings$(PPUEXT) : $(INC)/strings.pp $(INC)/stringsi.inc\ + $(PROCINC)/strings.inc $(PROCINC)/stringss.inc\ + $(SYSTEMPPU) + +# +# System Dependent Units +# + +linux$(PPUEXT) : linux.pp strings$(PPUEXT) $(INC)/textrec.inc $(INC)/filerec.inc \ + syscalls.inc systypes.inc sysconst.inc $(SYSTEMPPU) + +ports$(PPUEXT) : ports.pp linux$(PPUEXT) objpas$(PPUEXT) + +# +# TP7 Compatible RTL Units +# + +dos$(PPUEXT) : dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) \ + linux$(PPUEXT) $(SYSTEMPPU) + +crt$(PPUEXT) : crt.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMPPU) + +objects$(PPUEXT) : $(INC)/objects.pp objinc.inc $(SYSTEMPPU) + +printer$(PPUEXT) : printer.pp $(INC)/textrec.inc linux$(PPUEXT) $(SYSTEMPPU) + +# +# Graph +# +ifndef NEWGRAPH +graph$(PPUEXT) : graph.pp linux$(PPUEXT) objects$(PPUEXT) +else +include $(GRAPHDIR)/makefile.inc +GRAPHINCDEPS=$(addprefix $(GRAPHDIR)/,$(GRAPHINCNAMES)) +ifeq ($(USELIBGGI),YES) +GRAPHINCDEPS+=ggigraph.inc +override COMPILER+=-dUSEGGI -S2 +else +GRAPHINCDEPS+=vgagraph.inc +endif +graph$(PPUEXT) : $(GRAPHDIR)/graph.pp $(SYSTEMPPU) $(GRAPHINCDEPS) graph.inc + $(COMPILER) -I$(GRAPHDIR) $(GRAPHDIR)/graph.pp $(REDIR) +endif +# +# Delphi Compatible Units +# + +sysutils$(PPUEXT) : $(OBJPASDIR)/sysutils.pp $(wildcard $(OBJPASDIR)/*.inc) \ + filutil.inc disk.inc objpas$(PPUEXT) linux$(PPUEXT) + $(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/sysutils.pp $(REDIR) + +typinfo$(PPUEXT): $(OBJPASDIR)/typinfo.pp objpas$(PPUEXT) + $(COMPILER) -Sg $(OBJPASDIR)/typinfo.pp $(REDIR) + +math$(PPUEXT): $(OBJPASDIR)/math.pp objpas$(PPUEXT) sysutils$(PPUEXT) + $(COMPILER) $(OBJPASDIR)/math.pp $(REDIR) + +gettext$(PPUEXT): $(OBJPASDIR)/gettext.pp objpas$(PPUEXT) sysutils$(PPUEXT) + $(COMPILER) $(OBJPASDIR)/gettext.pp $(REDIR) + +# +# Other system-independent RTL Units +# + +cpu$(PPUEXT) : $(PROCINC)/cpu.pp $(SYSTEMPPU) + +mmx$(PPUEXT) : $(PROCINC)/mmx.pp cpu$(PPUEXT) $(SYSTEMPPU) + +getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMPPU) + +heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMPPU) + $(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR) + +# +# Other system-dependent RTL Units +# + +sockets$(PPUEXT) : sockets.pp $(INC)/textrec.inc $(INC)/filerec.inc \ + linux$(PPUEXT) $(SYSTEMPPU) + +errors$(PPUEXT) : errors.pp strings$(PPUEXT) $(SYSTEMPPU) + +ipc$(PPUEXT) : ipc.pp linux$(PPUEXT) $(SYSTEMPPU)