summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt7
-rw-r--r--configurecompiler.cmake32
-rw-r--r--configureoptimization.cmake22
-rw-r--r--src/dlls/mscorpe/CMakeLists.txt5
-rw-r--r--src/jit/CMakeLists.txt1
-rw-r--r--src/pal/tools/clang-compiler-override-arm.txt20
-rw-r--r--src/pal/tools/clang-compiler-override.txt20
-rw-r--r--src/pal/tools/gcc-compiler-override.txt20
-rwxr-xr-xsrc/pal/tools/gen-buildsys-clang.sh17
-rwxr-xr-xsrc/pal/tools/gen-buildsys-gcc.sh11
-rw-r--r--src/pal/tools/gen-buildsys-win.bat3
-rw-r--r--src/pal/tools/windows-compiler-override.txt16
-rw-r--r--tests/CMakeLists.txt11
13 files changed, 79 insertions, 106 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7d6ba418c1..ca5a69b544 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -5,13 +5,18 @@ if(CMAKE_VERSION VERSION_EQUAL 3.0 OR CMAKE_VERSION VERSION_GREATER 3.0)
cmake_policy(SET CMP0042 NEW)
endif()
+if (NOT WIN32)
+ set(CMAKE_CXX_FLAGS_INIT "${CMAKE_CXX_FLAGS_INIT} -std=c++11" CACHE STRING "Flags used by the compiler during all build types.")
+ set(CMAKE_C_FLAGS_INIT "${CMAKE_C_FLAGS_INIT} -std=c11" CACHE STRING "Flags used by the compiler during all build types.")
+endif()
+
# Set the project name
project(CoreCLR)
# Include cmake functions
include(functions.cmake)
-# Include global configure settings
+# Verify that LTCG/LTO is available
include(configure.cmake)
if (WIN32)
diff --git a/configurecompiler.cmake b/configurecompiler.cmake
index 38d8d4393d..5b6d76732c 100644
--- a/configurecompiler.cmake
+++ b/configurecompiler.cmake
@@ -1,3 +1,12 @@
+# Set initial flags for each configuration
+
+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
+
+set(CLR_DEFINES_DEBUG_INIT DEBUG _DEBUG _DBG URTBLDENV_FRIENDLY=Checked BUILDENV_CHECKED=1)
+set(CLR_DEFINES_CHECKED_INIT DEBUG _DEBUG _DBG URTBLDENV_FRIENDLY=Checked BUILDENV_CHECKED=1)
+set(CLR_DEFINES_RELEASE_INIT NDEBUG URTBLDENV_FRIENDLY=Retail)
+set(CLR_DEFINES_RELWITHDEBINFO_INIT NDEBUG URTBLDENV_FRIENDLY=Retail)
+
#----------------------------------------
# Detect and set platform variable names
# - for non-windows build platform & architecture is detected using inbuilt CMAKE variables and cross target component configure
@@ -174,12 +183,27 @@ endif()
# Initialize Cmake compiler flags and other variables
#-----------------------------------------------------
+if(WIN32)
+ add_compile_options(/Zi /FC /Zc:strictStrings)
+elseif (CLR_CMAKE_PLATFORM_UNIX)
+ add_compile_options(-g)
+ # We need to add -Wall to CMAKE_<LANG>_FLAGS since add_compile_options takes precedence
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
+ if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+ add_compile_options(-Wno-null-conversion)
+ else()
+ # We need to add -Werror=conversion-null to CMAKE_<LANG>_FLAGS since add_compile_options takes precedence
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=conversion-null")
+ endif()
+endif()
+
if (CMAKE_CONFIGURATION_TYPES) # multi-configuration generator?
set(CMAKE_CONFIGURATION_TYPES "Debug;Checked;Release;RelWithDebInfo" CACHE STRING "" FORCE)
endif (CMAKE_CONFIGURATION_TYPES)
-set(CMAKE_C_FLAGS_CHECKED ${CLR_C_FLAGS_CHECKED_INIT} CACHE STRING "Flags used by the compiler during checked builds.")
-set(CMAKE_CXX_FLAGS_CHECKED ${CLR_CXX_FLAGS_CHECKED_INIT} CACHE STRING "Flags used by the compiler during checked builds.")
+set(CMAKE_C_FLAGS_CHECKED "")
+set(CMAKE_CXX_FLAGS_CHECKED "")
set(CMAKE_EXE_LINKER_FLAGS_CHECKED "")
set(CMAKE_SHARED_LINKER_FLAGS_CHECKED "")
@@ -263,7 +287,7 @@ elseif (CLR_CMAKE_PLATFORM_UNIX)
# set the different configuration defines.
if (UPPERCASE_CMAKE_BUILD_TYPE STREQUAL DEBUG)
# First DEBUG
- set_property(DIRECTORY PROPERTY COMPILE_DEFINITIONS ${CLR_DEFINES_DEBUG_INIT})
+ set_property(DIRECTORY PROPERTY COMPILE_DEFINITIONS ${CLR_DEFINES_DEBUG_INIT})
elseif (UPPERCASE_CMAKE_BUILD_TYPE STREQUAL CHECKED)
# Then CHECKED
set_property(DIRECTORY PROPERTY COMPILE_DEFINITIONS ${CLR_DEFINES_CHECKED_INIT})
@@ -604,3 +628,5 @@ if(CLR_CMAKE_ENABLE_CODE_COVERAGE)
endif(CLR_CMAKE_PLATFORM_UNIX)
endif(CLR_CMAKE_ENABLE_CODE_COVERAGE)
+
+include(${CMAKE_CURRENT_LIST_DIR}/configureoptimization.cmake)
diff --git a/configureoptimization.cmake b/configureoptimization.cmake
new file mode 100644
index 0000000000..ad9f4a4907
--- /dev/null
+++ b/configureoptimization.cmake
@@ -0,0 +1,22 @@
+if(WIN32)
+ add_compile_options($<$<CONFIG:Debug>:/Od>)
+ add_compile_options($<$<CONFIG:Checked>:/O1>)
+ add_compile_options($<$<CONFIG:Release>:/Ox>)
+ add_compile_options($<$<CONFIG:RelWithDebInfo>:/O2>)
+elseif(CLR_CMAKE_PLATFORM_UNIX)
+ set(CLR_CMAKE_ARM_OPTIMIZATION_FALLBACK OFF)
+ if(CLR_CMAKE_TARGET_ARCH STREQUAL "arm" OR CLR_CMAKE_TARGET_ARCH STREQUAL "armel")
+ if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.9))
+ set(CLR_CMAKE_ARM_OPTIMIZATION_FALLBACK ON)
+ endif()
+ endif()
+ add_compile_options($<$<CONFIG:Debug>:-O0>)
+ if (CLR_CMAKE_ARM_OPTIMIZATION_FALLBACK)
+ add_compile_options($<$<NOT:$<CONFIG:Debug>>:-O1>)
+ else()
+ add_compile_options($<$<CONFIG:Checked>:-O2>)
+ add_compile_options($<$<CONFIG:Release>:-O3>)
+ add_compile_options($<$<CONFIG:RelWithDebInfo>:-O2>)
+ endif()
+
+endif()
diff --git a/src/dlls/mscorpe/CMakeLists.txt b/src/dlls/mscorpe/CMakeLists.txt
index 2e91a02f51..43deb47ec9 100644
--- a/src/dlls/mscorpe/CMakeLists.txt
+++ b/src/dlls/mscorpe/CMakeLists.txt
@@ -9,10 +9,9 @@ set(MSCORPE_SOURCES
ceefilegenwritertokens.cpp
)
-if(WIN32)
-else()
+if(NOT WIN32)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-delete-non-virtual-dtor")
-endif(WIN32)
+endif()
add_library_clr(mscorpe STATIC
${MSCORPE_SOURCES}
diff --git a/src/jit/CMakeLists.txt b/src/jit/CMakeLists.txt
index 4334cd8ee2..c246efa2ab 100644
--- a/src/jit/CMakeLists.txt
+++ b/src/jit/CMakeLists.txt
@@ -1,5 +1,4 @@
set(CMAKE_INCLUDE_CURRENT_DIR ON)
-set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
include_directories("./jitstd")
include_directories("../inc")
diff --git a/src/pal/tools/clang-compiler-override-arm.txt b/src/pal/tools/clang-compiler-override-arm.txt
deleted file mode 100644
index da25715ade..0000000000
--- a/src/pal/tools/clang-compiler-override-arm.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-SET (CMAKE_C_FLAGS_INIT "-Wall -std=c11")
-SET (CMAKE_C_FLAGS_DEBUG_INIT "-g -O0")
-SET (CLR_C_FLAGS_CHECKED_INIT "-g -O1")
-# Refer to the below instruction to support __thread with -O2/-O3 on Linux/ARM
-# https://github.com/dotnet/coreclr/blob/master/Documentation/building/linux-instructions.md
-SET (CMAKE_C_FLAGS_RELEASE_INIT "-g -O1")
-SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-g -O1")
-
-SET (CMAKE_CXX_FLAGS_INIT "-Wall -Wno-null-conversion -std=c++11")
-SET (CMAKE_CXX_FLAGS_DEBUG_INIT "-g -O0")
-SET (CLR_CXX_FLAGS_CHECKED_INIT "-g -O1")
-SET (CMAKE_CXX_FLAGS_RELEASE_INIT "-g -O1")
-SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-g -O1")
-
-SET (CLR_DEFINES_DEBUG_INIT DEBUG _DEBUG _DBG URTBLDENV_FRIENDLY=Checked BUILDENV_CHECKED=1)
-SET (CLR_DEFINES_CHECKED_INIT DEBUG _DEBUG _DBG URTBLDENV_FRIENDLY=Checked BUILDENV_CHECKED=1)
-SET (CLR_DEFINES_RELEASE_INIT NDEBUG URTBLDENV_FRIENDLY=Retail)
-SET (CLR_DEFINES_RELWITHDEBINFO_INIT NDEBUG URTBLDENV_FRIENDLY=Retail)
-
-SET (CMAKE_INSTALL_PREFIX $ENV{__CMakeBinDir})
diff --git a/src/pal/tools/clang-compiler-override.txt b/src/pal/tools/clang-compiler-override.txt
deleted file mode 100644
index ee1e63b63b..0000000000
--- a/src/pal/tools/clang-compiler-override.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-SET (CMAKE_C_FLAGS_INIT "-Wall -std=c11")
-SET (CMAKE_C_FLAGS_DEBUG_INIT "-g -O0")
-SET (CLR_C_FLAGS_CHECKED_INIT "-g -O2")
-# Refer to the below instruction to support __thread with -O2/-O3 on Linux/ARM
-# https://github.com/dotnet/coreclr/blob/master/Documentation/building/linux-instructions.md
-SET (CMAKE_C_FLAGS_RELEASE_INIT "-g -O3")
-SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-g -O2")
-
-SET (CMAKE_CXX_FLAGS_INIT "-Wall -Wno-null-conversion -std=c++11")
-SET (CMAKE_CXX_FLAGS_DEBUG_INIT "-g -O0")
-SET (CLR_CXX_FLAGS_CHECKED_INIT "-g -O2")
-SET (CMAKE_CXX_FLAGS_RELEASE_INIT "-g -O3")
-SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-g -O2")
-
-SET (CLR_DEFINES_DEBUG_INIT DEBUG _DEBUG _DBG URTBLDENV_FRIENDLY=Checked BUILDENV_CHECKED=1)
-SET (CLR_DEFINES_CHECKED_INIT DEBUG _DEBUG _DBG URTBLDENV_FRIENDLY=Checked BUILDENV_CHECKED=1)
-SET (CLR_DEFINES_RELEASE_INIT NDEBUG URTBLDENV_FRIENDLY=Retail)
-SET (CLR_DEFINES_RELWITHDEBINFO_INIT NDEBUG URTBLDENV_FRIENDLY=Retail)
-
-SET (CMAKE_INSTALL_PREFIX $ENV{__CMakeBinDir})
diff --git a/src/pal/tools/gcc-compiler-override.txt b/src/pal/tools/gcc-compiler-override.txt
deleted file mode 100644
index 337d41af16..0000000000
--- a/src/pal/tools/gcc-compiler-override.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-SET (CMAKE_C_FLAGS_INIT "-Wall -std=c11")
-SET (CMAKE_C_FLAGS_DEBUG_INIT "-g -O0")
-SET (CLR_C_FLAGS_CHECKED_INIT "-g -O2")
-# Refer to the below instruction to support __thread with -O2/-O3 on Linux/ARM
-# https://github.com/dotnet/coreclr/blob/master/Documentation/building/linux-instructions.md
-SET (CMAKE_C_FLAGS_RELEASE_INIT "-g -O3")
-SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-g -O2")
-
-SET (CMAKE_CXX_FLAGS_INIT "-Wall -Werror=conversion-null -std=c++11")
-SET (CMAKE_CXX_FLAGS_DEBUG_INIT "-g -O0")
-SET (CLR_CXX_FLAGS_CHECKED_INIT "-g -O2")
-SET (CMAKE_CXX_FLAGS_RELEASE_INIT "-g -O3")
-SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-g -O2")
-
-SET (CLR_DEFINES_DEBUG_INIT DEBUG _DEBUG _DBG URTBLDENV_FRIENDLY=Checked BUILDENV_CHECKED=1)
-SET (CLR_DEFINES_CHECKED_INIT DEBUG _DEBUG _DBG URTBLDENV_FRIENDLY=Checked BUILDENV_CHECKED=1)
-SET (CLR_DEFINES_RELEASE_INIT NDEBUG URTBLDENV_FRIENDLY=Retail)
-SET (CLR_DEFINES_RELWITHDEBINFO_INIT NDEBUG URTBLDENV_FRIENDLY=Retail)
-
-SET (CMAKE_INSTALL_PREFIX $ENV{__CMakeBinDir})
diff --git a/src/pal/tools/gen-buildsys-clang.sh b/src/pal/tools/gen-buildsys-clang.sh
index 8f9881ba0c..125a1580d7 100755
--- a/src/pal/tools/gen-buildsys-clang.sh
+++ b/src/pal/tools/gen-buildsys-clang.sh
@@ -147,19 +147,9 @@ if [ "$build_arch" == "armel" ]; then
cmake_extra_defines="$cmake_extra_defines -DARM_SOFTFP=1"
fi
-clang_version=$( $CC --version | head -1 | sed 's/[^0-9]*\([0-9]*\.[0-9]*\).*/\1/' )
-# Use O1 option when the clang version is smaller than 3.9
-# Otherwise use O3 option in release build
-if [[ ( ${clang_version%.*} -eq 3 && ${clang_version#*.} -lt 9 ) &&
- ( "$build_arch" == "arm" || "$build_arch" == "armel" ) ]]; then
- overridefile=clang-compiler-override-arm.txt
-else
- overridefile=clang-compiler-override.txt
-fi
-
__currentScriptDir="$script_dir"
-cmake_command=cmake
+cmake_command=$(command -v cmake3 || command -v cmake)
if [[ "$scan_build" == "ON" ]]; then
export CCC_CC=$CC
@@ -168,17 +158,18 @@ if [[ "$scan_build" == "ON" ]]; then
cmake_command="$SCAN_BUILD_COMMAND $cmake_command"
fi
+# Include CMAKE_USER_MAKE_RULES_OVERRIDE as uninitialized since it will hold its value in the CMake cache otherwise can cause issues when branch switching
$cmake_command \
-G "$generator" \
- "-DCMAKE_USER_MAKE_RULES_OVERRIDE=${__currentScriptDir}/$overridefile" \
"-DCMAKE_AR=$llvm_ar" \
"-DCMAKE_LINKER=$llvm_link" \
"-DCMAKE_NM=$llvm_nm" \
"-DCMAKE_OBJDUMP=$llvm_objdump" \
"-DCMAKE_BUILD_TYPE=$buildtype" \
- "-DCMAKE_EXPORT_COMPILE_COMMANDS=1 " \
"-DCLR_CMAKE_ENABLE_CODE_COVERAGE=$code_coverage" \
+ "-DCMAKE_INSTALL_PREFIX=$__CMakeBinDir" \
"-DCLR_CMAKE_COMPILER=Clang" \
+ "-DCMAKE_USER_MAKE_RULES_OVERRIDE=" \
$cmake_extra_defines \
$__UnprocessedCMakeArgs \
"$1"
diff --git a/src/pal/tools/gen-buildsys-gcc.sh b/src/pal/tools/gen-buildsys-gcc.sh
index 2faf29a887..911324415e 100755
--- a/src/pal/tools/gen-buildsys-gcc.sh
+++ b/src/pal/tools/gen-buildsys-gcc.sh
@@ -158,13 +158,13 @@ if [ "$build_arch" = "armel" ]; then
cmake_extra_defines="$cmake_extra_defines -DARM_SOFTFP=1"
fi
-overridefile=gcc-compiler-override.txt
-
__currentScriptDir="$script_dir"
-cmake \
+cmake_command=$(command -v cmake3 || command -v cmake)
+
+# Include CMAKE_USER_MAKE_RULES_OVERRIDE as uninitialized since it will hold its value in the CMake cache otherwise can cause issues when branch switching
+$cmake_command \
-G "$generator" \
- "-DCMAKE_USER_MAKE_RULES_OVERRIDE=${__currentScriptDir}/$overridefile" \
"-DCMAKE_AR=$gcc_ar" \
"-DCMAKE_LINKER=$gcc_link" \
"-DCMAKE_NM=$gcc_nm" \
@@ -172,9 +172,10 @@ cmake \
"-DCMAKE_OBJCOPY=$gcc_objcopy" \
"-DCMAKE_OBJDUMP=$gcc_objdump" \
"-DCMAKE_BUILD_TYPE=$buildtype" \
- "-DCMAKE_EXPORT_COMPILE_COMMANDS=1 " \
"-DCLR_CMAKE_ENABLE_CODE_COVERAGE=$code_coverage" \
"-DCLR_CMAKE_COMPILER=GNU" \
+ "-DCMAKE_USER_MAKE_RULES_OVERRIDE=" \
+ "-DCMAKE_INSTALL_PREFIX=$__CMakeBinDir" \
$cmake_extra_defines \
"$__UnprocessedCMakeArgs" \
"$1"
diff --git a/src/pal/tools/gen-buildsys-win.bat b/src/pal/tools/gen-buildsys-win.bat
index a3df018d06..093cf34e7e 100644
--- a/src/pal/tools/gen-buildsys-win.bat
+++ b/src/pal/tools/gen-buildsys-win.bat
@@ -44,8 +44,9 @@ if defined CMakePath goto DoGen
:: Eval the output from set-cmake-path.ps1
for /f "delims=" %%a in ('powershell -NoProfile -ExecutionPolicy ByPass "& "%basePath%\set-cmake-path.ps1""') do %%a
+
:DoGen
-"%CMakePath%" "-DCMAKE_USER_MAKE_RULES_OVERRIDE=%basePath%\windows-compiler-override.txt" "-DCMAKE_INSTALL_PREFIX=%__CMakeBinDir%" "-DCLR_CMAKE_HOST_ARCH=%__Arch%" %__ExtraCmakeParams% -G "%__CmakeGenerator%" %__SourceDir%
+"%CMakePath%" -DCMAKE_USER_MAKE_RULES_OVERRIDE= "-DCMAKE_INSTALL_PREFIX=%__CMakeBinDir%" "-DCLR_CMAKE_HOST_ARCH=%__Arch%" %__ExtraCmakeParams% -G "%__CmakeGenerator%" %__SourceDir%
endlocal
GOTO :DONE
diff --git a/src/pal/tools/windows-compiler-override.txt b/src/pal/tools/windows-compiler-override.txt
deleted file mode 100644
index 8ed5c5b125..0000000000
--- a/src/pal/tools/windows-compiler-override.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-SET (CMAKE_C_FLAGS_INIT "/Wall /FC /Zc:strictStrings")
-SET (CMAKE_C_FLAGS_DEBUG_INIT "/Od /Zi")
-SET (CLR_C_FLAGS_CHECKED_INIT "/O1 /Zi")
-SET (CMAKE_C_FLAGS_RELEASE_INIT "/Ox /Zi")
-SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/O2 /Zi")
-
-SET (CMAKE_CXX_FLAGS_INIT "/Wall /FC /Zc:strictStrings")
-SET (CMAKE_CXX_FLAGS_DEBUG_INIT "/Od /Zi")
-SET (CLR_CXX_FLAGS_CHECKED_INIT "/O1 /Zi")
-SET (CMAKE_CXX_FLAGS_RELEASE_INIT "/Ox /Zi")
-SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "/O2 /Zi")
-
-SET (CLR_DEFINES_DEBUG_INIT DEBUG _DEBUG _DBG URTBLDENV_FRIENDLY=Checked BUILDENV_CHECKED=1)
-SET (CLR_DEFINES_CHECKED_INIT DEBUG _DEBUG _DBG URTBLDENV_FRIENDLY=Checked BUILDENV_CHECKED=1)
-SET (CLR_DEFINES_RELEASE_INIT NDEBUG URTBLDENV_FRIENDLY=Retail)
-SET (CLR_DEFINES_RELWITHDEBINFO_INIT NDEBUG URTBLDENV_FRIENDLY=Retail)
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 388ce6d5d8..54ea1ec953 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -1,15 +1,20 @@
# Require at least version 2.8.12 of CMake
cmake_minimum_required(VERSION 2.8.12)
-# Include global configure settings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../configure.cmake)
-include(${CMAKE_CURRENT_SOURCE_DIR}/../configurecompiler.cmake)
+if (NOT WIN32)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11")
+endif()
set(INC_PLATFORM_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/Common/Platform)
if (WIN32)
add_definitions(-DWINDOWS=1)
endif()
+# Verify that LTCG/LTO is available
+include(${CMAKE_CURRENT_SOURCE_DIR}/../configure.cmake)
+# Include global configure settings
+include(${CMAKE_CURRENT_SOURCE_DIR}/../configurecompiler.cmake)
# Compile options
if (WIN32)