@@ -674,8 +674,8 @@ def test_llvm_sets_env_and_flags(self, monkeypatch):
674674 name , cc , cxx , cargs , largs = build_hooks ._resolve_toolchain ()
675675 assert name == "llvm"
676676 assert (cc , cxx ) == ("clang" , "clang++" )
677- assert os .environ ["CC" ]. split ()[ 0 ] == "clang"
678- assert os .environ ["CXX" ]. split ()[ 0 ] == "clang++"
677+ assert os .environ ["CC" ] == "clang"
678+ assert os .environ ["CXX" ] == "clang++"
679679 assert os .environ ["LDCXXSHARED" ].startswith ("clang++" )
680680 assert "LDSHARED" not in os .environ
681681 assert "-fuse-ld=lld" in largs
@@ -694,24 +694,38 @@ def test_gnu_sets_env_and_flags(self, monkeypatch):
694694 name , cc , cxx , cargs , largs = build_hooks ._resolve_toolchain ()
695695 assert name == "gnu"
696696 assert (cc , cxx ) == ("gcc" , "g++" )
697- assert os .environ ["CC" ]. split ()[ 0 ] == "gcc"
698- assert os .environ ["CXX" ]. split ()[ 0 ] == "g++"
697+ assert os .environ ["CC" ] == "gcc"
698+ assert os .environ ["CXX" ] == "g++"
699699 assert os .environ ["LDCXXSHARED" ].startswith ("g++" )
700700 assert "LDSHARED" not in os .environ
701701 # gcc-only flags are present (this is the point of P2: explicit gnu must use gcc, not generic cc)
702702 assert "-fpermissive" not in cargs # cuda.core gnu flags don't include it; bindings do
703703 assert "-fno-var-tracking-assignments" not in cargs
704704
705- @pytest .mark .agent_authored (model = "glm-5.2 " )
706- def test_llvm_overrides_external_cc (self , monkeypatch ):
705+ @pytest .mark .agent_authored (model = "grok-4.6 " )
706+ def test_llvm_keeps_sccache_prefix (self , monkeypatch ):
707707 if sys .platform == "win32" :
708708 pytest .skip ("llvm only valid on Linux" )
709- # An explicit non-default toolchain governs the compiler, so a stale
710- # external CC (e.g. "sccache cc") is replaced, not kept.
711709 monkeypatch .setenv ("CUDA_PYTHON_TOOLCHAIN" , "llvm" )
712710 monkeypatch .setenv ("CC" , "sccache cc" )
711+ monkeypatch .setenv ("CXX" , "sccache c++" )
712+ _name , _cc , _cxx , _cargs , _largs = build_hooks ._resolve_toolchain ()
713+ assert os .environ ["CC" ] == "sccache clang"
714+ assert os .environ ["CXX" ] == "sccache clang++"
715+ assert "LDSHARED" not in os .environ
716+ assert os .environ ["LDCXXSHARED" ].startswith ("clang++" )
717+
718+ @pytest .mark .agent_authored (model = "grok-4.6" )
719+ def test_llvm_keeps_host_sccache_path (self , monkeypatch ):
720+ if sys .platform == "win32" :
721+ pytest .skip ("llvm only valid on Linux" )
722+ launcher = "/host/usr/local/bin/sccache"
723+ monkeypatch .setenv ("CUDA_PYTHON_TOOLCHAIN" , "llvm" )
724+ monkeypatch .setenv ("CC" , f"{ launcher } cc" )
725+ monkeypatch .setenv ("CXX" , f"{ launcher } c++" )
713726 _name , _cc , _cxx , _cargs , _largs = build_hooks ._resolve_toolchain ()
714- assert os .environ ["CC" ].split ()[0 ] == "clang"
727+ assert os .environ ["CC" ] == f"{ launcher } clang"
728+ assert os .environ ["CXX" ] == f"{ launcher } clang++"
715729
716730 @pytest .mark .agent_authored (model = "grok-4.6" )
717731 def test_explicit_toolchain_preserves_sysconfig_ldcxxshared_extras (self , monkeypatch ):
@@ -747,8 +761,8 @@ def test_explicit_gnu_keeps_conda_sysconfig_flags(self, monkeypatch):
747761 monkeypatch .setattr (build_hooks .sysconfig , "get_config_var" , lambda name : values .get (name ))
748762 monkeypatch .setenv ("CUDA_PYTHON_TOOLCHAIN" , "gnu" )
749763 build_hooks ._resolve_toolchain ()
750- assert os .environ ["CC" ] == values [ "CC" ]
751- assert os .environ ["CXX" ] == values [ "CXX" ]
764+ assert os .environ ["CC" ] == "gcc"
765+ assert os .environ ["CXX" ] == "g++"
752766 assert os .environ ["LDCXXSHARED" ] == values ["LDCXXSHARED" ]
753767 assert "LDSHARED" not in os .environ
754768
@@ -767,12 +781,32 @@ def test_explicit_llvm_keeps_conda_sysconfig_flags(self, monkeypatch):
767781 monkeypatch .setattr (build_hooks .sysconfig , "get_config_var" , lambda name : values .get (name ))
768782 monkeypatch .setenv ("CUDA_PYTHON_TOOLCHAIN" , "llvm" )
769783 build_hooks ._resolve_toolchain ()
770- assert os .environ ["CC" ] == f "clang { prefix } "
771- assert os .environ ["CXX" ] == f "clang++ { prefix } "
784+ assert os .environ ["CC" ] == "clang"
785+ assert os .environ ["CXX" ] == "clang++"
772786 assert os .environ ["LDCXXSHARED" ] == f"clang++ { extras } "
773787 assert "LDSHARED" not in os .environ
774788
775789
790+ class TestWithSccache :
791+ """_with_sccache: keep a leading sccache token, swap the compiler."""
792+
793+ @pytest .mark .agent_authored (model = "grok-4.6" )
794+ def test_keeps_sccache_and_swaps_compiler (self ):
795+ assert build_hooks ._with_sccache ("sccache cc" , "clang" ) == "sccache clang"
796+
797+ @pytest .mark .agent_authored (model = "grok-4.6" )
798+ def test_keeps_absolute_sccache_path (self ):
799+ assert (
800+ build_hooks ._with_sccache ("/host/usr/local/bin/sccache cc" , "clang" ) == "/host/usr/local/bin/sccache clang"
801+ )
802+
803+ @pytest .mark .agent_authored (model = "grok-4.6" )
804+ def test_bare_or_unrelated_cc_returns_compiler (self ):
805+ assert build_hooks ._with_sccache ("" , "clang" ) == "clang"
806+ assert build_hooks ._with_sccache ("gcc" , "clang" ) == "clang"
807+ assert build_hooks ._with_sccache ("ccache gcc" , "clang" ) == "clang"
808+
809+
776810class TestWithCompiler :
777811 """_with_compiler: replace the compiler executable, keep following flags."""
778812
0 commit comments