v icon indicating copy to clipboard operation
v copied to clipboard

[Windows] Failed to compile V with clang & GCC

Open jeffangelion opened this issue 2 years ago • 5 comments

Describe the bug

Failed to compile V on Windows with clang

Expected Behavior

> V built successfully

Current Behavior

clang:

C:\Users\user\v>make.bat -clang
Updating TCC
 > Syncing TCC from https://github.com/vlang/tccbin

Updating vc...
 > Sync with remote https://github.com/vlang/vc

Building V...
 > Attempting to build "./v_win_bootstrap.exe" (from v_win.c) with Clang
./vc/v_win.c:21475:10: error: incompatible integer to pointer conversion initializing 'voidptr' (aka 'void *') with an
      expression of type 'DWORD' (aka 'unsigned long') [-Wint-conversion]
  ...res = FormatMessage(((FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM) | FORMAT_MESSAGE_IGNORE_INSERTS), NULL, err_msg_id, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), &msgbuf, 0, NULL);
     ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./vc/v_win.c:40592:85: error: incompatible pointer to integer conversion passing 'voidptr' (aka 'void *') to parameter
      of type 'intptr_t' (aka 'long long') [-Wint-conversion]
  ...if (!(!atomic_compare_exchange_weak_ptr(((voidptr*)(&ch->adr_written)), &nulladr, ((voidptr)(-1))))) break;
                                                                                       ^~~~~~~~~~~~~~~
./vc/v_win.c:1341:42: note: expanded from macro 'atomic_compare_exchange_weak_ptr'
#define atomic_compare_exchange_weak_ptr atomic_compare_exchange_weak
                                         ^
./vc/v_win.c:1299:54: note: expanded from macro 'atomic_compare_exchange_weak'
    atomic_compare_exchange_strong(object, expected, desired)
                                                     ^~~~~~~
./vc/v_win.c:1287:59: note: passing argument to parameter 'desired' here
                                                 intptr_t desired)
                                                          ^
./vc/v_win.c:40662:81: error: incompatible pointer to integer conversion passing 'void *' to parameter of type
      'intptr_t' (aka 'long long') [-Wint-conversion]
                        if (atomic_compare_exchange_strong_ptr(((voidptr*)(&ch->write_adr)), &wradr, ((void*)0))) {
                                                                                                     ^~~~~~~~~~
./vc/v_win.c:1287:59: note: passing argument to parameter 'desired' here
                                                 intptr_t desired)
                                                          ^
./vc/v_win.c:40666:88: error: incompatible pointer to integer conversion passing 'voidptr' (aka 'void *') to parameter
      of type 'intptr_t' (aka 'long long') [-Wint-conversion]
  ...if (!(!atomic_compare_exchange_weak_ptr(((voidptr*)(&ch->adr_written)), &nulladr, wradr))) break;
                                                                                       ^~~~~
./vc/v_win.c:1341:42: note: expanded from macro 'atomic_compare_exchange_weak_ptr'
#define atomic_compare_exchange_weak_ptr atomic_compare_exchange_weak
                                         ^
./vc/v_win.c:1299:54: note: expanded from macro 'atomic_compare_exchange_weak'
    atomic_compare_exchange_strong(object, expected, desired)
                                                     ^~~~~~~
./vc/v_win.c:1287:59: note: passing argument to parameter 'desired' here
                                                 intptr_t desired)
                                                          ^
./vc/v_win.c:40702:80: error: incompatible pointer to integer conversion passing 'void *' to parameter of type
      'intptr_t' (aka 'long long') [-Wint-conversion]
  ...if (atomic_compare_exchange_strong_ptr(((voidptr*)(&ch->read_adr)), &src2, ((void*)0))) {
                                                                                ^~~~~~~~~~
./vc/v_win.c:1287:59: note: passing argument to parameter 'desired' here
                                                 intptr_t desired)
                                                          ^
./vc/v_win.c:40722:80: error: incompatible pointer to integer conversion passing 'void *' to parameter of type
      'intptr_t' (aka 'long long') [-Wint-conversion]
  ...if (atomic_compare_exchange_strong_ptr(((voidptr*)(&ch->adr_read)), &src2, ((void*)0))) {
                                                                                ^~~~~~~~~~
./vc/v_win.c:1287:59: note: passing argument to parameter 'desired' here
                                                 intptr_t desired)
                                                          ^
./vc/v_win.c:40743:97: error: incompatible pointer to integer conversion passing 'void *' to parameter of type
      'intptr_t' (aka 'long long') [-Wint-conversion]
  ...if (have_swapped || atomic_compare_exchange_strong_ptr(((voidptr*)(&ch->adr_read)), &src2, ((void*)0))) {
                                                                                                ^~~~~~~~~~
./vc/v_win.c:1287:59: note: passing argument to parameter 'desired' here
                                                 intptr_t desired)
                                                          ^
./vc/v_win.c:40752:96: error: incompatible pointer to integer conversion passing 'void *' to parameter of type
      'intptr_t' (aka 'long long') [-Wint-conversion]
  ...if (have_swapped || atomic_compare_exchange_strong_ptr(((voidptr*)(&ch->adr_read)), &src2, ((void*)0))) {
                                                                                                ^~~~~~~~~~
./vc/v_win.c:1287:59: note: passing argument to parameter 'desired' here
                                                 intptr_t desired)
                                                          ^
./vc/v_win.c:40853:81: error: incompatible pointer to integer conversion passing 'void *' to parameter of type
      'intptr_t' (aka 'long long') [-Wint-conversion]
  ...if (atomic_compare_exchange_strong_ptr(((voidptr*)(&ch->read_adr)), &rdadr, ((void*)0))) {
                                                                                 ^~~~~~~~~~
./vc/v_win.c:1287:59: note: passing argument to parameter 'desired' here
                                                 intptr_t desired)
                                                          ^
