index 7626314d428cf63578604ff7a2ee95b0c1684815..f7dab7da7822f842c5088647d1f7a00c78d487f9 100755 (executable)
--- a/make.sh
+++ b/make.sh
-#! /bin/sh
+#! /bin/bash
set -e
+abspath() {
+ [[ "$1" == /* ]] && echo "$1" || echo "$(pwd)/$1"
+}
+
###^^^^^^^^^^^^^^^^^^###
### Global variables ###
###__________________###
_exec="make.sh"
-_this="$(dirname "$(readlink -f "$0")")"
+_this="$(dirname "$(abspath "$0")")"
_cpu=
_target=
_system=
_useposix=false
+export CPCFLAGS="$CPCFLAGS"
+export CPLFLAGS="$CPLFLAGS"
+
###^^^^^^^^^^^###
### Functions ###
###___________###
echo "Processors:"
echo " 486 Intel 486+"
echo " arm ARM 32-bit"
+ echo " powerpc PowerPC 32-bit"
echo "Targets:"
echo " native Native"
echo " cpfront Generic C"
echo "Operation systems:"
echo " linux GNU/Linux"
echo " cygwin Cygwin"
+ echo " osx Mac OS X"
echo "Environment variables:"
echo " CC C compiler binary"
echo " CFLAGS C compiler options"
+ echo " CPCFLAGS CPC compiler options"
+ echo " CPLFLAGS CPL linker options"
exit 2
}
for _src
do
if test -d "$_this/src/$_src"; then
- find "$_this/src/$_src" -mindepth 1 -maxdepth 1 -exec cp -rt "$_out" -- {} +
+ find "$_this/src/$_src" -mindepth 1 -maxdepth 1 -exec cp -r {} "$_out" \;
fi
done
}
native_compile() {
- "$_compiler" -legacy "$@"
+ "$_compiler" $CPCFLAGS -legacy "$@"
}
native_link() {
if [ "$_system" = "cygwin" ]; then
_outexe="${_outexe}.exe"
_outsystem="win32"
+ elif [ "$_system" = "osx" ]; then
+ _outexe="${_outexe}.out"
fi
shift
- "$_linker" -os "$_outsystem" -kernel Kernel -main Kernel -legacycodedir . -o "$_outexe" "$@"
+ "$_linker" $CPLFALGS -os "$_outsystem" -kernel Kernel -main Kernel -legacycodedir . -o "$_outexe" "$@"
fi
}
}
cpfront_compile() {
- "$_compiler" -outcode CodeC -outsym SymC "$@"
+ "$_compiler" $CPCFLAGS -outcode CodeC -outsym SymC "$@"
}
cpfront_link() {
local _main="$1"
if $_docompile; then
cpfront_main_module "$@" > "${_main}.cp"
- "$_compiler" -outcode CodeC -outsym SymC -main "${_main}.cp"
+ "$_compiler" $CPCFLAGS -outcode CodeC -outsym SymC -main "${_main}.cp"
fi
shift
if $_dolink; then
done
local _cc_cflags=
case "$CC" in
- *gcc) _cc_cflags="-Wno-int-conversion -Wno-int-to-pointer-cast -Wno-incompatible-pointer-types -Wno-implicit-function-declaration" ;;
+ *gcc) _cc_cflags="-std=c89 -Wno-int-conversion -Wno-int-to-pointer-cast -Wno-incompatible-pointer-types -Wno-implicit-function-declaration" ;;
+ *gcc-4.2) _cc_cflags="-std=c89 -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast -Wno-implicit-function-declaration" ;;
+ clang|clang-*) _cc_cflags="-std=c89 -Wno-int-conversion -Wno-incompatible-pointer-types -Wno-logical-op-parentheses -Wno-bitwise-op-parentheses -Wno-pointer-sign -Wno-unused-value -Wno-return-type" ;;
+ *tcc) _cc_cflags="-std=c89 -w -fsigned-char" ;;
*) _cc_cflags="" ;;
esac
local _cpu_cflags=
case "$_cpu" in
486) _cpu_cflags="-m32" ;;
arm) _cpu_cflags="" ;;
+ powerpc) _cpu_cflags="-m32" ;;
*) error "cpfront_link(): unsupported cpu $_cpu" ;;
esac
local _system_cflags=
case "$_system" in
cygwin) _system_cflags="-liconv" ;;
+ osx) _system_cflags="-D_DARWIN_C_SOURCE -liconv" ;;
*) _system_cflags="" ;;
esac
- "$CC" $_cc_cflags $_cpu_cflags $CFLAGS -o "${_main}" -I "$_this/C" "$_this/C/SYSTEM.c" $_list -lm -ldl $_system_cflags
+ local _out_exe="${_main}"
+ case "$_system" in
+ cygwin) _out_exe="${_main}.exe" ;;
+ osx) _out_exe="${_main}.out" ;;
+ *) ;;
+ esac
+ "$CC" -g -D_XOPEN_SOURCE=700 $_cc_cflags $_cpu_cflags $CFLAGS -o "${_out_exe}" -I "$_this/C" "$_this/C/SYSTEM.c" $_list -lm -ldl -lffi $_system_cflags
fi
}
Posix/Mod/Csys_stat.cp Posix/Mod/Cfcntl.cp Posix/Mod/Cerrno.cp \
Posix/Mod/Ciconv.cp Posix/Mod/Cwctype.cp Posix/Mod/Csys_mman.cp \
Posix/Mod/Cdlfcn.cp Posix/Mod/Csignal.cp Posix/Mod/Csetjmp.cp \
- Posix/Mod/Clibgen.cp \
+ Posix/Mod/Clibgen.cp Posix/Mod/Csys_wait.cp \
Posix/Mod/Cmacro.cp
+ if [ "$_target" = "cpfront" ]; then
+ compile Lib/Mod/FFI.cp
+ fi
fi
###^^^^^^^^^^^^^^^^^^^^^^^^^^^^###
### Compile Dev subsystem ###
###_______________________###
- compile Dev/Mod/CPM.cp Dev/Mod/CPT.odc Dev/Mod/CPS.odc Dev/Mod/CPB.odc \
- Dev/Mod/CPP.odc Dev/Mod/CPE.odc Dev/Mod/CPH.odc Dev/Mod/CPL486.odc \
- Dev/Mod/CPC486.odc Dev/Mod/CPV486.odc
+ compile Dev/Mod/CPM.cp Dev/Mod/CPT.odc Dev/Mod/CPR.cp Dev/Mod/CPS.odc \
+ Dev/Mod/CPB.odc Dev/Mod/CPP.odc Dev/Mod/CPE.odc Dev/Mod/CPH.odc \
+ Dev/Mod/CPL486.odc Dev/Mod/CPC486.odc Dev/Mod/CPV486.odc
###^^^^^^^^^^^^^^^^^^^^^^^^###
### Compile Dev2 subsystem ###
if [ "$_target" = "native" ]; then
compile Dsw/Mod/Debug.odc
fi
- compile Dsw/Mod/Documents.cp Dsw/Mod/Log.odc Dsw/Mod/Compiler486Main.cp \
- Dsw/Mod/CompilerCPfrontMain.cp Dsw/Mod/Linker486Main.cp
+
+ compile Dsw/Mod/Documents.cp Dsw/Mod/Log.odc Dsw/Mod/Opts.cp Dsw/Mod/Procs.cp
+ compile Dsw/Mod/HostProcs.cp
+
+ ###^^^^^^^^^^^^^^^^^^^^^^^^^^^###
+ ### Compile bbdsw executables ###
+ ###___________________________###
+
+ compile \
+ Dsw/Mod/Compiler486Main.cp \
+ Dsw/Mod/CompilerCPfrontMain.cp \
+ Dsw/Mod/Linker486Main.cp \
+ Dsw/Mod/MakeMain.cp
}
link_all() {
PosixCtypes PosixCmacro \
Kernel Console Files Dates Math Strings Services Log \
HostLang HostConsole HostFiles HostDates DswLog $_debug_module \
- DevCPM DevCPT DevCPS DevCPB DevCPP DevCPE DevCPH \
+ DevCPM DevCPT DevCPR DevCPS DevCPB DevCPP DevCPE DevCPH \
DevCPL486 DevCPC486 DevCPV486 \
DswDocuments DswCompiler486Main
PosixCtypes PosixCmacro \
Kernel Console Files Dates Math Strings Services Log \
HostLang HostConsole HostFiles HostDates DswLog $_debug_module \
- DevCPM DevCPT DevCPS DevCPB DevCPP DevCPE DevCPH \
+ DevCPM DevCPT DevCPR DevCPS DevCPB DevCPP DevCPE DevCPH \
CPfrontCPG CPfrontCPC CPfrontCPV\
DswDocuments DswCompilerCPfrontMain
+ link cpmake \
+ PosixCtypes PosixCmacro \
+ Kernel Console Files Dates Math Strings Services Log \
+ HostLang HostConsole HostFiles HostDates DswLog $_debug_module \
+ DevCPM DevCPT DevCPR DevCPS \
+ DswDocuments DswOpts DswProcs DswHostProcs DswMakeMain
+
if $_dolink; then
chmod a+x cpc486 cpl486 cpfront
fi
case "$_cpu" in
386|486|586|686) _cpu=486 ;;
arm|armv6|armv7) _cpu=arm ;;
+ powerpc|ppc|ppc32) _cpu=powerpc ;;
"") error "cpu not specified" ;;
*) error "unsupported cpu $_cpu" ;;
esac
case "$_system" in
linux) _useposix=true ;;
cygwin) _useposix=true ;;
+ osx) _useposix=true ;;
"") error "operation system not specified" ;;
*) error "unsuported operation system $_system" ;;
esac
fi
mkdir -p -- "$_out"
-_out="$(readlink -f "$_out")"
+_out="$(abspath "$_out")"
copy_source "generic" "$_cpu"
if $_useposix; then
copy_source "posix/generic" "posix/$_cpu"