Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Build: /Qspectre- is MSVC-only and breaks every Release target under clang-cl

Đang mở Phù hợp với người mới
#263 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 5 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
88/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
cmake, cpp
Lĩnh vực
build-system, tooling

Hướng nghiên cứu

Bắt đầu tại ps2xRuntime/cmake/ReleaseMode.cmake, ở EnableFastReleaseMode() (khoảng dòng 22), nơi /Qspectre- được thêm bên trong if(MSVC). Chỉ bỏ qua flag đó khi CMAKE_CXX_COMPILER_ID khớp với Clang (clang-cl). Xác nhận các bản build Release của những target được liệt kê thành công với clang-cl; /GL có thể giữ nguyên và chỉ tạo cảnh báo về đối số không được sử dụng.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

What happens

EnableFastReleaseMode() (ps2xRuntime/cmake/ReleaseMode.cmake:22) adds 12 optimisation flags under an if(MSVC) guard. CMake sets MSVC to 1 for any MSVC-like command-line frontend, clang-cl included. Eleven of those flags are fine under clang-cl; the twelfth, /Qspectre-, is cl.exe-only. clang-cl does not recognise it, treats it as an input file name, and fails:

clang-cl: error: no such file or directory: '/Qspectre-'; did you mean '/Qspectre'?

Every target that calls EnableFastReleaseMode therefore fails to compile in Release under clang-cl -- ps2_recomp_lib, ps2_recomp, ps2_analyzer_lib, ps2_analyzer, ps2_runtime, ps2EntryRunner, plus the ps2xStudio and ps2xTest targets. The whole project is blocked.

It is invisible under cl.exe, and it only hits the Windows + clang-cl combination -- the one worth recommending, since it builds our 2752-file runner in about 60 seconds.

Measured, flag by flag

Each of the 12 flags passed individually to clang-cl /c on a neutral translation unit:

/O2 /Ob2 /Oi /Gy /Gw /GF /Zc:inline /fp:fast /arch:AVX2 /GS-    ok
/GL          ok, but "warning: argument unused during compilation: '/GL'"
/Qspectre-   REJECTED

At link time /LTCG /OPT:REF /OPT:ICF all work: the binary is produced and runs. So the problem is confined to this one compile flag.

Suggested fix

Keep the flag for a real cl.exe, drop it for clang-cl:

if(MSVC)
    set(_ps2x_cl_only_flags /Qspectre-)
    if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
        set(_ps2x_cl_only_flags "")
    endif()

    target_compile_options(${TargetName} PRIVATE
        $<$<CONFIG:Release>:
            ... the other 11 flags, unchanged ...
            /GS-
            ${_ps2x_cl_only_flags}
        >
    )

CMAKE_CXX_COMPILER_ID is Clang for clang-cl and MSVC for cl.exe, so the test separates exactly the two cases. With that change: 243 targets built, 0 errors.

Note that /GL is accepted but ignored at compile time under clang-cl (it warns). Not an error, but dead weight in that configuration.


Found while statically recompiling Ridge Racer V (NTSC-U, SLUS_200.02) with PS2Recomp.
Tested on commit 75d729ce; main was c5a9d02 at the time of writing, one README-only commit ahead.
Host: Windows 11 x64, clang-cl 22.1.3 + Ninja, MSVC toolset 14.51.36231, Windows SDK 10.0.26100.0, CMake 4.2.3.
None of these are specific to this game.

Ngôn ngữ chính
C++
Star
3.3k
Fork
149
Merge trung bình
5 ngày 10 giờ
Pull request đã merge (30 ngày)
4

Chuẩn bị môi trường

Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của ran-j/PS2Recomp

Tất cả issue của ran-j/PS2Recomp

Issue tương tự

Thêm issue về C++

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.