After three iterations of community review, we believe that this new
CMAKE buld system should meet everyone's requirements.

Enhanced CMake Build System Commit 

* Supports Linux, Mac, Windows, and IntelĀ® Xeon Phi builds
* Supports building with gcc, icc, clang, and Visual Studio compilers
* Supports bulding "fat" libraries on OS/X with clang
* Details and documentation on how to use build system 
  are in Build_With_CMake.txt
* To use the old CMake build system (corresponds to 
  CMakeLists.txt.old), just rename CMakeLists.txt to
  CMakeLists.txt.other and rename CMakeLists.txt.old to
  CMakeLists.txt

llvm-svn: 214850
diff --git a/openmp/runtime/cmake/BuildPLRules.cmake b/openmp/runtime/cmake/BuildPLRules.cmake
new file mode 100644
index 0000000..8db0f2f
--- /dev/null
+++ b/openmp/runtime/cmake/BuildPLRules.cmake
@@ -0,0 +1,100 @@
+###############################################################################
+# This file contains additional build rules that correspond to build.pl's rules
+# Building libiomp5.dbg is linux only, Windows will build libiomp5md.dll.pdb
+#
+#                        ######### BUILD DEPENDENCIES ##########
+#
+#        exports/.../libiomp5.so                        exports/.../libiomp5.dbg
+#        [copy]  |                                                 | [copy]
+#                |                                                 |
+#           ./libiomp5.so                                     ./libiomp5.dbg
+#    [copy]    /  OR  \____________ [copy]                         | [copy]
+#             /                    \                               |
+#    ./unstripped/libiomp5.so   ./stripped/libiomp5.so   ./unstripped/libiomp5.dbg
+#           /                                \                /
+#          / [linking]                        \[strip]       /[strip and store]
+#         /                                    \            /
+#     ${objs} (maybe compiled with -g)     ./unstripped/libiomp5.so (library with debug info in it)
+#                                                    |
+#                                                    | [linking]
+#                                                    |
+#                                                 ${objs} (always compiled with -g)
+#
+# For icc Linux builds, we always include debugging information via -g and create libiomp5.dbg 
+# so that Intel(R) Parallel Amplifier can use the .dbg file.
+# For icc Windows builds, we always include debugging information via -Zi and create libiomp5.pdb
+# in a fashion similar to libiomp5.dbg
+# For icc Mac builds, we don't bother with the debug info.
+
+# We build library in unstripped directory
+file(MAKE_DIRECTORY ${build_dir}/unstripped)
+
+# Only build the .dbg file for Release builds
+# Debug and RelWithDebInfo builds should not create a .dbg file.  
+# The debug info should remain in the library file.
+if(${LINUX} AND ${RELEASE_BUILD})
+    set(dbg_file ${lib_item}.dbg)
+endif()
+
+################################
+# --- Create $(lib_file).dbg ---
+if(NOT "${dbg_file}" STREQUAL "")
+    # if a ${dbg_file} file is going to be created, then 
+    file(MAKE_DIRECTORY ${build_dir}/stripped)
+
+    # ./${lib_file} : stripped/${lib_file}
+    #     copy stripped/${lib_file} ./${lib_file}
+    simple_copy_recipe("${lib_file}"   "${build_dir}/stripped"   "${build_dir}")
+
+    # stripped/${lib_file} : unstripped/${lib_file} ./${dbg_file}
+    #     objcopy --strip-debug unstripped/${lib_file} stripped/${lib_file}.tmp
+    #     objcopy --add-gnu-debuglink=${dbg_file} stripped/${lib_file}.tmp stripped/${lib_file}
+    add_custom_command(
+        OUTPUT  ${build_dir}/stripped/${lib_file}
+        COMMAND ${CMAKE_OBJCOPY} --strip-debug ${build_dir}/unstripped/${lib_file} ${build_dir}/stripped/${lib_file}.tmp
+        COMMAND ${CMAKE_OBJCOPY} --add-gnu-debuglink=${dbg_file} ${build_dir}/stripped/${lib_file}.tmp ${build_dir}/stripped/${lib_file}
+        DEPENDS "${build_dir}/${dbg_file}"
+    )
+
+    # ./${dbg_file} : unstripped/${dbg_file}
+    #     copy unstripped/${dbg_file} ./${dbg_file}
+    simple_copy_recipe("${dbg_file}"   "${build_dir}/unstripped" "${build_dir}")
+
+    # unstripped/${dbg_file} : unstripped/${lib_file}
+    #     objcopy --only-keep-debug unstripped/${lib_file} unstripped/${dbg_file}
+    add_custom_command(
+        OUTPUT  ${build_dir}/unstripped/${dbg_file}
+        COMMAND ${CMAKE_OBJCOPY} --only-keep-debug ${build_dir}/unstripped/${lib_file} ${build_dir}/unstripped/${dbg_file} 
+        DEPENDS iomp5
+    )
+    
+else()
+
+    # ./${lib_file} : unstripped/${lib_file}
+    #      copy unstripped/${lib_file} ./${lib_file}
+    simple_copy_recipe("${lib_file}"   "${build_dir}/unstripped"  "${build_dir}")
+endif()
+
+# Windows specific command to move around debug info files post-build
+if(NOT "${pdb_file}" STREQUAL "" AND ${RELEASE_BUILD})
+    add_custom_command(TARGET iomp5 POST_BUILD
+        COMMAND ${CMAKE_COMMAND} -E rename ${pdb_file} ${pdb_file}.nonstripped
+        COMMAND ${CMAKE_COMMAND} -E rename ${pdb_file}.stripped ${pdb_file}
+    )
+endif()
+
+# Have icc build libiomp5 in unstripped directory
+set_target_properties(iomp5 PROPERTIES 
+    LIBRARY_OUTPUT_DIRECTORY "${build_dir}/unstripped" 
+    RUNTIME_OUTPUT_DIRECTORY "${build_dir}/unstripped"
+    ARCHIVE_OUTPUT_DIRECTORY "${build_dir}"
+)
+
+# Always use RelWithDebInfo flags for Release builds when using the build.pl's build rules (use -g -O2 instead of just -O3)
+# The debug info is then stripped out at the end of the build and put into libiomp5.dbg for Linux
+if(${RELEASE_BUILD} AND NOT ${MAC})
+    set(CMAKE_C_FLAGS_RELEASE   ${CMAKE_C_FLAGS_RELWITHDEBINFO}  )
+    set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELWITHDEBINFO})
+    set(CMAKE_ASM_FLAGS_RELEASE ${CMAKE_ASM_FLAGS_RELWITHDEBINFO})
+endif()
+