From 708fa8e89937f25a3fbb6150d573c771119d3144 Mon Sep 17 00:00:00 2001 From: Andrey Churbanov Date: Thu, 14 May 2015 12:54:08 +0000 Subject: [PATCH] Cross compiler build fix [Important] - from J.Peyton, initial version from C.Bergstrom. llvm-svn: 237360 --- openmp/runtime/CMakeLists.txt | 85 ++++++++++++++++-------------- openmp/runtime/cmake/GetArchitecture.cmake | 6 +-- 2 files changed, 48 insertions(+), 43 deletions(-) diff --git a/openmp/runtime/CMakeLists.txt b/openmp/runtime/CMakeLists.txt index e947f3e..b313478 100644 --- a/openmp/runtime/CMakeLists.txt +++ b/openmp/runtime/CMakeLists.txt @@ -20,10 +20,6 @@ set(GLOBAL_DEBUG 0) # Add cmake directory to search for custom cmake functions set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) -# Set base libomp directory (directory with exports/ , src/ , tools/ , etc.) -# The top-level CMakeLists.txt should define this variable. -set(LIBOMP_WORK ${CMAKE_CURRENT_SOURCE_DIR}) - ####################################################################### # Standalone build or part of LLVM? set(LIBIOMP_STANDALONE_BUILD FALSE) @@ -118,6 +114,10 @@ set(LIBIOMP_LDFLAGS "" CACHE STRING "Appended user specified linker flags." set(LIBIOMP_LIBFLAGS "" CACHE STRING "Appended user specified linked libs flags. (e.g., -lm)") set(LIBIOMP_FFLAGS "" CACHE STRING "Appended user specified Fortran compiler flags. These are only used if create_fortran_modules==true." ) +# Should the libiomp5 library and generated headers be copied into the original source exports/ directory +# Turning this to false aids parallel builds to not interfere with each other. +set(LIBIOMP_COPY_EXPORTS true CACHE STRING "Should exports be copied into source exports/ directory?") + # - Allow three build types: Release, Debug, RelWithDebInfo (these relate to build.pl's release, debug, and diag settings respectively) # - default is Release (when CMAKE_BUILD_TYPE is not defined) # - CMAKE_BUILD_TYPE affects the -O and -g flags (CMake magically includes correct version of them on per compiler basis) @@ -151,7 +151,7 @@ if("${arch}" STREQUAL "mic") check_variable(mic_arch "${mic_arch_possible_values}" ) endif() # Get the build number from kmp_version.c -get_build_number("${LIBOMP_WORK}" build_number) +get_build_number("${CMAKE_CURRENT_SOURCE_DIR}" build_number) # Getting time and date # As of now, no timestamp will be created. @@ -350,9 +350,9 @@ else() set(platform "${real_os}_${arch}" ) # e.g., lin_32e, mac_32 endif() set(build_dir "${CMAKE_CURRENT_BINARY_DIR}" ) # build directory (Where CMakeCache.txt is created, build files generated) -set(src_dir "${LIBOMP_WORK}/src" ) -set(tools_dir "${LIBOMP_WORK}/tools" ) -set(export_dir "${LIBOMP_WORK}/exports" ) +set(src_dir "${CMAKE_CURRENT_SOURCE_DIR}/src" ) +set(tools_dir "${CMAKE_CURRENT_SOURCE_DIR}/tools" ) +set(export_dir "${CMAKE_CURRENT_SOURCE_DIR}/exports") set(export_ptf_dir "${export_dir}/${platform}${suffix}") set(export_cmn_dir1 "${export_dir}/common${suffix}/include") set(export_cmn_dir2 "${export_dir}/common${suffix}/include_compat") @@ -365,7 +365,7 @@ if(${MAC}) # macs use lib/ subdirectory for fat libraries that contain both IA-32 architecture and Intel(R) 64 architecture code. _export_lib_fat_dir(${platform} export_lib_fat_dir) endif() -set(inc_dir "${LIBOMP_WORK}/src/include/${omp_version}") +set(inc_dir "${src_dir}/include/${omp_version}") ############################ # Setting final library name @@ -528,7 +528,6 @@ endif() debug_say_var(CMAKE_ASM_COMPILE_OBJECT) debug_say_var(CMAKE_RC_COMPILER) debug_say_var(CMAKE_C_COMPILER_ID) -debug_say_var(LIBOMP_WORK) debug_say_var(date) debug_say_var(stats) debug_say_var(lib_file) @@ -574,31 +573,33 @@ add_custom_target(common ALL DEPENDS ${export_cmn_files}) add_custom_target(clean-common COMMAND ${CMAKE_COMMAND} -E remove -f ${export_cmn_files}) # --- Put headers in convenient locations post build --- -add_custom_command(TARGET common POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory ${export_cmn_dir1} - COMMAND ${CMAKE_COMMAND} -E make_directory ${export_cmn_dir2} - COMMAND ${CMAKE_COMMAND} -E copy omp.h ${export_cmn_dir1} - COMMAND ${CMAKE_COMMAND} -E copy omp_lib.h ${export_cmn_dir1} - COMMAND ${CMAKE_COMMAND} -E copy omp_lib.f ${export_cmn_dir1} - COMMAND ${CMAKE_COMMAND} -E copy omp_lib.f90 ${export_cmn_dir1} - COMMAND ${CMAKE_COMMAND} -E copy iomp.h ${export_cmn_dir2} -) -if(${OMPT_SUPPORT}) - add_custom_command(TARGET common POST_BUILD +if(${LIBIOMP_COPY_EXPORTS}) + add_custom_command(TARGET common POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory ${export_cmn_dir1} - COMMAND ${CMAKE_COMMAND} -E copy ompt.h ${export_cmn_dir1} + COMMAND ${CMAKE_COMMAND} -E make_directory ${export_cmn_dir2} + COMMAND ${CMAKE_COMMAND} -E copy omp.h ${export_cmn_dir1} + COMMAND ${CMAKE_COMMAND} -E copy omp_lib.h ${export_cmn_dir1} + COMMAND ${CMAKE_COMMAND} -E copy omp_lib.f ${export_cmn_dir1} + COMMAND ${CMAKE_COMMAND} -E copy omp_lib.f90 ${export_cmn_dir1} + COMMAND ${CMAKE_COMMAND} -E copy iomp.h ${export_cmn_dir2} ) -endif() -add_custom_command(TARGET inc POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory ${export_inc_dir} - COMMAND ${CMAKE_COMMAND} -E copy iomp_lib.h ${export_inc_dir} -) -if(${create_fortran_modules}) - add_custom_command(TARGET mod POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory ${export_mod_dir} - COMMAND ${CMAKE_COMMAND} -E copy omp_lib.mod ${export_mod_dir} - COMMAND ${CMAKE_COMMAND} -E copy omp_lib_kinds.mod ${export_mod_dir} + if(${OMPT_SUPPORT}) + add_custom_command(TARGET common POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory ${export_cmn_dir1} + COMMAND ${CMAKE_COMMAND} -E copy ompt.h ${export_cmn_dir1} + ) + endif() + add_custom_command(TARGET inc POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory ${export_inc_dir} + COMMAND ${CMAKE_COMMAND} -E copy iomp_lib.h ${export_inc_dir} ) + if(${create_fortran_modules}) + add_custom_command(TARGET mod POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory ${export_mod_dir} + COMMAND ${CMAKE_COMMAND} -E copy omp_lib.mod ${export_mod_dir} + COMMAND ${CMAKE_COMMAND} -E copy omp_lib_kinds.mod ${export_mod_dir} + ) + endif() endif() ###################################################### @@ -643,10 +644,12 @@ if(NOT LIBIOMP_OUTPUT_DIRECTORY) set(LIBIOMP_OUTPUT_DIRECTORY ${build_dir}) endif() -add_custom_command(TARGET iomp5 POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory ${export_lib_dir} - COMMAND ${CMAKE_COMMAND} -E copy ${LIBIOMP_OUTPUT_DIRECTORY}/${lib_file} ${export_lib_dir} -) +if(${LIBIOMP_COPY_EXPORTS}) + add_custom_command(TARGET iomp5 POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory ${export_lib_dir} + COMMAND ${CMAKE_COMMAND} -E copy ${LIBIOMP_OUTPUT_DIRECTORY}/${lib_file} ${export_lib_dir} + ) +endif() # Linking command will include libraries in LD_LIB_FLAGS target_link_libraries(iomp5 ${LD_LIB_FLAGS} ${CMAKE_DL_LIBS}) @@ -740,10 +743,12 @@ if(${WINDOWS}) if(NOT LIBIOMPIMP_OUTPUT_DIRECTORY) set(LIBIOMPIMP_OUTPUT_DIRECTORY ${build_dir}) endif() - add_custom_command(TARGET iomp5imp POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory ${export_lib_dir} - COMMAND ${CMAKE_COMMAND} -E copy ${LIBIOMPIMP_OUTPUT_DIRECTORY}/${imp_file} ${export_lib_dir} - ) + if(${LIBIOMP_COPY_EXPORTS}) + add_custom_command(TARGET iomp5imp POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory ${export_lib_dir} + COMMAND ${CMAKE_COMMAND} -E copy ${LIBIOMPIMP_OUTPUT_DIRECTORY}/${imp_file} ${export_lib_dir} + ) + endif() endif() # --- Create $(def_file) --- diff --git a/openmp/runtime/cmake/GetArchitecture.cmake b/openmp/runtime/cmake/GetArchitecture.cmake index 3b74bc0..e3f2995 100644 --- a/openmp/runtime/cmake/GetArchitecture.cmake +++ b/openmp/runtime/cmake/GetArchitecture.cmake @@ -48,10 +48,10 @@ function(get_architecture return_arch) " ) # Write out ${detect_arch_src_txt} to a file within the cmake/ subdirectory - file(WRITE "${LIBOMP_WORK}/cmake/detect_arch.c" ${detect_arch_src_txt}) + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/detect_arch.c" ${detect_arch_src_txt}) # Try to compile using the C Compiler. It will always error out with an #error directive, so store error output to ${local_architecture} - try_run(run_dummy compile_dummy "${CMAKE_CURRENT_BINARY_DIR}" "${LIBOMP_WORK}/cmake/detect_arch.c" COMPILE_OUTPUT_VARIABLE local_architecture) + try_run(run_dummy compile_dummy "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/detect_arch.c" COMPILE_OUTPUT_VARIABLE local_architecture) # Match the important architecture line and store only that matching string in ${local_architecture} string(REGEX MATCH "ARCHITECTURE=([a-zA-Z0-9_]+)" local_architecture "${local_architecture}") @@ -63,5 +63,5 @@ function(get_architecture return_arch) set(${return_arch} "${local_architecture}" PARENT_SCOPE) # Remove ${detect_arch_src_txt} from cmake/ subdirectory - file(REMOVE "${LIBOMP_WORK}/cmake/detect_arch.c") + file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/detect_arch.c") endfunction() -- 2.7.4