From 7198f529ad03338fbb8f1fb6cb1f14fa45297e88 Mon Sep 17 00:00:00 2001 From: Alp Toker Date: Sun, 1 Jun 2014 18:01:33 +0000 Subject: [PATCH] Add initial CMake build system This is not yet supported for production builds but can already produce working binaries on OS X and Linux with clang and gcc. The intention is to improve support to the point where it can integrate with the LLVM runtime platform, cover all platforms, runtime/release build configurations and run the tests. Patch by Jack Howarth! llvm-svn: 209994 --- openmp/runtime/CMakeLists.txt | 8 +++ openmp/runtime/README.txt | 6 +- openmp/runtime/src/CMakeLists.txt | 138 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 151 insertions(+), 1 deletion(-) create mode 100644 openmp/runtime/CMakeLists.txt create mode 100644 openmp/runtime/src/CMakeLists.txt diff --git a/openmp/runtime/CMakeLists.txt b/openmp/runtime/CMakeLists.txt new file mode 100644 index 0000000..908e500 --- /dev/null +++ b/openmp/runtime/CMakeLists.txt @@ -0,0 +1,8 @@ +project(openmp) +cmake_minimum_required(VERSION 2.8) + +set(VERSION 5) +set(OMP_VERSION "201107") +set(OMP_VERSION_NUM "40") + +add_subdirectory(src) diff --git a/openmp/runtime/README.txt b/openmp/runtime/README.txt index a3cc853..50d207b 100644 --- a/openmp/runtime/README.txt +++ b/openmp/runtime/README.txt @@ -37,7 +37,7 @@ omp_root: The path to the top-level directory containing the top-level current working directory. omp_os: Operating system. By default, the build will attempt to - detect this. Currently supports "linux", "macos", and + detect this. Currently supports "linux", "freebsd", "macos", and "windows". arch: Architecture. By default, the build will attempt to @@ -68,6 +68,10 @@ example, if you want to build with gcc instead of icc, type: make compiler=gcc +There is also an experimental CMake build system. This is *not* yet +supported for production use and resulting binaries have not been checked +for compatibility. + Supported RTL Build Configurations ================================== diff --git a/openmp/runtime/src/CMakeLists.txt b/openmp/runtime/src/CMakeLists.txt new file mode 100644 index 0000000..3f0b853 --- /dev/null +++ b/openmp/runtime/src/CMakeLists.txt @@ -0,0 +1,138 @@ +set(OMP_SHLIBEXT "${CMAKE_SHARED_LIBRARY_SUFFIX}") + +execute_process(COMMAND "date" "+%Y-%m-%d %H:%M:%S" OUTPUT_VARIABLE BUILD_TIME) +string(REGEX REPLACE "\n" "" BUILD_TIME ${BUILD_TIME}) + +include_directories( + . + include + include/${OMP_VERSION} + i18n + thirdparty/ittnotify + ${CMAKE_CURRENT_BINARY_DIR} +) + +if(WIN32) + set(OS_GEN "win") +elseif(APPLE) + set(OS_GEN "mac") +elseif(UNIX) + set(OS_GEN "lin") +else() + message(FATAL_ERROR "Unsupported OS") +endif() + +if("${ARCH}" STREQUAL "") + set(ARCH "32e") +endif() + +set(ARCH_STR "Intel(R) 64") + +set(FEATURE_FLAGS "-D USE_ITT_BUILD") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D NDEBUG") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_ARCH_STR=\"\\\"${ARCH_STR}\\\"\"") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D _GNU_SOURCE") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D _REENTRANT") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_USE_ASSERT") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D BUILD_I8") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D BUILD_TV") +if(APPLE) + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -current_version 5.0") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -compatibility_version 5.0") +endif() +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_LIBRARY_FILE=\\\"libiomp5.${OMP_SHLIBEXT}\\\"") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_VERSION_MAJOR=${VERSION}") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D CACHE_LINE=64") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_ADJUST_BLOCKTIME=1") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D BUILD_PARALLEL_ORDERED") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_ASM_INTRINS") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D USE_LOAD_BALANCE") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D USE_CBLKDATA") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D GUIDEDLL_EXPORTS") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_GOMP_COMPAT") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_USE_ADAPTIVE_LOCKS=1") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_DEBUG_ADAPTIVE_LOCKS=0") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D OMP_50_ENABLED=0") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D OMP_41_ENABLED=0") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D OMP_40_ENABLED=1") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D OMP_30_ENABLED=1") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D USE_ITT_NOTIFY=1") +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D INTEL_ITTNOTIFY_PREFIX=__kmp_itt_") +if (NOT APPLE) + set(FEATURE_FLAGS "${FEATURE_FLAGS} -D KMP_TDATA_GTID") +endif() +set(FEATURE_FLAGS "${FEATURE_FLAGS} -D _KMP_BUILD_TIME=\"\\\"${BUILD_TIME} UTC\\\"\"") + +set(COMMON_FLAGS "-fPIC") +set(COMMON_FLAGS "${COMMON_FLAGS} -Wno-unused-value") +set(COMMON_FLAGS "${COMMON_FLAGS} -Wno-switch") +set(COMMON_FLAGS "${COMMON_FLAGS} -Wno-deprecated-register") +set(COMMON_FLAGS "${COMMON_FLAGS} -fno-exceptions") + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FEATURE_FLAGS} ${COMMON_FLAGS}") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FEATURE_FLAGS} ${COMMON_FLAGS}") + +set(ASM_SOURCES + z_Linux_asm.s +) +set(SOURCES + thirdparty/ittnotify/ittnotify_static.c + kmp_affinity.cpp + kmp_alloc.c + kmp_atomic.c + kmp_cancel.cpp + kmp_csupport.c + kmp_debug.c + kmp_dispatch.cpp + kmp_environment.c + kmp_error.c + kmp_ftn_cdecl.c + kmp_ftn_extra.c + kmp_global.c + kmp_gsupport.c + kmp_global.c + kmp_i18n.c + kmp_io.c + kmp_itt.c + kmp_lock.cpp + kmp_runtime.c + kmp_sched.cpp + kmp_settings.c + kmp_str.c + kmp_taskdeps.cpp + kmp_tasking.c + kmp_taskq.c + kmp_threadprivate.c + kmp_utility.c + kmp_version.c + z_Linux_util.c +) + +set_source_files_properties(${SOURCES} PROPERTIES LANGUAGE CXX) +set_source_files_properties(${ASM_SOURCES} PROPERTIES LANGUAGE CXX) + +add_custom_command( + OUTPUT kmp_i18n_id.inc + COMMAND perl ${CMAKE_CURRENT_SOURCE_DIR}/../tools/message-converter.pl --os=${OS_GEN} --arch=${ARCH} --prefix=kmp_i18n --enum=kmp_i18n_id.inc ${CMAKE_CURRENT_SOURCE_DIR}/i18n/en_US.txt +) +add_custom_command( + OUTPUT kmp_i18n_default.inc + COMMAND perl ${CMAKE_CURRENT_SOURCE_DIR}/../tools/message-converter.pl --os=${OS_GEN} --arch=${ARCH} --prefix=kmp_i18n --default=kmp_i18n_default.inc ${CMAKE_CURRENT_SOURCE_DIR}/i18n/en_US.txt +) +add_custom_command( + OUTPUT omp.h + COMMAND perl ${CMAKE_CURRENT_SOURCE_DIR}/../tools/expand-vars.pl --strict -D Revision=\"\\$$Revision\" -D Date=\"\\$$Date\" -D KMP_TYPE=\"Performance\" -D KMP_ARCH=\"\\\"${ARCH_STR}\\\"\" -D KMP_VERSION_MAJOR=${VERSION} -D KMP_VERSION_MINOR=0 -D KMP_VERSION_BUILD=00000000 -D KMP_BUILD_DATE=\"${BUILD_TIME} UTC\" -D KMP_TARGET_COMPILER=12 -D KMP_DIAG=0 -D KMP_DEBUG_INFO=0 -D OMP_VERSION=${OMP_VERSION} ${CMAKE_CURRENT_SOURCE_DIR}/include/${OMP_VERSION_NUM}/omp.h.var omp.h +) +add_custom_command( + OUTPUT z_Linux_asm.o + COMMAND ${CMAKE_CXX_COMPILER} -c -o z_Linux_asm.o -D KMP_ASM_INTRINS -D KMP_GOMP_COMPAT -D KMP_ARCH_X86_64 -x assembler-with-cpp ${CMAKE_CURRENT_SOURCE_DIR}/${ASM_SOURCES} +) + +add_custom_target(gen_kmp_i18n DEPENDS kmp_i18n_id.inc kmp_i18n_default.inc omp.h z_Linux_asm.o) + +if(NOT APPLE) + set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports_so.txt") +endif() + +add_library(iomp5 SHARED ${SOURCES} z_Linux_asm.o) +add_dependencies(iomp5 gen_kmp_i18n) -- 2.7.4