diff options
Diffstat (limited to 'configurecompiler.cmake')
-rw-r--r-- | configurecompiler.cmake | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/configurecompiler.cmake b/configurecompiler.cmake index 423bb40129..cf38d53f37 100644 --- a/configurecompiler.cmake +++ b/configurecompiler.cmake @@ -6,6 +6,9 @@ set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) +# All code we build should be compiled as position independent +set(CMAKE_POSITION_INDEPENDENT_CODE 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) @@ -333,10 +336,9 @@ elseif (CLR_CMAKE_PLATFORM_UNIX) endif () # -fdata-sections -ffunction-sections: each function has own section instead of one per .o file (needed for --gc-sections) - # -fPIC: enable Position Independent Code normally just for shared libraries but required when linking with address sanitizer # -O1: optimization level used instead of -O0 to avoid compile error "invalid operand for inline asm constraint" - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${CLR_SANITIZE_CXX_FLAGS} -fdata-sections -ffunction-sections -fPIC -O1") - set(CMAKE_CXX_FLAGS_CHECKED "${CMAKE_CXX_FLAGS_CHECKED} ${CLR_SANITIZE_CXX_FLAGS} -fdata-sections -ffunction-sections -fPIC -O1") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${CLR_SANITIZE_CXX_FLAGS} -fdata-sections -ffunction-sections -O1") + set(CMAKE_CXX_FLAGS_CHECKED "${CMAKE_CXX_FLAGS_CHECKED} ${CLR_SANITIZE_CXX_FLAGS} -fdata-sections -ffunction-sections -O1") set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${CLR_SANITIZE_LINK_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS_CHECKED "${CMAKE_EXE_LINKER_FLAGS_CHECKED} ${CLR_SANITIZE_LINK_FLAGS}") @@ -346,6 +348,11 @@ elseif (CLR_CMAKE_PLATFORM_UNIX) set(CMAKE_SHARED_LINKER_FLAGS_CHECKED "${CMAKE_SHARED_LINKER_FLAGS_CHECKED} ${CLR_SANITIZE_LINK_FLAGS} -Wl,--gc-sections") endif () endif(UPPERCASE_CMAKE_BUILD_TYPE STREQUAL DEBUG OR UPPERCASE_CMAKE_BUILD_TYPE STREQUAL CHECKED) + + # This linker option causes executables we build to be marked as containing position independent code. + # It is necessary to make ASLR work for executables. + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie" ) + endif(WIN32) # CLR_ADDITIONAL_LINKER_FLAGS - used for passing additional arguments to linker @@ -514,11 +521,15 @@ if (CLR_CMAKE_PLATFORM_UNIX) # to a struct or a class that has virtual members or a base class. In that case, clang # may not generate the same object layout as MSVC. add_compile_options(-Wno-incompatible-ms-struct) + # Do not convert a #warning into an #error + add_compile_options("-Wno-error=#warnings") else() add_compile_options(-Wno-unused-variable) add_compile_options(-Wno-unused-but-set-variable) add_compile_options(-fms-extensions) add_compile_options(-Wno-unknown-pragmas) + # Do not convert a #warning into an #error + add_compile_options(-Wno-error=cpp) if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.0) add_compile_options(-Wno-nonnull-compare) endif() @@ -561,6 +572,16 @@ if(CLR_CMAKE_PLATFORM_UNIX_ARM) endif(ARM_SOFTFP) endif(CLR_CMAKE_PLATFORM_UNIX_ARM) +if(CLR_CMAKE_PLATFORM_UNIX_X86) + add_compile_options(-msse2) +endif() + +if(CLR_CMAKE_PLATFORM_UNIX_ARM64) + if("$ENV{__DistroRid}" MATCHES "tizen.*") + add_compile_options(-target aarch64-tizen-linux-gnu) + endif() +endif(CLR_CMAKE_PLATFORM_UNIX_ARM64) + if(CLR_CMAKE_PLATFORM_UNIX) add_compile_options(${CLR_ADDITIONAL_COMPILER_OPTIONS}) endif(CLR_CMAKE_PLATFORM_UNIX) |