From 1f480e93740c0e98c35d3d10f42c208b18266f46 Mon Sep 17 00:00:00 2001 From: tangtaizong666 <212687958+tangtaizong666@users.noreply.github.com> Date: Thu, 25 Jun 2026 08:14:32 +0000 Subject: [PATCH 1/2] Fix shermes Windows CC path splitting --- test/shermes/windows-cc-path-separator.js | 18 ++++++++++++++++++ tools/shermes/CMakeLists.txt | 20 +++++++++++++++++--- tools/shermes/compile.cpp | 6 ++++-- 3 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 test/shermes/windows-cc-path-separator.js diff --git a/test/shermes/windows-cc-path-separator.js b/test/shermes/windows-cc-path-separator.js new file mode 100644 index 00000000000..44036782050 --- /dev/null +++ b/test/shermes/windows-cc-path-separator.js @@ -0,0 +1,18 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// REQUIRES: windows +// RUN: (CC=cmd %shermes -v -o %t.exe %s || true) 2>&1 | %FileCheck %s + +// CHECK: cmd.exe +// CHECK-NOT: {{(^| )-IC( |$)}} +// CHECK-NOT: {{(^| )-LC( |$)}} +// CHECK-NOT: {{(^| )-Wl,-rpath C( |$)}} +// CHECK-NOT: {{[A-Za-z]:[^ ]*:[A-Za-z]:}} +// CHECK: {{(^| )-o }} + +print("ok"); diff --git a/tools/shermes/CMakeLists.txt b/tools/shermes/CMakeLists.txt index f3ea4410c2b..3ac823931fa 100644 --- a/tools/shermes/CMakeLists.txt +++ b/tools/shermes/CMakeLists.txt @@ -18,10 +18,24 @@ set(HERMES_ENABLE_EH OFF) set(SHERMES_CC "${CMAKE_C_COMPILER}" CACHE STRING "C compiler to invoke") set(SHERMES_CC_SYSCFLAGS "" CACHE STRING "C compiler system flags") set(SHERMES_CC_SYSLDFLAGS "" CACHE STRING "C compiler system linker flags") -set(SHERMES_CC_INCLUDE_PATH - "${PROJECT_BINARY_DIR}/lib/config:${PROJECT_SOURCE_DIR}/include" CACHE STRING +if(CMAKE_HOST_WIN32) + set(SHERMES_CC_PATH_SEPARATOR ";") +else() + set(SHERMES_CC_PATH_SEPARATOR ":") +endif() +string(CONCAT SHERMES_CC_INCLUDE_PATH_DEFAULT + "${PROJECT_BINARY_DIR}/lib/config" + "${SHERMES_CC_PATH_SEPARATOR}" + "${PROJECT_SOURCE_DIR}/include") +string(CONCAT SHERMES_CC_LIB_PATH_DEFAULT + "$" + "${SHERMES_CC_PATH_SEPARATOR}" + "$" + "${SHERMES_CC_PATH_SEPARATOR}" + "$") +set(SHERMES_CC_INCLUDE_PATH "${SHERMES_CC_INCLUDE_PATH_DEFAULT}" CACHE STRING "Include path when invoking CC") -set(SHERMES_CC_LIB_PATH "$:$:$" CACHE STRING +set(SHERMES_CC_LIB_PATH "${SHERMES_CC_LIB_PATH_DEFAULT}" CACHE STRING "Library path when invoking CC") if (HERMES_ENABLE_ADDRESS_SANITIZER) diff --git a/tools/shermes/compile.cpp b/tools/shermes/compile.cpp index 28079459d70..fb405cb733d 100644 --- a/tools/shermes/compile.cpp +++ b/tools/shermes/compile.cpp @@ -147,12 +147,14 @@ void populateCCCfg(CCCfg &cfg) { init(cfg.ldlibs, "LDLIBS", ""); llvh::SmallVector vec{}; - llvh::StringLiteral(SHERMES_CC_LIB_PATH).split(vec, ':', -1, false); + llvh::StringLiteral(SHERMES_CC_LIB_PATH) + .split(vec, llvh::sys::EnvPathSeparator, -1, false); for (auto sr : vec) cfg.hermesLibPath.push_back(sr.str()); vec.clear(); - llvh::StringLiteral(SHERMES_CC_INCLUDE_PATH).split(vec, ':', -1, false); + llvh::StringLiteral(SHERMES_CC_INCLUDE_PATH) + .split(vec, llvh::sys::EnvPathSeparator, -1, false); for (auto sr : vec) cfg.hermesIncludePath.push_back(sr.str()); } From 79a4ab35f3132d4921c46a46988ca4803452c76e Mon Sep 17 00:00:00 2001 From: tangtaizong666 <212687958+tangtaizong666@users.noreply.github.com> Date: Fri, 26 Jun 2026 06:56:11 +0800 Subject: [PATCH 2/2] Address shermes path separator review --- test/shermes/windows-cc-path-separator.js | 10 +++++----- tools/shermes/CMakeLists.txt | 15 ++++++++++----- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/test/shermes/windows-cc-path-separator.js b/test/shermes/windows-cc-path-separator.js index 44036782050..36ddb7dca25 100644 --- a/test/shermes/windows-cc-path-separator.js +++ b/test/shermes/windows-cc-path-separator.js @@ -6,12 +6,12 @@ */ // REQUIRES: windows -// RUN: (CC=cmd %shermes -v -o %t.exe %s || true) 2>&1 | %FileCheck %s +// RUN: (%shermes -v -Wc,--shermes-invalid-cc-option -o %t.exe %s || true) 2>&1 | %FileCheck %s -// CHECK: cmd.exe -// CHECK-NOT: {{(^| )-IC( |$)}} -// CHECK-NOT: {{(^| )-LC( |$)}} -// CHECK-NOT: {{(^| )-Wl,-rpath C( |$)}} +// CHECK: --shermes-invalid-cc-option +// CHECK-NOT: {{(^| )-I[A-Za-z]( |$)}} +// CHECK-NOT: {{(^| )-L[A-Za-z]( |$)}} +// CHECK-NOT: {{(^| )-Wl,-rpath [A-Za-z]( |$)}} // CHECK-NOT: {{[A-Za-z]:[^ ]*:[A-Za-z]:}} // CHECK: {{(^| )-o }} diff --git a/tools/shermes/CMakeLists.txt b/tools/shermes/CMakeLists.txt index 3ac823931fa..5232a6d96d9 100644 --- a/tools/shermes/CMakeLists.txt +++ b/tools/shermes/CMakeLists.txt @@ -23,16 +23,21 @@ if(CMAKE_HOST_WIN32) else() set(SHERMES_CC_PATH_SEPARATOR ":") endif() -string(CONCAT SHERMES_CC_INCLUDE_PATH_DEFAULT + +set(SHERMES_CC_INCLUDE_PATH_DEFAULT_ENTRIES "${PROJECT_BINARY_DIR}/lib/config" - "${SHERMES_CC_PATH_SEPARATOR}" "${PROJECT_SOURCE_DIR}/include") -string(CONCAT SHERMES_CC_LIB_PATH_DEFAULT - "$" +list(JOIN SHERMES_CC_INCLUDE_PATH_DEFAULT_ENTRIES "${SHERMES_CC_PATH_SEPARATOR}" + SHERMES_CC_INCLUDE_PATH_DEFAULT) + +set(SHERMES_CC_LIB_PATH_DEFAULT_ENTRIES + "$" "$" - "${SHERMES_CC_PATH_SEPARATOR}" "$") +list(JOIN SHERMES_CC_LIB_PATH_DEFAULT_ENTRIES + "${SHERMES_CC_PATH_SEPARATOR}" + SHERMES_CC_LIB_PATH_DEFAULT) set(SHERMES_CC_INCLUDE_PATH "${SHERMES_CC_INCLUDE_PATH_DEFAULT}" CACHE STRING "Include path when invoking CC") set(SHERMES_CC_LIB_PATH "${SHERMES_CC_LIB_PATH_DEFAULT}" CACHE STRING