summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorMike Danes <onemihaid@hotmail.com>2015-08-01 11:04:16 +0300
committerMike Danes <onemihaid@hotmail.com>2015-08-04 11:00:34 +0300
commit8bb8ed66e4e54270e18e68c37515f21730c82cea (patch)
treea8f713371002b0a037965b4020ffd254a1de73aa /CMakeLists.txt
parentfd1fbb93e8435c371dea39f16c0cf6d030b8c7dd (diff)
downloadcoreclr-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.txt47
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_)