Browse Source

Create a single nuget package that supports windows / linux / macos

pull/1550/head
josetr 5 years ago committed by João Matos
parent
commit
62e9119c63
  1. 47
      .github/workflows/main.yml
  2. 1
      .gitignore
  3. 20
      Directory.Build.props
  4. 5
      build/Helpers.lua
  5. 29
      build/build.sh
  6. 23
      build/nuget/.vscode/launch.json
  7. 17
      build/nuget/TODO.txt
  8. 125
      build/nuget/build.cake
  9. 235
      build/nuget/build.ps1
  10. 117
      build/nuget/build.sh
  11. 29
      build/nuget/cppsharp.nuspec
  12. 8
      build/premake5.lua
  13. 2
      src/AST/CppSharp.AST.csproj
  14. 2
      src/Core/CppSharp.csproj
  15. 2
      src/CppParser/Bindings/CSharp/CppSharp.Parser.CSharp.csproj
  16. 5
      src/Generator/CppSharp.Generator.csproj
  17. 24
      src/Package/CppSharp.Package.csproj
  18. 21
      src/Parser/CppSharp.Parser.csproj
  19. 2
      src/Runtime/CppSharp.Runtime.csproj

47
.github/workflows/main.yml

@ -54,13 +54,46 @@ jobs:
shell: bash shell: bash
run: build/test.sh -platform $PLATFORM run: build/test.sh -platform $PLATFORM
- name: 'Upload Artifact' - name: Pack
uses: actions/upload-artifact@v2 shell: bash
if: github.ref == 'refs/heads/master' run: build/build.sh prepack -platform $PLATFORM
- uses: actions/upload-artifact@v2
with: with:
name: cppsharp-${{ matrix.config.os }}-${{ matrix.config.platform }}-${{ matrix.config.cc }} name: intermediate
path: | path: |
bin/**/CppSharp* artifacts
bin/**/Std-symbols*
bin/**/lib/**
include/**/*.h include/**/*.h
create_package:
runs-on: windows-2019
needs: build
if: |
(github.event_name == 'push' && (github.ref == 'refs/heads/master' || contains(github.ref, 'nuget'))) ||
(github.event.pull_request.head.repo.full_name != github.repository && contains(github.event.pull_request.head.ref, 'nuget'))
env:
DOTNET_NOLOGO: true
DOTNET_CLI_TELEMETRY_OPTOUT: true
steps:
- uses: actions/checkout@v2
- uses: actions/download-artifact@v2
with:
name: intermediate
- name: Setup
shell: bash
run: build/build.sh generate_config
- name: Create package
shell: bash
run: build/build.sh pack
- name: Upload package
uses: actions/upload-artifact@v2
with:
name: CppSharp.nupkg
path: |
artifacts/*.nupkg

1
.gitignore vendored

@ -45,6 +45,7 @@ src/generator/generator
/build/config.props /build/config.props
/build/premake/premake5* /build/premake/premake5*
/build/gen /build/gen
/artifacts
/deps/llvm /deps/llvm
/extra /extra
/include/include /include/include

20
Directory.Build.props

@ -5,16 +5,25 @@
<RootDir>$(MSBuildThisFileDirectory)</RootDir> <RootDir>$(MSBuildThisFileDirectory)</RootDir>
<Platforms>x86;x64</Platforms> <Platforms>x86;x64</Platforms>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath> <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally> <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<RepositoryUrl>https://github.com/mono/CppSharp</RepositoryUrl>
<RepositoryCommit>$(GITHUB_SHA)</RepositoryCommit>
<Authors>João Matos, Dimitar Dobrev, Jose Torres</Authors>
<Copyright>João Matos, Dimitar Dobrev</Copyright>
<Version>0.10.6</Version>
<IsPackable>false</IsPackable>
<BuildDir>$(RootDir)build\</BuildDir> <BuildDir>$(RootDir)build\</BuildDir>
<ObjDir>$(BuildDir)obj\</ObjDir> <ObjDir>$(BuildDir)obj\</ObjDir>
<GenDir>$(BuildDir)gen\</GenDir> <GenDir>$(BuildDir)gen\</GenDir>
<SrcDir>$(RootDir)src\</SrcDir> <SrcDir>$(RootDir)src\</SrcDir>
<GlobalTargetFramework>$(TargetFramework)</GlobalTargetFramework>
<BaseIntermediateOutputPath>$(ObjDir)$(MSBuildProjectName)\</BaseIntermediateOutputPath> <BaseIntermediateOutputPath>$(ObjDir)$(MSBuildProjectName)\</BaseIntermediateOutputPath>
<BaseOutputPath>$(RootDir)bin\</BaseOutputPath> <BaseOutputPath>$(RootDir)bin\</BaseOutputPath>
<OutputPath>$(BaseOutputPath)$(Configuration)_$(PlatformTarget)\</OutputPath> <OutputPath>$(BaseOutputPath)$(Configuration)_$(PlatformTarget)\</OutputPath>
<ActionDir>$(BuildDir)$(PremakeAction)\</ActionDir> <ActionDir>$(BuildDir)$(PremakeAction)\</ActionDir>
<NativeProjectsDir>$(ActionDir)projects\</NativeProjectsDir> <NativeProjectsDir>$(ActionDir)projects\</NativeProjectsDir>
<PackageDir>$(RootDir)artifacts\package\</PackageDir>
<TargetDir>$(OutputPath)</TargetDir> <TargetDir>$(OutputPath)</TargetDir>
<LangVersion>8.0</LangVersion> <LangVersion>8.0</LangVersion>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
@ -22,6 +31,10 @@
<GeneratorFileExtension>dll</GeneratorFileExtension> <GeneratorFileExtension>dll</GeneratorFileExtension>
<DotNetCmd Condition="'$(PlatformTarget)' == 'x86' AND Exists('$(MSBuildProgramFiles32)\dotnet\dotnet.exe')">"$(MSBuildProgramFiles32)\dotnet\dotnet.exe"</DotNetCmd> <DotNetCmd Condition="'$(PlatformTarget)' == 'x86' AND Exists('$(MSBuildProgramFiles32)\dotnet\dotnet.exe')">"$(MSBuildProgramFiles32)\dotnet\dotnet.exe"</DotNetCmd>
<DotNetCmd Condition="'$(PlatformTarget)' == 'x64' AND Exists('$(ProgramW6432)\dotnet\dotnet.exe')">"$(ProgramW6432)\dotnet\dotnet.exe"</DotNetCmd> <DotNetCmd Condition="'$(PlatformTarget)' == 'x64' AND Exists('$(ProgramW6432)\dotnet\dotnet.exe')">"$(ProgramW6432)\dotnet\dotnet.exe"</DotNetCmd>
<RID Condition="$(IsWindows)">win</RID>
<RID Condition="$(IsLinux)">linux</RID>
<RID Condition="$(IsMacOSX)">osx</RID>
<RID>$(RID)-$(PlatformTarget)</RID>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(CPPSHARP_RELEASE)' != 'true'"> <PropertyGroup Condition="'$(CPPSHARP_RELEASE)' != 'true'">
@ -34,4 +47,9 @@
<GeneratorFileExtension>exe</GeneratorFileExtension> <GeneratorFileExtension>exe</GeneratorFileExtension>
<DotNetCmd></DotNetCmd> <DotNetCmd></DotNetCmd>
</PropertyGroup> </PropertyGroup>
<Target Name="prepack" DependsOnTargets="Build" Condition="'$(IsPackable)' == 'true'">
<Copy SourceFiles="$(TargetDir)ref\$(TargetFileName)" DestinationFolder="$(PackageDir)ref\$(GlobalTargetFramework)" Condition="'$(ProduceReferenceAssembly)' == 'true' AND '$(RID)' == 'win-x64'" />
<Copy SourceFiles="$(TargetPath)" DestinationFolder="$(PackageDir)runtimes\$(RID)\lib\$(GlobalTargetFramework)" />
</Target>
</Project> </Project>

5
build/Helpers.lua

@ -38,6 +38,11 @@ newoption {
} }
} }
newoption {
trigger = "config_only",
description = "Only generate configuration file",
}
rootdir = path.getabsolute("../") rootdir = path.getabsolute("../")
srcdir = path.join(rootdir, "src"); srcdir = path.join(rootdir, "src");
incdir = path.join(rootdir, "include"); incdir = path.join(rootdir, "include");

29
build/build.sh

@ -12,6 +12,7 @@ bindir="$rootdir/bin"
objdir="$builddir/obj" objdir="$builddir/obj"
gendir="$builddir/gen" gendir="$builddir/gen"
slnpath="$rootdir/CppSharp.sln" slnpath="$rootdir/CppSharp.sln"
artifacts="$rootdir/artifacts"
oshost="" oshost=""
os="" os=""
test= test=
@ -43,6 +44,11 @@ build()
fi fi
} }
generate_config()
{
$builddir/premake.sh --file=$builddir/premake5.lua $vs --os=$os --arch=$platform --configuration=$configuration --config_only
}
generate() generate()
{ {
download_llvm download_llvm
@ -60,6 +66,19 @@ restore()
$msbuild $slnpath -p:Configuration=$configuration -p:Platform=$platform -v:$verbosity -t:restore -nologo $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
}
test() test()
{ {
dotnet test {$bindir/${configuration}_$platform,$gendir/*}/*.Tests*.dll --nologo dotnet test {$bindir/${configuration}_$platform,$gendir/*}/*.Tests*.dll --nologo
@ -172,6 +191,7 @@ while [[ $# > 0 ]]; do
;; ;;
-ci) -ci)
ci=true ci=true
export CI=true
;; ;;
-build_only) -build_only)
build_only=true build_only=true
@ -187,6 +207,15 @@ case "$cmd" in
generate) generate)
generate generate
;; ;;
generate_config)
generate_config
;;
prepack)
prepack
;;
pack)
pack
;;
restore) restore)
restore restore
;; ;;

23
build/nuget/.vscode/launch.json vendored

@ -1,23 +0,0 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Cake: Debug Script (CoreCLR)",
"type": "coreclr",
"request": "launch",
"program": "${workspaceRoot}/tools/Cake.CoreCLR/Cake.dll",
"args": [
"${workspaceRoot}/build.cake",
"--debug",
"--verbosity=diagnostic"
],
"cwd": "${workspaceRoot}",
"stopAtEntry": true,
"externalConsole": false
}
]
}

17
build/nuget/TODO.txt

@ -1,17 +0,0 @@
Notes and TODOs
- Microsoft.VisualStudio.Setup.Configuration.Interop has been added to nuspec,
but for some reason it never copies itself to output, it has to be done manually.
Additionally, the 64-bit nuget package does not need that (TODO Confirm this).
- Baseclass.Contrib.Nuget.Output is problematic, whenever you update it,
Visual Studio complains and says it must restart, over and over.
- Nuget package warnings should be fixed/suppressed.
- Should there be two packages : x86 and x64 ?
- Only Visual Studio 2017 32-bit solution is supported, once a 64-bit solution
is available, build.cake should be enhanced.
- Whatever else I've missed ...

125
build/nuget/build.cake

@ -1,125 +0,0 @@
///////////////////////////////////////////////////////////////////////////////
// ARGUMENTS
///////////////////////////////////////////////////////////////////////////////
var target = Argument("target", "Default");
var configuration = Argument("configuration", "Release");
///////////////////////////////////////////////////////////////////////////////
// SETUP / TEARDOWN
///////////////////////////////////////////////////////////////////////////////
Setup(ctx =>
{
// Executed BEFORE the first task.
Information("Running tasks...");
});
Teardown(ctx =>
{
// Executed AFTER the last task.
Information("Finished running tasks.");
});
///////////////////////////////////////////////////////////////////////////////
// TASKS
///////////////////////////////////////////////////////////////////////////////
Task("Build")
.Does(() => {
if (!IsRunningOnWindows())
throw new NotImplementedException("TODO Implement other platforms");
// TODO update this when there's a 64-bit solution
var settings = new MSBuildSettings();
settings.SetConfiguration("Release");
settings.SetPlatformTarget(PlatformTarget.x86);
MSBuild("../vs2017/CppSharp.sln", settings);
});
Task("Package")
.Does(() => {
var scratchDir = new DirectoryPath("temp");
// clear previous session
if (DirectoryExists(scratchDir))
DeleteDirectory(scratchDir, true);
var files = new Dictionary<string,string>()
{
{ "CppSharp.dll", "lib" },
{ "CppSharp.AST.dll", "lib" },
{ "CppSharp.Generator.dll", "lib" },
{ "CppSharp.Parser.dll", "lib" },
{ "CppSharp.Parser.CLI.dll", "lib" },
{ "CppSharp.Runtime.dll", "lib" },
{ "CppSharp.CLI.exe", "tools"},
{ "CppSharp.CppParser.dll", "output"},
{ "clang", "output/lib/clang"},
};
var path = new DirectoryPath("../vs2017/lib/Release_x86/");
CreateDirectory(scratchDir);
foreach (var file in files)
{
var tgt = scratchDir.Combine(file.Value);
CreateDirectory(tgt);
var isDirPath = path.Combine(file.Key);
var isDir = DirectoryExists(isDirPath);
if (isDir)
{
var src = path.Combine(file.Key);
CopyDirectory(src, tgt);
}
else
{
var src = path.CombineWithFilePath(file.Key);
CopyFileToDirectory(src, tgt);
}
}
var nuspec = "cppsharp.nuspec";
var settings = new NuGetPackSettings()
{
OutputDirectory = ".",
BasePath = scratchDir,
NoPackageAnalysis = false,
};
NuGetPack(nuspec, settings);
// clear current session
DeleteDirectory(scratchDir, true);
});
Task("CppSharpBuildAndPackage")
.IsDependentOn("Build")
.IsDependentOn("Package")
.Does(() => {
});
Task("CppSharpPackageOnly")
.IsDependentOn("Package")
.Does(() => {
});
Task("Default")
.IsDependentOn("CppSharpPackageOnly")
.Does(() => {
});
RunTarget(target);

235
build/nuget/build.ps1

@ -1,235 +0,0 @@
##########################################################################
# This is the Cake bootstrapper script for PowerShell.
# This file was downloaded from https://github.com/cake-build/resources
# Feel free to change this file to fit your needs.
##########################################################################
<#
.SYNOPSIS
This is a Powershell script to bootstrap a Cake build.
.DESCRIPTION
This Powershell script will download NuGet if missing, restore NuGet tools (including Cake)
and execute your Cake build script with the parameters you provide.
.PARAMETER Script
The build script to execute.
.PARAMETER Target
The build script target to run.
.PARAMETER Configuration
The build configuration to use.
.PARAMETER Verbosity
Specifies the amount of information to be displayed.
.PARAMETER ShowDescription
Shows description about tasks.
.PARAMETER DryRun
Performs a dry run.
.PARAMETER Experimental
Uses the nightly builds of the Roslyn script engine.
.PARAMETER Mono
Uses the Mono Compiler rather than the Roslyn script engine.
.PARAMETER SkipToolPackageRestore
Skips restoring of packages.
.PARAMETER ScriptArgs
Remaining arguments are added here.
.LINK
https://cakebuild.net
#>
[CmdletBinding()]
Param(
[string]$Script = "build.cake",
[string]$Target,
[string]$Configuration,
[ValidateSet("Quiet", "Minimal", "Normal", "Verbose", "Diagnostic")]
[string]$Verbosity,
[switch]$ShowDescription,
[Alias("WhatIf", "Noop")]
[switch]$DryRun,
[switch]$Experimental,
[switch]$Mono,
[switch]$SkipToolPackageRestore,
[Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)]
[string[]]$ScriptArgs
)
[Reflection.Assembly]::LoadWithPartialName("System.Security") | Out-Null
function MD5HashFile([string] $filePath)
{
if ([string]::IsNullOrEmpty($filePath) -or !(Test-Path $filePath -PathType Leaf))
{
return $null
}
[System.IO.Stream] $file = $null;
[System.Security.Cryptography.MD5] $md5 = $null;
try
{
$md5 = [System.Security.Cryptography.MD5]::Create()
$file = [System.IO.File]::OpenRead($filePath)
return [System.BitConverter]::ToString($md5.ComputeHash($file))
}
finally
{
if ($file -ne $null)
{
$file.Dispose()
}
}
}
function GetProxyEnabledWebClient
{
$wc = New-Object System.Net.WebClient
$proxy = [System.Net.WebRequest]::GetSystemWebProxy()
$proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials
$wc.Proxy = $proxy
return $wc
}
Write-Host "Preparing to run build script..."
if(!$PSScriptRoot){
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
}
$TOOLS_DIR = Join-Path $PSScriptRoot "tools"
$ADDINS_DIR = Join-Path $TOOLS_DIR "Addins"
$MODULES_DIR = Join-Path $TOOLS_DIR "Modules"
$NUGET_EXE = Join-Path $TOOLS_DIR "nuget.exe"
$CAKE_EXE = Join-Path $TOOLS_DIR "Cake/Cake.exe"
$NUGET_URL = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
$PACKAGES_CONFIG = Join-Path $TOOLS_DIR "packages.config"
$PACKAGES_CONFIG_MD5 = Join-Path $TOOLS_DIR "packages.config.md5sum"
$ADDINS_PACKAGES_CONFIG = Join-Path $ADDINS_DIR "packages.config"
$MODULES_PACKAGES_CONFIG = Join-Path $MODULES_DIR "packages.config"
# Make sure tools folder exists
if ((Test-Path $PSScriptRoot) -and !(Test-Path $TOOLS_DIR)) {
Write-Verbose -Message "Creating tools directory..."
New-Item -Path $TOOLS_DIR -Type directory | out-null
}
# Make sure that packages.config exist.
if (!(Test-Path $PACKAGES_CONFIG)) {
Write-Verbose -Message "Downloading packages.config..."
try {
$wc = GetProxyEnabledWebClient
$wc.DownloadFile("https://cakebuild.net/download/bootstrapper/packages", $PACKAGES_CONFIG) } catch {
Throw "Could not download packages.config."
}
}
# Try find NuGet.exe in path if not exists
if (!(Test-Path $NUGET_EXE)) {
Write-Verbose -Message "Trying to find nuget.exe in PATH..."
$existingPaths = $Env:Path -Split ';' | Where-Object { (![string]::IsNullOrEmpty($_)) -and (Test-Path $_ -PathType Container) }
$NUGET_EXE_IN_PATH = Get-ChildItem -Path $existingPaths -Filter "nuget.exe" | Select -First 1
if ($NUGET_EXE_IN_PATH -ne $null -and (Test-Path $NUGET_EXE_IN_PATH.FullName)) {
Write-Verbose -Message "Found in PATH at $($NUGET_EXE_IN_PATH.FullName)."
$NUGET_EXE = $NUGET_EXE_IN_PATH.FullName
}
}
# Try download NuGet.exe if not exists
if (!(Test-Path $NUGET_EXE)) {
Write-Verbose -Message "Downloading NuGet.exe..."
try {
$wc = GetProxyEnabledWebClient
$wc.DownloadFile($NUGET_URL, $NUGET_EXE)
} catch {
Throw "Could not download NuGet.exe."
}
}
# Save nuget.exe path to environment to be available to child processed
$ENV:NUGET_EXE = $NUGET_EXE
# Restore tools from NuGet?
if(-Not $SkipToolPackageRestore.IsPresent) {
Push-Location
Set-Location $TOOLS_DIR
# Check for changes in packages.config and remove installed tools if true.
[string] $md5Hash = MD5HashFile($PACKAGES_CONFIG)
if((!(Test-Path $PACKAGES_CONFIG_MD5)) -Or
($md5Hash -ne (Get-Content $PACKAGES_CONFIG_MD5 ))) {
Write-Verbose -Message "Missing or changed package.config hash..."
Get-ChildItem -Exclude packages.config,nuget.exe,Cake.Bakery |
Remove-Item -Recurse
}
Write-Verbose -Message "Restoring tools from NuGet..."
$NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$TOOLS_DIR`""
if ($LASTEXITCODE -ne 0) {
Throw "An error occurred while restoring NuGet tools."
}
else
{
$md5Hash | Out-File $PACKAGES_CONFIG_MD5 -Encoding "ASCII"
}
Write-Verbose -Message ($NuGetOutput | out-string)
Pop-Location
}
# Restore addins from NuGet
if (Test-Path $ADDINS_PACKAGES_CONFIG) {
Push-Location
Set-Location $ADDINS_DIR
Write-Verbose -Message "Restoring addins from NuGet..."
$NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$ADDINS_DIR`""
if ($LASTEXITCODE -ne 0) {
Throw "An error occurred while restoring NuGet addins."
}
Write-Verbose -Message ($NuGetOutput | out-string)
Pop-Location
}
# Restore modules from NuGet
if (Test-Path $MODULES_PACKAGES_CONFIG) {
Push-Location
Set-Location $MODULES_DIR
Write-Verbose -Message "Restoring modules from NuGet..."
$NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$MODULES_DIR`""
if ($LASTEXITCODE -ne 0) {
Throw "An error occurred while restoring NuGet modules."
}
Write-Verbose -Message ($NuGetOutput | out-string)
Pop-Location
}
# Make sure that Cake has been installed.
if (!(Test-Path $CAKE_EXE)) {
Throw "Could not find Cake.exe at $CAKE_EXE"
}
# Build Cake arguments
$cakeArguments = @("$Script");
if ($Target) { $cakeArguments += "-target=$Target" }
if ($Configuration) { $cakeArguments += "-configuration=$Configuration" }
if ($Verbosity) { $cakeArguments += "-verbosity=$Verbosity" }
if ($ShowDescription) { $cakeArguments += "-showdescription" }
if ($DryRun) { $cakeArguments += "-dryrun" }
if ($Experimental) { $cakeArguments += "-experimental" }
if ($Mono) { $cakeArguments += "-mono" }
$cakeArguments += $ScriptArgs
# Start Cake
Write-Host "Running build script..."
&$CAKE_EXE $cakeArguments
exit $LASTEXITCODE

117
build/nuget/build.sh

@ -1,117 +0,0 @@
#!/usr/bin/env bash
##########################################################################
# This is the Cake bootstrapper script for Linux and OS X.
# This file was downloaded from https://github.com/cake-build/resources
# Feel free to change this file to fit your needs.
##########################################################################
# Define directories.
SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
TOOLS_DIR=$SCRIPT_DIR/tools
ADDINS_DIR=$TOOLS_DIR/Addins
MODULES_DIR=$TOOLS_DIR/Modules
NUGET_EXE=$TOOLS_DIR/nuget.exe
CAKE_EXE=$TOOLS_DIR/Cake/Cake.exe
PACKAGES_CONFIG=$TOOLS_DIR/packages.config
PACKAGES_CONFIG_MD5=$TOOLS_DIR/packages.config.md5sum
ADDINS_PACKAGES_CONFIG=$ADDINS_DIR/packages.config
MODULES_PACKAGES_CONFIG=$MODULES_DIR/packages.config
# Define md5sum or md5 depending on Linux/OSX
MD5_EXE=
if [[ "$(uname -s)" == "Darwin" ]]; then
MD5_EXE="md5 -r"
else
MD5_EXE="md5sum"
fi
# Define default arguments.
SCRIPT="build.cake"
CAKE_ARGUMENTS=()
# Parse arguments.
for i in "$@"; do
case $1 in
-s|--script) SCRIPT="$2"; shift ;;
--) shift; CAKE_ARGUMENTS+=("$@"); break ;;
*) CAKE_ARGUMENTS+=("$1") ;;
esac
shift
done
# Make sure the tools folder exist.
if [ ! -d "$TOOLS_DIR" ]; then
mkdir "$TOOLS_DIR"
fi
# Make sure that packages.config exist.
if [ ! -f "$TOOLS_DIR/packages.config" ]; then
echo "Downloading packages.config..."
curl -Lsfo "$TOOLS_DIR/packages.config" https://cakebuild.net/download/bootstrapper/packages
if [ $? -ne 0 ]; then
echo "An error occurred while downloading packages.config."
exit 1
fi
fi
# Download NuGet if it does not exist.
if [ ! -f "$NUGET_EXE" ]; then
echo "Downloading NuGet..."
curl -Lsfo "$NUGET_EXE" https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
if [ $? -ne 0 ]; then
echo "An error occurred while downloading nuget.exe."
exit 1
fi
fi
# Restore tools from NuGet.
pushd "$TOOLS_DIR" >/dev/null
if [ ! -f "$PACKAGES_CONFIG_MD5" ] || [ "$( cat "$PACKAGES_CONFIG_MD5" | sed 's/\r$//' )" != "$( $MD5_EXE "$PACKAGES_CONFIG" | awk '{ print $1 }' )" ]; then
find . -type d ! -name . ! -name 'Cake.Bakery' | xargs rm -rf
fi
mono "$NUGET_EXE" install -ExcludeVersion
if [ $? -ne 0 ]; then
echo "Could not restore NuGet tools."
exit 1
fi
$MD5_EXE "$PACKAGES_CONFIG" | awk '{ print $1 }' >| "$PACKAGES_CONFIG_MD5"
popd >/dev/null
# Restore addins from NuGet.
if [ -f "$ADDINS_PACKAGES_CONFIG" ]; then
pushd "$ADDINS_DIR" >/dev/null
mono "$NUGET_EXE" install -ExcludeVersion
if [ $? -ne 0 ]; then
echo "Could not restore NuGet addins."
exit 1
fi
popd >/dev/null
fi
# Restore modules from NuGet.
if [ -f "$MODULES_PACKAGES_CONFIG" ]; then
pushd "$MODULES_DIR" >/dev/null
mono "$NUGET_EXE" install -ExcludeVersion
if [ $? -ne 0 ]; then
echo "Could not restore NuGet modules."
exit 1
fi
popd >/dev/null
fi
# Make sure that Cake has been installed.
if [ ! -f "$CAKE_EXE" ]; then
echo "Could not find Cake.exe at '$CAKE_EXE'."
exit 1
fi
# Start Cake
exec mono "$CAKE_EXE" $SCRIPT "${CAKE_ARGUMENTS[@]}"

29
build/nuget/cppsharp.nuspec

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>CppSharp</id>
<version>0.8.17</version>
<authors>Dimitar Dobrev</authors>
<owners>João Matos,Dimitar Dobrev</owners>
<licenseUrl>https://opensource.org/licenses/MIT</licenseUrl>
<projectUrl>https://github.com/mono/CppSharp</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<developmentDependency>true</developmentDependency>
<description>CppSharp is a tool and set of libraries which allows programmers to use C/C++ libraries with high-level programming languages (such as C#).
It is a tool that takes C/C++ header and library files and generates the necessary glue to surface the native API as a managed API. Such an API can be used to consume an existing native library in your high-level code or add scripting support to a native codebase.
The supported target languages at present are C# and C++/CLI.
It can also be used as a library to parse native code into a syntax tree with a rich declaration and type information model.
The NuGet version is Windows 64-bit only for the time being. Binary 32-bit releases for Windows can be found at https://github.com/mono/CppSharp/releases .</description>
<summary>CppSharp is a collection of libraries for working with C++ code from high-level languages.</summary>
<releaseNotes>Fixed a crash when parsing unnamed declarations in name-spaces.</releaseNotes>
<copyright>João Matos, Dimitar Dobrev</copyright>
<dependencies>
<dependency id="Baseclass.Contrib.Nuget.Output" version="2.3.0" />
<dependency id="Microsoft.VisualStudio.Setup.Configuration.Interop" version="1.15.103" />
</dependencies>
</metadata>
</package>

8
build/premake5.lua

@ -5,6 +5,13 @@
config = {} config = {}
include "Helpers.lua" include "Helpers.lua"
WriteConfigForMSBuild()
if _OPTIONS["config_only"] then
return
end
include "LLVM.lua" include "LLVM.lua"
workspace "CppSharp" workspace "CppSharp"
@ -38,7 +45,6 @@ workspace "CppSharp"
workspacefiles(path.join(builddir, "*.sh")) workspacefiles(path.join(builddir, "*.sh"))
workspacefiles(path.join(rootdir, ".github/workflows/*.yml")) workspacefiles(path.join(rootdir, ".github/workflows/*.yml"))
workspacefiles(path.join(rootdir, "tests/Test*.props")) workspacefiles(path.join(rootdir, "tests/Test*.props"))
WriteConfigForMSBuild()
group "Libraries" group "Libraries"
if EnableNativeProjects() then if EnableNativeProjects() then

2
src/AST/CppSharp.AST.csproj

@ -2,5 +2,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework> <TargetFramework>netstandard2.1</TargetFramework>
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
<ProduceReferenceAssembly>true</ProduceReferenceAssembly>
<IsPackable>true</IsPackable>
</PropertyGroup> </PropertyGroup>
</Project> </Project>

2
src/Core/CppSharp.csproj

@ -2,6 +2,8 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework> <TargetFramework>netstandard2.1</TargetFramework>
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
<ProduceReferenceAssembly>true</ProduceReferenceAssembly>
<IsPackable>true</IsPackable>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

2
src/CppParser/Bindings/CSharp/CppSharp.Parser.CSharp.csproj

@ -3,6 +3,8 @@
<EnableDefaultCompileItems>false</EnableDefaultCompileItems> <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
<EnableDefaultNoneItems>false</EnableDefaultNoneItems> <EnableDefaultNoneItems>false</EnableDefaultNoneItems>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<ProduceReferenceAssembly>true</ProduceReferenceAssembly>
<IsPackable>true</IsPackable>
<PlatformParserFolder Condition="$(IsWindows) AND $(PlatformTarget) == x64">x86_64-pc-win32-msvc</PlatformParserFolder> <PlatformParserFolder Condition="$(IsWindows) AND $(PlatformTarget) == x64">x86_64-pc-win32-msvc</PlatformParserFolder>
<PlatformParserFolder Condition="$(IsLinux) AND $(PlatformTarget) == x64 AND $(UseCXX11ABI)">x86_64-linux-gnu-cxx11abi</PlatformParserFolder> <PlatformParserFolder Condition="$(IsLinux) AND $(PlatformTarget) == x64 AND $(UseCXX11ABI)">x86_64-linux-gnu-cxx11abi</PlatformParserFolder>
<PlatformParserFolder Condition="$(IsLinux) AND $(PlatformTarget) == x64 AND !$(UseCXX11ABI)">x86_64-linux-gnu</PlatformParserFolder> <PlatformParserFolder Condition="$(IsLinux) AND $(PlatformTarget) == x64 AND !$(UseCXX11ABI)">x86_64-linux-gnu</PlatformParserFolder>

5
src/Generator/CppSharp.Generator.csproj

@ -1,4 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ProduceReferenceAssembly>true</ProduceReferenceAssembly>
<IsPackable>true</IsPackable>
</PropertyGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="Passes\verbs.txt" /> <EmbeddedResource Include="Passes\verbs.txt" />
</ItemGroup> </ItemGroup>

24
src/Package/CppSharp.Package.csproj

@ -0,0 +1,24 @@
<Project Sdk="Microsoft.Build.NoTargets/2.0.1">
<PropertyGroup>
<PackageId>CppSharp</PackageId>
<IsPackable>true</IsPackable>
<PackageDescription>CppSharp is a tool and set of libraries which allows programmers to use C/C++ libraries with high-level programming languages (such as C#).
It is a tool that takes C/C++ header and library files and generates the necessary glue to surface the native API as a managed API. Such an API can be used to consume an existing native library in your high-level code or add scripting support to a native codebase.
The supported target languages at present are C# and C++/CLI.
It can also be used as a library to parse native code into a syntax tree with a rich declaration and type information model.</PackageDescription>
<PackageReleaseNotes>https://github.com/mono/CppSharp/CHANGELOG.md</PackageReleaseNotes>
<NoWarn>NU5131</NoWarn>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.CodeDom" />
<PackageReference Include="Microsoft.Win32.Registry" />
<PackageReference Include="Microsoft.VisualStudio.Setup.Configuration.Interop" />
<Content Include="$(PackageDir)runtimes\**" PackagePath="runtimes" />
<Content Include="$(PackageDir)ref\**" PackagePath="ref" />
<Content Include="$(PackageDir)contentFiles\**" PackagePath="contentFiles" PackageCopyToOutput="true" />
</ItemGroup>
</Project>

21
src/Parser/CppSharp.Parser.csproj

@ -1,6 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<ProduceReferenceAssembly>true</ProduceReferenceAssembly>
<IsPackable>true</IsPackable>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<NativeTargetExt Condition="$(IsWindows)">dll</NativeTargetExt>
<NativeTargetExt Condition="$(IsLinux)">so</NativeTargetExt>
<NativeTargetExt Condition="$(IsMacOSX)">dylib</NativeTargetExt>
<NativeTargetPrefix Condition="!$(IsWindows)">lib</NativeTargetPrefix>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition="$(GenerateBuildConfig)"> <ItemGroup Condition="$(GenerateBuildConfig)">
@ -15,4 +21,19 @@
<ProjectReference Include="..\CppParser\Bindings\CSharp\CppSharp.Parser.CSharp.csproj" Condition="!$(IsWindows) OR $(CI)" /> <ProjectReference Include="..\CppParser\Bindings\CSharp\CppSharp.Parser.CSharp.csproj" Condition="!$(IsWindows) OR $(CI)" />
<ProjectReference Include="$(NativeProjectsDir)\CppSharp.Parser.CLI.vcxproj" Condition="$(IsWindows) AND !$(CI)" /> <ProjectReference Include="$(NativeProjectsDir)\CppSharp.Parser.CLI.vcxproj" Condition="$(IsWindows) AND !$(CI)" />
</ItemGroup> </ItemGroup>
<Target Name="PackNativeHeaders" AfterTargets="prepack" Condition="'$(RID)' == 'win-x64'">
<ItemGroup>
<ClangHeaders Include="$(SrcDir)lib\**" />
</ItemGroup>
<Copy SourceFiles="@(ClangHeaders)" DestinationFiles="@(ClangHeaders->'$(PackageDir)contentFiles\any\any\lib\%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>
<Target Name="PackNativeLibs" AfterTargets="prepack">
<ItemGroup>
<NativeLibs Include="$(OutputPath)$(NativeTargetPrefix)CppSharp.CppParser.$(NativeTargetExt)" />
<NativeLibs Include="$(OutputPath)$(NativeTargetPrefix)Std-symbols.$(NativeTargetExt)" />
</ItemGroup>
<Copy SourceFiles="@(NativeLibs)" DestinationFolder="$(PackageDir)runtimes\$(RID)\native" />
</Target>
</Project> </Project>

2
src/Runtime/CppSharp.Runtime.csproj

@ -4,5 +4,7 @@
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<TargetFramework>netstandard2.0</TargetFramework> <TargetFramework>netstandard2.0</TargetFramework>
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
<ProduceReferenceAssembly>true</ProduceReferenceAssembly>
<IsPackable>true</IsPackable>
</PropertyGroup> </PropertyGroup>
</Project> </Project>
Loading…
Cancel
Save