From c1f52088f1d63cedb3135af80f01a1aae991f22b Mon Sep 17 00:00:00 2001 From: Belonit <54427022+Belonit@users.noreply.github.com> Date: Thu, 8 Oct 2026 06:24:37 +0300 Subject: [PATCH 1/3] Fix test build settings for MSVC and clang-cl --- tests/CMakeLists.txt | 7 +++++-- tests/nettiming/CMakeLists.txt | 4 ---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index f56e5406d..4c9a27bb3 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -34,11 +34,14 @@ function(opents_add_test target) target_compile_definitions(${target} PRIVATE ${TEST_DEFINITIONS}) endif() + if(MSVC) + set_property(TARGET ${target} PROPERTY MSVC_RUNTIME_LIBRARY + "MultiThreaded$<$:Debug>") + endif() + # The option spellings and the Win32 import libraries below are MSVC's, so a harness built # by another compiler takes its defaults instead. target_compile_options(${target} PRIVATE - $<$:$<$:/MTd>> - $<$:$<$:/MT>> $<$:/EHsc> $<$:/Zc:__cplusplus> ) diff --git a/tests/nettiming/CMakeLists.txt b/tests/nettiming/CMakeLists.txt index 2ddd0797c..afe6b9ba1 100644 --- a/tests/nettiming/CMakeLists.txt +++ b/tests/nettiming/CMakeLists.txt @@ -23,7 +23,3 @@ opents_add_test(NetConnection DEFINITIONS WIN32 _WINDOWS _MBCS NOMINMAX LIBRARIES winmm ) - -set_source_files_properties("${CMAKE_SOURCE_DIR}/code/combuf.cpp" PROPERTIES - COMPILE_OPTIONS "/source-charset:437;/execution-charset:437" -) From 30d5df3c7880f8fd0ece671e0f4810a0ba9aeb9b Mon Sep 17 00:00:00 2001 From: Belonit <54427022+Belonit@users.noreply.github.com> Date: Thu, 8 Oct 2026 08:05:11 +0300 Subject: [PATCH 2/3] Add TARGET_ARCH support to clang-cl toolchain --- cmake/toolchains/clang-cl-msvc.cmake | 30 ++++++++++++++++++---------- docs/BUILDING.md | 3 +++ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/cmake/toolchains/clang-cl-msvc.cmake b/cmake/toolchains/clang-cl-msvc.cmake index e126fabfc..7ddf14ce5 100644 --- a/cmake/toolchains/clang-cl-msvc.cmake +++ b/cmake/toolchains/clang-cl-msvc.cmake @@ -1,10 +1,15 @@ set(CMAKE_SYSTEM_NAME Windows) -set(CMAKE_SYSTEM_PROCESSOR x86) +set(OPENTS_TARGET_ARCH "x86" CACHE STRING "Target architecture: x86 or x64") +set_property(CACHE OPENTS_TARGET_ARCH PROPERTY STRINGS x86 x64) +if(NOT OPENTS_TARGET_ARCH MATCHES "^(x86|x64)$") + message(FATAL_ERROR "OPENTS_TARGET_ARCH must be x86 or x64.") +endif() +set(CMAKE_SYSTEM_PROCESSOR "${OPENTS_TARGET_ARCH}") set(OPENTS_EXPERIMENTAL_CLANG_CL ON CACHE BOOL "" FORCE) set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE BOOL "" FORCE) set(OPENTS_MSVC_ROOT "" CACHE PATH "Path to the MSVC and Windows SDK files") -list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES OPENTS_MSVC_ROOT) +list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES OPENTS_MSVC_ROOT OPENTS_TARGET_ARCH) if(NOT OPENTS_MSVC_ROOT AND DEFINED ENV{OPENTS_MSVC_ROOT}) set(OPENTS_MSVC_ROOT "$ENV{OPENTS_MSVC_ROOT}" CACHE PATH "" FORCE) @@ -45,8 +50,8 @@ foreach(_candidate IN LISTS _opents_sdk_candidates) AND IS_DIRECTORY "${_opents_sdk_dir}/Include/${_candidate}/ucrt" AND IS_DIRECTORY "${_opents_sdk_dir}/Include/${_candidate}/um" AND IS_DIRECTORY "${_opents_sdk_dir}/Include/${_candidate}/winrt" - AND IS_DIRECTORY "${_opents_sdk_dir}/Lib/${_candidate}/ucrt/x86" - AND IS_DIRECTORY "${_opents_sdk_dir}/Lib/${_candidate}/um/x86") + AND IS_DIRECTORY "${_opents_sdk_dir}/Lib/${_candidate}/ucrt/${OPENTS_TARGET_ARCH}" + AND IS_DIRECTORY "${_opents_sdk_dir}/Lib/${_candidate}/um/${OPENTS_TARGET_ARCH}") set(_opents_sdk_version "${_candidate}") break() endif() @@ -72,8 +77,13 @@ find_program(_opents_llvm_rc llvm-rc REQUIRED) set(CMAKE_C_COMPILER "${_opents_clang_cl}") set(CMAKE_CXX_COMPILER "${_opents_clang_cl}") -set(CMAKE_C_COMPILER_TARGET i686-pc-windows-msvc) -set(CMAKE_CXX_COMPILER_TARGET i686-pc-windows-msvc) +if(OPENTS_TARGET_ARCH STREQUAL "x64") + set(_opents_compiler_target x86_64-pc-windows-msvc) +else() + set(_opents_compiler_target i686-pc-windows-msvc) +endif() +set(CMAKE_C_COMPILER_TARGET "${_opents_compiler_target}") +set(CMAKE_CXX_COMPILER_TARGET "${_opents_compiler_target}") set(CMAKE_C_FLAGS_INIT "/clang:-fms-compatibility-version=${_opents_msvc_compatibility_version}") set(CMAKE_CXX_FLAGS_INIT @@ -102,10 +112,10 @@ endforeach() set(CMAKE_RC_FLAGS_INIT "${_opents_rc_flags}") set(_opents_linker_paths - "/libpath:\"${_opents_msvc_dir}/atlmfc/lib/x86\"" - "/libpath:\"${_opents_msvc_dir}/lib/x86\"" - "/libpath:\"${_opents_sdk_dir}/Lib/${_opents_sdk_version}/ucrt/x86\"" - "/libpath:\"${_opents_sdk_dir}/Lib/${_opents_sdk_version}/um/x86\"") + "/libpath:\"${_opents_msvc_dir}/atlmfc/lib/${OPENTS_TARGET_ARCH}\"" + "/libpath:\"${_opents_msvc_dir}/lib/${OPENTS_TARGET_ARCH}\"" + "/libpath:\"${_opents_sdk_dir}/Lib/${_opents_sdk_version}/ucrt/${OPENTS_TARGET_ARCH}\"" + "/libpath:\"${_opents_sdk_dir}/Lib/${_opents_sdk_version}/um/${OPENTS_TARGET_ARCH}\"") string(JOIN " " _opents_linker_flags ${_opents_linker_paths}) set(CMAKE_EXE_LINKER_FLAGS_INIT "${_opents_linker_flags}") set(CMAKE_SHARED_LINKER_FLAGS_INIT "${_opents_linker_flags}") diff --git a/docs/BUILDING.md b/docs/BUILDING.md index 7fc696179..399b056cd 100644 --- a/docs/BUILDING.md +++ b/docs/BUILDING.md @@ -160,6 +160,9 @@ cmake -S . -B build/clang-cl -G Ninja \ cmake --build build/clang-cl ``` +`OPENTS_TARGET_ARCH` defaults to `x86`. For x64, add +`-DOPENTS_TARGET_ARCH=x64` and use a separate build directory. + The toolchain requires `clang-cl`, `lld-link`, `llvm-lib`, `llvm-mt`, and `llvm-rc` on `PATH`. It exports `compile_commands.json`; one configuration in `.vscode/c_cpp_properties.clang.example.json` reads that file for IntelliSense. From 6faf6d7c8f4a18e32f453ca68580fd101d9da391 Mon Sep 17 00:00:00 2001 From: Belonit <54427022+Belonit@users.noreply.github.com> Date: Thu, 8 Oct 2026 08:46:25 +0300 Subject: [PATCH 3/3] Fix x64 processor detection in the clang-cl toolchain --- cmake/toolchains/clang-cl-msvc.cmake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmake/toolchains/clang-cl-msvc.cmake b/cmake/toolchains/clang-cl-msvc.cmake index 7ddf14ce5..eacc29ed7 100644 --- a/cmake/toolchains/clang-cl-msvc.cmake +++ b/cmake/toolchains/clang-cl-msvc.cmake @@ -4,7 +4,11 @@ set_property(CACHE OPENTS_TARGET_ARCH PROPERTY STRINGS x86 x64) if(NOT OPENTS_TARGET_ARCH MATCHES "^(x86|x64)$") message(FATAL_ERROR "OPENTS_TARGET_ARCH must be x86 or x64.") endif() -set(CMAKE_SYSTEM_PROCESSOR "${OPENTS_TARGET_ARCH}") +if(OPENTS_TARGET_ARCH STREQUAL "x64") + set(CMAKE_SYSTEM_PROCESSOR AMD64) +else() + set(CMAKE_SYSTEM_PROCESSOR x86) +endif() set(OPENTS_EXPERIMENTAL_CLANG_CL ON CACHE BOOL "" FORCE) set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE BOOL "" FORCE)