forked from necromant2005/homebrew-boneyard
-
Notifications
You must be signed in to change notification settings - Fork 0
/
clang-omp.rb
102 lines (82 loc) · 3.03 KB
/
clang-omp.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
class ClangOmp < Formula
desc "OpenMP C/C++ language extensions in Clang/LLVM compiler"
homepage "https://clang-omp.github.io/"
stable do
url "https://github.com/clang-omp/llvm/archive/2015-04-01.tar.gz"
version "2015-04-01"
sha256 "37f990ad99b3213507ec88f86702c5a057ce397cc16638eeee5c88906572daec"
resource "compiler-rt" do
url "https://github.com/clang-omp/compiler-rt/archive/2015-04-01.tar.gz"
sha256 "5a8d39ff6ce524e23fae32870f85b18d43f2795da2011d3cbb6b29d471bb27b7"
end
resource "clang" do
url "https://github.com/clang-omp/clang/archive/2015-04-01.tar.gz"
sha256 "2717115e5ba491e3b8119311f0d792420ba41be34a89733b9880eb3d3c09fbe5"
end
resource "libcxx" do
url "https://github.com/llvm-mirror/libcxx/archive/release_35.tar.gz"
sha256 "df23b356ae1953de671d1dc9093568330e074bbe48cd6d93d16173a793550c71"
end
end
head do
url "https://github.com/clang-omp/llvm_trunk.git"
resource "compiler-rt" do
url "https://github.com/clang-omp/compiler-rt_trunk.git"
end
resource "clang" do
url "https://github.com/clang-omp/clang_trunk.git"
end
resource "libcxx" do
url "https://github.com/llvm-mirror/libcxx.git"
end
end
depends_on "libiomp"
depends_on "cmake" => :build
needs :cxx11
def install
(buildpath/"projects/compiler-rt").install resource("compiler-rt")
(buildpath/"tools/clang").install resource("clang")
(buildpath/"projects/libcxx").install resource "libcxx"
args = %W[
-DCMAKE_INSTALL_PREFIX=#{libexec}
-DC_INCLUDE_DIRS=#{Formula["libiomp"].opt_include}/libiomp:#{libexec}/include/c++/v1:#{libexec}/usr/include:/usr/include
-DLLVM_ENABLE_LIBCXX=ON
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_CXX_FLAGS=-mmacosx-version-min=#{MacOS.version}
]
mktemp do
system "cmake", buildpath, *(std_cmake_args + args)
system "make"
system "make", "install"
end
system "make", "-C", "#{buildpath}/projects/libcxx", "install",
"DSTROOT=#{libexec}", "SYMROOT=#{buildpath}/projects/libcxx",
"MACOSX_DEPLOYMENT_TARGET=#{MacOS.version}"
bin.install_symlink libexec/"bin/clang" => "clang-omp"
bin.install_symlink libexec/"bin/clang" => "clang-omp++"
end
test do
(testpath/"test.c").write <<-EOS.undent
#include <stdlib.h>
#include <stdio.h>
#include <omp.h>
int main() {
#pragma omp parallel num_threads(4)
{
printf("Hello from thread %d, nthreads %d\\n", omp_get_thread_num(), omp_get_num_threads());
}
return EXIT_SUCCESS;
}
EOS
system "#{bin}/clang-omp", "-liomp5", "-fopenmp", "test.c", "-o", "test"
testresult = shell_output("./test")
sorted_testresult = testresult.split("\n").sort.join("\n")
expected_result = <<-EOS.undent
Hello from thread 0, nthreads 4
Hello from thread 1, nthreads 4
Hello from thread 2, nthreads 4
Hello from thread 3, nthreads 4
EOS
assert_equal expected_result.strip, sorted_testresult.strip
end
end