summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt86
1 files changed, 55 insertions, 31 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1792020f48..0c56b582d4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -17,7 +17,7 @@ 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")
+ message(FATAL_ERROR "Only AMD64, ARM64 and I386 are supported")
else()
message(FATAL_ERROR "Only AMD64, ARM64 and ARM are supported")
endif()
@@ -80,6 +80,19 @@ elseif(WIN32)
elseif(CLR_CMAKE_TARGET_ARCH STREQUAL x86)
set(CLR_CMAKE_PLATFORM_ARCH_I386 1)
set(IS_64BIT_BUILD 0)
+ elseif(CLR_CMAKE_TARGET_ARCH STREQUAL arm64)
+ set(CLR_CMAKE_PLATFORM_ARCH_ARM64 1)
+ set(IS_64BIT_BUILD 1)
+
+ # CMAKE_CXX_COMPILER will default to the compiler installed with
+ # Visual studio. Overwrite it to the compiler on the path.
+ # TODO, remove when cmake generator supports Arm64 as a target.
+
+ find_program(PATH_CXX_COMPILER cl)
+ set(CMAKE_CXX_COMPILER ${PATH_CXX_COMPILER})
+
+ message("Overwriting the CMAKE_CXX_COMPILER.")
+ message(CMAKE_CXX_COMPILER found:${CMAKE_CXX_COMPILER})
else()
clr_unknown_arch()
endif()
@@ -145,6 +158,7 @@ function(preprocess_def_file inputFilename outputFilename)
DEPENDS ${inputFilename}
COMMENT "Preprocessing ${inputFilename}"
)
+
set_source_files_properties(${outputFilename}
PROPERTIES GENERATED TRUE)
endfunction()
@@ -324,8 +338,6 @@ elseif (CLR_CMAKE_PLATFORM_UNIX)
if(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL amd64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64)
set(IS_64BIT_BUILD 1)
endif (CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL amd64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64)
-
- add_definitions(-DFEATURE_IMPLICIT_TLS)
endif(WIN32)
if (OVERRIDE_CMAKE_CXX_FLAGS)
@@ -408,6 +420,13 @@ set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWIT
set(CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO} /LTCG")
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /LTCG /OPT:REF /OPT:ICF")
+# Temporary until cmake has VS generators for arm64
+if(CLR_CMAKE_PLATFORM_ARCH_ARM64)
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /machine:arm64")
+ set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /machine:arm64")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /machine:arm64")
+endif(CLR_CMAKE_PLATFORM_ARCH_ARM64)
+
endif (WIN32)
endif (OVERRIDE_CMAKE_CXX_FLAGS)
@@ -517,20 +536,18 @@ add_definitions(-DNT_INST=0)
add_definitions(-DCONDITION_HANDLING=1)
add_definitions(-DNTDDI_VERSION=NTDDI_WIN8)
-if (IS_64BIT_BUILD EQUAL 1)
+if (CLR_CMAKE_PLATFORM_ARCH_AMD64)
if (CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64)
add_definitions(-DDBG_TARGET_AMD64_UNIX)
- add_definitions(-D_TARGET_AMD64_=1)
- add_definitions(-DDBG_TARGET_AMD64)
- elseif (CLR_CMAKE_PLATFORM_UNIX_TARGET_ARM64)
+ endif()
+ add_definitions(-D_TARGET_AMD64_=1)
+ add_definitions(-DDBG_TARGET_AMD64)
+elseif(CLR_CMAKE_PLATFORM_ARCH_ARM64)
+ if (CLR_CMAKE_PLATFORM_UNIX_TARGET_ARM64)
add_definitions(-DDBG_TARGET_ARM64_UNIX)
- add_definitions(-D_TARGET_ARM64_=1)
- add_definitions(-DDBG_TARGET_ARM64)
- else ()
- # Windows is assumed in this path -- fix this
- add_definitions(-DDBG_TARGET_AMD64)
- add_definitions(-D_TARGET_AMD64_=1)
- endif (CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64)
+ endif()
+ add_definitions(-D_TARGET_ARM64_=1)
+ add_definitions(-DDBG_TARGET_ARM64)
elseif (CLR_CMAKE_PLATFORM_ARCH_ARM)
if (CLR_CMAKE_PLATFORM_UNIX_TARGET_ARM)
add_definitions(-DDBG_TARGET_ARM_UNIX)
@@ -542,7 +559,7 @@ elseif (CLR_CMAKE_PLATFORM_ARCH_I386)
add_definitions(-DDBG_TARGET_X86)
else ()
clr_unknown_arch()
-endif (IS_64BIT_BUILD EQUAL 1)
+endif (CLR_CMAKE_PLATFORM_ARCH_AMD64)
if(WIN32)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
@@ -553,15 +570,24 @@ add_definitions(-DWINVER=0x0602)
add_definitions(-DWIN32_LEAN_AND_MEAN=1)
add_definitions(-DDEBUGGING_SUPPORTED)
if(WIN32)
- # Disable edit and continue on Linux
- add_definitions(-DEnC_SUPPORTED)
+ if(CLR_CMAKE_PLATFORM_ARCH_AMD64 OR CLR_CMAKE_PLATFORM_ARCH_I386)
+ # Only enable edit and continue on windows x86 and x64
+ # exclude Linux, arm & arm64
+ add_definitions(-DEnC_SUPPORTED)
+ endif(CLR_CMAKE_PLATFORM_ARCH_AMD64 OR CLR_CMAKE_PLATFORM_ARCH_I386)
endif(WIN32)
add_definitions(-DFEATURE_APPDOMAIN_RESOURCE_MONITORING)
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)
+
+if (CLR_CMAKE_PLATFORM_UNIX OR CLR_CMAKE_PLATFORM_ARCH_ARM64)
add_definitions(-DFEATURE_STUBS_AS_IL)
+ add_definitions(-DFEATURE_IMPLICIT_TLS)
+ set(FEATURE_IMPLICIT_TLS 1)
+endif()
+
+if (CLR_CMAKE_PLATFORM_UNIX)
if (CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64)
add_definitions(-DUNIX_AMD64_ABI)
elseif (CLR_CMAKE_PLATFORM_UNIX_TARGET_ARM)
@@ -622,7 +648,10 @@ endif(WIN32)
add_definitions(-DFEATURE_NORM_IDNA_ONLY)
add_definitions(-DFEATURE_PREJIT)
add_definitions(-DFEATURE_RANDOMIZED_STRING_HASHING)
-add_definitions(-DFEATURE_READYTORUN)
+if(NOT DEFINED CLR_CMAKE_PLATFORM_ARCH_ARM64)
+ add_definitions(-DFEATURE_READYTORUN)
+ set(FEATURE_READYTORUN 1)
+endif(NOT DEFINED CLR_CMAKE_PLATFORM_ARCH_ARM64)
add_definitions(-DFEATURE_STANDALONE_SN)
add_definitions(-DFEATURE_STRONGNAME_DELAY_SIGNING_ALLOWED)
add_definitions(-DFEATURE_STRONGNAME_MIGRATION)
@@ -693,21 +722,16 @@ add_definitions(-DFX_BRANCH_SYNC_COUNTER_VALUE=0)
add_definitions(-DUNICODE)
add_definitions(-D_UNICODE)
-if (IS_64BIT_BUILD EQUAL 1)
- if (CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64 EQUAL 1)
+if (CLR_CMAKE_PLATFORM_ARCH_AMD64)
set(ARCH_SOURCES_DIR amd64)
- elseif (CLR_CMAKE_PLATFORM_UNIX_TARGET_ARM64 EQUAL 1)
+elseif (CLR_CMAKE_PLATFORM_ARCH_ARM64)
set(ARCH_SOURCES_DIR arm64)
- else ()
- # Windows is assumed in this path -- fix this
- set(ARCH_SOURCES_DIR amd64)
- endif ()
-else ()
- if (CLR_CMAKE_PLATFORM_ARCH_ARM)
+elseif (CLR_CMAKE_PLATFORM_ARCH_ARM)
set(ARCH_SOURCES_DIR arm)
- else ()
+elseif (CLR_CMAKE_PLATFORM_ARCH_I386)
set(ARCH_SOURCES_DIR i386)
- endif ()
-endif (IS_64BIT_BUILD EQUAL 1)
+else ()
+ clr_unknown_arch()
+endif ()
add_subdirectory(src)