From b0c4641f02a15954aa195456abbe08389540e51f Mon Sep 17 00:00:00 2001 From: vnugent Date: Mon, 7 Oct 2024 21:11:41 -0400 Subject: build server unit testing and build sim --- .../CompressorManagerTests.cs | 8 +-- lib/Net.Compression/vnlib_compress/CMakeLists.txt | 8 ++- lib/Net.Compression/vnlib_compress/Taskfile.yaml | 62 ++++++++++++++-------- lib/Net.Compression/vnlib_compress/src/util.h | 2 +- 4 files changed, 53 insertions(+), 27 deletions(-) (limited to 'lib/Net.Compression') diff --git a/lib/Net.Compression/VNLib.Net.CompressionTests/CompressorManagerTests.cs b/lib/Net.Compression/VNLib.Net.CompressionTests/CompressorManagerTests.cs index 236d39c..5e6b27f 100644 --- a/lib/Net.Compression/VNLib.Net.CompressionTests/CompressorManagerTests.cs +++ b/lib/Net.Compression/VNLib.Net.CompressionTests/CompressorManagerTests.cs @@ -20,13 +20,13 @@ namespace VNLib.Net.Compression.Tests [TestClass()] public class CompressorManagerTests { - const string LIB_PATH = @"../../../../vnlib_compress/build/Debug/vnlib_compress.dll"; + private static string? NativeCompressPath => Environment.GetEnvironmentVariable("TEST_COMPRESS_LIB_PATH"); [TestMethod] public void NativeLibApiTest() { //Load library - using NativeCompressionLib lib = NativeCompressionLib.LoadLibrary(LIB_PATH, DllImportSearchPath.SafeDirectories); + using NativeCompressionLib lib = NativeCompressionLib.LoadLibrary(NativeCompressPath, DllImportSearchPath.SafeDirectories); LibTestComp cp = new(lib, CompressionLevel.Fastest); @@ -71,7 +71,7 @@ namespace VNLib.Net.Compression.Tests PrintSystemInformation(); //Load native library - using NativeCompressionLib lib = NativeCompressionLib.LoadLibrary(LIB_PATH, DllImportSearchPath.SafeDirectories); + using NativeCompressionLib lib = NativeCompressionLib.LoadLibrary(NativeCompressPath, DllImportSearchPath.SafeDirectories); //Huge array of random data to compress byte[] testData = RandomNumberGenerator.GetBytes(10 * 1024 * 1024); @@ -188,7 +188,7 @@ namespace VNLib.Net.Compression.Tests writer.WriteStartObject("vnlib.net.compression"); writer.WriteNumber("level", 1); - writer.WriteString("lib_path", LIB_PATH); + writer.WriteString("lib_path", NativeCompressPath); writer.WriteEndObject(); writer.WriteEndObject(); diff --git a/lib/Net.Compression/vnlib_compress/CMakeLists.txt b/lib/Net.Compression/vnlib_compress/CMakeLists.txt index da27882..d20593c 100644 --- a/lib/Net.Compression/vnlib_compress/CMakeLists.txt +++ b/lib/Net.Compression/vnlib_compress/CMakeLists.txt @@ -198,8 +198,14 @@ if(NATIVE_HEAP_NAME) ${NATIVE_HEAP_NAME} HINTS + ${NATIVE_HEAP_BIN} + ${NATIVE_HEAP_BIN}/${CMAKE_BUILD_TYPE} + ${NATIVE_HEAP_BIN}/build + ${NATIVE_HEAP_BIN}/build/${CMAKE_BUILD_TYPE} + ${NATIVE_HEAP_SRC} - ${NATIVE_HEAP_SRC}/build + ${NATIVE_HEAP_SRC}/${CMAKE_BUILD_TYPE} + ${NATIVE_HEAP_SRC}/build ${NATIVE_HEAP_SRC}/build/${CMAKE_BUILD_TYPE} NO_CACHE diff --git a/lib/Net.Compression/vnlib_compress/Taskfile.yaml b/lib/Net.Compression/vnlib_compress/Taskfile.yaml index fec32d5..45fe865 100644 --- a/lib/Net.Compression/vnlib_compress/Taskfile.yaml +++ b/lib/Net.Compression/vnlib_compress/Taskfile.yaml @@ -12,6 +12,7 @@ vars: PROJECT_NAME: 'vnlib_compress' RPMALLOC_SRC_DIR: '../../Utils.Memory/vnlib_rpmalloc' BUILD_TYPE: '{{ .BUILD_TYPE | default "Release" }}' + BUILD_DIR: 'build/{{ OS }}' tasks: @@ -21,35 +22,45 @@ tasks: - cmd: echo "Building {{ .PROJECT_NAME }}" silent: true - - cmake -Bbuild/ {{ .CLI_ARGS }} - '-DCMAKE_BUILD_TYPE={{ .BUILD_TYPE }}' + - cmd: cmake {{ .CLI_ARGS }} + -B{{ .BUILD_DIR }}/ + -DCMAKE_BUILD_TYPE={{ .BUILD_TYPE }} - - cmake --build build/ --config Release + - cmake --build {{ .BUILD_DIR }}/ --config Release #called by ci pipline to build the winx64 project build: - desc: 'DO NOT USE. This is an internal task' - platforms: [ windows ] + desc: 'DO NOT USE. This is an internal task' cmds: #the CI pipline may have issues reading modules if the third-party dir is not cleaned every time a build runs, only an issue after build - defer: { task: clean-third-party } - + #build the local rpmalloc library for linking - task: build_rpmalloc vars: { RPMALLOC_ARGS: '-DCMAKE_BUILD_TYPE={{ .BUILD_TYPE }}' } - #configure the build with rpmalloc since we know the source must be local during CI - - cmake -B./build {{ .CLI_ARGS }} - '-DCMAKE_BUILD_TYPE={{ .BUILD_TYPE }}' - '-DCI_PRECOMPILE=ON' - '-DNATIVE_HEAP_NAME=vnlib_rpmalloc_static' - '-DNATIVE_HEAP_SRC={{ .RPMALLOC_SRC_DIR }}' - '-DNATIVE_HEAP_INCLUDES={{ .RPMALLOC_SRC_DIR }}' + #build the project + - task: build-internal + vars: { CLI_ARGS: '{{ .CLI_ARGS }}' } + + build-internal: + internal: true + cmds: + + #configure the build with vnlib_rpmalloc since we know the source must be local during CI + - cmake {{ .CLI_ARGS }} + -B{{ .BUILD_DIR }} + -DCMAKE_BUILD_TYPE={{ .BUILD_TYPE }} + -DCI_PRECOMPILE=ON + -DNATIVE_HEAP_NAME={{ if eq OS "windows" }}vnlib_rpmalloc{{else}}libvn_rpmalloc.a{{end}} + -DNATIVE_HEAP_SRC={{ .RPMALLOC_SRC_DIR }} + -DNATIVE_HEAP_BIN={{ .RPMALLOC_SRC_DIR }}/{{ .BUILD_DIR }} + -DNATIVE_HEAP_INCLUDES={{ .RPMALLOC_SRC_DIR }} #build for platform, since Windows, build in both modes - - cmake --build build/ --config debug - - cmake --build build/ --config release + - cmd: cmake --build {{ .BUILD_DIR }}/ --config debug + - cmd: cmake --build {{ .BUILD_DIR }}/ --config release #when build succeeds, archive the output into a tgz postbuild_success: @@ -93,9 +104,9 @@ tasks: internal: true deps: - task: embed - vars: { TARGET: './build/{{ .BUILD_MODE }}' } + vars: { TARGET: './{{ .BUILD_DIR }}/{{ .BUILD_MODE }}' } cmds: - - cmd: cd build/{{ .BUILD_MODE }} && tar -czf '../../bin/msvc-x64-{{ .BUILD_MODE }}-{{ .PROJECT_NAME }}.tgz' {{ .TAR_FILES }} + - cmd: cd {{ .BUILD_DIR }}/{{ .BUILD_MODE }} && tar -czf '../../bin/msvc-x64-{{ .BUILD_MODE }}-{{ .PROJECT_NAME }}.tgz' {{ .TAR_FILES }} #add embeded resources to the binary output for distribution embed: @@ -126,20 +137,29 @@ tasks: - cmd: powershell rm LICENSE + dev-init: + desc: 'Configures the project for local development' + cmds: + - task: build-internal + vars: { BUILD_TYPE: Debug } + + - cmd: echo "dev init complete" + silent: true + #Remove the output dirs on clean clean: - desc: 'Cleans any build artifcats and output directories' + desc: 'Cleans any build artifacts and output directories' ignore_error: true cmds: - for: [ bin/, build/ ] - cmd: powershell rm -Recurse '{{ .ITEM }}' -Force + cmd: powershell rm -Recurse -Force '{{ .ITEM }}' clean-third-party: internal: true ignore_error: true cmds: - - cmd: powershell rm -Recurse -Force 'build/_deps/' + - cmd: powershell rm -Recurse -Force '{{ .BUILD_DIR }}/_deps/' platforms: [ windows ] - - cmd: rm -rf 'build/_deps/' + - cmd: rm -rf '{{ .BUILD_DIR }}/_deps/' platforms: [ linux, darwin ] \ No newline at end of file diff --git a/lib/Net.Compression/vnlib_compress/src/util.h b/lib/Net.Compression/vnlib_compress/src/util.h index d1a1ddd..f37d63d 100644 --- a/lib/Net.Compression/vnlib_compress/src/util.h +++ b/lib/Net.Compression/vnlib_compress/src/util.h @@ -67,7 +67,7 @@ ERRNO result = heapFree(heapGetSharedHeapHandle(), ptr); /* track failed free results */ - DEBUG_ASSERT(result > 0); + DEBUG_ASSERT(result != 0); } #else -- cgit