Skip to content

Commit a5b2c7c

Browse files
committed
feat: setup boilerplate for data-pipeline integration
1 parent 467825f commit a5b2c7c

31 files changed

+903
-9
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,3 +388,5 @@ datadog-coverage-*
388388

389389
# nuke
390390
.nuke/build.schema.json
391+
build/libdatadog/runtimes
392+
build/libdatadog/include

build/libdatadog/README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# README
2+
3+
This is a workaround to take dependency on libdatadog in a csproj project.
4+
5+
## Usage
6+
7+
1. Build the nuget package
8+
```bash
9+
./build.sh --clean --output ../../../../packages --version 14.2.0
10+
```
11+
12+
2. The nuget.config file at the root of the respective project should have the following entry:
13+
```xml
14+
<add key="local" value="packages" />
15+
```
16+
which is essentially the location where the nuget package is built.

build/libdatadog/build.ps1

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
param(
2+
[switch]$Clean,
3+
[string]$OutputDir = (Get-Location),
4+
[string]$Version = "14.1.0"
5+
)
6+
7+
$ErrorActionPreference = "Stop"
8+
9+
$Artifacts = @(
10+
"libdatadog-aarch64-alpine-linux-musl.tar.gz",
11+
"libdatadog-aarch64-apple-darwin.tar.gz",
12+
"libdatadog-aarch64-unknown-linux-gnu.tar.gz",
13+
"libdatadog-x86_64-alpine-linux-musl.tar.gz",
14+
"libdatadog-x86_64-unknown-linux-gnu.tar.gz"
15+
)
16+
17+
function Prepare-OutputDir {
18+
if (-Not (Test-Path -Path $OutputDir)) {
19+
Write-Host "Output directory $OutputDir does not exist"
20+
New-Item -ItemType Directory -Path $OutputDir | Out-Null
21+
}
22+
}
23+
24+
function Download-Artifacts {
25+
New-Item -ItemType Directory -Path "releases" -Force | Out-Null
26+
foreach ($Artifact in $Artifacts) {
27+
$Url = "https://github.com/DataDog/libdatadog/releases/download/v$Version/$Artifact"
28+
Write-Host "Downloading $Url to releases/$Artifact"
29+
Invoke-WebRequest -Uri $Url -OutFile "releases/$Artifact" -UseBasicParsing
30+
}
31+
}
32+
33+
function Extract-Artifacts {
34+
foreach ($Artifact in $Artifacts) {
35+
Write-Host "Extracting releases/$Artifact"
36+
tar -xzf "releases/$Artifact" -C "releases"
37+
}
38+
}
39+
40+
function Copy-ToBin {
41+
Write-Host "Copying to runtimes"
42+
43+
# ARM64 Linux musl
44+
New-Item -ItemType Directory -Path "runtimes/linux-musl-arm64/native" -Force | Out-Null
45+
Copy-Item "releases/libdatadog-aarch64-alpine-linux-musl/lib/libdatadog_profiling.so" "runtimes/linux-musl-arm64/native/libdatadog_profiling.so"
46+
Copy-Item "releases/libdatadog-aarch64-alpine-linux-musl/lib/libdatadog_profiling.so" "runtimes/linux-musl-arm64/native/libdatadog_profiling.debug.so"
47+
48+
# ARM64 macOS
49+
New-Item -ItemType Directory -Path "runtimes/osx-arm64/native" -Force | Out-Null
50+
Copy-Item "releases/libdatadog-aarch64-apple-darwin/lib/libdatadog_profiling.dylib" "runtimes/osx-arm64/native/libdatadog_profiling.dylib"
51+
52+
# ARM64 Linux
53+
New-Item -ItemType Directory -Path "runtimes/linux-arm64/native" -Force | Out-Null
54+
Copy-Item "releases/libdatadog-aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so" "runtimes/linux-arm64/native/libdatadog_profiling.so"
55+
Copy-Item "releases/libdatadog-aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so" "runtimes/linux-arm64/native/libdatadog_profiling.debug.so"
56+
57+
# x64 Linux musl
58+
New-Item -ItemType Directory -Path "runtimes/linux-musl-x64/native" -Force | Out-Null
59+
Copy-Item "releases/libdatadog-x86_64-alpine-linux-musl/lib/libdatadog_profiling.so" "runtimes/linux-musl-x64/native/libdatadog_profiling.so"
60+
Copy-Item "releases/libdatadog-x86_64-alpine-linux-musl/lib/libdatadog_profiling.so" "runtimes/linux-musl-x64/native/libdatadog_profiling.debug.so"
61+
62+
# x64 Linux
63+
New-Item -ItemType Directory -Path "runtimes/linux-x64/native" -Force | Out-Null
64+
Copy-Item "releases/libdatadog-x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so" "runtimes/linux-x64/native/libdatadog_profiling.so"
65+
Copy-Item "releases/libdatadog-x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so" "runtimes/linux-x64/native/libdatadog_profiling.debug.so"
66+
}
67+
68+
function Copy-Headers {
69+
Write-Host "Copying headers"
70+
Copy-Item -Recurse -Force "releases/libdatadog-aarch64-alpine-linux-musl/include/datadog" "include/datadog"
71+
}
72+
73+
function Download-WindowsArtifacts {
74+
$Url = "https://globalcdn.nuget.org/packages/libdatadog.$Version.nupkg?packageVersion=$Version"
75+
Write-Host "Downloading $Url to releases/libdatadog.$Version.nupkg"
76+
Invoke-WebRequest -Uri $Url -OutFile "releases/libdatadog.$Version.nupkg" -UseBasicParsing
77+
78+
Write-Host "Extracting releases/libdatadog.$Version.nupkg"
79+
Expand-Archive -Path "releases/libdatadog.$Version.nupkg" -DestinationPath "releases/libdatadog.$Version" -Force
80+
}
81+
82+
function Copy-WindowsArtifacts {
83+
Write-Host "Copying to runtimes"
84+
85+
# Windows x64 dlls for dynamic linking
86+
New-Item -ItemType Directory -Path "runtimes/win-x64/native" -Force | Out-Null
87+
Copy-Item "releases/libdatadog.$Version/build/native/lib/x64/release/datadog_profiling_ffi.dll" "runtimes/win-x64/native/libdatadog_profiling.dll"
88+
Copy-Item "releases/libdatadog.$Version/build/native/lib/x64/release/datadog_profiling_ffi.lpdb/datadog_profiling_ffi.pdb" "runtimes/win-x64/native/libdatadog_profiling.pdb"
89+
90+
# Windows x86 dlls for dynamic linking
91+
New-Item -ItemType Directory -Path "runtimes/win-x86/native" -Force | Out-Null
92+
Copy-Item "releases/libdatadog.$Version/build/native/lib/x86/release/datadog_profiling_ffi.dll" "runtimes/win-x86/native/libdatadog_profiling.dll"
93+
Copy-Item "releases/libdatadog.$Version/build/native/lib/x86/release/datadog_profiling_ffi.pdb" "runtimes/win-x86/native/libdatadog_profiling.pdb"
94+
95+
# Windows x64 dlls for static linking
96+
New-Item -ItemType Directory -Path "lib/win-x64/native" -Force | Out-Null
97+
Copy-Item "releases/libdatadog.$Version/build/native/lib/x64/release/datadog_profiling_ffi.lib" "lib/win-x64/native/libdatadog_profiling.lib"
98+
99+
# Windows x86 dlls for static linking
100+
New-Item -ItemType Directory -Path "lib/win-x86/native" -Force | Out-Null
101+
Copy-Item "releases/libdatadog.$Version/build/native/lib/x86/release/datadog_profiling_ffi.lib" "lib/win-x86/native/libdatadog_profiling.lib"
102+
}
103+
104+
function Create-NuGetPackage {
105+
Write-Host "Creating NuGet package at $OutputDir"
106+
dotnet pack "libdatadog.csproj" --output $OutputDir -p:Version=$Version
107+
}
108+
109+
function Clean-Up {
110+
if ($Clean) {
111+
Write-Host "Cleaning up local files"
112+
$dir_to_remove = @("releases", "include", "runtimes", "lib", "~/.nuget/packages/libdatadog")
113+
114+
foreach ($dir in $dir_to_remove) {
115+
if (Test-Path -Path $dir) {
116+
Write-Host "Removing $dir"
117+
Remove-Item -Recurse -Force $dir | Out-Null
118+
}
119+
}
120+
}
121+
}
122+
123+
# Main Script Execution
124+
Clean-Up
125+
Prepare-OutputDir
126+
Download-Artifacts
127+
Extract-Artifacts
128+
Copy-ToBin
129+
Copy-Headers
130+
Download-WindowsArtifacts
131+
Copy-WindowsArtifacts
132+
Create-NuGetPackage
133+
Clean-Up

