[Openmp-dev] (no subject)

Jack Howarth howarth.mailing.lists at gmail.com
Fri May 30 15:28:33 PDT 2014


    Attached is a first pass at modifying the cmakefiles from
https://github.com/pathscale/openmprtl/blob/master/itt/libomp_oss to build
openmp. I noticed that the existing build.pl doesn't actually build a fat
shared library on darwin. The attached changes can does this in an indirect
fashion with…

% cd runtime
% mkdir build_32
% cd build_32
% cmake -DARCH="32" ..
% make VERBOSE=1
% cd ..
% mkdir build_32e
% cmake -DARCH="32e" ..
% make VERBOSE=1
% cd ..
% lipo ./build_32/src/libiomp5.dylib ./build_32e/src/libiomp5.dylib -create
-o libiomp5.dylib
% file  libiomp5.dylib
libiomp5.dylib: Mach-O universal binary with 2 architectures
libiomp5.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked
shared library x86_64
libiomp5.dylib (for architecture i386): Mach-O dynamically linked shared
library i386

Normally we could do this in cmake by passing '-arch i386 -arch x86_64' but
use of assembly code in the build gums that up.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/openmp-dev/attachments/20140530/9f4ca250/attachment.html>
-------------- next part --------------
--- /dev/null	2014-05-30 18:13:35.000000000 -0400
+++ runtime/CMakeLists.txt	2014-05-30 18:11:18.000000000 -0400
@@ -0,0 +1,95 @@
+cmake_minimum_required(VERSION 2.8.1)
+
+project(libiomp)
+
+enable_language(C ASM)
+
+set(VERSION 5)
+if(WIN32)
+	# TODO: get build time
+elseif(UNIX)
+	execute_process(COMMAND "date" "+%Y-%m-%d %H:%M:%S" OUTPUT_VARIABLE BUILD_TIME)
+	string(REGEX REPLACE "\n" "" BUILD_TIME ${BUILD_TIME})
+else()
+	message(SEND_ERROR "date not implement")
+endif()
+
+# set default omp version (possible value = 40 30 and 25)
+if("${OMP_VERSION_NUM}" STREQUAL "")
+	set(OMP_VERSION_NUM "40")
+endif()
+
+# set debug as default build
+if("${BUILD_TYPE}" STREQUAL "")
+	set(BUILD_TYPE "Debug")
+endif()
+
+# set 64bit as default architecture
+if("${ARCH}" STREQUAL "")
+	set(ARCH "32e")
+endif()
+set(ARCH_STR "Intel(R) 64")
+
+set(COMMON_FLAGS "${COMMON_FLAGS} -D USE_ITT_BUILD")
+set(COMMON_FLAGS "${COMMON_FLAGS} -D NDEBUG")
+set(COMMON_FLAGS "${COMMON_FLAGS} -D KMP_ARCH_STR=\"\\\"${ARCH_STR}\\\"\"")
+set(COMMON_FLAGS "${COMMON_FLAGS} -D _GNU_SOURCE")
+set(COMMON_FLAGS "${COMMON_FLAGS} -D _REENTRANT")
+set(COMMON_FLAGS "${COMMON_FLAGS} -D KMP_USE_ASSERT")
+set(COMMON_FLAGS "${COMMON_FLAGS} -D BUILD_I8")
+set(COMMON_FLAGS "${COMMON_FLAGS} -D BUILD_TV")
+if(APPLE)
+	set(COMMON_FLAGS "${COMMON_FLAGS} -D KMP_LIBRARY_FILE=\\\"libiomp5.dylib\\\"")
+	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")
+else()
+	set(COMMON_FLAGS "${COMMON_FLAGS} -D KMP_LIBRARY_FILE=\\\"libiomp5.so\\\"")
+endif()
+set(COMMON_FLAGS "${COMMON_FLAGS} -D KMP_VERSION_MAJOR=${VERSION}")
+set(COMMON_FLAGS "${COMMON_FLAGS} -D CACHE_LINE=64")
+set(COMMON_FLAGS "${COMMON_FLAGS} -D KMP_ADJUST_BLOCKTIME=1")
+set(COMMON_FLAGS "${COMMON_FLAGS} -D BUILD_PARALLEL_ORDERED")
+set(COMMON_FLAGS "${COMMON_FLAGS} -D KMP_ASM_INTRINS")
+set(COMMON_FLAGS "${COMMON_FLAGS} -D USE_LOAD_BALANCE")
+set(COMMON_FLAGS "${COMMON_FLAGS} -D USE_CBLKDATA")
+set(COMMON_FLAGS "${COMMON_FLAGS} -D GUIDEDLL_EXPORTS")
+set(COMMON_FLAGS "${COMMON_FLAGS} -D KMP_GOMP_COMPAT")
+set(COMMON_FLAGS "${COMMON_FLAGS} -D KMP_USE_ADAPTIVE_LOCKS=1")
+set(COMMON_FLAGS "${COMMON_FLAGS} -D KMP_DEBUG_ADAPTIVE_LOCKS=0")
+
+if("${OMP_VERSION_NUM}" STREQUAL "40")
+	set(COMMON_FLAGS "${COMMON_FLAGS} -D OMP_50_ENABLED=0")
+	set(COMMON_FLAGS "${COMMON_FLAGS} -D OMP_41_ENABLED=0")
+	set(COMMON_FLAGS "${COMMON_FLAGS} -D OMP_40_ENABLED=1")
+	set(COMMON_FLAGS "${COMMON_FLAGS} -D OMP_30_ENABLED=1")
+endif()
+
+set(COMMON_FLAGS "${COMMON_FLAGS} -D USE_ITT_NOTIFY=1")
+set(COMMON_FLAGS "${COMMON_FLAGS} -D INTEL_ITTNOTIFY_PREFIX=__kmp_itt_")
+
+set(C_CXX_COMMON_FLAGS "${C_CXX_COMMON_FLAGS} -fPIC")
+
+if(${BUILD_TYPE} STREQUAL "Debug")
+	set(COMMON_FLAGS "${COMMON_FLAGS} -g")
+endif()
+
+# Silence some warnings
+set(C_CXX_COMMON_FLAGS "${C_CXX_COMMON_FLAGS} -Wno-unused-value")
+set(C_CXX_COMMON_FLAGS "${C_CXX_COMMON_FLAGS} -Wno-switch")
+set(C_CXX_COMMON_FLAGS "${C_CXX_COMMON_FLAGS} -Wno-switch")
+
+# Disable exception handling.
+set(C_CXX_COMMON_FLAGS "${C_CXX_COMMON_FLAGS} -fno-exceptions")
+
+# Disable use of EBP as general purpose register.
+if(NOT ${ARCH} STREQUAL "32e")
+	set(C_CXX_COMMON_FLAGS "${C_CXX_COMMON_FLAGS} -m32 -fno-omit-frame-pointer")
+endif()
+
+set(COMMON_FLAGS "${COMMON_FLAGS} -D _KMP_BUILD_TIME=\"\\\"${BUILD_TIME} UTC\\\"\"")
+
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMMON_FLAGS} ${C_CXX_COMMON_FLAGS}")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_FLAGS} ${C_CXX_COMMON_FLAGS}")
+
+add_subdirectory(src)
+
--- /dev/null	2014-05-30 18:13:35.000000000 -0400
+++ runtime/src/CMakeLists.txt	2014-05-30 18:11:38.000000000 -0400
@@ -0,0 +1,103 @@
+cmake_minimum_required(VERSION 2.8.1)
+
+include_directories(
+	.
+	include
+	include/${OMP_VERSION_NUM}
+	i18n
+	thirdparty/ittnotify
+	${CMAKE_CURRENT_BINARY_DIR}
+	)
+	
+set(ASM_SRCS
+ z_Linux_asm.S
+)
+
+set(SRCS
+ z_Linux_util.c
+ kmp_version.c
+ kmp_utility.c
+ kmp_threadprivate.c
+ kmp_taskq.c
+ kmp_tasking.c
+ kmp_taskdeps.cpp 
+ kmp_str.c
+ kmp_settings.c
+ kmp_sched.cpp
+ kmp_runtime.c
+ kmp_lock.cpp
+ kmp_itt.c
+ kmp_io.c
+ kmp_i18n.c
+ kmp_gsupport.c
+ kmp_global.c
+ kmp_ftn_extra.c
+ kmp_ftn_cdecl.c
+ kmp_error.c
+ kmp_environment.c
+ kmp_dispatch.cpp
+ kmp_debug.c
+ kmp_csupport.c
+ kmp_cancel.cpp
+ kmp_atomic.c
+ kmp_alloc.c
+ kmp_affinity.cpp
+ thirdparty/ittnotify/ittnotify_static.c
+)
+
+set_source_files_properties(${SRCS} PROPERTIES LANGUAGE CXX)
+
+set_source_files_properties(${ASM_SRCS} PROPERTIES LANGUAGE CXX)
+set_source_files_properties(${ASM_SRCS} PROPERTIES COMPILE_FLAGS "-O2")
+
+# TODO: config parameter
+if(WIN32)
+	set(OS_GEN "win")
+elseif(UNIX)
+	set(OS_GEN "lin")
+elseif(APPLE)
+	set(OS_GEN "mac")
+endif()
+
+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
+	)
+if(NOT ${ARCH} STREQUAL "32e")
+add_custom_command(
+	OUTPUT z_Linux_asm.o
+	COMMAND clang++ -m32 -c -o z_Linux_asm.o -DKMP_GOMP_COMPAT -DKMP_ARCH_X86 -x assembler-with-cpp ${CMAKE_CURRENT_SOURCE_DIR}/${ASM_SRCS}
+)
+else()
+add_custom_command(
+	OUTPUT z_Linux_asm.o
+	COMMAND clang++ -c -o z_Linux_asm.o -DKMP_GOMP_COMPAT -DKMP_ARCH_X86_64 -x assembler-with-cpp ${CMAKE_CURRENT_SOURCE_DIR}/${ASM_SRCS}
+)
+endif()
+
+add_custom_target(gen_kmp_i18n DEPENDS kmp_i18n_id.inc kmp_i18n_default.inc omp.h z_Linux_asm.o)
+
+
+add_library(iomp5 SHARED ${SRCS} z_Linux_asm.o)
+add_dependencies(iomp5 gen_kmp_i18n)
+
+
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/omp.h 
+    	DESTINATION include/${PSC_FULL_VERSION})
+
+foreach(targ ${PATH64_ENABLE_TARGETS})
+	set(targ_arch ${_PATH64_TARGET_ARCH_${targ}})
+	set(targ_bits ${_PATH64_TARGET_BITS_${targ}})
+	install(FILES ${CMAKE_BINARY_DIR}/Xcompiler/lib/libiomp5.so 
+			DESTINATION ${PATH64_LIB_PATH}/${targ_arch}/${targ_bits})
+endforeach()
+
+


More information about the Openmp-dev mailing list