From 0104ef2b20357bea4eb58eb1675a6c53799ac234 Mon Sep 17 00:00:00 2001 From: aryan5v Date: Tue, 7 Jul 2026 00:40:35 -0700 Subject: [PATCH 1/3] fix(python): statically link and hide bundled HiGHS to avoid symbol clash with highspy (#5246) --- cmake/cpp.cmake | 3 +++ cmake/dependencies/CMakeLists.txt | 8 ++++++++ cmake/dotnet.cmake | 5 +++-- cmake/java.cmake | 7 ++++--- cmake/python.cmake | 7 ++++--- 5 files changed, 22 insertions(+), 8 deletions(-) diff --git a/cmake/cpp.cmake b/cmake/cpp.cmake index a4f3980d39..e4e5519a05 100644 --- a/cmake/cpp.cmake +++ b/cmake/cpp.cmake @@ -720,6 +720,9 @@ target_link_libraries(${PROJECT_NAME} PUBLIC ${PDLP_DEPS} ${SCIP_DEPS} Threads::Threads) +if(UNIX AND NOT APPLE AND USE_HIGHS AND BUILD_HIGHS) + target_link_options(${PROJECT_NAME} PRIVATE "LINKER:--exclude-libs,libhighs.a") +endif() if(WIN32) target_link_libraries(${PROJECT_NAME} PUBLIC psapi.lib ws2_32.lib) endif() diff --git a/cmake/dependencies/CMakeLists.txt b/cmake/dependencies/CMakeLists.txt index 7fabed5221..828ae4a686 100644 --- a/cmake/dependencies/CMakeLists.txt +++ b/cmake/dependencies/CMakeLists.txt @@ -321,7 +321,15 @@ if(BUILD_HIGHS) ) set(CI OFF) # disable CI tests set(BUILD_EXAMPLES OFF) + if(UNIX AND NOT APPLE) + set(_saved_build_shared_libs ${BUILD_SHARED_LIBS}) + set(BUILD_SHARED_LIBS OFF) + endif() FetchContent_MakeAvailable(highs) + if(UNIX AND NOT APPLE) + set(BUILD_SHARED_LIBS ${_saved_build_shared_libs}) + unset(_saved_build_shared_libs) + endif() list(POP_BACK CMAKE_MESSAGE_INDENT) message(CHECK_PASS "fetched") endif() diff --git a/cmake/dotnet.cmake b/cmake/dotnet.cmake index 983f5e0948..6618924817 100644 --- a/cmake/dotnet.cmake +++ b/cmake/dotnet.cmake @@ -405,8 +405,9 @@ set(need_clp_lib "$>") set(need_cgl_lib "$>") set(need_cbc_lib "$>") -set(need_unix_highs_lib "$>") -set(need_windows_highs_lib "$>") +set(is_highs_shared "$,SHARED_LIBRARY>") +set(need_unix_highs_lib "$,${is_highs_shared}>") +set(need_windows_highs_lib "$,${is_highs_shared}>") set(need_unix_scip_lib "$>") set(need_windows_scip_lib "$>") diff --git a/cmake/java.cmake b/cmake/java.cmake index 74e30acabb..932fa48300 100644 --- a/cmake/java.cmake +++ b/cmake/java.cmake @@ -325,8 +325,9 @@ set(need_unix_clp_lib "$>") set(need_unix_cgl_lib "$>") set(need_unix_cbc_lib "$>") -set(need_unix_highs_lib "$>") -set(need_windows_highs_lib "$>") +set(is_highs_shared "$,SHARED_LIBRARY>") +set(need_unix_highs_lib "$,${is_highs_shared}>") +set(need_windows_highs_lib "$,${is_highs_shared}>") set(need_unix_scip_lib "$>") set(need_windows_scip_lib "$>") @@ -478,7 +479,7 @@ add_custom_command( COMMAND ${CMAKE_COMMAND} -E $,copy,true> - $<${need_unix_highs_lib}:$> + $<${need_unix_highs_lib}:$<${is_highs_shared}:$>> $<${need_windows_highs_lib}:$> ${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/ diff --git a/cmake/python.cmake b/cmake/python.cmake index c7065ce237..2035c6c2d5 100644 --- a/cmake/python.cmake +++ b/cmake/python.cmake @@ -483,8 +483,9 @@ set(need_unix_clp_lib "$>") set(need_unix_cgl_lib "$>") set(need_unix_cbc_lib "$>") -set(need_unix_highs_lib "$>") -set(need_windows_highs_lib "$>") +set(is_highs_shared "$,SHARED_LIBRARY>") +set(need_unix_highs_lib "$,${is_highs_shared}>") +set(need_windows_highs_lib "$,${is_highs_shared}>") set(need_unix_scip_lib "$>") set(need_windows_scip_lib "$>") @@ -639,7 +640,7 @@ add_custom_command( COMMAND ${CMAKE_COMMAND} -E $,copy,true> - $<${need_unix_highs_lib}:$> + $<${need_unix_highs_lib}:$<${is_highs_shared}:$>> $<${need_windows_highs_lib}:$> ${PYTHON_PROJECT}/.libs From d6a942804359059f545cd0f2c3f95c0255857cc8 Mon Sep 17 00:00:00 2001 From: aryan5v Date: Wed, 8 Jul 2026 00:51:45 -0700 Subject: [PATCH 2/3] fix(cmake): skip HiGHS copy step when bundled HiGHS is static (#5246) When HiGHS is statically linked on Linux, need_unix_highs_lib is false but the copy command still used BUILD_HIGHS for its IF guard, producing an empty `cmake -E copy` that fails python_package. Gate copy on the need_*_highs_lib conditions instead. --- cmake/java.cmake | 2 +- cmake/python.cmake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/java.cmake b/cmake/java.cmake index 932fa48300..895bed05e6 100644 --- a/cmake/java.cmake +++ b/cmake/java.cmake @@ -478,7 +478,7 @@ add_custom_command( ${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/ COMMAND ${CMAKE_COMMAND} -E - $,copy,true> + $,copy,true> $<${need_unix_highs_lib}:$<${is_highs_shared}:$>> $<${need_windows_highs_lib}:$> ${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/ diff --git a/cmake/python.cmake b/cmake/python.cmake index 2035c6c2d5..5cb6cff68d 100644 --- a/cmake/python.cmake +++ b/cmake/python.cmake @@ -639,7 +639,7 @@ add_custom_command( ${PYTHON_PROJECT}/.libs COMMAND ${CMAKE_COMMAND} -E - $,copy,true> + $,copy,true> $<${need_unix_highs_lib}:$<${is_highs_shared}:$>> $<${need_windows_highs_lib}:$> ${PYTHON_PROJECT}/.libs From 33efa6628bf79e04409174f11d28bc677738a2de Mon Sep 17 00:00:00 2001 From: aryan5v Date: Wed, 8 Jul 2026 09:15:50 -0700 Subject: [PATCH 3/3] fix(cmake): drop redundant is_highs_shared guard on HiGHS copy need_unix_highs_lib already requires a shared HiGHS target, so the extra is_highs_shared wrapper around TARGET_SONAME_FILE is unnecessary. --- cmake/java.cmake | 2 +- cmake/python.cmake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/java.cmake b/cmake/java.cmake index 895bed05e6..81c8a56c73 100644 --- a/cmake/java.cmake +++ b/cmake/java.cmake @@ -479,7 +479,7 @@ add_custom_command( COMMAND ${CMAKE_COMMAND} -E $,copy,true> - $<${need_unix_highs_lib}:$<${is_highs_shared}:$>> + $<${need_unix_highs_lib}:$> $<${need_windows_highs_lib}:$> ${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/ diff --git a/cmake/python.cmake b/cmake/python.cmake index 5cb6cff68d..a2c8cda932 100644 --- a/cmake/python.cmake +++ b/cmake/python.cmake @@ -640,7 +640,7 @@ add_custom_command( COMMAND ${CMAKE_COMMAND} -E $,copy,true> - $<${need_unix_highs_lib}:$<${is_highs_shared}:$>> + $<${need_unix_highs_lib}:$> $<${need_windows_highs_lib}:$> ${PYTHON_PROJECT}/.libs