build/libdatadog/build.sh

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
#!/bin/bash
2+
set -e
3+
4+
clean=false
5+
output_dir=$(dirname "$0")
6+
version="14.1.0"
7+
artifacts=(
8+
"libdatadog-aarch64-alpine-linux-musl.tar.gz"
9+
"libdatadog-aarch64-apple-darwin.tar.gz"
10+
"libdatadog-aarch64-unknown-linux-gnu.tar.gz"
11+
"libdatadog-x86_64-alpine-linux-musl.tar.gz"
12+
"libdatadog-x86_64-unknown-linux-gnu.tar.gz"
13+
)
14+
15+
parse_args() {
16+
while [[ "$#" -gt 0 ]]; do
17+
case $1 in
18+
--clean) clean=true ;;
19+
--output) output_dir="$2"; shift ;;
20+
--version) version="$2"; shift ;;
21+
*) echo "Unknown parameter passed: $1"; exit 1 ;;
22+
esac
23+
shift
24+
done
25+
}
26+
27+
prepare_output_dir() {
28+
if [ ! -d "$output_dir" ]; then
29+
echo "Output directory $output_dir does not exist"
30+
mkdir -p "$output_dir"
31+
fi
32+
}
33+
34+
download_artifacts() {
35+
mkdir -p releases
36+
for artifact in "${artifacts[@]}"; do
37+
url="https://github.com/DataDog/libdatadog/releases/download/v$version/$artifact"
38+
echo "Downloading $url to releases/$artifact"
39+
curl -L -o releases/$artifact $url
40+
done
41+
}
42+
43+
extract_artifacts() {
44+
for artifact in "${artifacts[@]}"; do
45+
echo "Extracting releases/$artifact"
46+
tar -xzf releases/$artifact -C releases
47+
done
48+
}
49+
50+
copy_to_bin() {
51+
echo "Copying to runtimes"
52+
mkdir -p runtimes/linux-musl-arm64/native
53+
cp releases/libdatadog-aarch64-alpine-linux-musl/lib/libdatadog_profiling.so runtimes/linux-musl-arm64/native/libdatadog_profiling.so
54+
cp releases/libdatadog-aarch64-alpine-linux-musl/lib/libdatadog_profiling.so runtimes/linux-musl-arm64/native/libdatadog_profiling.debug.so
55+
56+
mkdir -p runtimes/osx-arm64/native
57+
cp releases/libdatadog-aarch64-apple-darwin/lib/libdatadog_profiling.dylib runtimes/osx-arm64/native/libdatadog_profiling.dylib
58+
59+
mkdir -p runtimes/linux-arm64/native
60+
cp releases/libdatadog-aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so runtimes/linux-arm64/native/libdatadog_profiling.so
61+
cp releases/libdatadog-aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so runtimes/linux-arm64/native/libdatadog_profiling.debug.so
62+
63+
mkdir -p runtimes/linux-musl-x64/native
64+
cp releases/libdatadog-x86_64-alpine-linux-musl/lib/libdatadog_profiling.so runtimes/linux-musl-x64/native/libdatadog_profiling.so
65+
cp releases/libdatadog-x86_64-alpine-linux-musl/lib/libdatadog_profiling.so runtimes/linux-musl-x64/native/libdatadog_profiling.debug.so
66+
67+
mkdir -p runtimes/linux-x64/native
68+
cp releases/libdatadog-x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so runtimes/linux-x64/native/libdatadog_profiling.so
69+
cp releases/libdatadog-x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so runtimes/linux-x64/native/libdatadog_profiling.debug.so
70+
}
71+
72+
copy_headers() {
73+
echo "Copying headers"
74+
mkdir -p include/datadog
75+
cp -r releases/libdatadog-aarch64-alpine-linux-musl/include/datadog include
76+
}
77+
78+
download_windows_artifacts() {
79+
80+
url="https://globalcdn.nuget.org/packages/libdatadog.$version.nupkg?packageVersion=$version"
81+
echo "Downloading $url to releases/libdatadog.$version.nupkg"
82+
curl -L -o releases/libdatadog.$version.nupkg $url
83+
84+
echo "Extracting releases/libdatadog.$version.nupkg"
85+
unzip -o releases/libdatadog.$version.nupkg -d releases/libdatadog.$version
86+
}
87+
88+
copy_windows_artifacts() {
89+
echo "Copying to runtimes"
90+
91+
# Windows x64 dlls for dynamic linking
92+
mkdir -p runtimes/win-x64/native
93+
cp releases/libdatadog.$version/build/native/lib/x64/release/datadog_profiling_ffi.dll runtimes/win-x64/native/libdatadog_profiling.dll
94+
cp releases/libdatadog.$version/build/native/lib/x64/release/datadog_profiling_ffi.lpdb/datadog_profiling_ffi.pdb runtimes/win-x64/native/libdatadog_profiling.pdb
95+
96+
# Windows x86 dlls for dynamic linking
97+
mkdir -p runtimes/win-x86/native
98+
cp releases/libdatadog.$version/build/native/lib/x86/release/datadog_profiling_ffi.dll runtimes/win-x86/native/libdatadog_profiling.dll
99+
cp releases/libdatadog.$version/build/native/lib/x86/release/datadog_profiling_ffi.pdb runtimes/win-x86/native/libdatadog_profiling.pdb
100+
101+
# Windows x64 dlls for static linking
102+
mkdir -p lib/win-x64/native
103+
cp releases/libdatadog.$version/build/native/lib/x64/release/datadog_profiling_ffi.lib lib/win-x64/native/libdatadog_profiling.lib
104+
105+
# Windows x86 dlls for static linking
106+
mkdir -p lib/win-x86/native
107+
cp releases/libdatadog.$version/build/native/lib/x86/release/datadog_profiling_ffi.lib lib/win-x86/native/libdatadog_profiling.lib
108+
}
109+
110+
create_nuget_package() {
111+
echo "Creating NuGet package at $output_dir"
112+
dotnet pack libdatadog.csproj --output $output_dir -p:Version=$version
113+
}
114+
115+
clean_up() {
116+
if [ "$clean" = true ]; then
117+
dir_to_remove=(
118+
"releases"
119+
"include"
120+
"runtimes"
121+
"lib"
122+
)
123+
124+
for dir in $dir_to_remove; do
125+
echo "Removing $dir"
126+
rm -rf $dir
127+
done
128+
fi
129+
}
130+
131+
main() {
132+
original_dir=$(pwd)
133+
echo "Original directory: $original_dir"
134+
echo "Changing directory to $(dirname "$0")"
135+
cd "$(dirname "$0")"
136+
trap 'cd "$original_dir"' EXIT
137+
parse_args "$@"
138+
prepare_output_dir
139+
download_artifacts
140+
extract_artifacts
141+
copy_to_bin
142+
copy_headers
143+
download_windows_artifacts
144+
copy_windows_artifacts
145+
create_nuget_package
146+
clean_up
147+
}
148+
149+
main "$@"
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
3+
<Rule Name="ReferencedPackages2f1c4635-86a8-4679-8f3f-b74b1589b8f8" PageTemplate="tool" DisplayName="Referenced Packages" SwitchPrefix="/" Order="1">
4+
<Rule.Categories>
5+
<Category Name="OpenSSL" DisplayName="OpenSSL" />
6+
</Rule.Categories>
7+
<Rule.DataSource>
8+
<DataSource Persistence="ProjectFile" ItemType="" />
9+
</Rule.DataSource>
10+
<EnumProperty Name="Linkage-OpenSSL" DisplayName="Linkage" Description="Which version of the .lib file to link to this library" Category="OpenSSL">
11+
<EnumValue Name="dynamic" DisplayName="Dynamic Library (DLL)" />
12+
<EnumValue Name="static" DisplayName="Static" />
13+
</EnumProperty>
14+
</Rule>
15+
</ProjectSchemaDefinitions>
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<!-- default linkage mode -->
4+
<PropertyGroup Label="Default initializers for properties">
5+
<Linkage-libdatadog Condition="'$(Linkage-libdatadog)' == ''">dynamic</Linkage-libdatadog>
6+
</PropertyGroup>
7+
<!-- UI options -->
8+
<ItemGroup>
9+
<PropertyPageSchema Include="$(MSBuildThisFileDirectory)\libdatadog-propertiesui-2f1c4635-86a8-4679-8f3f-b74b1589b8f8.xml" />
10+
</ItemGroup>
11+
<!-- Include options -->
12+
<ItemDefinitionGroup>
13+
<ClCompile>
14+
<AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
15+
</ClCompile>
16+
</ItemDefinitionGroup>
17+
<!-- Linker options -->
18+
<ItemDefinitionGroup Condition="'$(PlatformTarget)' == 'x86' AND '$(Linkage-libdatadog.ToLower())' == 'dynamic'">
19+
<Link>
20+
<AdditionalLibraryDirectories>$(MSBuildThisFileDirectory)..\..\lib\win-x86\native;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
21+
</Link>
22+
</ItemDefinitionGroup>
23+
<ItemDefinitionGroup Condition="'$(PlatformTarget)' == 'x86' AND '$(Linkage-libdatadog.ToLower())' == 'static'">
24+
<Link>
25+
<AdditionalDependencies>PowrProf.lib;NtDll.lib;UserEnv.lib;Bcrypt.lib;crypt32.lib;wsock32.lib;ws2_32.lib;shlwapi.lib;Secur32.lib;Ncrypt.lib;%(AdditionalDependencies)</AdditionalDependencies>
26+
<AdditionalLibraryDirectories>$(MSBuildThisFileDirectory)..\..\lib\win-x86\native;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
27+
<AdditionalOptions>/ignore:4099 %(AdditionalOptions)</AdditionalOptions>
28+
</Link>
29+
</ItemDefinitionGroup>
30+
<ItemDefinitionGroup Condition="'$(PlatformTarget)' == 'x64' AND '$(Linkage-libdatadog.ToLower())' == 'dynamic'">
31+
<Link>
32+
<AdditionalLibraryDirectories>$(MSBuildThisFileDirectory)..\..\lib\win-x64\native;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
33+
</Link>
34+
</ItemDefinitionGroup>
35+
<ItemDefinitionGroup Condition="'$(PlatformTarget)' == 'x64' AND '$(Linkage-libdatadog.ToLower())' == 'static'">
36+
<Link>
37+
<AdditionalDependencies>PowrProf.lib;NtDll.lib;UserEnv.lib;Bcrypt.lib;crypt32.lib;wsock32.lib;ws2_32.lib;shlwapi.lib;Secur32.lib;Ncrypt.lib;%(AdditionalDependencies)</AdditionalDependencies>
38+
<AdditionalLibraryDirectories>$(MSBuildThisFileDirectory)..\..\lib\win-x64\native;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
39+
<AdditionalOptions>/ignore:4099 %(AdditionalOptions)</AdditionalOptions>
40+
</Link>
41+
</ItemDefinitionGroup>
42+
</Project>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
3+
<Target Name="libdatadog_x86" BeforeTargets="PostBuildEvent;PrepareForRun" Condition="'$(PlatformTarget)' == 'x86' AND '$(Linkage-libdatadog.ToLower())' == 'dynamic'">
4+
<ItemGroup>
5+
<BinFiles Include="$(MSBuildThisFileDirectory)..\..\runtimes\win-x86\native\libdatadog_profiling.dll" />
6+
<BinFiles Include="$(MSBuildThisFileDirectory)..\..\runtimes\win-x86\native\libdatadog_profiling.pdb" />
7+
</ItemGroup>
8+
<Copy SourceFiles="@(BinFiles)" DestinationFolder="$(OutDir)" />
9+
</Target>
10+
<Target Name="libdatadog_x64" BeforeTargets="PostBuildEvent;PrepareForRun" Condition="'$(PlatformTarget)' == 'x64' AND '$(Linkage-libdatadog.ToLower())' == 'dynamic'">
11+
<ItemGroup>
12+
<BinFiles Include="$(MSBuildThisFileDirectory)..\..\runtimes\win-x64\native\libdatadog_profiling.dll" />
13+
<BinFiles Include="$(MSBuildThisFileDirectory)..\..\runtimes\win-x64\native\libdatadog_profiling.pdb" />
14+
</ItemGroup>
15+
<Copy SourceFiles="@(BinFiles)" DestinationFolder="$(OutDir)" />
16+
</Target>
17+
<Target Name="libdatadog_Clean" BeforeTargets="Clean" Condition="'$(Linkage-libdatadog.ToLower())' == 'dynamic'">
18+
<Message Text="libdatadog_Clean target executed"/>
19+
<ItemGroup>
20+
<BinFiles Include="$(OutDir)\libdatadog_profiling.dll" />
21+
<BinFiles Include="$(OutDir)\libdatadog_profiling.pdb" />
22+
</ItemGroup>
23+
<Delete Files="@(BinFiles)" />
24+
</Target>
25+
</Project>

0 commit comments

Comments
 (0)