./vc/v_win.c:40857:86: error: incompatible pointer to integer conversion passing 'voidptr' (aka 'void *') to parameter
      of type 'intptr_t' (aka 'long long') [-Wint-conversion]
  ...if (!(!atomic_compare_exchange_weak_ptr(((voidptr*)(&ch->adr_read)), &nulladr, rdadr))) break;
                                                                                    ^~~~~
./vc/v_win.c:1341:42: note: expanded from macro 'atomic_compare_exchange_weak_ptr'
#define atomic_compare_exchange_weak_ptr atomic_compare_exchange_weak
                                         ^
./vc/v_win.c:1299:54: note: expanded from macro 'atomic_compare_exchange_weak'
    atomic_compare_exchange_strong(object, expected, desired)
                                                     ^~~~~~~
./vc/v_win.c:1287:59: note: passing argument to parameter 'desired' here
                                                 intptr_t desired)
                                                          ^
./vc/v_win.c:40948:82: error: incompatible pointer to integer conversion passing 'void *' to parameter of type
      'intptr_t' (aka 'long long') [-Wint-conversion]
  ...if (atomic_compare_exchange_strong_ptr(((voidptr*)(&ch->write_adr)), &dest2, ((void*)0))) {
                                                                                  ^~~~~~~~~~
./vc/v_win.c:1287:59: note: passing argument to parameter 'desired' here
                                                 intptr_t desired)
                                                          ^
./vc/v_win.c:40969:83: error: incompatible pointer to integer conversion passing 'void *' to parameter of type
      'intptr_t' (aka 'long long') [-Wint-conversion]
                        if (atomic_compare_exchange_strong_ptr(((voidptr*)(&ch->adr_written)), &dest2, ((void*)0))) {
                                                                                                       ^~~~~~~~~~
./vc/v_win.c:1287:59: note: passing argument to parameter 'desired' here
                                                 intptr_t desired)
                                                          ^
./vc/v_win.c:40992:99: error: incompatible pointer to integer conversion passing 'void *' to parameter of type
      'intptr_t' (aka 'long long') [-Wint-conversion]
  ...if (have_swapped || atomic_compare_exchange_strong_ptr(((voidptr*)(&ch->adr_written)), &dest2, ((void*)0))) {
                                                                                                    ^~~~~~~~~~
./vc/v_win.c:1287:59: note: passing argument to parameter 'desired' here
                                                 intptr_t desired)
                                                          ^
13 errors generated.
In most cases, compile errors happen because the version of Clang installed is too old
clang version 15.0.7
Target: x86_64-w64-windows-gnu
Thread model: posix
InstalledDir: C:/Users/user/msys2/clang64/bin

Backend compiler error

Exiting from error
ERROR: please follow the instructions in https://github.com/vlang/v/wiki/Installing-a-C-compiler-on-Windows

C:\Users\user\v>

gcc:

C:\Users\user\v>make.bat -gcc
Updating TCC
 > Syncing TCC from https://github.com/vlang/tccbin

Updating vc...
 > Sync with remote https://github.com/vlang/vc

Building V...
 > Attempting to build "./v_win_bootstrap.exe" (from v_win.c) with GCC
gcc: error: unrecognized command-line option ‘-municode’
In most cases, compile errors happen because the version of GCC installed is too old
gcc (GCC) 11.3.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Backend compiler error

Exiting from error
ERROR: please follow the instructions in https://github.com/vlang/v/wiki/Installing-a-C-compiler-on-Windows

C:\Users\user\v>

Reproduction Steps

  1. Install MSYS2
  2. Install clang and/or gcc via MSYS2
  3. Make sure compiler path is in %PATH%
  4. Change into V directory
  5. Run make.bat -clang

Possible Solution

No response

Additional Information/Context

No response

V version

0.3.3 c173104

Environment details (OS name and version, etc.)

OS: windows, Windows 10 Pro v19045 64-ࠧ來 Processor: 4 cpus, 64bit, little endian, CC version: cc (GCC) 11.3.0

getwd: C:\Users\user\v vmodules: C:\Users\user.vmodules vroot: C:\Users\user\v vexe: C:\Users\user\v\v.exe vexe mtime: 2023-02-22 13:30:18 is vroot writable: true is vmodules writable: true V full version: V 0.3.3 c003bfd.c173104

Git version: git version 2.39.0.windows.2 Git vroot status: weekly.2023.03-199-gc1731042 .git/config present: true thirdparty/tcc status: thirdparty-windows-amd64 1e6e7c6f

jeffangelion avatar Feb 22 '23 13:02 jeffangelion

We recommend gcc/clang from https://winlibs.com instead of MSYS2.

Very few have gotten the MSYS2 stuff to work properly, while the winlibs version has worked well for pretty much everyone who has tried it.

JalonSolov avatar Feb 22 '23 13:02 JalonSolov

I tried it, same errors

jeffangelion avatar Feb 22 '23 14:02 jeffangelion

How did you try installing V? If you didn't do it by cloning the repo, that is the preferred method. https://github.com/vlang/v#installing-v-from-source

JalonSolov avatar Feb 22 '23 17:02 JalonSolov

I cloned repo via Git and ran make.bat

jeffangelion avatar Feb 23 '23 17:02 jeffangelion

Same here. Using the binary from the website and running 'v self' is working well.

ZeroAurora avatar Mar 02 '23 16:03 ZeroAurora