diff options
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 405 |
1 files changed, 405 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000..e7e944652d --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,405 @@ +# Require at least version 2.8.12 of CMake +cmake_minimum_required(VERSION 2.8.12) + +# Set the project name +project(CoreCLR) + +if(CMAKE_SYSTEM_NAME STREQUAL Linux) + set(CLR_CMAKE_PLATFORM_UNIX 1) + set(CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64 1) +endif(CMAKE_SYSTEM_NAME STREQUAL Linux) + +# Build a list of compiler definitions by putting -D in front of each define. +function(get_compile_definitions DefinitionName) + # Get the current list of definitions + get_directory_property(COMPILE_DEFINITIONS_LIST COMPILE_DEFINITIONS) + + foreach(DEFINITION ${COMPILE_DEFINITIONS_LIST}) + if (${DEFINITION} MATCHES "^\\$<\\$<CONFIG:([^>]+)>:([^>]+)>$") + # The entries that contain generator expressions must have the -D inside of the + # expression. So we transform e.g. $<$<CONFIG:Debug>:_DEBUG> to $<$<CONFIG:Debug>:-D_DEBUG> + set(DEFINITION "$<$<CONFIG:${CMAKE_MATCH_1}>:-D${CMAKE_MATCH_2}>") + else() + set(DEFINITION -D${DEFINITION}) + endif() + set(DEFINITIONS ${DEFINITIONS} ${DEFINITION}) + endforeach() + set(${DefinitionName} ${DEFINITIONS} PARENT_SCOPE) +endfunction(get_compile_definitions DefinitionName) + +# Build a list of include directories by putting -I in front of each include dir. +function(get_include_directories IncludeDirectories) + get_directory_property(dirs INCLUDE_DIRECTORIES) + foreach(dir ${dirs}) + set(INC_DIRECTORIES ${INC_DIRECTORIES} -I${dir}) + endforeach() + set(${IncludeDirectories} ${INC_DIRECTORIES} PARENT_SCOPE) +endfunction(get_include_directories IncludeDirectories) + +# Set the passed in RetSources variable to the list of sources with added current source directory +# to form absolute paths. +# The parameters after the RetSources are the input files. +function(convert_to_absolute_path RetSources) + set(Sources ${ARGN}) + foreach(Source ${Sources}) + set(AbsolutePathSources ${AbsolutePathSources} ${CMAKE_CURRENT_SOURCE_DIR}/${Source}) + endforeach() + set(${RetSources} ${AbsolutePathSources} PARENT_SCOPE) +endfunction(convert_to_absolute_path) + +#Preprocess exports definition file +function(preprocess_def_file inputFilename outputFilename) + get_compile_definitions(PREPROCESS_DEFINITIONS) + + add_custom_command( + OUTPUT ${outputFilename} + COMMAND ${CMAKE_CXX_COMPILER} /P /EP /TC ${PREPROCESS_DEFINITIONS} /Fi${outputFilename} ${inputFilename} + DEPENDS ${inputFilename} + COMMENT "Preprocessing ${inputFilename}" + ) + set_source_files_properties(${outputFilename} + PROPERTIES GENERATED TRUE) +endfunction() + + +# Includes + +if (WIN32) + # For multi-configuration toolset (as Visual Studio) + # set the different configuration defines. + # First DEBUG + foreach (Definition ${CLR_DEFINES_DEBUG_INIT}) + set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:DEBUG>:${Definition}>) + endforeach (Definition ${CLR_DEFINES_DEBUG_INIT}) + + # Then RELEASE + foreach (Definition ${CLR_DEFINES_RELEASE_INIT}) + set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:RELEASE>:${Definition}>) + endforeach (Definition ${CLR_DEFINES_RELEASE_INIT}) + + # And then RELWITHDEBINFO + foreach (Definition ${CLR_DEFINES_RELWITHDEBINFO_INIT}) + set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:RELWITHDEBINFO>:${Definition}>) + endforeach (Definition ${CLR_DEFINES_RELWITHDEBINFO_INIT}) + +elseif (CLR_CMAKE_PLATFORM_UNIX) + # For single-configuration toolset + # set the different configuration defines. + if (CMAKE_BUILD_TYPE STREQUAL DEBUG) + # First DEBUG + set_property(DIRECTORY PROPERTY COMPILE_DEFINITIONS ${CLR_DEFINES_DEBUG_INIT}) + elseif (CMAKE_BUILD_TYPE STREQUAL RELEASE) + # Then RELEASE + set_property(DIRECTORY PROPERTY COMPILE_DEFINITIONS ${CLR_DEFINES_RELEASE_INIT}) + elseif (CMAKE_BUILD_TYPE STREQUAL RELWITHDEBINFO) + # And then RELWITHDEBINFO + set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS ${CLR_DEFINES_RELWITHDEBINFO_INIT}) + else (CMAKE_BUILD_TYPE STREQUAL RELWITHDEBINFO) + message(FATAL_ERROR "Unknown build type! Allowed DEBUG, RELEASE and RELWITHDEBINFO!") + endif (CMAKE_BUILD_TYPE STREQUAL DEBUG) + +endif(WIN32) + +if(CLR_CMAKE_PLATFORM_UNIX) + add_subdirectory(src/pal) + add_subdirectory(src/coreclr/hosts/unixcorerun) +endif(CLR_CMAKE_PLATFORM_UNIX) + +# Set to 1 if you want to clear the CMAKE initial compiler flags and set all the flags explicitly +# or to 0 if the CMake generated flags should be used + +# Enable for UNIX altjit on Windows - set(CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64 1) +# Enable for UNIX altjit on Windows - add_definitions(-DCLR_CMAKE_PLATFORM_UNIX=1) + +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 Linux build + if(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64) + set(IS_64BIT_BUILD 1) + endif (CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64) + + add_definitions(-DFEATURE_IMPLICIT_TLS) +endif(WIN32) + +if (OVERRIDE_CMAKE_CXX_FLAGS) + +# Compile options for targeting windows +if (WIN32) + +# The following options are set by the razzle build +add_compile_options(/TP) # compile all files as C++ +add_compile_options(/FIWarningControl.h) # force include of WarningControl.h +add_compile_options(/Zi) # enable debugging information +add_compile_options(/nologo) # Suppress Startup Banner +add_compile_options(/W3) # set warning level to 3 +add_compile_options(/WX) # treat warnings as errors +add_compile_options(/O1) # minimize space +add_compile_options(/Oi) # enable intrinsics +add_compile_options(/Oy-) # disable suppressing of the creation of frame pointers on the call stack for quicker function calls +add_compile_options(/U_MT) # undefine the predefined _MT macro +add_compile_options(/GF) # enable read-only string pooling +add_compile_options(/Gm-) # disable minimal rebuild +add_compile_options(/EHa) # enable C++ EH (w/ SEH exceptions) +add_compile_options(/Zp8) # pack structs on 8-byte boundary +add_compile_options(/GS) # enable security checks +add_compile_options(/Gy) # separate functions for linker +add_compile_options(/Zc:wchar_t-) # C++ language conformance: wchar_t is NOT the native type, but a typedef +add_compile_options(/Zc:forScope) # C++ language conformance: enforce Standard C++ for scoping rules +add_compile_options(/GR-) # disable C++ RTTI +add_compile_options(/FC) # use full pathnames in diagnostics +add_compile_options(/Zl) # omit default library name in .OBJ +add_compile_options(/MP) # Build with Multiple Processes (number of processes equal to the number of processors) +add_compile_options(/GS) # Buffer Security Check +add_compile_options(/d2Zi+) # make optimized builds debugging easier +add_compile_options(/Zm200) # Specify Precompiled Header Memory Allocation Limit of 150MB +add_compile_options(/wd4960 /wd4961 /wd4603 /wd4627 /wd4838 /wd4456 /wd4457 /wd4458 /wd4459 /wd4091 /we4640) + +if (IS_64BIT_BUILD EQUAL 1) +# The generator expression in the following command means that the /homeparams option is added only for debug builds +add_compile_options($<$<CONFIG:Debug>:/homeparams>) # Force parameters passed in registers to be written to the stack +endif (IS_64BIT_BUILD EQUAL 1) + +# Disable the following line for UNIX altjit on Windows +set(CMAKE_CXX_STANDARD_LIBRARIES "") # do not link against standard win32 libs i.e. kernel32, uuid, user32, etc. + +# Linker flags +# +# Disable the following line for UNIX altjit on Windows +set(CMAKE_SHARED_LINKER_FLAGS "/NODEFAULTLIB") #do not use default libraries when resolving external references +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /MANIFEST:NO") #Do not create Side-by-Side Assembly Manifest +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SUBSYSTEM:WINDOWS,6.00") #windows subsystem +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LARGEADDRESSAWARE") # can handle addresses larger than 2 gigabytes +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /RELEASE") #sets the checksum in the header +if (IS_64BIT_BUILD EQUAL 0) +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO") #Image does not have Safe Exception Handlers..valid only for x86 +endif (IS_64BIT_BUILD EQUAL 0) +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NXCOMPAT") #Compatible with Data Execution Prevention +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DYNAMICBASE") #Use address space layout randomization +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUGTYPE:cv,fixup") #debugging format +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /PDBCOMPRESS") #shrink pdb size +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG /INCREMENTAL:NO /OPT:REF /OPT:ICF /IGNORE:4197,4013,4254,4070,4221") + +# Debug build specific flags +set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "/NOVCFEATURE") + +# Release build specific flags +set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /LTCG") + +# ReleaseWithDebugInfo build specific flags +set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /LTCG") +endif (WIN32) + +endif (OVERRIDE_CMAKE_CXX_FLAGS) + +if(CLR_CMAKE_PLATFORM_UNIX) +add_definitions(-DDISABLE_CONTRACTS) +# The -ferror-limit is helpful during the porting, it makes sure the compiler doesn't stop +# after hitting just about 20 errors. +add_compile_options(-ferror-limit=4096) +# The -w option disables warnings for now, there are hundreds of them and it is hard to +# find the errors in the output. We need to reenable them later though to make sure we don't` +# miss any real issues. +add_compile_options(-w) +# The -fms-extensions enable the stuff like __if_exists, __declspec(uuid()), etc. +add_compile_options(-fms-extensions ) +#-fms-compatibility Enable full Microsoft Visual C++ compatibility +#-fms-extensions Accept some non-standard constructs supported by the Microsoft compiler +# The newer version of clang hits this seemly benign error that this disables. +add_compile_options(-Wno-incompatible-ms-struct) +endif(CLR_CMAKE_PLATFORM_UNIX) + +# Include directory directives + +# Include the basic prebuilt headers - required for getting fileversion resource details. +include_directories("src/pal/prebuilt/inc") + +if (CLR_CMAKE_PLATFORM_UNIX) + include_directories("src/pal/inc") + include_directories("src/pal/inc/rt") + include_directories("src/pal/src/safecrt") +endif (CLR_CMAKE_PLATFORM_UNIX) + +# Libraries + +if (WIN32) + set(STATIC_MT_CRT_LIB "libcmt$<$<CONFIG:Debug>:d>.lib") + set(STATIC_MT_CPP_LIB "libcpmt$<$<CONFIG:Debug>:d>.lib") +endif(WIN32) +# Definition directives + +# The following defines were extracted from the official amd64 debug / release builds. +if (WIN32) + add_definitions(-DFEATURE_EVENT_TRACE=1) +endif (WIN32) + +if (CLR_CMAKE_PLATFORM_UNIX) + add_definitions(-DPLATFORM_UNIX=1) + add_definitions(-D__LINUX__=1) + add_definitions(-DFEATURE_PAL_SXS) + + if(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64) + message("Detected Linux x86_64") + add_definitions(-DLINUX64) + add_definitions(-DBIT64=1) + add_definitions(-DFEATURE_PAL) + else (CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64) + message(FATAL_ERROR "error: Detected non x86_64 target processor. Not supported!") + endif(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64) +endif(CLR_CMAKE_PLATFORM_UNIX) + + +add_definitions(-D_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS) +add_definitions(-DDEV10) +add_definitions(-DWIN32) +add_definitions(-DDEVL=1) +add_definitions(-D_WIN32_WINNT=0x0602) +add_definitions(-D_WIN32_IE=0x0900) +add_definitions(-DWINNT=1) +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_UNIX_TARGET_AMD64) + add_definitions(-DDBG_TARGET_AMD64_UNIX) + endif (CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64) + add_definitions(-D_TARGET_AMD64_=1) + add_definitions(-DDBG_TARGET_AMD64) +else (IS_64BIT_BUILD EQUAL 1) + # TODO: Support this + message(FATAL_ERROR "Not Implemented!") +endif (IS_64BIT_BUILD EQUAL 1) + +if(WIN32) +add_definitions(-D_CRT_SECURE_NO_WARNINGS) +endif(WIN32) +add_definitions(-DNTMAKEENV) +add_definitions(-D_BLD_CLR) +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) +endif(WIN32) +add_definitions(-DFEATURE_APPDOMAIN_RESOURCE_MONITORING) +add_definitions(-DFEATURE_ARRAYSTUB_AS_IL) +if (CLR_CMAKE_PLATFORM_UNIX) + add_definitions(-DFEATURE_STUBS_AS_IL) + add_definitions(-DUNIX_AMD64_ABI) +endif(CLR_CMAKE_PLATFORM_UNIX) +add_definitions(-DFEATURE_ASYNC_IO) +add_definitions(-DFEATURE_BCL_FORMATTING) +if(WIN32) + add_definitions(-DFEATURE_CLASSIC_COMINTEROP) +endif(WIN32) +add_definitions(-DFEATURE_COLLECTIBLE_TYPES) +if(WIN32) + add_definitions(-DFEATURE_APPX) + add_definitions(-DFEATURE_COMINTEROP) + add_definitions(-DFEATURE_COMINTEROP_APARTMENT_SUPPORT) + add_definitions(-DFEATURE_COMINTEROP_UNMANAGED_ACTIVATION) + add_definitions(-DFEATURE_COMINTEROP_WINRT_MANAGED_ACTIVATION) +endif(WIN32) +add_definitions(-DFEATURE_CORECLR) +add_definitions(-DFEATURE_CORESYSTEM) +add_definitions(-DFEATURE_CORRUPTING_EXCEPTIONS) +if(WIN32) + add_definitions(-DFEATURE_CRYPTO) +endif(WIN32) +add_definitions(-DFEATURE_EXCEPTIONDISPATCHINFO) +add_definitions(-DFEATURE_FRAMEWORK_INTERNAL) +if(WIN32) + add_definitions(-DFEATURE_HIJACK) +endif(WIN32) +add_definitions(-DFEATURE_HOST_ASSEMBLY_RESOLVER) +add_definitions(-DFEATURE_HOSTED_BINDER) +if(WIN32) + add_definitions(-DFEATURE_ISOSTORE) + add_definitions(-DFEATURE_ISOSTORE_LIGHT) +endif(WIN32) +add_definitions(-DFEATURE_ISYM_READER) +add_definitions(-DFEATURE_LEGACYNETCF) +if(WIN32) + add_definitions(-DFEATURE_LEGACYNETCFCRYPTO) +endif(WIN32) +add_definitions(-DFEATURE_LEGACYNETCF_DBG_HOST_CONTROL) +add_definitions(-DFEATURE_LEGACYNETCFFAS) +if(WIN32) +add_definitions(-DFEATURE_LEGACYSURFACE) +endif(WIN32) +add_definitions(-DFEATURE_LOADER_OPTIMIZATION) +add_definitions(-DFEATURE_MANAGED_ETW) +add_definitions(-DFEATURE_MANAGED_ETW_CHANNELS) +add_definitions(-DFEATURE_MAIN_CLR_MODULE_USES_CORE_NAME) +add_definitions(-DFEATURE_MERGE_CULTURE_SUPPORT_AND_ENGINE) +if(WIN32) +# Disable the following or UNIX altjit on Windows +add_definitions(-DFEATURE_MERGE_JIT_AND_ENGINE) +endif(WIN32) +add_definitions(-DFEATURE_NORM_IDNA_ONLY) +add_definitions(-DFEATURE_PREJIT) +if(WIN32) + add_definitions(-DFEATURE_RANDOMIZED_STRING_HASHING) +endif(WIN32) +add_definitions(-DFEATURE_STANDALONE_SN) +add_definitions(-DFEATURE_STRONGNAME_DELAY_SIGNING_ALLOWED) +add_definitions(-DFEATURE_STRONGNAME_MIGRATION) +if(WIN32) + add_definitions(-DFEATURE_STRONGNAME_TESTKEY_ALLOWED) +endif(WIN32) +add_definitions(-DFEATURE_SVR_GC) +add_definitions(-DFEATURE_SYNTHETIC_CULTURES) +add_definitions(-DFEATURE_VERSIONING) +if(WIN32) + add_definitions(-DFEATURE_VERSIONING_LOG) +endif(WIN32) +add_definitions(-DFEATURE_WIN32_REGISTRY) +add_definitions(-DFEATURE_WINDOWSPHONE) +add_definitions(-DFEATURE_WINMD_RESILIENT) +if(WIN32) + add_definitions(-DFEATURE_X509) + add_definitions(-DFEATURE_X509_SECURESTRINGS) + add_definitions(-DPROFILING_SUPPORTED) +endif(WIN32) +add_definitions(-DFEATURE_MULTICOREJIT) +add_definitions(-DFEATURE_USE_ASM_GC_WRITE_BARRIERS) +add_definitions(-DFEATURE_SYMDIFF) + +if (IS_64BIT_BUILD EQUAL 1) +add_definitions(-D_AMD64_) +add_definitions(-D_AMD64_SIMULATOR_) +add_definitions(-D_AMD64_SIMULATOR_PERF_) +add_definitions(-D_AMD64_WORKAROUND_) +add_definitions(-D_WIN64) +add_definitions(-DAMD64) +else (IS_64BIT_BUILD EQUAL 1) +# TODO - Support this +endif (IS_64BIT_BUILD EQUAL 1) + +add_definitions(-D_SKIP_IF_SIMULATOR_) +add_definitions(-D_SECURE_SCL=0) +add_definitions(-D_NEW_SDK=1) +add_definitions(-DOFFICIAL_BUILD=0) +add_definitions(-DBETA=0) +add_definitions(-DFX_BRANCH_SYNC_COUNTER_VALUE=0) +add_definitions(-DUNICODE) +add_definitions(-D_UNICODE) + +if (IS_64BIT_BUILD EQUAL 1) + set(ARCH_SOURCES_DIR amd64) +else (IS_64BIT_BUILD EQUAL 1) + set(ARCH_SOURCES_DIR i386) +endif (IS_64BIT_BUILD EQUAL 1) + +set(CLR_DIR ${CMAKE_CURRENT_SOURCE_DIR}) +set(VM_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/vm) + +add_subdirectory(src) |