[Vm-dev] Cross compile Window from Unix/Mac os

Jean Baptiste Arnaud jbaptiste.arnaud at gmail.com
Mon Dec 12 20:36:39 UTC 2011


Cmake is really simple but you need to generate  from a specific configuration that shouldnt get information about compilation from the system but from a toolchain :

You have choice change the File generated :  by removing the line include(CMakeDetermineSystem) "it is baaaaad"
or change the printHeader method to take care about the cross compilation in CMakeGenerator, (maybe Igor have already fix this)

CMakeGenerator>>#printHeader
	
	self puts: '# This is automatically generated file using ', self configurationName, ' on ',
		Date current asString, ' ' , Time current asString;
		puts: 'cmake_minimum_required(VERSION 2.6.2)'.
		
	self config requiresDetermineSystem ifTrue: [
		self	puts: 'include(CMakeDetermineSystem)'.
		
	]

and add in CPlatformConfig

A method :
CPlatformConfig>>#requiresDetermineSystem
	^true

Create a WindowConfiguration as you wish and create a method 

MyWindowConfiguration>>#requiresDetermineSystem
	^false

OK here your source and CMake infrastructure is correct.
You need a cross compiler i use the mingw32
So you need to create your MyToolchain.cmake, just copy past the following code (change the compiler if needed).

"
SET(CMAKE_SYSTEM_NAME Windows)
SET(CMAKE_C_COMPILER i386-mingw32-gcc)
SET(CMAKE_CXX_COMPILER i386-mingw32-g++)
SET(CMAKE_RC_COMPILER i386-mingw32-windres)

# It should be everything in VM platform if it is not the case uncomment all this line.
#SET(CMAKE_FIND_ROOT_PATH where you install mingw32)
#SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
#SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
#SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
"

A generate your source and do : 
cmake -DMAKE_TOOLCHAIN_FILE=MyToolchain.cmake
and make
that should work :

Possible error : 
CMAKE_RC_COMPILER maybe not automatically call, if that happen check the #extraVMSettings: in your configuration and change the
[...]
	maker cmd: 'add_custom_command' params: 'OUTPUT ', res ,
	'
		COMMAND 	windres --include-dir ${targetPlatform}/misc -D_WIN32 -i ${buildDir}/Cog.rc -o ', res , '
		COMMENT "Generating resource file..."
	'.
[...]
Should be change in :
[...]	
	maker cmd: 'add_custom_command' params: 'OUTPUT ', res ,
	'
		COMMAND 	i386-mingw32-windres --include-dir ${targetPlatform}/misc -D_WIN32 -i ${buildDir}/Cog.rc -o ', res , '
		COMMENT "Generating resource file..."
	'.
[...]

PS: i have a old version on my repository (JBARepo) under the CMakerVMMaker, but it is completely deprecated  CMakeVMMaker-jb.121.
PPS : I wish update this code but never spend the time
PPPS: I am available on skype if you want to discuss that.



On Dec 12, 2011, at 4:42 PM, Igor Stasenko wrote:

> 
> On 12 December 2011 16:33, Mariano Martinez Peck <marianopeck at gmail.com> wrote:
>> 
>> Hi JB. Could you please tell me how should I run cmake to build for windows? Is there a specific generator?  because if I run:
>> 
> since you cross-compiling under unix, you use unix makefiles, which is default.
> but to generate windows executable, you need different settings in cmake config.
> like different compilation target (win32 executable, not ELF) etc.
> 
> JB could tell you more :)
> 
>> cmake --help
>> 
>> at the end the only generators I see are:
>> 
>> Generators
>> 
>> The following generators are available on this platform:
>>   Unix Makefiles              = Generates standard UNIX makefiles.
>>   Xcode                       = Generate XCode project files.
>>   CodeBlocks - Unix Makefiles = Generates CodeBlocks project files.
>>   Eclipse CDT4 - Unix Makefiles
>>                               = Generates Eclipse CDT 4.0 project files.
>>   KDevelop3                   = Generates KDevelop 3 project files.
>>   KDevelop3 - Unix Makefiles  = Generates KDevelop 3 project files.
>> 
>> 
>> 
>> Thanks!
>> 
>> On Thu, Jul 7, 2011 at 7:07 PM, Jean Baptiste Arnaud <jbaptiste.arnaud at gmail.com> wrote:
>>> 
>>> 
>>> Since the last Igor ( thank ) update it 's possible to cross compile windows VM(last version) from MacOs and Unix.
>>> 
>>> Using Mingw and cmake.
>>> 
>>> Now, i do for Cog, and for ARM9 processor.
>>> My process imply to fix some window file cause some include are wrong, then it the cross compiler don't find some include beginning by Uppercase(cause the file isn't beginning by uppercase).
>>> In /Platform/win32/vm/sqWin32Intel.c
>>> 
>>> #include <float.h> instead  #include <Float.h>
>>> 
>>> in /Platform/win32/plugin/SocketPlugin/sqWin32NewNet.c
>>> 
>>> #include <ws2tcpip.h> instead #include <Ws2tcpip.h>
>>> 
>>> 
>>> 
>>> Regard
>>> Jean Baptiste Arnaud
>>> jbaptiste.arnaud at gmail.com
>>> 
>>> 
>>> 
>>> 
>>> 
>> 
>> 
>> 
>> --
>> Mariano
>> http://marianopeck.wordpress.com
>> 
>> 
> 
> 
> 
> -- 
> Best regards,
> Igor Stasenko.

Regard
Jean Baptiste Arnaud
jbaptiste.arnaud at gmail.com




-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20111212/23990358/attachment-0001.htm


More information about the Vm-dev mailing list