1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

tcc_win: fix tests

This commit is contained in:
spaceface777 2020-06-19 12:54:56 +02:00 committed by GitHub
parent e8b21b4242
commit 624005bbd0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 243 additions and 88 deletions

View File

@ -222,7 +222,7 @@ jobs:
- name: Build - name: Build
run: | run: |
gcc --version gcc --version
.\make.bat -gcc .\make.bat -gcc -skip-path
- name: Test new v.c - name: Test new v.c
run: .\v.exe -o v.c cmd/v && gcc -municode -w v.c run: .\v.exe -o v.c cmd/v && gcc -municode -w v.c
- name: Install dependencies - name: Install dependencies
@ -256,7 +256,7 @@ jobs:
run: | run: |
echo %VFLAGS% echo %VFLAGS%
echo $VFLAGS echo $VFLAGS
.\make.bat -msvc .\make.bat -msvc -skip-path
- name: Install dependencies - name: Install dependencies
run: | run: |
.\v.exe setup-freetype .\v.exe setup-freetype
@ -274,6 +274,44 @@ jobs:
# - name: Test v binaries # - name: Test v binaries
# run: ./v -silent build-vbinaries # run: ./v -silent build-vbinaries
windows-tcc:
runs-on: windows-2019
# We are simulating a user with no cc installed.
# This way, v's cc detection on Windows is also tested.
# env:
# VFLAGS: -cc tcc
steps:
- uses: actions/checkout@v2
#- uses: actions/setup-node@v1
# with:
# node-version: 12.x
- name: Build
# We need to move gcc and msvc, so that V doesn't find a C compiler
run: |
'for /f "usebackq tokens=*" %i in (`where gcc.exe`) do move /Y "%i" "%i.old"' | cmd
'for /f "usebackq tokens=*" %i in (`where vswhere.exe`) do move /Y "%i" "%i.old"' | cmd
move "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe.old"
.\make.bat -skip-path
- name: Test new v.c
run: .\v.exe -o v.c cmd/v && .\thirdparty\tcc\tcc.exe -w -ladvapi32 -bt10 v.c
- name: Install dependencies
run: |
.\v.exe setup-freetype
.\.github\workflows\windows-install-sdl.bat
- name: Fixed tests
run: |
.\v.exe test-fixed
# - name: Test
# run: |
# .\v.exe -silent test-compiler
## v.js dosent work on windows
#.\v.exe -o hi.js examples/hello_v_js.v
#node hi.js
# - name: Test v binaries
# run: ./v -silent build-vbinaries
# - name: v2 self compilation
# run: .\v.exe -o v2.exe cmd/v && .\v2.exe -o v3.exe cmd/v
docs-line-len-check: docs-line-len-check:
runs-on: ubuntu-18.04 runs-on: ubuntu-18.04
steps: steps:

1
.gitignore vendored
View File

