mirror of https://github.com/mono/CppSharp.git
				
				
			
		c-sharpdotnetmonobindingsbridgecclangcpluspluscppsharpglueinteropparserparsingpinvokeswigsyntax-treevisitorsxamarinxamarin-bindings
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							254 lines
						
					
					
						
							5.2 KiB
						
					
					
				
			
		
		
	
	
							254 lines
						
					
					
						
							5.2 KiB
						
					
					
				#!/usr/bin/env bash | 
						|
set -e | 
						|
builddir=$(cd "$(dirname "$0")"; pwd) | 
						|
platform=x64 | 
						|
vs=vs2019 | 
						|
configuration=Release | 
						|
build_only=false | 
						|
ci=false | 
						|
target_framework= | 
						|
verbosity=minimal | 
						|
rootdir="$builddir/.." | 
						|
bindir="$rootdir/bin" | 
						|
objdir="$builddir/obj" | 
						|
gendir="$builddir/gen" | 
						|
slnpath="$rootdir/CppSharp.sln" | 
						|
artifacts="$rootdir/artifacts" | 
						|
oshost="" | 
						|
os="" | 
						|
test= | 
						|
 | 
						|
if [[ $(uname -m) != *"64"* ]]; then | 
						|
  platform=x86 | 
						|
fi | 
						|
 | 
						|
build() | 
						|
{ | 
						|
  if [ $ci = true ]; then | 
						|
    clean | 
						|
  fi | 
						|
 | 
						|
  if [ $ci = true ] || [ $build_only = false ]; then | 
						|
    generate | 
						|
    restore | 
						|
  fi | 
						|
 | 
						|
  if [ $oshost = "linux" ] || [ $oshost = "macosx" ]; then | 
						|
    config=$(tr '[:upper:]' '[:lower:]' <<< ${configuration}_$platform) make -C "$builddir/gmake/" | 
						|
  fi | 
						|
 | 
						|
  find_msbuild | 
						|
  $msbuild "$slnpath" -p:Configuration=$configuration -p:Platform=$platform -v:$verbosity -nologo | 
						|
 | 
						|
  if [ $ci = true ]; then | 
						|
    test | 
						|
  fi | 
						|
} | 
						|
 | 
						|
generate_config() | 
						|
{ | 
						|
  "$builddir/premake.sh" --file="$builddir/premake5.lua" $vs --os=$os --arch=$platform --configuration=$configuration --target-framework=$target_framework --config_only | 
						|
} | 
						|
 | 
						|
generate() | 
						|
{ | 
						|
  download_llvm | 
						|
 | 
						|
  if [ "$os" = "linux" ] || [ "$os" = "macosx" ]; then | 
						|
    "$builddir/premake.sh" --file="$builddir/premake5.lua" gmake2 --os=$os --arch=$platform --configuration=$configuration --target-framework=$target_framework "$@" | 
						|
  fi | 
						|
 | 
						|
  "$builddir/premake.sh" --file="$builddir/premake5.lua" $vs --os=$os --arch=$platform --configuration=$configuration --target-framework=$target_framework | 
						|
} | 
						|
 | 
						|
restore() | 
						|
{ | 
						|
  find_msbuild | 
						|
  $msbuild "$slnpath" -p:Configuration=$configuration -p:Platform=$platform -v:$verbosity -t:restore -nologo | 
						|
} | 
						|
 | 
						|
prepack() | 
						|
{ | 
						|
  find_msbuild | 
						|
  $msbuild "$slnpath" -t:prepack -p:Configuration=$configuration -p:Platform=$platform -v:$verbosity -nologo | 
						|
} | 
						|
 | 
						|
pack() | 
						|
{ | 
						|
  find_msbuild | 
						|
  $msbuild -t:restore "$rootdir/src/Package/CppSharp.Package.csproj" -p:Configuration=$configuration -p:Platform=$platform | 
						|
  $msbuild -t:pack "$rootdir/src/Package/CppSharp.Package.csproj" -p:Configuration=$configuration -p:Platform=$platform -p:PackageOutputPath="$rootdir/artifacts" | 
						|
 | 
						|
  if [ $oshost = "windows" -a $platform = "x64" ]; then | 
						|
    $msbuild -t:restore "$rootdir/src/Runtime/CppSharp.Runtime.csproj" -p:Configuration=$configuration -p:Platform=$platform | 
						|
    $msbuild -t:pack "$rootdir/src/Runtime/CppSharp.Runtime.csproj" -p:Configuration=$configuration -p:Platform=$platform -p:PackageOutputPath="$rootdir/artifacts" | 
						|
  fi | 
						|
} | 
						|
 | 
						|
