103 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| BUILD_TYPE="debug"
 | |
| COMPONENTS="all"
 | |
| 
 | |
| function join_array {
 | |
|   DELIM="$1"
 | |
|   shift
 | |
|   local IFS="$DELIM"
 | |
|   echo "$*"
 | |
| }
 | |
| 
 | |
| SUPPORTED_COMPONENTS=("all" "testing" "core")
 | |
| COMPONENTS_STRING="$(join_array "|" ${SUPPORTED_COMPONENTS[@]})"
 | |
| 
 | |
| while [[ $# > 0 ]];do
 | |
|   case $1 in
 | |
|     --release)
 | |
|       BUILD_TYPE="release"
 | |
|       shift
 | |
|       ;;
 | |
|     --components)
 | |
|       COMPONENTS="$2"
 | |
|       shift
 | |
|       shift
 | |
|       ;;
 | |
|     *|-*|--*)
 | |
|       echo "Unknown option $1"
 | |
|       echo "Usage: $0 [--release] [--components $COMPONENTS_STRING (Default: all)]"
 | |
|       exit 1
 | |
|       ;;
 | |
|   esac
 | |
| done
 | |
| 
 | |
| CC=clang
 | |
| CFLAGS="-Wall -Wextra -Werror -pedantic"
 | |
| LIBFLAGS="-fPIC -shared"
 | |
| KERNEL="$(uname -s)"
 | |
| MACHINE="$(uname -m)"
 | |
| PLATFORM="${KERNEL}_${MACHINE}"
 | |
| 
 | |
| if [[ $CC == "gcc" ]]; then
 | |
|   # Used to disable the "ASan runtime does not come first in initial library list" error when compiling with gcc
 | |
|   export ASAN_OPTIONS=verify_asan_link_order=0
 | |
| fi
 | |
| 
 | |
| INCLUDE="$(find src -type d | xargs -I{} echo -n "-I{} ")"
 | |
| 
 | |
| case $COMPONENTS in
 | |
|   all)
 | |
|     SRC="src/wapp.c"
 | |
|     ;;
 | |
|   testing)
 | |
|     SRC="src/testing/wapp_testing.c"
 | |
|     ;;
 | |
|   core)
 | |
|     SRC="src/core/wapp_core.c"
 | |
|     ;;
 | |
|   *)
 | |
|     echo "Unrecognised option for components: $COMPONENTS"
 | |
|     echo "Accepted options: $COMPONENTS_STRING"
 | |
|     exit 2
 | |
|     ;;
 | |
| esac
 | |
| 
 | |
| TEST_INCLUDE="$(find tests -type d | xargs -I{} echo -n "-I{} ")"
 | |
| TEST_SRC="$(find tests -type f -name "*.c" | xargs -I{} echo -n "{} ")"
 | |
| 
 | |
| BUILD_DIR="libwapp-build/$PLATFORM-$BUILD_TYPE"
 | |
| if [[ -d $BUILD_DIR ]]; then
 | |
|   rm -rf $BUILD_DIR
 | |
| fi
 | |
| mkdir -p $BUILD_DIR
 | |
| 
 | |
| if [[ $BUILD_TYPE == "release" ]]; then
 | |
|   CFLAGS+=" -O3"
 | |
| else
 | |
|   CFLAGS+=" -g -fsanitize=address,undefined"
 | |
| fi
 | |
| 
 | |
| OUT="$BUILD_DIR/libwapp.so"
 | |
| TEST_OUT="$BUILD_DIR/wapptest"
 | |
| 
 | |
| # Compile tests
 | |
| if [[ $(echo $TEST_SRC | xargs) != "" ]]; then
 | |
|   (set -x ; $CC $CFLAGS $INCLUDE $TEST_INCLUDE $SRC $TEST_SRC -o $TEST_OUT)
 | |
| fi
 | |
| 
 | |
| # Run tests and exit on failure
 | |
| if [[ -f $TEST_OUT ]]; then
 | |
|   $TEST_OUT
 | |
|   STATUS="$?"
 | |
| 
 | |
|   rm $TEST_OUT
 | |
| 
 | |
|   if [[ $STATUS != "0" ]]; then
 | |
|     exit 1
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| # Compile library
 | |
| (set -x ; $CC $CFLAGS $LIBFLAGS $INCLUDE $SRC -o $OUT)
 |