pref: fix cross-compiling graphical apps to Windows (#7449)
parent
dc3a6bb169
commit
c544cc508b
|
@ -153,6 +153,7 @@ jobs:
|
||||||
brew install postgresql
|
brew install postgresql
|
||||||
brew install glfw
|
brew install glfw
|
||||||
## brew install sdl2 sdl2_ttf sdl2_mixer sdl2_image
|
## brew install sdl2 sdl2_ttf sdl2_mixer sdl2_image
|
||||||
|
brew install mingw-w64
|
||||||
export LIBRARY_PATH="$LIBRARY_PATH:/usr/local/opt/openssl/lib/"
|
export LIBRARY_PATH="$LIBRARY_PATH:/usr/local/opt/openssl/lib/"
|
||||||
- name: Build V
|
- name: Build V
|
||||||
run: make -j4 && ./v -cg -cflags -Werror -o v cmd/v
|
run: make -j4 && ./v -cg -cflags -Werror -o v cmd/v
|
||||||
|
@ -189,7 +190,13 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
./v doctor
|
./v doctor
|
||||||
- name: Cross-compilation to Linux
|
- name: Cross-compilation to Linux
|
||||||
run: ./v -os linux cmd/v
|
run: |
|
||||||
|
./v -os linux cmd/v
|
||||||
|
# TODO: fix this: ./v -os linux examples/2048/2048.v
|
||||||
|
- name: Cross-compilation to Windows
|
||||||
|
run: |
|
||||||
|
./v -os windows cmd/v
|
||||||
|
./v -os windows examples/2048/2048.v
|
||||||
# - name: Test vsh
|
# - name: Test vsh
|
||||||
# run: ./v examples/v_script.vsh
|
# run: ./v examples/v_script.vsh
|
||||||
- name: Test ved
|
- name: Test ved
|
||||||
|
@ -576,6 +583,10 @@ jobs:
|
||||||
./v -os windows examples/hello_world.v
|
./v -os windows examples/hello_world.v
|
||||||
ls -lart examples/hello_world.exe
|
ls -lart examples/hello_world.exe
|
||||||
wine examples/hello_world.exe
|
wine examples/hello_world.exe
|
||||||
|
- name: 2048.v can be cross compiled to 2048.exe
|
||||||
|
run: |
|
||||||
|
./v -os windows examples/2048/2048.v
|
||||||
|
ls -lart examples/2048/2048.exe
|
||||||
|
|
||||||
ubuntu-c-plus-plus:
|
ubuntu-c-plus-plus:
|
||||||
runs-on: ubuntu-18.04
|
runs-on: ubuntu-18.04
|
||||||
|
|
|
@ -703,6 +703,9 @@ fn (mut v Builder) cc() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (mut b Builder) cc_linux_cross() {
|
fn (mut b Builder) cc_linux_cross() {
|
||||||
|
b.setup_ccompiler_options(b.pref.ccompiler)
|
||||||
|
b.build_thirdparty_obj_files()
|
||||||
|
b.setup_output_name()
|
||||||
parent_dir := os.vmodules_dir()
|
parent_dir := os.vmodules_dir()
|
||||||
if !os.exists(parent_dir) {
|
if !os.exists(parent_dir) {
|
||||||
os.mkdir(parent_dir)
|
os.mkdir(parent_dir)
|
||||||
|
@ -763,6 +766,9 @@ fn (mut b Builder) cc_linux_cross() {
|
||||||
|
|
||||||
fn (mut c Builder) cc_windows_cross() {
|
fn (mut c Builder) cc_windows_cross() {
|
||||||
println('Cross compiling for Windows...')
|
println('Cross compiling for Windows...')
|
||||||
|
c.setup_ccompiler_options(c.pref.ccompiler)
|
||||||
|
c.build_thirdparty_obj_files()
|
||||||
|
c.setup_output_name()
|
||||||
if !c.pref.out_name.ends_with('.exe') {
|
if !c.pref.out_name.ends_with('.exe') {
|
||||||
c.pref.out_name += '.exe'
|
c.pref.out_name += '.exe'
|
||||||
}
|
}
|
||||||
|
@ -865,12 +871,6 @@ fn (mut v Builder) build_thirdparty_obj_files() {
|
||||||
|
|
||||||
fn (mut v Builder) build_thirdparty_obj_file(path string, moduleflags []cflag.CFlag) {
|
fn (mut v Builder) build_thirdparty_obj_file(path string, moduleflags []cflag.CFlag) {
|
||||||
obj_path := os.real_path(path)
|
obj_path := os.real_path(path)
|
||||||
if v.pref.os == .windows {
|
|
||||||
// Cross compiling for Windows
|
|
||||||
$if !windows {
|
|
||||||
v.pref.ccompiler = mingw_cc
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cfile := '${obj_path[..obj_path.len - 2]}.c'
|
cfile := '${obj_path[..obj_path.len - 2]}.c'
|
||||||
btarget := moduleflags.c_options_before_target()
|
btarget := moduleflags.c_options_before_target()
|
||||||
atarget := moduleflags.c_options_after_target()
|
atarget := moduleflags.c_options_after_target()
|
||||||
|
|
|
@ -10,13 +10,6 @@ import v.table
|
||||||
import v.token
|
import v.token
|
||||||
import vweb.tmpl
|
import vweb.tmpl
|
||||||
|
|
||||||
// #flag darwin -I.
|
|
||||||
const (
|
|
||||||
supported_platforms = ['windows', 'macos', 'darwin', 'linux', 'freebsd', 'openbsd', 'netbsd',
|
|
||||||
'dragonfly', 'android', 'js', 'solaris', 'haiku', 'linux_or_macos']
|
|
||||||
supported_ccompilers = ['tinyc', 'clang', 'mingw', 'msvc', 'gcc']
|
|
||||||
)
|
|
||||||
|
|
||||||
// // #include, #flag, #v
|
// // #include, #flag, #v
|
||||||
fn (mut p Parser) hash() ast.HashStmt {
|
fn (mut p Parser) hash() ast.HashStmt {
|
||||||
mut pos := p.prev_tok.position()
|
mut pos := p.prev_tok.position()
|
||||||
|
|
|
@ -68,6 +68,7 @@ pub fn (mut p Preferences) fill_with_defaults() {
|
||||||
if p.ccompiler == '' {
|
if p.ccompiler == '' {
|
||||||
p.ccompiler = default_c_compiler()
|
p.ccompiler = default_c_compiler()
|
||||||
}
|
}
|
||||||
|
p.find_cc_if_cross_compiling()
|
||||||
p.ccompiler_type = cc_from_string(p.ccompiler)
|
p.ccompiler_type = cc_from_string(p.ccompiler)
|
||||||
p.is_test = p.path.ends_with('_test.v')
|
p.is_test = p.path.ends_with('_test.v')
|
||||||
p.is_vsh = p.path.ends_with('.vsh')
|
p.is_vsh = p.path.ends_with('.vsh')
|
||||||
|
@ -98,6 +99,21 @@ pub fn (mut p Preferences) fill_with_defaults() {
|
||||||
// p.use_cache = os.user_os() != 'windows'
|
// p.use_cache = os.user_os() != 'windows'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn (mut p Preferences) find_cc_if_cross_compiling() {
|
||||||
|
if p.os == .windows {
|
||||||
|
$if !windows {
|
||||||
|
// Cross compiling to Windows
|
||||||
|
p.ccompiler = 'x86_64-w64-mingw32-gcc'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if p.os == .linux {
|
||||||
|
$if !linux {
|
||||||
|
// Cross compiling to Linux
|
||||||
|
p.ccompiler = 'clang'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn (mut p Preferences) try_to_use_tcc_by_default() {
|
fn (mut p Preferences) try_to_use_tcc_by_default() {
|
||||||
if p.ccompiler == 'tcc' {
|
if p.ccompiler == 'tcc' {
|
||||||
p.ccompiler = default_tcc_compiler()
|
p.ccompiler = default_tcc_compiler()
|
||||||
|
|
Loading…
Reference in New Issue