diff --git a/test/shermes/windows-cc-path-separator.js b/test/shermes/windows-cc-path-separator.js new file mode 100644 index 00000000000..36ddb7dca25 --- /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: (%shermes -v -Wc,--shermes-invalid-cc-option -o %t.exe %s || true) 2>&1 | %FileCheck %s + +// 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 }} + +print("ok"); diff --git a/tools/shermes/CMakeLists.txt b/tools/shermes/CMakeLists.txt index f3ea4410c2b..5232a6d96d9 100644 --- a/tools/shermes/CMakeLists.txt +++ b/tools/shermes/CMakeLists.txt @@ -18,10 +18,29 @@ 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() + +set(SHERMES_CC_INCLUDE_PATH_DEFAULT_ENTRIES + "${PROJECT_BINARY_DIR}/lib/config" + "${PROJECT_SOURCE_DIR}/include") +list(JOIN SHERMES_CC_INCLUDE_PATH_DEFAULT_ENTRIES + "${SHERMES_CC_PATH_SEPARATOR}" + SHERMES_CC_INCLUDE_PATH_DEFAULT) + +set(SHERMES_CC_LIB_PATH_DEFAULT_ENTRIES + "$" + "$" + "$") +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 "$:$:$" 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()); }