aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorAlessandro Iezzi <aiezzi@alessandroiezzi.it>2023-05-27 12:45:55 +0200
committerAlessandro Iezzi <aiezzi@alessandroiezzi.it>2023-05-27 12:45:55 +0200
commit8841e2894b0160277a104f0da7838adbce5f6542 (patch)
treeff61ad13389602d298a7641a92f970765093b52c /scripts
parentffeb537ba0a28612f8024fda860ecbb17fba46fb (diff)
downloadcherry-8841e2894b0160277a104f0da7838adbce5f6542.tar.gz
cherry-8841e2894b0160277a104f0da7838adbce5f6542.zip
Add script to build the Makefile
It is used only when I change some structure in the tree soruce, for example when I add some new source file or I want to change the build directory.
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/buildmk.sh75
1 files changed, 75 insertions, 0 deletions
diff --git a/scripts/buildmk.sh b/scripts/buildmk.sh
new file mode 100755
index 0000000..b85ccf0
--- /dev/null
+++ b/scripts/buildmk.sh
@@ -0,0 +1,75 @@
+#!/bin/sh
+
+MAKEFILE=Makefile
+SRC_DIR=src
+BUILD_DIR=build
+DIST_DIR=dist
+
+# Start composing the Makefile
+
+# Build OBJ variable
+for i in `find ${SRC_DIR} -name '*.c'`; do
+ OBJ=$OBJ`printf "%s " $i | sed -E "s|${SRC_DIR}(.*)\.c|$\{BUILD_DIR\}\1\.o|g"`
+done
+
+cat <<EOF > ${MAKEFILE}
+# See LICENSE file for copyright and license details.
+
+include config.mk
+
+BUILD_DIR = ${BUILD_DIR}
+DIST_DIR = ${DIST_DIR}
+OBJ = $OBJ
+INCLUDES != find $SRC_DIR -name '*.h'
+
+all: static shared
+
+\${DIST_DIR}: all
+ mkdir -p \$@/include/cherry
+ cp \${BUILD_DIR}/release/static/\${LIBNAME:=.a} \$@/
+ cp \${BUILD_DIR}/release/shared/\${LIBNAME:=.so} \$@/
+ cp \${INCLUDES} \$@/include/cherry
+
+debug: debug-static debug-shared
+
+static:
+ @make BUILD_DIR=\${BUILD_DIR}/release/static \${BUILD_DIR}/release/static/\${LIBNAME:=.a}
+
+shared:
+ @make BUILD_DIR=\${BUILD_DIR}/release/shared OPT="\${OPT} -fPIC" \${BUILD_DIR}/release/shared/\${LIBNAME:=.so}
+
+debug-static:
+ @make BUILD_DIR=\${BUILD_DIR}/debug/static OPT=-g \${BUILD_DIR}/debug/static/\${LIBNAME:=.a}
+
+debug-shared:
+ @make BUILD_DIR=\${BUILD_DIR}/debug/shared OPT="-g -fPIC" \${BUILD_DIR}/debug/shared/\${LIBNAME:=.so}
+
+\${BUILD_DIR}:
+ @mkdir -p \$@
+
+\${BUILD_DIR}/\${LIBNAME:=.so}: \${BUILD_DIR} \${OBJ}
+ \${CC} \${LFLAGS} -shared \${OBJ} -o \$@
+
+\${BUILD_DIR}/\${LIBNAME:=.a}: \${BUILD_DIR} \${OBJ}
+ ar rcs \$@ \${OBJ}
+
+clean-obj:
+ rm -rf ${OBJ}
+
+clean:
+ rm -rf \${BUILD_DIR}
+ rm -f *.core
+
+EOF
+
+# Targets for object files
+for i in `find ${SRC_DIR} -name '*.c'`; do
+ target=`echo $i | sed -E "s|${SRC_DIR}(.*)\.c|$\{BUILD_DIR\}\1\.o|g"`
+cat <<EOF >> ${MAKEFILE}
+$target: $i
+ \${CC} \${CFLAGS} -c \$> -o \$@
+
+EOF
+done
+
+