summaryrefslogtreecommitdiffhomepage
path: root/project
diff options
context:
space:
mode:
Diffstat (limited to 'project')
-rw-r--r--project/arch.mk3
-rwxr-xr-xproject/clbuild.sh208
-rw-r--r--project/extras.mk10
3 files changed, 221 insertions, 0 deletions
diff --git a/project/arch.mk b/project/arch.mk
index e69de29..00a9cfd 100644
--- a/project/arch.mk
+++ b/project/arch.mk
@@ -0,0 +1,3 @@
+shared-objs-asm:
+
+static-objs-asm:
diff --git a/project/clbuild.sh b/project/clbuild.sh
new file mode 100755
index 0000000..1e6a229
--- /dev/null
+++ b/project/clbuild.sh
@@ -0,0 +1,208 @@
+#!/bin/sh
+# a poor man's universal driver (but stay tuned...)
+
+error_msg()
+{
+ echo $@ >&2
+}
+
+mb_cc=
+mb_ar=
+mb_source_dir=
+mb_project_dir=
+mb_sysroot=
+version_header=
+version_macro=
+
+# one: args
+for arg ; do
+ case "$arg" in
+ --help) usage
+ ;;
+ --cc=*)
+ mb_cc=${arg#*=}
+ ;;
+ --ar=*)
+ mb_ar=${arg#*=}
+ ;;
+ --source-dir=*)
+ mb_source_dir=${arg#*=}
+ ;;
+ --project-dir=*)
+ mb_project_dir=${arg#*=}
+ ;;
+ --sysroot=*)
+ mb_sysroot=${arg#*=}
+ ;;
+ --version-header=*)
+ version_header=${arg#*=}
+ ;;
+ --version-macro=*)
+ version_macro='-D'${arg#*=}'=\\\"unknown\\\"'
+ ;;
+ *)
+ error_msg ${arg#}: "unsupported config argument."
+ exit 2
+ ;;
+ esac
+done
+
+if [ -z "$mb_cc" ] || [ -z "$mb_ar" ] \
+ || [ -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 build $dirs; do
+ printf 'if not exist %-20smkdir %s\n' "$d" "$d"
+done
+
+# version.tag
+make version.tag > /dev/null
+
+echo
+echo "type nul > build/$version_header"
+echo
+echo "$cmd_abort_on_error"
+echo
+
+echo
+echo "$cmd_abort_on_error"
+echo
+
+# five: compile assembly sources
+make shared-objs-asm static-objs-asm \
+ | grep -v 'make\[1\]:' \
+ | grep -v "$mb_project_dir/sysinfo/host" \
+ | grep -v 'touch dirs.tag' \
+ | grep -v 'touch host.tag' \
+ | grep -v 'touch app.tag' \
+ | sed \
+ -e 's@'"$mb_cc -c "'@ml64 /nologo @' \
+ -e 's@ '"$mb_source_dir"'@ /c %source_dir%@' \
+ -e 's@-o @/Fo @g' \
+ -e 's@\.s@\.asm@g' \
+ -e 's,$,\n\n'"$cmd_abort_on_error"'\n,g'
+
+# six: compile C sources
+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@'"$mb_cc -c "'@cl /nologo -c @' \
+ -e 's@ '"$mb_source_dir"'@ %source_dir%@' \
+ -e 's@-I'"$mb_source_dir"'@-I%source_dir%@g' \
+ -e 's@-ffreestanding@/X /GS-@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@-Wno-missing-field-initializers @ @g' \
+ -e 's@-Wno-unused-parameter @/wd4100 @g' \
+ -e 's@'"$mb_sysroot "'@ @' \
+ -e 's,$, '"$version_macro"' -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
+
+# seven: create static archive
+make static \
+ | grep -v 'make\[1\]:' \
+ | grep -v "rm -f " \
+ | sed \
+ -e 's@'"$mb_ar"' rcs @lib /out:@' \
+ -e 's,$, /nologo\n,g'
+
+echo
+echo "$cmd_abort_on_error"
+echo
+
+echo
+echo '@echo.'
+echo '@echo clbuild: successfully created: static archive.'
+echo '@echo.'
+echo
+
+# eight: link shared library
+make LDFLAGS_IMPLIB= LDFLAGS_SONAME= shared-lib \
+ | grep -v 'make\[1\]:' \
+ | sed \
+ -e 's@'"$mb_cc"' -shared @link /dll /nologo @' \
+ -e 's@-o @/out:@g' \
+ -e 's@ -L@ /libpath:@g' \
+ -e 's,-static -l\([^ ]\+\), %sysroot%/lib/lib\1.a,g' \
+ -e 's, -l\([^ ]\+\), %sysroot%/lib/lib\1.lib,g' \
+ -e 's@-nostdlib @/nodefaultlib @g' \
+ -e 's@-Wl,--subsystem=@/subsystem:@g' \
+ -e 's@-Wl,--entry -Wl,'"''"'@/entry:@g' \
+ -e 's@-Wl,--entry -Wl,@/entry:@g' \
+ -e 's@-Wl,--no-undefined@@g' \
+ -e 's@-Wl,--exclude-all-symbols@@g' \
+ -e 's@'"$mb_sysroot "'@ @' \
+
+echo
+echo "$cmd_abort_on_error"
+echo
+
+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
diff --git a/project/extras.mk b/project/extras.mk
index 03b5c36..3ae7508 100644
--- a/project/extras.mk
+++ b/project/extras.mk
@@ -13,3 +13,13 @@ ifeq ($(HOST_BITS),32)
else
LDFLAGS_SHARED += -Wl,--entry -Wl,$(HOST_UNDERSCORE)ntcon_entry_point
endif
+
+clbuild-bat:
+ @$(PROJECT_DIR)/project/clbuild.sh \
+ --cc=$(CC) \
+ --ar=$(AR) \
+ --source-dir=$(SOURCE_DIR) \
+ --project-dir=$(PROJECT_DIR) \
+ --sysroot=$(CFLAGS_SYSROOT) \
+ --version-header=ntcon_version.h \
+ --version-macro=NTCON_GIT_VERSION