From 50349dc685b30193fc7418730a580b65f0dba57d Mon Sep 17 00:00:00 2001 From: ashutosh0x Date: Wed, 11 Feb 2026 22:31:29 +0530 Subject: [PATCH] Fix MinGW stack flag syntax and Python binding crashes - Detect linker type (lld-link vs ld) and use the appropriate stack flag: /STACK:16777216 for lld-link, --stack,16777216 for MinGW ld - Filter out stack-related flags from Python binding modules to prevent crashes when loading MuJoCo as a DLL in Python Fixes #3011 --- cmake/MujocoLinkOptions.cmake | 14 +++++--------- python/mujoco/CMakeLists.txt | 2 ++ sample/cmake/MujocoLinkOptions.cmake | 14 +++++--------- simulate/cmake/MujocoLinkOptions.cmake | 14 +++++--------- 4 files changed, 17 insertions(+), 27 deletions(-) diff --git a/cmake/MujocoLinkOptions.cmake b/cmake/MujocoLinkOptions.cmake index a844ce45..48db60d2 100644 --- a/cmake/MujocoLinkOptions.cmake +++ b/cmake/MujocoLinkOptions.cmake @@ -23,16 +23,12 @@ function(get_mujoco_extra_link_options OUTPUT_VAR) set(EXTRA_LINK_OPTIONS) if(WIN32) - set(EXTRA_LINK_OPTIONS ${EXTRA_LINK_OPTIONS} -Wl,/STACK:16777216) set(CMAKE_REQUIRED_FLAGS "-fuse-ld=lld-link") - check_c_source_compiles("int main() {}" SUPPORTS_LLD) - if(SUPPORTS_LLD) - set(EXTRA_LINK_OPTIONS - ${EXTRA_LINK_OPTIONS} - -fuse-ld=lld-link - -Wl,/OPT:REF - -Wl,/OPT:ICF - ) + check_c_source_compiles("int main() {}" SUPPORTS_LLD_LINK) + if(SUPPORTS_LLD_LINK) + set(EXTRA_LINK_OPTIONS ${EXTRA_LINK_OPTIONS} -fuse-ld=lld-link -Wl,/STACK:16777216 -Wl,/OPT:REF -Wl,/OPT:ICF) + else() + set(EXTRA_LINK_OPTIONS ${EXTRA_LINK_OPTIONS} -Wl,--stack,16777216) endif() else() set(CMAKE_REQUIRED_FLAGS "-fuse-ld=lld") diff --git a/python/mujoco/CMakeLists.txt b/python/mujoco/CMakeLists.txt index 7d4fa078..c8d17d85 100644 --- a/python/mujoco/CMakeLists.txt +++ b/python/mujoco/CMakeLists.txt @@ -51,6 +51,8 @@ endif() include(MujocoLinkOptions) get_mujoco_extra_link_options(EXTRA_LINK_OPTIONS) +list(FILTER EXTRA_LINK_OPTIONS EXCLUDE REGEX "STACK") +list(FILTER EXTRA_LINK_OPTIONS EXCLUDE REGEX "stack") add_link_options(${EXTRA_LINK_OPTIONS}) include(MujocoMacOS) diff --git a/sample/cmake/MujocoLinkOptions.cmake b/sample/cmake/MujocoLinkOptions.cmake index a844ce45..48db60d2 100644 --- a/sample/cmake/MujocoLinkOptions.cmake +++ b/sample/cmake/MujocoLinkOptions.cmake @@ -23,16 +23,12 @@ function(get_mujoco_extra_link_options OUTPUT_VAR) set(EXTRA_LINK_OPTIONS) if(WIN32) - set(EXTRA_LINK_OPTIONS ${EXTRA_LINK_OPTIONS} -Wl,/STACK:16777216) set(CMAKE_REQUIRED_FLAGS "-fuse-ld=lld-link") - check_c_source_compiles("int main() {}" SUPPORTS_LLD) - if(SUPPORTS_LLD) - set(EXTRA_LINK_OPTIONS - ${EXTRA_LINK_OPTIONS} - -fuse-ld=lld-link - -Wl,/OPT:REF - -Wl,/OPT:ICF - ) + check_c_source_compiles("int main() {}" SUPPORTS_LLD_LINK) + if(SUPPORTS_LLD_LINK) + set(EXTRA_LINK_OPTIONS ${EXTRA_LINK_OPTIONS} -fuse-ld=lld-link -Wl,/STACK:16777216 -Wl,/OPT:REF -Wl,/OPT:ICF) + else() + set(EXTRA_LINK_OPTIONS ${EXTRA_LINK_OPTIONS} -Wl,--stack,16777216) endif() else() set(CMAKE_REQUIRED_FLAGS "-fuse-ld=lld") diff --git a/simulate/cmake/MujocoLinkOptions.cmake b/simulate/cmake/MujocoLinkOptions.cmake index a844ce45..48db60d2 100644 --- a/simulate/cmake/MujocoLinkOptions.cmake +++ b/simulate/cmake/MujocoLinkOptions.cmake @@ -23,16 +23,12 @@ function(get_mujoco_extra_link_options OUTPUT_VAR) set(EXTRA_LINK_OPTIONS) if(WIN32) - set(EXTRA_LINK_OPTIONS ${EXTRA_LINK_OPTIONS} -Wl,/STACK:16777216) set(CMAKE_REQUIRED_FLAGS "-fuse-ld=lld-link") - check_c_source_compiles("int main() {}" SUPPORTS_LLD) - if(SUPPORTS_LLD) - set(EXTRA_LINK_OPTIONS - ${EXTRA_LINK_OPTIONS} - -fuse-ld=lld-link - -Wl,/OPT:REF - -Wl,/OPT:ICF - ) + check_c_source_compiles("int main() {}" SUPPORTS_LLD_LINK) + if(SUPPORTS_LLD_LINK) + set(EXTRA_LINK_OPTIONS ${EXTRA_LINK_OPTIONS} -fuse-ld=lld-link -Wl,/STACK:16777216 -Wl,/OPT:REF -Wl,/OPT:ICF) + else() + set(EXTRA_LINK_OPTIONS ${EXTRA_LINK_OPTIONS} -Wl,--stack,16777216) endif() else() set(CMAKE_REQUIRED_FLAGS "-fuse-ld=lld")