mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-16 12:29:29 +02:00
* Script to run compiler
This commit is contained in:
parent
d0671c7447
commit
d834d56b0f
14
components/compilers/delphi/script/README.md
Normal file
14
components/compilers/delphi/script/README.md
Normal file
@ -0,0 +1,14 @@
|
||||
# Delphi compiling script
|
||||
|
||||
This directory contains a script that will call the Delphi compiler using
|
||||
wine. It will select the correct compiler based on the -t option.
|
||||
The default compiler is the linux 64-bit compiler.
|
||||
|
||||
You must adapt this script to configure the location of the Delphi
|
||||
compiler(s) and the Delphi sources, dcu files and so on: the variables at the
|
||||
start of the script can be used for this.
|
||||
|
||||
The script will also change the file mode of the generated executable,
|
||||
making it actually executable.
|
||||
|
||||
Run the script with -h to get a list of supported options.
|
224
components/compilers/delphi/script/dcc.sh
Executable file
224
components/compilers/delphi/script/dcc.sh
Executable file
@ -0,0 +1,224 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Defaults
|
||||
#
|
||||
#LIBROOT=/opt/delphi/linuxmint19.1.sdk
|
||||
LIBROOT=
|
||||
#opt/delphi/linuxmint19.1.sdk
|
||||
DELPHIUNITS=~/.delphi_units.txt
|
||||
DELPHILIBPATH=~/.delphi_libpath.txt
|
||||
TARGET=linux64
|
||||
DELPHIDIR=/opt/delphi/delphi-1101
|
||||
#LINKARGS="-export-dynamic -z now -z relro -z noexecstack"
|
||||
LINKARGS="-z now -z relro -z noexecstack"
|
||||
BUILDCONFIG=debug
|
||||
export WINEDEBUG="-all"
|
||||
#
|
||||
# Usage
|
||||
#
|
||||
function usage {
|
||||
if [ ! -z $1 ]; then
|
||||
echo "Error: $1"
|
||||
fi
|
||||
echo "Usage: $0 [options] project.dpr"
|
||||
echo "Where options is one or more of: "
|
||||
echo "-h help This help message"
|
||||
echo "-c build-config One of debug or release (default: $BUILDCONFIG)"
|
||||
echo "-dd DIR Delphi installation dir (default: $DELPHIDIR)"
|
||||
echo "-la ARGS Extra linker args. (added to default args: $LINKARGS)"
|
||||
echo "-lp FILE Set file with library paths (one per line, default: $DELPHILIBPATH)"
|
||||
echo "-n only echo commands."
|
||||
echo "-np do not set permissions on executable"
|
||||
echo "-sr PATH Set sysroot (default: $LIBROOT)"
|
||||
echo "-up FILE Set file with unit paths (one per line, default: $DELPHIUNITS)"
|
||||
echo "-t TARGET Set OS target (default: $TARGET)"
|
||||
echo "-v Be more verbose"
|
||||
}
|
||||
function info {
|
||||
if [ "$VERBOSE" = YES ]; then
|
||||
echo $*
|
||||
fi
|
||||
}
|
||||
#
|
||||
# Process command-line options
|
||||
#
|
||||
ARGS=
|
||||
while test $# != 0
|
||||
do
|
||||
f=$1
|
||||
case $f in
|
||||
-c) shift
|
||||
BUILDCONFIG=$1;;
|
||||
-up) shift
|
||||
DELPHIUNITS=$1;;
|
||||
-dd) shift
|
||||
DELPHIDIR=$1;;
|
||||
-la) shift
|
||||
EXTRALINKARGS=$1;;
|
||||
-lp) shift
|
||||
DELPHILIBPATH=$1;;
|
||||
-sr) shift
|
||||
LIBROOT=$1;;
|
||||
-t) shift
|
||||
TARGET=$1;;
|
||||
-n) ECHO=YES;;
|
||||
-np) NOPERMISSIONS=YES;;
|
||||
-h) usage
|
||||
exit 0;;
|
||||
-v) VERBOSE=YES;;
|
||||
-*)
|
||||
ARGS="$ARGS $f";;
|
||||
@*)
|
||||
ARGS="$ARGS $f";;
|
||||
*) PROJECT=$f
|
||||
esac
|
||||
shift
|
||||
done
|
||||
#
|
||||
# Compiler & target os
|
||||
#
|
||||
case $TARGET in
|
||||
win32)
|
||||
DCC=dcc32
|
||||
TARGETOSDIR=win
|
||||
TARGETLIBDIR=win32;;
|
||||
win64)
|
||||
DCC=dcc64
|
||||
TARGETOSDIR=win
|
||||
TARGETLIBDIR=win64;;
|
||||
linux|linux64)
|
||||
DCC=dcclinux64
|
||||
TARGETOSDIR="linux posix"
|
||||
TARGETLIBDIR=linux64
|
||||
TARGETSDKLIBPATHS="usr/lib/x86_64-linux-gnu/ lib/ lib/x86_64-linux-gnu/ usr/lib/"
|
||||
NEEDPERMISSIONS=YES;;
|
||||
osx|osx64)
|
||||
DCC=dccosx64
|
||||
TARGETOSDIR="osx posix"
|
||||
TARGETLIBDIR=osx64
|
||||
NEEDPERMISSIONS=YES;;
|
||||
osxarm|osxarm64)
|
||||
DCC=dccosxarm64
|
||||
TARGETOSDIR="osx posix"
|
||||
TARGETLIBDIR=osxarm64
|
||||
NEEDPERMISSIONS=YES;;
|
||||
ios|ios64)
|
||||
DCC=dcciosarm64
|
||||
TARGETOSDIR="ios posix"
|
||||
TARGETLIBDIR="iosDevice64";;
|
||||
android)
|
||||
DCC=dccaarm
|
||||
TARGETOSDIR="android posix"
|
||||
TARGETLIBDIR="android";;
|
||||
android64)
|
||||
DCC=dccaarm64
|
||||
TARGETOSDIR="android posix"
|
||||
TARGETLIBDIR="android64";;
|
||||
|
||||
*) Usage "Unknown target: $TARGET"
|
||||
exit 1;;
|
||||
esac
|
||||
info "Building for target: $TARGET, for config: $BUILDCONFIG"
|
||||
#
|
||||
# Check echo only
|
||||
#
|
||||
if [ "$ECHO" = "YES" ]; then
|
||||
CMD=echo
|
||||
fi
|
||||
#
|
||||
# Unit paths
|
||||
#
|
||||
UNITPATHS=.
|
||||
if [ ! -f "$DELPHIUNITS" ]; then
|
||||
info "Creating default unit paths based on $DELPHIDIR installation."
|
||||
for d in lib lib/$TARGETLIBDIR/$BUILDCONFIG Imports include
|
||||
do
|
||||
UNITPATHS="$UNITPATHS;$DELPHIDIR/$d"
|
||||
done
|
||||
for d in fmx DUnit DUnit/src
|
||||
do
|
||||
UNITPATHS="$UNITPATHS;$DELPHIDIR/source/$d"
|
||||
done
|
||||
for d in $TARGETOSDIR
|
||||
do
|
||||
UNITPATHS="$UNITPATHS;$DELPHIDIR/source/rtl/$d"
|
||||
done
|
||||
else
|
||||
info "Creating default unit paths based on $DELPHIUNITS file."
|
||||
for U in $(cat $DELPHIUNITS)
|
||||
do
|
||||
eval "UD=$U"
|
||||
UNITPATHS="$UNITPATHS;$UD"
|
||||
done
|
||||
fi
|
||||
info "Unit paths: $UNITPATHS"
|
||||
info ""
|
||||
#
|
||||
# Library paths
|
||||
#
|
||||
LIBPATHS=.
|
||||
if [ ! -f "$DELPHILIBPATH" ]; then
|
||||
info "Creating default delphi library paths based on $DELPHIDIR installation."
|
||||
LIBPATHS=$DELPHIDIR/lib/$TARGETLIBDIR/$BUILDCONFIG
|
||||
if [ ! -z "$TARGETSDKLIBPATHS" ]; then
|
||||
for lp in $TARGETSDKLIBPATHS
|
||||
do
|
||||
LIBPATHS="$LIBPATHS;$LIBROOT/$lp"
|
||||
done
|
||||
fi
|
||||
else
|
||||
info "Creating default delphi library paths based on $DELPHILIBPATH file."
|
||||
for L in $(cat $DELPHILIBPATH)
|
||||
do
|
||||
eval "LD=$L"
|
||||
LIBPATHS="$LIBPATHS;$LD"
|
||||
done
|
||||
fi
|
||||
info "Library paths: $LIBPATHS"
|
||||
info ""
|
||||
#
|
||||
# Various linker args
|
||||
#
|
||||
case $TARGET in
|
||||
linux|linux64)
|
||||
LIBPATHARG=--libpath:"$LIBPATHS"
|
||||
SYSROOTARG=--syslibroot:"$LIBROOT"
|
||||
LINKEROPTIONSARG="--linker-option:$LINKARGS $EXTRALINKARGS"
|
||||
esac
|
||||
#
|
||||
# Correct project file
|
||||
#
|
||||
UNIXPROJECT=$PROJECT
|
||||
echo "$PROJECT" | grep \\\\ &> /dev/null
|
||||
if [ $? != 0 ]; then
|
||||
PROJECT=$(winepath -w "$PROJECT")
|
||||
info "Converted project file to windows notation: $PROJECT";
|
||||
fi
|
||||
#
|
||||
# Call compiler
|
||||
#
|
||||
info "Calling compiler ${DELPHIDIR}/bin/${DCC}.exe:"
|
||||
#
|
||||
# The ${var+"$var"} is needed to omit empty arguments, which will be interoreted by delphi as empty filenames :/
|
||||
#
|
||||
$CMD wine "${DELPHIDIR}/bin/${DCC}.exe" ${LIBPATHARG+"$LIBPATHARG"} ${SYSROOTARG+"$SYSROOTARG"} ${LINKEROPTIONSARG+"$LINKEROPTIONSARG"} "-U$UNITPATHS" $ARGS "$PROJECT"
|
||||
E=$?
|
||||
if [ "$E" = 0 ]; then
|
||||
PROJEXE=$(dirname "$UNIXPROJECT")/$(basename "$UNIXPROJECT" .lpr)
|
||||
if [ "$NEEDPERMISSIONS" = YES -a ! "$NOPERMISSIONS" = YES ]; then
|
||||
if [ -f "$PROJEXE" ]; then
|
||||
info "Setting permissions on $PROJEXE"
|
||||
$CMD chmod 755 "$PROJEXE"
|
||||
else
|
||||
info "No output executable found: $PROJEXE"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
#
|
||||
# Output a nice goodbye
|
||||
#
|
||||
info ""
|
||||
info "All done!"
|
||||
#
|
||||
# That's all, folks!
|
||||
#
|
Loading…
Reference in New Issue
Block a user