test() | 
						|
{ | 
						|
  dotnet test {"$bindir/${configuration}_$platform","$gendir"/*}/*.Tests*.dll --nologo | 
						|
} | 
						|
 | 
						|
clean() | 
						|
{   | 
						|
  rm -rf "$objdir" | 
						|
  rm -rf "$gendir" | 
						|
  rm -rf "$bindir" | 
						|
  rm -rf "$builddir/gmake" | 
						|
  rm -rf "$builddir/$vs" | 
						|
  rm -rf "$slnpath" | 
						|
} | 
						|
 | 
						|
download_premake() | 
						|
{ | 
						|
  premake_dir="$builddir/premake" | 
						|
  premake_filename=premake5 | 
						|
  if [ $oshost = "windows" ]; then | 
						|
    premake_filename=$premake_filename.exe | 
						|
  fi | 
						|
  premake_path=$premake_dir/$premake_filename | 
						|
 | 
						|
  if ! [ -f "$premake_path" ]; then | 
						|
    echo "Downloading and unpacking Premake..." | 
						|
    premake_url=https://github.com/InteropAlliance/premake-core/releases/download/latest/premake-$oshost-$platform.zip   | 
						|
    curl -L -O $premake_url | 
						|
    unzip premake-$oshost-$platform.zip $premake_filename -d "$premake_dir" | 
						|
    chmod +x "$premake_path" | 
						|
    rm premake-$oshost-$platform.zip | 
						|
  fi | 
						|
} | 
						|
 | 
						|
download_llvm() | 
						|
{ | 
						|
  "$builddir/premake.sh" --file="$builddir/llvm/LLVM.lua" download_llvm --os=$os --arch=$platform --configuration=$configuration | 
						|
} | 
						|
 | 
						|
clone_llvm() | 
						|
{ | 
						|
  "$builddir/premake.sh" --file="$builddir/llvm/LLVM.lua" clone_llvm --os=$os --arch=$platform --configuration=$configuration | 
						|
} | 
						|
 | 
						|
build_llvm() | 
						|
{ | 
						|
  "$builddir/premake.sh" --file="$builddir/llvm/LLVM.lua" build_llvm --os=$os --arch=$platform --configuration=$configuration | 
						|
} | 
						|
 | 
						|
package_llvm() | 
						|
{ | 
						|
  "$builddir/premake.sh" --file="$builddir/llvm/LLVM.lua" package_llvm --os=$os --arch=$platform --configuration=$configuration | 
						|
} | 
						|
 | 
						|
detect_os() | 
						|
{ | 
						|
  case "$(uname -s)" in | 
						|
    Darwin) | 
						|
      oshost=macosx | 
						|
      ;; | 
						|
    Linux) | 
						|
      oshost=linux | 
						|
      ;; | 
						|
    CYGWIN*|MINGW32*|MSYS*|MINGW*) | 
						|
      oshost=windows | 
						|
      ;; | 
						|
    *) | 
						|
      echo "Unsupported platform" | 
						|
      exit 1 | 
						|
      ;; | 
						|
  esac | 
						|
 | 
						|
  os=$oshost | 
						|
} | 
						|
 | 
						|
find_msbuild() | 
						|
{ | 
						|
  if [ -x "$(command -v MSBuild.exe)" ]; then | 
						|
    msbuild="MSBuild.exe" | 
						|
  else | 
						|
    msbuild="dotnet msbuild" | 
						|
  fi | 
						|
} | 
						|
 | 
						|
cmd=$(tr '[:upper:]' '[:lower:]' <<< $1) | 
						|
detect_os | 
						|
download_premake | 
						|
 | 
						|
while [[ $# > 0 ]]; do | 
						|
  option=$(tr '[:upper:]' '[:lower:]' <<< "${1/#--/-}") | 
						|
  case "$option" in | 
						|
    -debug) | 
						|
      configuration=Debug | 
						|
      ;; | 
						|
    -configuration) | 
						|
      configuration=$2 | 
						|
      shift | 
						|
      ;;       | 
						|
    -platform) | 
						|
      platform=$2 | 
						|
      shift | 
						|
      ;; | 
						|
    -vs) | 
						|
      vs=vs$2 | 
						|
      shift | 
						|
      ;; | 
						|
    -os) | 
						|
      os=$2 | 
						|
      shift | 
						|
      ;; | 
						|
    -target-framework) | 
						|
      target_framework=$2 | 
						|
      echo $target_framework | 
						|
      shift | 
						|
      ;; | 
						|
    -ci) | 
						|
      ci=true | 
						|
      export CI=true | 
						|
      ;; | 
						|
    -build_only) | 
						|
      build_only=true | 
						|
      ;; | 
						|
  esac | 
						|
  shift | 
						|
done | 
						|
 | 
						|
case "$cmd" in | 
						|
  clean) | 
						|
    clean | 
						|
    ;; | 
						|
  generate) | 
						|
    generate | 
						|
    ;; | 
						|
  generate_config) | 
						|
    generate_config | 
						|
    ;;     | 
						|
  prepack) | 
						|
    prepack | 
						|
    ;; | 
						|
  pack) | 
						|
    pack | 
						|
    ;; | 
						|
  restore) | 
						|
    restore | 
						|
    ;; | 
						|
  test) | 
						|
    test | 
						|
    ;; | 
						|
  download_llvm) | 
						|
    download_llvm | 
						|
    ;; | 
						|
  clone_llvm) | 
						|
    clone_llvm | 
						|
    ;; | 
						|
  build_llvm) | 
						|
    build_llvm | 
						|
    ;; | 
						|
  package_llvm) | 
						|
    package_llvm | 
						|
    ;; | 
						|
  install_tools) | 
						|
    download_premake | 
						|
    ;; | 
						|
   *) | 
						|
    build | 
						|
    ;; | 
						|
esac
 | 
						|
 |