diff options
author | Mike Danes <onemihaid@hotmail.com> | 2015-08-01 11:04:16 +0300 |
---|---|---|
committer | Mike Danes <onemihaid@hotmail.com> | 2015-08-04 11:00:34 +0300 |
commit | 8bb8ed66e4e54270e18e68c37515f21730c82cea (patch) | |
tree | a8f713371002b0a037965b4020ffd254a1de73aa /CMakeLists.txt | |
parent | fd1fbb93e8435c371dea39f16c0cf6d030b8c7dd (diff) | |
download | coreclr-8bb8ed66e4e54270e18e68c37515f21730c82cea.tar.gz coreclr-8bb8ed66e4e54270e18e68c37515f21730c82cea.tar.bz2 coreclr-8bb8ed66e4e54270e18e68c37515f21730c82cea.zip |
Enable the Windows x86 build
This allows building the Windows x86 version of CoreCLR by using "x86" for the BuildArch parameter of build.cmd. Note that CMAKE_SYSTEM_PROCESSOR is no longer used in Windows builds to set IS_64BIT_BUILD.
This change is enough to get CoreCLR to build but more changes are required for it to actually run correctly. In particular, the JIT compiler support for x86 is pretty limited at this point.
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 47 |
1 files changed, 34 insertions, 13 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index c450ac5a90..e78fa91519 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,14 @@ set(CLR_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(VM_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/vm) set(GENERATED_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/src/inc) +function(clr_unknown_arch) + if (WIN32) + message(FATAL_ERROR "Only AMD64 and I386 are supported") + else() + message(FATAL_ERROR "Only AMD64, ARM64 and ARM are supported") + endif() +endfunction() + if(CMAKE_SYSTEM_NAME STREQUAL Linux) set(CLR_CMAKE_PLATFORM_UNIX 1) if(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64) @@ -29,7 +37,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL Linux) elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64) set(CLR_CMAKE_PLATFORM_UNIX_TARGET_ARM64 1) else() - message(FATAL_ERROR "Only AMD64 and ARM supported") + clr_unknown_arch() endif() set(CLR_CMAKE_PLATFORM_LINUX 1) endif(CMAKE_SYSTEM_NAME STREQUAL Linux) @@ -66,7 +74,15 @@ elseif(CLR_CMAKE_PLATFORM_UNIX_TARGET_ARM64) elseif(CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64) set(CLR_CMAKE_PLATFORM_ARCH_AMD64 1) elseif(WIN32) - set(CLR_CMAKE_PLATFORM_ARCH_AMD64 1) + if (CLR_CMAKE_TARGET_ARCH STREQUAL x64) + set(CLR_CMAKE_PLATFORM_ARCH_AMD64 1) + set(IS_64BIT_BUILD 1) + elseif(CLR_CMAKE_TARGET_ARCH STREQUAL x86) + set(CLR_CMAKE_PLATFORM_ARCH_I386 1) + set(IS_64BIT_BUILD 0) + else() + clr_unknown_arch() + endif() endif() if(WIN32) @@ -226,12 +242,6 @@ add_subdirectory(src/pal/prebuilt/inc) if (WIN32) set(OVERRIDE_CMAKE_CXX_FLAGS 1) - - # Set flag to indicate if this will be a 64bit Windows build - if(CMAKE_SYSTEM_PROCESSOR STREQUAL AMD64) - set(IS_64BIT_BUILD 1) - endif (CMAKE_SYSTEM_PROCESSOR STREQUAL AMD64) - elseif (CLR_CMAKE_PLATFORM_UNIX) # Set flag to indicate if this will be a 64bit build # CMAKE_SYSTEM_PROCESSOR returns the value of `uname -p`. @@ -278,6 +288,10 @@ add_compile_options(/wd4960 /wd4961 /wd4603 /wd4627 /wd4838 /wd4456 /wd4457 /wd4 add_compile_options(/O1) # minimize space add_compile_options(/Zi) # enable debugging information +if (CLR_CMAKE_PLATFORM_ARCH_I386) + add_compile_options(/Gz) +endif (CLR_CMAKE_PLATFORM_ARCH_I386) + add_compile_options($<$<OR:$<CONFIG:Release>,$<CONFIG:Relwithdebinfo>>:/GL>) if (IS_64BIT_BUILD EQUAL 1) @@ -409,7 +423,7 @@ if (CLR_CMAKE_PLATFORM_UNIX) message("Detected Linux ARM64") add_definitions(-DLINUX64) else() - message(FATAL_ERROR "Only ARM, ARM64 and AMD supported") + clr_unknown_arch() endif() endif(CLR_CMAKE_PLATFORM_LINUX) @@ -454,9 +468,11 @@ elseif (CLR_CMAKE_PLATFORM_ARCH_ARM) endif (CLR_CMAKE_PLATFORM_UNIX_TARGET_ARM) add_definitions(-D_TARGET_ARM_=1) add_definitions(-DDBG_TARGET_ARM) +elseif (CLR_CMAKE_PLATFORM_ARCH_I386) + add_definitions(-D_TARGET_X86_=1) + add_definitions(-DDBG_TARGET_X86) else () - # TODO: Support this - message(FATAL_ERROR "Not Implemented!") + clr_unknown_arch() endif (IS_64BIT_BUILD EQUAL 1) if(WIN32) @@ -472,7 +488,9 @@ if(WIN32) add_definitions(-DEnC_SUPPORTED) endif(WIN32) add_definitions(-DFEATURE_APPDOMAIN_RESOURCE_MONITORING) -add_definitions(-DFEATURE_ARRAYSTUB_AS_IL) +if(CLR_CMAKE_PLATFORM_ARCH_AMD64 OR CLR_CMAKE_PLATFORM_ARCH_ARM OR CLR_CMAKE_PLATFORM_ARCH_ARM64) + add_definitions(-DFEATURE_ARRAYSTUB_AS_IL) +endif() if (CLR_CMAKE_PLATFORM_UNIX) add_definitions(-DFEATURE_STUBS_AS_IL) if (CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64) @@ -577,6 +595,9 @@ if (CLR_CMAKE_PLATFORM_ARCH_AMD64) add_definitions(-D_AMD64_WORKAROUND_) add_definitions(-D_WIN64) add_definitions(-DAMD64) +elseif (CLR_CMAKE_PLATFORM_ARCH_I386) + add_definitions(-D_WIN32) + add_definitions(-D_X86_) elseif (CLR_CMAKE_PLATFORM_ARCH_ARM) add_definitions(-D_ARM_) add_definitions(-DARM) @@ -586,7 +607,7 @@ elseif (CLR_CMAKE_PLATFORM_ARCH_ARM64) add_definitions(-DARM64) add_definitions(-D_WIN64) else () - message(FATAL_ERROR "Only ARM, ARM64 and AMD64 supported") + clr_unknown_arch() endif () add_definitions(-D_SKIP_IF_SIMULATOR_) |