1--------------------------------------------------------------------------
2-- Copyright (c) 2015 ETH Zurich.
3-- All rights reserved.
4--
5-- This file is distributed under the terms in the attached LICENSE file.
6-- If you do not find this file, copies can be found by writing to:
7-- ETH Zurich D-INFK, CAB F.78, Universitaetstr. 6, CH-8092 Zurich,
8-- Attn: Systems Group.
9--
10-- Toolchain definitions for Hake
11-- 
12--------------------------------------------------------------------------
13
14module Tools where
15
16import System.FilePath
17import Data.Maybe(fromMaybe)
18
19findTool path prefix tool = path </> (prefix ++ tool)
20
21data ToolDetails =
22    ToolDetails {
23        toolPath :: FilePath,
24        toolPrefix :: String
25    }
26
27-- This is the default root under which toolchains are installed at ETH.
28-- It can be overridden when running Hake.
29mkRoot root = fromMaybe "/home/netos/tools" root
30
31--
32-- ARM Cortex-A little-endian toolchains (armv7)
33--
34
35-- System (Ubuntu) ARM toolchain
36arm_system _
37    = ToolDetails {
38        toolPath = "",
39        toolPrefix = "arm-linux-gnueabi-"
40      }
41
42-- Linaro 2015.08 (GCC 5.1)
43arm_netos_linaro_2015_08 root
44    = ToolDetails {
45        toolPath = mkRoot root </> "linaro" </>
46                   "gcc-linaro-5.1-2015.08-x86_64_arm-eabi" </>
47                   "bin",
48        toolPrefix = "arm-eabi-"
49      }
50
51-- Linaro 2015.06 (GCC 4.8)
52arm_netos_linaro_2015_06 root
53    = ToolDetails {
54        toolPath = mkRoot root </> "linaro" </>
55                   "gcc-linaro-4.8-2015.06-x86_64_arm-eabi" </>
56                   "bin",
57        toolPrefix = "arm-eabi-"
58      }
59
60-- Linaro 2015.05 (GCC 4.9)
61arm_netos_linaro_2015_05 root
62    = ToolDetails {
63        toolPath = mkRoot root </> "linaro" </>
64                   "gcc-linaro-4.9-2015.05-x86_64_arm-eabi" </>
65                   "bin",
66        toolPrefix = "arm-eabi-"
67      }
68
69-- Linaro 2015.02 (GCC 4.9)
70arm_netos_linaro_2015_02 root
71    = ToolDetails {
72        toolPath = mkRoot root </> "linaro" </>
73                   "gcc-linaro-4.9-2015.02-3-x86_64_arm-eabi" </>
74                   "bin",
75        toolPrefix = "arm-eabi-"
76      }
77
78-- Linaro 2014.11 (GCC 4.9)
79arm_netos_linaro_2014_11 root
80    = ToolDetails {
81        toolPath = mkRoot root </> "linaro" </>
82                   "gcc-linaro-4.9-2014.11-x86_64_arm-eabi" </>
83                   "bin",
84        toolPrefix = "arm-eabi-"
85      }
86
87--
88-- ARM AArch64 toolchains
89--
90
91-- System (Ubuntu) ARM toolchain
92arm_system_aarch64 _
93    = ToolDetails {
94        toolPath = "",
95        toolPrefix = "aarch64-linux-gnu-"
96      }
97
98-- Linaro 2015.08 (GCC 5.1)
99arm_netos_linaro_aarch64_2015_08 root
100    = ToolDetails {
101        toolPath = mkRoot root </> "linaro" </>
102                   "gcc-linaro-5.1-2015.08-x86_64_aarch64-elf" </>
103                   "bin",
104        toolPrefix = "aarch64-elf-"
105      }
106
107-- Linaro 2015.08 (GCC 5.1)
108arm_netos_linaro_aarch64_2016_02 root
109    = ToolDetails {
110        toolPath = mkRoot root </> "linaro" </>
111                   "gcc-linaro-5.3-2016.02-x86_64_aarch64-elf" </>
112                   "bin",
113        toolPrefix = "aarch64-elf-"
114      }
115
116-- Linaro 2015.02 (GCC 4.9)
117arm_netos_linaro_aarch64_2015_02 root
118    = ToolDetails {
119        toolPath = mkRoot root </> "linaro" </>
120                   "gcc-linaro-4.9-2015.02-3-x86_64_aarch64-elf" </>
121                   "bin",
122        toolPrefix = "aarch64-elf-"
123      }
124
125-- Linaro 2014.11 (GCC 4.9)
126arm_netos_linaro_aarch64_2014_11 root
127    = ToolDetails {
128        toolPath = mkRoot root </> "linaro" </>
129                   "gcc-linaro-4.9-2014.11-x86_64_aarch64-elf" </>
130                   "bin",
131        toolPrefix = "aarch64-none-elf-"
132      }
133
134--
135-- ARM Cortex-M little-endian toolchains (armv7m)
136--
137
138-- ARM-GCC 2014q4 (GCC 4.9)
139arm_netos_arm_2014q4 root
140    = ToolDetails {
141        toolPath = mkRoot root </> "gcc-arm-embedded" </>
142                   "gcc-arm-none-eabi-4_9-2014q4" </>
143                   "bin",
144        toolPrefix = "arm-none-eabi-"
145      }
146
147-- ARM-GCC 2015q1 (GCC 4.9)
148arm_netos_arm_2015q1 root
149    = ToolDetails {
150        toolPath = mkRoot root </> "gcc-arm-embedded" </>
151                   "gcc-arm-none-eabi-4_9-2015q1" </>
152                   "bin",
153        toolPrefix = "arm-none-eabi-"
154      }
155
156-- ARM-GCC 2015q2 (GCC 4.9)
157arm_netos_arm_2015q2 root
158    = ToolDetails {
159        toolPath = mkRoot root </> "gcc-arm-embedded" </>
160                   "gcc-arm-none-eabi-4_9-2015q2" </>
161                   "bin",
162        toolPrefix = "arm-none-eabi-"
163      }
164
165--
166-- ARM big-endian toolchains (xscale)
167--
168
169-- Linaro 2015.02 (GCC 4.9)
170arm_netos_linaro_be_2015_02 root
171    = ToolDetails {
172        toolPath = mkRoot root </> "linaro" </>
173                   "gcc-linaro-4.9-2015.02-3-x86_64_armeb-eabi" </>
174                   "bin",
175        toolPrefix = "armeb-eabi-"
176      }
177
178-- System (Ubuntu 16.04) aarch64 toolchain
179aarch64_system _
180    = ToolDetails {
181        toolPath = "",
182        toolPrefix = "aarch64-linux-gnu-"
183      }
184
185--
186--
187-- X86 (32/64) toolchains (x86_32,x86_64)
188--
189
190-- System (Ubuntu) ARM toolchain
191x86_system _
192    = ToolDetails {
193        toolPath = "",
194        toolPrefix = "x86_64-linux-gnu-"
195      }
196
197--
198-- Xeon Phi toolchains (k1om)
199--
200
201-- Intel MPSS 3.4 (GCC 4.7)
202k1om_netos_mpss_3_4 root
203    = ToolDetails {
204        toolPath = mkRoot root </>
205                   "mpss-3.4/x86_64-mpsssdk-linux" </> 
206                   "usr/bin/k1om-mpss-linux",
207        toolPrefix = "k1om-mpss-linux-"
208      }
209
210k1om_netos_mpss_3_7_1 root
211    = ToolDetails {
212        toolPath = mkRoot root </>
213                   "mpss-3.7.1/x86_64-mpsssdk-linux" </> 
214                   "usr/bin/k1om-mpss-linux",
215        toolPrefix = "k1om-mpss-linux-"
216      }
217
218k1om_system root
219    = ToolDetails {
220        toolPath = "",
221        toolPrefix = "k1om-mpss-linux-"
222      }
223