@ -68,5 +68,6 @@ cachegrind.out.*
._* ._*
thumbs.db thumbs.db
/.symlink/* /.symlink/*
/.bin/*
_docs _docs

View File

@ -2,10 +2,17 @@ import os
import v.pref import v.pref
const ( const (
hkey_local_machine = voidptr(0x80000002) hkey_current_user = voidptr(0x80000001)
hwnd_broadcast = voidptr(0xffff) hwnd_broadcast = voidptr(0xffff)
) )
$if windows {
$if tinyc {
#flag -lAdvapi32
#flag -lUser32
}
}
fn main(){ fn main(){
$if windows { $if windows {
setup_symlink_on_windows() setup_symlink_on_windows()
@ -45,16 +52,16 @@ fn setup_symlink_on_windows(){
// make.bat being global, which is NOT what we want. // make.bat being global, which is NOT what we want.
// //
// Instead, we create a small launcher v.bat, in a new local // Instead, we create a small launcher v.bat, in a new local
// folder .symlink/ . That .symlink/ folder can then be put // folder .bin/ . That .bin/ folder can then be put in PATH
// in PATH without poluting it with anything else - just a // without poluting it with anything else - just a `v`
// `v` command will be available, similar to unix. // command will be available, similar to unix.
// //
// Creating a real NTFS symlink to the real executable was also // Creating a real NTFS symlink to the real executable was also
// tried, but then os.real_path( os.executable() ) returns the // tried, but then os.real_path( os.executable() ) returns the
// path to the symlink, unfortunately, unlike on posix systems // path to the symlink, unfortunately, unlike on posix systems
// ¯\_(ツ)_/¯ // ¯\_(ツ)_/¯
vdir := os.real_path(os.dir(vexe)) vdir := os.real_path(os.dir(vexe))
vsymlinkdir := os.join_path(vdir, '.symlink') vsymlinkdir := os.join_path(vdir, '.bin')
vsymlinkbat := os.join_path(vsymlinkdir, 'v.bat') vsymlinkbat := os.join_path(vsymlinkdir, 'v.bat')
if os.exists(vsymlinkbat) { if os.exists(vsymlinkbat) {
print('Batch script $vsymlinkbat already exists, checking system %PATH%...') print('Batch script $vsymlinkbat already exists, checking system %PATH%...')
@ -128,9 +135,9 @@ fn warn_and_exit(err string) {
fn get_reg_sys_env_handle() ?voidptr { fn get_reg_sys_env_handle() ?voidptr {
$if windows { $if windows {
// open the registry key // open the registry key
reg_key_path := 'SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment' reg_key_path := 'Environment'
reg_env_key := voidptr(0) // or HKEY (HANDLE) reg_env_key := voidptr(0) // or HKEY (HANDLE)
if C.RegOpenKeyEx(hkey_local_machine, reg_key_path.to_wide(), 0, 1 | 2, &reg_env_key) != 0 { if C.RegOpenKeyEx(hkey_current_user, reg_key_path.to_wide(), 0, 1 | 2, &reg_env_key) != 0 {
return error('Could not open "$reg_key_path" in the registry') return error('Could not open "$reg_key_path" in the registry')
} }
@ -146,7 +153,7 @@ fn get_reg_value(reg_env_key voidptr, key string) ?string {
reg_value_size := 4095 // this is the max length (not for the registry, but for the system %PATH%) reg_value_size := 4095 // this is the max length (not for the registry, but for the system %PATH%)
mut reg_value := &u16(malloc(reg_value_size)) mut reg_value := &u16(malloc(reg_value_size))
if C.RegQueryValueEx(reg_env_key, key.to_wide(), 0, 0, reg_value, &reg_value_size) != 0 { if C.RegQueryValueEx(reg_env_key, key.to_wide(), 0, 0, reg_value, &reg_value_size) != 0 {
return error('Unable to get registry value for "$key", are you running as an Administrator?') return error('Unable to get registry value for "$key", try rerunning as an Administrator')
} }
return string_from_wide(reg_value) return string_from_wide(reg_value)

164
make.bat
View File

@ -2,6 +2,7 @@
echo Building V echo Building V
set tcc_path=%~dp0thirdparty\tcc\
pushd %~dp0 pushd %~dp0
if "%~1"=="-local" goto :compile if "%~1"=="-local" goto :compile
@ -18,41 +19,39 @@ if exist "vc" (
) )
:compile :compile
REM option to force msvc or gcc REM option to disable adding V to PATH
if "%~1"=="-gcc" goto :gcc_strap if "%~1"=="-skip-path" set skip_path=1
if "%~2"=="-gcc" goto :gcc_strap if "%~2"=="-skip-path" set skip_path=1
if "%~1"=="-msvc" goto :msvc_strap
if "%~2"=="-msvc" goto :msvc_strap REM option to force msvc, gcc or tcc
if "%~1"=="-gcc" set force_gcc=1 & goto :gcc_strap
if "%~2"=="-gcc" set force_gcc=1 & goto :gcc_strap
if "%~1"=="-msvc" set force_msvc=1 & goto :msvc_strap
if "%~2"=="-msvc" set force_msvc=1 & goto :msvc_strap
if "%~1"=="-tcc" set force_tcc=1 & goto :tcc_strap
if "%~2"=="-tcc" set force_tcc=1 & goto :tcc_strap
:gcc_strap :gcc_strap
echo.
echo Attempting to build v.c with GCC... echo Attempting to build v.c with GCC...
for /f "usebackq tokens=*" %%i in (`where gcc`) do ( where /q gcc
set gcc_path=%%i if %ERRORLEVEL% NEQ 0 (
) echo ^> GCC not found
if "%force_gcc%" NEQ "" goto :error
if not exist "%gcc_path%" (
goto :msvc_strap goto :msvc_strap
) )
gcc -std=c99 -municode -w -o v.exe vc\v_win.c gcc -std=c99 -municode -w -o v.exe vc\v_win.c
if %ERRORLEVEL% NEQ 0 ( if %ERRORLEVEL% NEQ 0 goto :compile_error
echo gcc failed to compile - Create an issue at 'https://github.com/vlang'
rd /s /q vc
goto :error
)
v.exe self v.exe self > NUL
if %ERRORLEVEL% NEQ 0 ( if %ERRORLEVEL% NEQ 0 goto :compile_error
echo v.exe failed to compile itself - Create an issue at 'https://github.com/vlang'
goto :error
)
del v_old.exe
goto :success goto :success
:msvc_strap :msvc_strap
echo Attempting to build v.c with MSVC... echo.
echo Attempting to build v.c with MSVC...
set VsWhereDir=%ProgramFiles(x86)% set VsWhereDir=%ProgramFiles(x86)%
set HostArch=x64 set HostArch=x64
if "%PROCESSOR_ARCHITECTURE%" == "x86" ( if "%PROCESSOR_ARCHITECTURE%" == "x86" (
@ -60,58 +59,123 @@ if "%PROCESSOR_ARCHITECTURE%" == "x86" (
set VsWhereDir=%ProgramFiles% set VsWhereDir=%ProgramFiles%
set HostArch=x86 set HostArch=x86
) )
if not exist "%VsWhereDir%\Microsoft Visual Studio\Installer\vswhere.exe" (
echo ^> MSVC not found
if "%force_msvc%" NEQ "" goto :error
goto :tcc_strap
)
for /f "usebackq tokens=*" %%i in (`"%VsWhereDir%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath`) do ( for /f "usebackq tokens=*" %%i in (`"%VsWhereDir%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath`) do (
set InstallDir=%%i set InstallDir=%%i
) )
if exist "%InstallDir%\Common7\Tools\vsdevcmd.bat" ( if exist "%InstallDir%\Common7\Tools\vsdevcmd.bat" (
call "%InstallDir%\Common7\Tools\vsdevcmd.bat" -arch=%HostArch% -host_arch=%HostArch% -no_logo call "%InstallDir%\Common7\Tools\vsdevcmd.bat" -arch=%HostArch% -host_arch=%HostArch% -no_logo > NUL
) else if exist "%VsWhereDir%\Microsoft Visual Studio 14.0\Common7\Tools\vsdevcmd.bat" ( ) else if exist "%VsWhereDir%\Microsoft Visual Studio 14.0\Common7\Tools\vsdevcmd.bat" (
call "%VsWhereDir%\Microsoft Visual Studio 14.0\Common7\Tools\vsdevcmd.bat" -arch=%HostArch% -host_arch=%HostArch% -no_logo call "%VsWhereDir%\Microsoft Visual Studio 14.0\Common7\Tools\vsdevcmd.bat" -arch=%HostArch% -host_arch=%HostArch% -no_logo > NUL
) else (
goto :no_compiler
) )
set ObjFile=.v.c.obj set ObjFile=.v.c.obj
cl.exe /nologo /w /volatile:ms /Fo%ObjFile% /O2 /MD /D_VBOOTSTRAP vc\v_win.c user32.lib kernel32.lib advapi32.lib shell32.lib /link /NOLOGO /OUT:v.exe /INCREMENTAL:NO cl.exe /nologo /w /volatile:ms /Fo%ObjFile% /O2 /MD /D_VBOOTSTRAP vc\v_win.c user32.lib kernel32.lib advapi32.lib shell32.lib /link /NOLOGO /OUT:v.exe /INCREMENTAL:NO > NUL
if %ERRORLEVEL% NEQ 0 ( if %ERRORLEVEL% NEQ 0 goto :compile_error
echo cl.exe failed to build V
goto :compile_error
)
v.exe -cc msvc self v.exe -cc msvc self
if %ERRORLEVEL% NEQ 0 (
echo V failed to build itself with error %ERRORLEVEL%
del %ObjFile%
goto :compile_error
)
del v_old.exe
del %ObjFile% del %ObjFile%
if %ERRORLEVEL% NEQ 0 goto :compile_error
goto :success goto :success
:no_compiler :clone_tcc
echo You do not appear to have a GCC installation on your PATH and also do not have an MSVC installation git clone --depth 1 --quiet https://github.com/vlang/tccbin_win %tcc_path%
echo - this means that you cannot bootstrap a V installation at this time... set cloned_tcc=1
goto :tcc_strap
:tcc_strap
echo. echo.
echo Head to 'https://github.com/vlang/v/releases/download/v0.1.10/mingw-w64-install.exe' to download and install GCC echo Attempting to build v.c with TCC...
echo or head to 'https://visualstudio.microsoft.com/downloads/' to download and install MSVC
echo (look for the Build Tools if you don't want to install the Visual Studio IDE) where /q tcc
echo. if %ERRORLEVEL% NEQ 0 (
goto :error if exist "%tcc_path%" (
set tcc_exe=%tcc_path%tcc.exe
) else if "%cloned_tcc%"=="" (
echo ^> TCC not found
echo ^> Downloading TCC from https://github.com/vlang/tccbin_win
goto :clone_tcc
) else (
echo ^> TCC not found, even after cloning
goto :error
)
) else (
for /f "delims=" %%i in ('where tcc') do set tcc_exe=%%i
)
if exist "%tcc_path%" (
if "%cloned_tcc%"=="" (
echo ^> Updating prebuilt TCC...
pushd "%tcc_path%"
git pull -q > NUL
popd
)
)
call "%tcc_exe%" -std=c99 -municode -lws2_32 -lshell32 -ladvapi32 -bt10 -w -o v.exe vc\v_win.c
if %ERRORLEVEL% NEQ 0 goto :compile_error
REM TODO: delete this when the tcc bootstrapping logic is merged to master
v.exe -o vtcc.c cmd\v
call "%tcc_exe%" -std=c99 -municode -lws2_32 -lshell32 -ladvapi32 -bt10 -w -o v.exe vtcc.c
if %ERRORLEVEL% NEQ 0 goto :compile_error
del vtcc.c
v.exe -cc "%tcc_exe%" self > NUL
if %ERRORLEVEL% NEQ 0 goto :compile_error
goto :success
:compile_error :compile_error
echo Failed to compile - Create an issue at 'https://github.com/vlang' and tag '@emily33901'! echo Failed to compile - Create an issue at 'https://github.com/vlang'
goto :error goto :error
:error :error
echo.
echo Exiting from error echo Exiting from error
popd popd
exit /b 1 exit /b 1
:success :success
echo V build OK! echo ^> V built successfully!
del v_old.exe
:path
if "%skip_path%" NEQ "" goto :version
echo.
echo Adding V to PATH...
v.exe symlink > NUL
if %ERRORLEVEL% NEQ 0 (
echo ^> Could not add V to %%PATH%%, try rebuilding as admin.
goto :error
)
echo ^> V added to %%PATH%%
if "%cloned_tcc%" NEQ "" (
echo @echo off> "%~dp0.bin\tcc.bat"
echo %tcc_path%tcc %%^*>> "%~dp0.bin\tcc.bat"
echo ^> TCC added to %%PATH%%
)
echo ^> Restart your shell/IDE to reload it
:version
echo.
echo | set /p="V version: "
v.exe version v.exe version
if "%cloned_tcc%" NEQ "" (
echo.
echo WARNING: No C compiler was detected in your PATH. `tcc` was used temporarily
echo to build V, but it may have some bugs and may not work in all cases.
echo A more advanced C compiler like GCC or MSVC is recommended.
echo https://github.com/vlang/v/wiki/Installing-a-C-compiler-on-Windows
echo.
)
popd popd

View File

@ -6,4 +6,5 @@ sdl2/
SDL2_image/ SDL2_image/
SDL2_mixer/ SDL2_mixer/
SDL2_ttf/ SDL2_ttf/
pg/ pg/
tcc/

View File

@ -2961,7 +2961,7 @@ _SOKOL_PRIVATE const _sapp_gl_fbconfig* _sapp_gl_choose_fbconfig(const _sapp_gl_
#include <windows.h> #include <windows.h>
#include <windowsx.h> #include <windowsx.h>
#include <shellapi.h> #include <shellapi.h>
#pragma comment (lib, "Shell32.lib") #pragma comment (lib, "Shell32")
#if defined(SOKOL_D3D11) #if defined(SOKOL_D3D11)
#ifndef D3D11_NO_HELPERS #ifndef D3D11_NO_HELPERS

View File

@ -279,7 +279,7 @@ static INT connect_to_server(TlsContext *tls_ctx, LPWSTR host, INT port_number)
WCHAR service_name[10]; WCHAR service_name[10];
int res = wsprintf(service_name, L"%d", port_number); int res = wsprintf(service_name, L"%d", port_number);
if(WSAConnectByName(Socket,connect_name, service_name, &local_address_length, if(WSAConnectByNameA(Socket,connect_name, service_name, &local_address_length,
&local_address, &remote_address_length, &remote_address, &tv, NULL) == SOCKET_ERROR) { &local_address, &remote_address_length, &remote_address, &tv, NULL) == SOCKET_ERROR) {
wprintf(L"Error %d connecting to \"%s\" (%s)\n", wprintf(L"Error %d connecting to \"%s\" (%s)\n",
WSAGetLastError(), WSAGetLastError(),

View File

@ -2,6 +2,8 @@ module clipboard
import time import time
#flag -lUser32
struct WndClassEx { struct WndClassEx {
cb_size u32 cb_size u32
style u32 style u32

View File

@ -5,6 +5,12 @@ module math
#include <math.h> #include <math.h>
$if windows {
$if tinyc {
#flag @VROOT/thirdparty/tcc/lib/openlibm.o
}
}
fn C.acos(x f64) f64 fn C.acos(x f64) f64
fn C.asin(x f64) f64 fn C.asin(x f64) f64
fn C.atan(x f64) f64 fn C.atan(x f64) f64

View File

@ -46,8 +46,8 @@ fn test_gamma() {
assert gamma(1) == 1 assert gamma(1) == 1
assert gamma(5) == 24 assert gamma(5) == 24
sval := '2.453737' sval := '2.453737'
assert tst_res(log_gamma(4.5).str(), sval) assert tst_res(log_gamma(4.5).str(), sval)
assert tst_res(log(gamma(4.5)).str(), sval) assert tst_res(log(gamma(4.5)).str(), sval)
//assert log_gamma(4.5).str() == sval //assert log_gamma(4.5).str() == sval
//assert log(gamma(4.5)).str() == sval //assert log(gamma(4.5)).str() == sval
assert abs( log_gamma(4.5) - log(gamma(4.5)) ) < 0.000001 assert abs( log_gamma(4.5) - log(gamma(4.5)) ) < 0.000001

View File

@ -5,7 +5,7 @@
module http module http
#flag windows -I @VROOT/thirdparty/vschannel #flag windows -I @VROOT/thirdparty/vschannel
#flag -l ws2_32 -l crypt32 -l secur32 #flag -l ws2_32 -l crypt32 -l secur32 -l user32
#include "vschannel.c" #include "vschannel.c"

View File

@ -139,9 +139,13 @@ pub fn (mut f File) flush() {
pub fn file_size(path string) int { pub fn file_size(path string) int {
mut s := C.stat{} mut s := C.stat{}
$if windows { $if windows {
C._wstat(path.to_wide(), voidptr(&s)) $if tinyc {
C.stat(charptr(path.str), voidptr(&s))
} $else {
C._wstat(path.to_wide(), voidptr(&s))
}
} $else { } $else {
C.stat(charptr(path.str), &s) C.stat(charptr(path.str), voidptr(&s))
} }
return s.st_size return s.st_size
} }

View File

@ -52,6 +52,9 @@ pub fn (mut b Builder) compile_c() {
println('all .v files before:') println('all .v files before:')
// println(files) // println(files)
} }
$if windows {
b.pref.ccompiler = b.find_win_cc() or { panic(no_compiler_error) }
}
// v1 compiler files // v1 compiler files
// v.add_v_files_to_compile() // v.add_v_files_to_compile()
// v.files << v.dir // v.files << v.dir

View File

@ -19,7 +19,21 @@ If you were not working with C interop, please raise an issue on GitHub:
https://github.com/vlang/v/issues/new/choose https://github.com/vlang/v/issues/new/choose
You can also use #help on Discord: https://discord.gg/vlang You can also use #help on Discord: https://discord.gg/vlang
') '
no_compiler_error = '
==================
Error: no C compiler detected.
You can find instructions on how to install one in the V wiki:
https://github.com/vlang/v/wiki/Installing-a-C-compiler-on-Windows
If you think you have one installed, make sure it is in your PATH.
If you do have one in your PATH, please raise an issue on GitHub:
https://github.com/vlang/v/issues/new/choose
You can also use #help on Discord: https://discord.gg/vlang
'
)
const ( const (
mingw_cc = 'x86_64-w64-mingw32-gcc' mingw_cc = 'x86_64-w64-mingw32-gcc'
@ -29,16 +43,30 @@ const (
fn todo() { fn todo() {
} }
fn (v &Builder) no_cc_installed() bool { fn (v &Builder) find_win_cc() ?string {
$if windows { $if !windows { return none }
os.exec('$v.pref.ccompiler -v') or {
if v.pref.is_verbose { os.exec('$v.pref.ccompiler -v') or {
println('C compiler not found, trying to build with msvc...') if v.pref.is_verbose {
} println('$v.pref.ccompiler not found, looking for msvc...')
return true
} }
find_msvc() or {
if v.pref.is_verbose {
println('msvc not found, looking for thirdparty/tcc...')
}
vpath := os.dir(os.getenv('VEXE'))
thirdparty_tcc := os.join_path(vpath, 'thirdparty', 'tcc', 'tcc.exe')
os.exec('$thirdparty_tcc -v') or {
if v.pref.is_verbose {
println('No C compiler found')
}
return none
}
return thirdparty_tcc
}
return 'msvc'
} }
return false return v.pref.ccompiler
} }
fn (mut v Builder) cc() { fn (mut v Builder) cc() {
@ -95,8 +123,9 @@ fn (mut v Builder) cc() {
return return
} }
} }
mut ccompiler := v.pref.ccompiler
$if windows { $if windows {
if v.pref.ccompiler == 'msvc' || v.no_cc_installed() { if ccompiler == 'msvc' {
v.cc_msvc() v.cc_msvc()
return return
} }
@ -191,9 +220,9 @@ fn (mut v Builder) cc() {
} }
} }
// //
is_cc_clang := v.pref.ccompiler.contains('clang') || guessed_compiler == 'clang' is_cc_tcc := ccompiler.contains('tcc') || guessed_compiler == 'tcc'
is_cc_tcc := v.pref.ccompiler.contains('tcc') || guessed_compiler == 'tcc' is_cc_clang := !is_cc_tcc && (ccompiler.contains('clang') || guessed_compiler == 'clang')
is_cc_gcc := v.pref.ccompiler.contains('gcc') || guessed_compiler == 'gcc' is_cc_gcc := !is_cc_tcc && !is_cc_clang && (ccompiler.contains('gcc') || guessed_compiler == 'gcc')
// is_cc_msvc := v.pref.ccompiler.contains('msvc') || guessed_compiler == 'msvc' // is_cc_msvc := v.pref.ccompiler.contains('msvc') || guessed_compiler == 'msvc'
// //
if is_cc_clang { if is_cc_clang {
@ -227,7 +256,7 @@ fn (mut v Builder) cc() {
if debug_mode && os.user_os() != 'windows' { if debug_mode && os.user_os() != 'windows' {
linker_flags << ' -rdynamic ' // needed for nicer symbolic backtraces linker_flags << ' -rdynamic ' // needed for nicer symbolic backtraces
} }
if v.pref.ccompiler != 'msvc' && v.pref.os != .freebsd { if ccompiler != 'msvc' && v.pref.os != .freebsd {
a << '-Werror=implicit-function-declaration' a << '-Werror=implicit-function-declaration'
} }
if v.pref.is_liveshared || v.pref.is_livemain { if v.pref.is_liveshared || v.pref.is_livemain {
@ -365,7 +394,7 @@ fn (mut v Builder) cc() {
start: start:
todo() todo()
// TODO remove // TODO remove
cmd := '${v.pref.ccompiler} $args' cmd := '${ccompiler} $args'
// Run // Run
if v.pref.is_verbose || v.pref.show_cc { if v.pref.is_verbose || v.pref.show_cc {
println('\n==========') println('\n==========')
@ -391,7 +420,7 @@ fn (mut v Builder) cc() {
if res.exit_code == 127 { if res.exit_code == 127 {
$if linux { $if linux {
// TCC problems on linux? Try GCC. // TCC problems on linux? Try GCC.
if v.pref.ccompiler.contains('tcc') { if ccompiler.contains('tcc') {
v.pref.ccompiler = 'cc' v.pref.ccompiler = 'cc'
goto start goto start
} }
@ -424,7 +453,7 @@ fn (mut v Builder) cc() {
diff := time.ticks() - ticks diff := time.ticks() - ticks
// Print the C command // Print the C command
if v.pref.is_verbose { if v.pref.is_verbose {
println('${v.pref.ccompiler} took $diff ms') println('${ccompiler} took $diff ms')
println('=========\n') println('=========\n')
} }
// Link it if we are cross compiling and need an executable // Link it if we are cross compiling and need an executable
@ -624,7 +653,7 @@ fn (c &Builder) build_thirdparty_obj_files() {
for flag in c.get_os_cflags() { for flag in c.get_os_cflags() {
if flag.value.ends_with('.o') { if flag.value.ends_with('.o') {
rest_of_module_flags := c.get_rest_of_module_cflags(flag) rest_of_module_flags := c.get_rest_of_module_cflags(flag)
if c.pref.ccompiler == 'msvc' || c.no_cc_installed() { if c.pref.ccompiler == 'msvc' {
build_thirdparty_obj_file_with_msvc(flag.value, rest_of_module_flags) build_thirdparty_obj_file_with_msvc(flag.value, rest_of_module_flags)
} else { } else {
c.build_thirdparty_obj_file(flag.value, rest_of_module_flags) c.build_thirdparty_obj_file(flag.value, rest_of_module_flags)
@ -661,7 +690,7 @@ fn (mut v Builder) build_thirdparty_obj_file(path string, moduleflags []cflag.CF
btarget := moduleflags.c_options_before_target() btarget := moduleflags.c_options_before_target()
atarget := moduleflags.c_options_after_target() atarget := moduleflags.c_options_after_target()
cppoptions := if v.pref.ccompiler.contains('++') { ' -fpermissive -w ' } else { '' } cppoptions := if v.pref.ccompiler.contains('++') { ' -fpermissive -w ' } else { '' }
cmd := '$v.pref.ccompiler $cppoptions $v.pref.third_party_option $btarget -c -o "$obj_path" $cfiles $atarget ' cmd := '$v.pref.ccompiler $cppoptions $v.pref.third_party_option $btarget -c -o "$obj_path" $cfiles $atarget'
res := os.exec(cmd) or { res := os.exec(cmd) or {
println('failed thirdparty object build cmd: $cmd') println('failed thirdparty object build cmd: $cmd')
verror(err) verror(err)

View File

@ -226,7 +226,7 @@ static inline bool _us64_ne(uint64_t a, int64_t b) { return a > INT64_MAX || (in
static inline bool _us64_le(uint64_t a, int64_t b) { return a <= INT64_MAX && (int64_t)a <= b; } static inline bool _us64_le(uint64_t a, int64_t b) { return a <= INT64_MAX && (int64_t)a <= b; }
static inline bool _us64_lt(uint64_t a, int64_t b) { return a < INT64_MAX && (int64_t)a < b; } static inline bool _us64_lt(uint64_t a, int64_t b) { return a < INT64_MAX && (int64_t)a < b; }
#if defined(__MINGW32__) || defined(__MINGW64__) #if defined(__MINGW32__) || defined(__MINGW64__) || (defined(_WIN32) && defined(__TINYC__))
#undef PRId64 #undef PRId64
#undef PRIi64 #undef PRIi64
#undef PRIo64 #undef PRIo64