builder: linux cross compilation
							parent
							
								
									f1f6fb1a9f
								
							
						
					
					
						commit
						a5ddb613fb
					
				|  | @ -275,10 +275,11 @@ fn (mut v Builder) cc() { | ||||||
| 	if v.pref.sanitize { | 	if v.pref.sanitize { | ||||||
| 		a << '-fsanitize=leak' | 		a << '-fsanitize=leak' | ||||||
| 	} | 	} | ||||||
| 	// Cross compiling linux
 | 	// Cross compiling for linux
 | ||||||
| 	if v.pref.os == .linux { | 	if v.pref.os == .linux { | ||||||
| 		$if !linux { | 		$if !linux { | ||||||
| 			v.cc_linux_cross() | 			v.cc_linux_cross() | ||||||
|  | 			return | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	// Cross compiling windows
 | 	// Cross compiling windows
 | ||||||
|  | @ -476,15 +477,37 @@ fn (mut v Builder) cc() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| fn (mut c Builder) cc_linux_cross() { | fn (mut c Builder) cc_linux_cross() { | ||||||
| 	/* | 	parent_dir := os.home_dir() + '.vmodules' | ||||||
| 	sysroot := '/tmp/lld/linuxroot/' | 	sysroot := os.home_dir() + '.vmodules/linuxroot/' | ||||||
| 		// Build file.o
 | 	if !os.is_dir(sysroot) { | ||||||
| 		a << '-c --sysroot=$sysroot -target x86_64-linux-gnu' | 		println('Downloading files for Linux cross compilation (~18 MB)...') | ||||||
| 		// Right now `out_name` can be `file`, not `file.o`
 | 		zip_file := sysroot[..sysroot.len-1] + '.zip' | ||||||
| 		if !v.out_name.ends_with('.o') { | 		os.system('curl -L -o $zip_file https://github.com/vlang/v/releases/download/0.1.27/linuxroot.zip ') | ||||||
| 			v.out_name = v.out_name + '.o' | 		os.system('unzip -q $zip_file -d $parent_dir') | ||||||
|  | 		if !os.is_dir(sysroot) { | ||||||
|  | 			println('Failed to download.') | ||||||
|  | 			exit(1) | ||||||
| 		} | 		} | ||||||
| 		*/ | 	} | ||||||
|  | 	mut cc_args := '-fPIC -w -c -target x86_64-linux-gnu -c -o x.o $c.out_name_c -I $sysroot/include' | ||||||
|  | 	if os.system('cc $cc_args') != 0 { | ||||||
|  | 		println('Cross compilation for Linux failed. Make sure you have clang installed.') | ||||||
|  | 	} | ||||||
|  | 	mut args := [ | ||||||
|  | 		'-L SYSROOT/usr/lib/x86_64-linux-gnu/' | ||||||
|  | 		'--sysroot=SYSROOT -v -o hi -m elf_x86_64' | ||||||
|  | 		'-dynamic-linker /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2' | ||||||
|  | 		'SYSROOT/crt1.o SYSROOT/crti.o x.o' | ||||||
|  | 		'SYSROOT/lib/x86_64-linux-gnu/libc.so.6' | ||||||
|  | 		'-lc' | ||||||
|  | 		'SYSROOT/crtn.o' | ||||||
|  | 	] | ||||||
|  | 	mut s := args.join(' ') | ||||||
|  | 	s = s.replace('SYSROOT', sysroot) | ||||||
|  | 	if	os.system('$sysroot/ld.lld ' + s) != 0 { | ||||||
|  | 		println('Cross compilation for Linux failed. Make sure you have clang installed.') | ||||||
|  | 	} | ||||||
|  | 	println(c.pref.out_name + ' has been successfully compiled') | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| fn (mut c Builder) cc_windows_cross() { | fn (mut c Builder) cc_windows_cross() { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue