diff options
-rw-r--r-- | CMakeLists.txt | 7 | ||||
-rw-r--r-- | configurecompiler.cmake | 32 | ||||
-rw-r--r-- | configureoptimization.cmake | 22 | ||||
-rw-r--r-- | src/dlls/mscorpe/CMakeLists.txt | 5 | ||||
-rw-r--r-- | src/jit/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/pal/tools/clang-compiler-override-arm.txt | 20 | ||||
-rw-r--r-- | src/pal/tools/clang-compiler-override.txt | 20 | ||||
-rw-r--r-- | src/pal/tools/gcc-compiler-override.txt | 20 | ||||
-rwxr-xr-x | src/pal/tools/gen-buildsys-clang.sh | 17 | ||||
-rwxr-xr-x | src/pal/tools/gen-buildsys-gcc.sh | 11 | ||||
-rw-r--r-- | src/pal/tools/gen-buildsys-win.bat | 3 | ||||
-rw-r--r-- | src/pal/tools/windows-compiler-override.txt | 16 | ||||
-rw-r--r-- | tests/CMakeLists.txt | 11 |
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) |