From c2fe87a802dcd6374def0f2a1211f4efb74b7035 Mon Sep 17 00:00:00 2001 From: Justin M Date: Fri, 24 Jul 2026 13:34:02 -0700 Subject: [PATCH 1/2] Build native extensions in parallel (multi-core) Add parallel-build flags to the native CMake/make invocations that were building single-threaded, matching the pattern already used by the R, ONNX and EKM extensions: - Java/Python (windows .cmd, linux .sh): cmake --build ... --parallel - GoogleTest windows: mingw32-make -j all - GoogleTest linux: cmake --build ... --parallel --parallel defaults to the available core count; no behavioral change to outputs. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: acb7e6f8-cf0c-4635-92e7-df8559d2d677 --- language-extensions/java/build/linux/build-java-extension.sh | 2 +- language-extensions/java/build/windows/build-java-extension.cmd | 2 +- .../python/build/linux/build-python-extension.sh | 2 +- .../python/build/windows/build-python-extension.cmd | 2 +- test/googletest/build/linux/build-googletest.sh | 2 +- test/googletest/build/windows/build-googletest.cmd | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/language-extensions/java/build/linux/build-java-extension.sh b/language-extensions/java/build/linux/build-java-extension.sh index 666d2ee8..24ca6f2f 100644 --- a/language-extensions/java/build/linux/build-java-extension.sh +++ b/language-extensions/java/build/linux/build-java-extension.sh @@ -50,7 +50,7 @@ function build { -DJAVA_HOME=${JAVA_HOME} \ -DJAVAEXTENSION_WORKING_DIR=${JAVAEXTENSION_WORKING_DIR} \ ${JAVAEXTENSION_HOME}/src - cmake --build ${JAVAEXTENSION_WORKING_DIR} --target install + cmake --build ${JAVAEXTENSION_WORKING_DIR} --target install --parallel # Check the exit code of the compiler and exit appropriately so that build will fail. # diff --git a/language-extensions/java/build/windows/build-java-extension.cmd b/language-extensions/java/build/windows/build-java-extension.cmd index 75866e9c..f52c6b6a 100644 --- a/language-extensions/java/build/windows/build-java-extension.cmd +++ b/language-extensions/java/build/windows/build-java-extension.cmd @@ -133,7 +133,7 @@ ECHO "[INFO] Building Java extension project using CMAKE_CONFIGURATION=%CMAKE_CO REM Call cmake build REM -CALL "%CMAKE_ROOT%\bin\cmake.exe" --build . --config %CMAKE_CONFIGURATION% --target INSTALL +CALL "%CMAKE_ROOT%\bin\cmake.exe" --build . --config %CMAKE_CONFIGURATION% --target INSTALL --parallel CALL :CHECKERROR %ERRORLEVEL% "Error: Failed to build Java extension for CMAKE_CONFIGURATION=%CMAKE_CONFIGURATION%" || EXIT /b %ERRORLEVEL% diff --git a/language-extensions/python/build/linux/build-python-extension.sh b/language-extensions/python/build/linux/build-python-extension.sh index edd30330..6e2e3fa9 100644 --- a/language-extensions/python/build/linux/build-python-extension.sh +++ b/language-extensions/python/build/linux/build-python-extension.sh @@ -38,7 +38,7 @@ function build { -DBOOST_PYTHON_ROOT=${BOOST_PYTHON_ROOT} \ -DINCLUDE_ROOT=${INCLUDE_ROOT} \ ${PYTHONEXTENSION_HOME}/src - cmake --build ${PYTHONEXTENSION_WORKING_DIR} --target install + cmake --build ${PYTHONEXTENSION_WORKING_DIR} --target install --parallel # Check the exit code of the compiler and exit appropriately so that build will fail. # diff --git a/language-extensions/python/build/windows/build-python-extension.cmd b/language-extensions/python/build/windows/build-python-extension.cmd index 57117d28..f1ec97d0 100644 --- a/language-extensions/python/build/windows/build-python-extension.cmd +++ b/language-extensions/python/build/windows/build-python-extension.cmd @@ -121,7 +121,7 @@ ECHO "[INFO] Building Python extension project using CMAKE_CONFIGURATION=%CMAKE_ REM Call cmake build REM -CALL "%CMAKE_ROOT%\bin\cmake.exe" --build . --config %CMAKE_CONFIGURATION% --target INSTALL +CALL "%CMAKE_ROOT%\bin\cmake.exe" --build . --config %CMAKE_CONFIGURATION% --target INSTALL --parallel CALL :CHECKERROR %ERRORLEVEL% "Error: Failed to build Python extension for CMAKE_CONFIGURATION=%CMAKE_CONFIGURATION%" || EXIT /b %ERRORLEVEL% diff --git a/test/googletest/build/linux/build-googletest.sh b/test/googletest/build/linux/build-googletest.sh index 194eefc3..b81a17ac 100644 --- a/test/googletest/build/linux/build-googletest.sh +++ b/test/googletest/build/linux/build-googletest.sh @@ -32,7 +32,7 @@ pushd ${BUILD_OUTPUT} cmake -DCMAKE_INSTALL_PREFIX:PATH=${BUILD_OUTPUT} \ -DPLATFORM=linux \ ${GTEST_HOME}/src -cmake --build ${BUILD_OUTPUT} --target install +cmake --build ${BUILD_OUTPUT} --target install --parallel # Check the exit code of the compiler and exit appropriately so that build will fail. # diff --git a/test/googletest/build/windows/build-googletest.cmd b/test/googletest/build/windows/build-googletest.cmd index b1ad527f..ce7fbf9c 100644 --- a/test/googletest/build/windows/build-googletest.cmd +++ b/test/googletest/build/windows/build-googletest.cmd @@ -47,7 +47,7 @@ CALL :CHECKERROR %ERRORLEVEL% "Error: Failed to configure googletest-framework | REM Call build REM -CALL "mingw32-make.exe" all +CALL "mingw32-make.exe" -j all CALL :CHECKERROR %ERRORLEVEL% "Error: Failed to build googletest-framework." || EXIT /b %ERRORLEVEL% REM Continue building using more configs until argv has been exhausted From 787b86d827da05ac94dd40ae39253342826ac8c5 Mon Sep 17 00:00:00 2001 From: Justin M Date: Mon, 27 Jul 2026 11:40:52 -0700 Subject: [PATCH 2/2] Parallelize remaining native test/R builds (multi-core) Extend the --parallel build flag to the sibling native CMake builds that were still compiling single-threaded: - Python extension test (windows .cmd, linux .sh) - R extension + R extension test (linux .sh) - dotnet-core-CSharp extension test native cmake step (windows .cmd) Completes the parallelization so the extension test builds match their main-extension counterparts. No behavioral change to outputs or targets. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- language-extensions/R/build/linux/build-RExtension.sh | 2 +- language-extensions/R/test/build/linux/build-RExtension-test.sh | 2 +- .../build/windows/build-dotnet-core-CSharp-extension-test.cmd | 2 +- .../python/test/build/linux/build-pythonextension-test.sh | 2 +- .../python/test/build/windows/build-pythonextension-test.cmd | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/language-extensions/R/build/linux/build-RExtension.sh b/language-extensions/R/build/linux/build-RExtension.sh index 9281394d..27d26a3d 100644 --- a/language-extensions/R/build/linux/build-RExtension.sh +++ b/language-extensions/R/build/linux/build-RExtension.sh @@ -42,7 +42,7 @@ function build { -DENL_ROOT=${ENL_ROOT} \ -DPLATFORM=linux \ ${REXTENSION_SRC_DIR} - cmake --build ${REXTENSION_WORKING_DIR} --target install + cmake --build ${REXTENSION_WORKING_DIR} --target install --parallel # Check the exit code of the compiler and exit appropriately so that build will fail. # diff --git a/language-extensions/R/test/build/linux/build-RExtension-test.sh b/language-extensions/R/test/build/linux/build-RExtension-test.sh index ec2c2a96..e8b1128d 100644 --- a/language-extensions/R/test/build/linux/build-RExtension-test.sh +++ b/language-extensions/R/test/build/linux/build-RExtension-test.sh @@ -32,7 +32,7 @@ function build { -DR_HOME=${R_HOME} \ -DR_INCLUDE_DIR=${R_INCLUDE} \ ${REXTENSIONTEST_SRC_DIR} - cmake --build ${REXTENSIONTEST_WORKING_DIR} --target install + cmake --build ${REXTENSIONTEST_WORKING_DIR} --target install --parallel # Check the exit code of the compiler and exit appropriately so that build will fail. # diff --git a/language-extensions/dotnet-core-CSharp/test/build/windows/build-dotnet-core-CSharp-extension-test.cmd b/language-extensions/dotnet-core-CSharp/test/build/windows/build-dotnet-core-CSharp-extension-test.cmd index 097f75fe..4ba7e2e8 100644 --- a/language-extensions/dotnet-core-CSharp/test/build/windows/build-dotnet-core-CSharp-extension-test.cmd +++ b/language-extensions/dotnet-core-CSharp/test/build/windows/build-dotnet-core-CSharp-extension-test.cmd @@ -81,7 +81,7 @@ DEL /S /Q %BUILD_OUTPUT%\Microsoft.SqlServer.CSharpExtension.dll REM Call cmake build REM -CALL "%CMAKE_ROOT%\bin\cmake.exe" --build . --config %CMAKE_CONFIGURATION% --target INSTALL +CALL "%CMAKE_ROOT%\bin\cmake.exe" --build . --config %CMAKE_CONFIGURATION% --target INSTALL --parallel CALL :CHECKERROR %ERRORLEVEL% "Error: Failed to build dotnet-core-CSharp-extension-test for CMAKE_CONFIGURATION=%CMAKE_CONFIGURATION%" || EXIT /b %ERRORLEVEL% REM Advance arg passed to build-dotnet-core-CSharp-extension-test.cmd diff --git a/language-extensions/python/test/build/linux/build-pythonextension-test.sh b/language-extensions/python/test/build/linux/build-pythonextension-test.sh index 01a97ca2..32dd9e01 100644 --- a/language-extensions/python/test/build/linux/build-pythonextension-test.sh +++ b/language-extensions/python/test/build/linux/build-pythonextension-test.sh @@ -30,7 +30,7 @@ function build { -DPYTHONHOME=${PYTHONHOME} \ -DBOOST_PYTHON_ROOT=${BOOST_PYTHON_ROOT} \ ${PYTHONEXTENSIONTEST_SRC_DIR} - cmake --build ${PYTHONEXTENSIONTEST_WORKING_DIR} --target install + cmake --build ${PYTHONEXTENSIONTEST_WORKING_DIR} --target install --parallel # Check the exit code of the compiler and exit appropriately so that build will fail. # diff --git a/language-extensions/python/test/build/windows/build-pythonextension-test.cmd b/language-extensions/python/test/build/windows/build-pythonextension-test.cmd index 134bd19b..f91d2358 100644 --- a/language-extensions/python/test/build/windows/build-pythonextension-test.cmd +++ b/language-extensions/python/test/build/windows/build-pythonextension-test.cmd @@ -111,7 +111,7 @@ ECHO "[INFO] Building pythonextension test project using CMAKE_CONFIGURATION=%CM REM Call cmake build REM -CALL "%CMAKE_ROOT%\bin\cmake.exe" --build . --config %CMAKE_CONFIGURATION% --target INSTALL +CALL "%CMAKE_ROOT%\bin\cmake.exe" --build . --config %CMAKE_CONFIGURATION% --target INSTALL --parallel CALL :CHECKERROR %ERRORLEVEL% "Error: Failed to build Python extension test for CMAKE_CONFIGURATION=%CMAKE_CONFIGURATION%" || EXIT /b %ERRORLEVEL%