#!/bin/sh
# a poor man's universal driver (but stay tuned...)
error_msg()
{
echo $@ >&2
}
mb_source_dir=
mb_project_dir=
# one: args
for arg ; do
case "$arg" in
--help) usage
;;
--source-dir=*)
mb_source_dir=${arg#*=}
;;
--project-dir=*)
mb_project_dir=${arg#*=}
;;
*)
error_msg ${arg#}: "unsupported config argument."
exit 2
;;
esac
done
if [ -z "$mb_source_dir" ] || [ -z "$mb_project_dir" ]; then
usage
fi
# two: clean
make -s clean || exit 1
# three: init
echo '@echo on'
echo '@dir . > nul'
echo
echo
echo 'REM override variables either here or from the shell'
echo 'set source_dir=%source_dir%'
echo 'set sysroot=%sysroot%'
echo
echo
# four: build tree
cmd_abort_on_error='@if %errorlevel% neq 0 exit /b %errorlevel%'
sysroot_include_arg='-I%sysroot%/include'
dirs=`make dirs.tag tree.tag \
| grep -v 'make\[1\]:' \
| grep -v 'touch dirs.tag' \
| grep -v 'touch tree.tag' \
| sed \
-e 's/mkdir -p//g' \
-e 's@/@\\\\@g'`
for d in $dirs; do
printf 'if not exist %-20smkdir %s\n' "$d" "$d"
done
echo
echo "$cmd_abort_on_error"
echo
# five: build objects
make shared-objs static-objs app-objs \
| grep -v 'make\[1\]:' \
| grep -v "$mb_project_dir/sysinfo/host" \
| grep -v 'touch dirs.tag' \
| grep -v 'touch host.tag' \
| grep -v 'touch version.tag' \
| grep -v 'touch app.tag' \
| sed \
-e 's@cc @cl /nologo @' \
-e 's@ '"$mb_source_dir"'@ %source_dir%@' \
-e 's@-I'"$mb_source_dir"'@-I%source_dir%@g' \
-e 's@-ffreestanding@/X@g' \
-e 's@-o @/Fo:@g' \
-e 's@-std=c99 @@g' \
-e 's@-fPIC@@g' \
-e 's@-fpic@@g' \
-e 's@-g @/Zi @g' \
-e 's@-g0 @/Zi @g' \
-e 's@-g1 @/Zi @g' \
-e 's@-g2 @/Zi @g' \
-e 's@-g3 @/Zi @g' \
-e 's@-O @/O2 @g' \
-e 's@-Os @/O1 @g' \
-e 's@-O0 @/Od @g' \
-e 's@-O1 @/O2 @g' \
-e 's@-O2 @/O2 @g' \
-e 's@-O3 @/O2 @g' \
-e 's@-Wall @/Wall @g' \
-e 's@-Werror @/WX @g' \
-e 's@-Wextra @@g' \
-e 's@-Wundef @/Wall @g' \
-e 's,$, -I%sysroot%/include\n\n'"$cmd_abort_on_error"'\n,g'
echo
echo '@echo.'
echo '@echo clbuild: successfully built: shared-objs static-objs app-objs.'
echo '@echo.'
echo
# six: create static archive
make static \
| grep -v 'make\[1\]:' \
| grep -v "rm -f " \
| sed \
-e 's@ar rcs @lib /out:@' \
-e 's,$, /nologo\n,g'
echo
echo '@echo.'
echo '@echo clbuild: successfully created: static archive.'
echo '@echo.'
echo
# seven: link shared library
make LDFLAGS_IMPLIB= LDFLAGS_SONAME= shared-lib \
| grep -v 'make\[1\]:' \
| sed \
-e 's@cc -shared @link /dll /nologo @' \
-e 's@-o @/out:@g' \
-e 's@ -L@/libpath:@g' \
-e 's@-nostdlib @/nodefaultlib @g' \
-e 's@-Wl,--subsystem=@/subsystem:@g' \
-e 's@-Wl,--entry -Wl,@/entry:@g' \
-e 's@-Wl,--no-undefined@@g' \
-e 's@-Wl,--exclude-all-symbols@@g' \
echo
echo '@echo.'
echo '@echo clbuild: successfully linked: shared library.'
echo '@echo.'
echo
echo
echo '@echo.'
echo '@echo yay.'
echo '@echo.'
echo
# all done
exit 0