X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=functions.cmake;h=d86844591078ee171d33b31820c087578cc50be2;hb=3ac069e677a403f8345e092a43d51a7b103b1eb2;hp=3fb0e46e689bcc298c8bf5cce1fb61cfd797a35e;hpb=ce196970faef34c1013d01cd12c76bdd7ad53731;p=platform%2Fupstream%2Fcoreclr.git diff --git a/functions.cmake b/functions.cmake index 3fb0e46..d868445 100644 --- a/functions.cmake +++ b/functions.cmake @@ -44,11 +44,11 @@ endfunction(get_include_directories) # Build a list of include directories for consumption by the assembler function(get_include_directories_asm IncludeDirectories) get_directory_property(dirs INCLUDE_DIRECTORIES) - + if (CLR_CMAKE_PLATFORM_ARCH_ARM AND WIN32) list(APPEND INC_DIRECTORIES "-I ") endif() - + foreach(dir IN LISTS dirs) if (CLR_CMAKE_PLATFORM_ARCH_ARM AND WIN32) list(APPEND INC_DIRECTORIES ${dir};) @@ -107,6 +107,27 @@ function(generate_exports_file) PROPERTIES GENERATED TRUE) endfunction() +function(generate_exports_file_prefix inputFilename outputFilename prefix) + + if(CMAKE_SYSTEM_NAME STREQUAL Darwin) + set(AWK_SCRIPT generateexportedsymbols.awk) + else() + set(AWK_SCRIPT generateversionscript.awk) + if (NOT ${prefix} STREQUAL "") + set(AWK_VARS ${AWK_VARS} -v prefix=${prefix}) + endif() + endif(CMAKE_SYSTEM_NAME STREQUAL Darwin) + + add_custom_command( + OUTPUT ${outputFilename} + COMMAND ${AWK} -f ${CMAKE_SOURCE_DIR}/${AWK_SCRIPT} ${AWK_VARS} ${inputFilename} >${outputFilename} + DEPENDS ${inputFilename} ${CMAKE_SOURCE_DIR}/${AWK_SCRIPT} + COMMENT "Generating exports file ${outputFilename}" + ) + set_source_files_properties(${outputFilename} + PROPERTIES GENERATED TRUE) +endfunction() + function(add_precompiled_header header cppFile targetSources) if(MSVC) set(precompiledBinary "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/stdafx.pch") @@ -141,7 +162,7 @@ function(strip_symbols targetName outputFilename) add_custom_command( TARGET ${targetName} POST_BUILD - VERBATIM + VERBATIM COMMAND ${DSYMUTIL} --flat --minimize ${strip_source_file} COMMAND ${STRIP} -S ${strip_source_file} COMMENT Stripping symbols from ${strip_source_file} into file ${strip_destination_file} @@ -152,7 +173,7 @@ function(strip_symbols targetName outputFilename) add_custom_command( TARGET ${targetName} POST_BUILD - VERBATIM + VERBATIM COMMAND ${OBJCOPY} --only-keep-debug ${strip_source_file} ${strip_destination_file} COMMAND ${OBJCOPY} --strip-debug ${strip_source_file} COMMAND ${OBJCOPY} --add-gnu-debuglink=${strip_destination_file} ${strip_source_file} @@ -166,30 +187,30 @@ function(strip_symbols targetName outputFilename) endfunction() function(install_clr targetName) - list(FIND CLR_CROSS_COMPONENTS_LIST ${targetName} INDEX) - if (NOT DEFINED CLR_CROSS_COMPONENTS_LIST OR NOT ${INDEX} EQUAL -1) - strip_symbols(${targetName} strip_destination_file) - # On the older version of cmake (2.8.12) used on Ubuntu 14.04 the TARGET_FILE - # generator expression doesn't work correctly returning the wrong path and on - # the newer cmake versions the LOCATION property isn't supported anymore. - if(CMAKE_VERSION VERSION_EQUAL 3.0 OR CMAKE_VERSION VERSION_GREATER 3.0) - set(install_source_file $) - else() - get_property(install_source_file TARGET ${targetName} PROPERTY LOCATION) - endif() - - install(PROGRAMS ${install_source_file} DESTINATION .) - if(WIN32) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/$/${targetName}.pdb DESTINATION PDB) - else() - install(FILES ${strip_destination_file} DESTINATION .) - endif() + list(FIND CLR_CROSS_COMPONENTS_LIST ${targetName} INDEX) + if (NOT DEFINED CLR_CROSS_COMPONENTS_LIST OR NOT ${INDEX} EQUAL -1) + strip_symbols(${targetName} strip_destination_file) + # On the older version of cmake (2.8.12) used on Ubuntu 14.04 the TARGET_FILE + # generator expression doesn't work correctly returning the wrong path and on + # the newer cmake versions the LOCATION property isn't supported anymore. + if(CMAKE_VERSION VERSION_EQUAL 3.0 OR CMAKE_VERSION VERSION_GREATER 3.0) + set(install_source_file $) + else() + get_property(install_source_file TARGET ${targetName} PROPERTY LOCATION) + endif() + + install(PROGRAMS ${install_source_file} DESTINATION .) + if(WIN32) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/$/${targetName}.pdb DESTINATION PDB) + else() + install(FILES ${strip_destination_file} DESTINATION .) + endif() if(CLR_CMAKE_PGO_INSTRUMENT) if(WIN32) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/$/${targetName}.pgd DESTINATION PGD OPTIONAL) endif() endif() - endif() + endif() endfunction() # Disable PAX mprotect that would prevent JIT and other codegen in coreclr from working. @@ -217,11 +238,11 @@ function(_add_executable) else() add_executable(${ARGV}) endif(NOT WIN32) - list(FIND CLR_CROSS_COMPONENTS_LIST ${ARGV0} INDEX) - if (DEFINED CLR_CROSS_COMPONENTS_LIST AND ${INDEX} EQUAL -1) - set_target_properties(${ARGV0} PROPERTIES EXCLUDE_FROM_ALL 1) + list(FIND CLR_CROSS_COMPONENTS_LIST ${ARGV0} INDEX) + if (DEFINED CLR_CROSS_COMPONENTS_LIST AND ${INDEX} EQUAL -1) + set_target_properties(${ARGV0} PROPERTIES EXCLUDE_FROM_ALL 1) endif() -endfunction() +endfunction() function(_add_library) if(NOT WIN32) @@ -229,10 +250,10 @@ function(_add_library) else() add_library(${ARGV}) endif(NOT WIN32) - list(FIND CLR_CROSS_COMPONENTS_LIST ${ARGV0} INDEX) - if (DEFINED CLR_CROSS_COMPONENTS_LIST AND ${INDEX} EQUAL -1) - set_target_properties(${ARGV0} PROPERTIES EXCLUDE_FROM_ALL 1) - endif() + list(FIND CLR_CROSS_COMPONENTS_LIST ${ARGV0} INDEX) + if (DEFINED CLR_CROSS_COMPONENTS_LIST AND ${INDEX} EQUAL -1) + set_target_properties(${ARGV0} PROPERTIES EXCLUDE_FROM_ALL 1) + endif() endfunction() function(_install) @@ -242,15 +263,29 @@ function(_install) endfunction() function(verify_dependencies targetName errorMessage) + set(SANITIZER_BUILD OFF) + + if (CLR_CMAKE_PLATFORM_UNIX) + if (UPPERCASE_CMAKE_BUILD_TYPE STREQUAL DEBUG OR UPPERCASE_CMAKE_BUILD_TYPE STREQUAL CHECKED) + string(FIND "$ENV{DEBUG_SANITIZERS}" "asan" __ASAN_POS) + string(FIND "$ENV{DEBUG_SANITIZERS}" "ubsan" __UBSAN_POS) + if ((${__ASAN_POS} GREATER -1) OR (${__UBSAN_POS} GREATER -1)) + set(SANITIZER_BUILD ON) + endif() + endif() + endif() + # We don't need to verify dependencies on OSX, since missing dependencies # result in link error over there. - if (NOT CLR_CMAKE_PLATFORM_DARWIN AND NOT CLR_CMAKE_PLATFORM_ANDROID) + # Also don't verify dependencies for Asan build because in this case shared + # libraries can contain undefined symbols + if (NOT CLR_CMAKE_PLATFORM_DARWIN AND NOT CLR_CMAKE_PLATFORM_ANDROID AND NOT SANITIZER_BUILD) add_custom_command( TARGET ${targetName} POST_BUILD VERBATIM - COMMAND ${CMAKE_SOURCE_DIR}/verify-so.sh - $ + COMMAND ${CMAKE_SOURCE_DIR}/verify-so.sh + $ ${errorMessage} COMMENT "Verifying ${targetName} dependencies" ) @@ -259,11 +294,8 @@ endfunction() function(add_library_clr) _add_library(${ARGV}) - add_dependencies(${ARGV0} GeneratedEventingFiles) endfunction() function(add_executable_clr) _add_executable(${ARGV}) - add_dependencies(${ARGV0} GeneratedEventingFiles) endfunction() -