xmake.lua 11.9 KB
Newer Older
PanZezhongQY's avatar
PanZezhongQY committed
1
add_rules("mode.debug", "mode.release")
2
add_requires("boost", {configs = {stacktrace = true}})
3
4
add_requires("pybind11")

PanZezhongQY's avatar
PanZezhongQY committed
5
6
7
8
9
-- Define color codes
local GREEN = '\27[0;32m'
local YELLOW = '\27[1;33m'
local NC = '\27[0m'  -- No Color

10
set_encodings("utf-8")
PanZezhongQY's avatar
PanZezhongQY committed
11

12
add_includedirs("include")
13
add_includedirs("third_party/spdlog/include")
14

PanZezhongQY's avatar
PanZezhongQY committed
15
16
17
18
if is_mode("debug") then
    add_defines("DEBUG_MODE")
end

19
20
if is_plat("windows") then
    set_runtimes("MD")
21
22
    add_ldflags("/utf-8", {force = true})
    add_cxflags("/utf-8", {force = true})
23
24
end

PanZezhongQY's avatar
PanZezhongQY committed
25
26
27
28
-- CPU
option("cpu")
    set_default(true)
    set_showmenu(true)
YdrMaster's avatar
YdrMaster committed
29
    set_description("Whether to compile implementations for CPU")
PanZezhongQY's avatar
PanZezhongQY committed
30
31
32
option_end()

option("omp")
33
    set_default(true)
PanZezhongQY's avatar
PanZezhongQY committed
34
35
36
37
38
39
40
41
42
    set_showmenu(true)
    set_description("Enable or disable OpenMP support for cpu kernel")
option_end()

if has_config("cpu") then
    includes("xmake/cpu.lua")
    add_defines("ENABLE_CPU_API")
end

43
44
45
46
if has_config("omp") then
    add_defines("ENABLE_OMP")
end

PanZezhongQY's avatar
PanZezhongQY committed
47
48
49
50
-- 英伟达
option("nv-gpu")
    set_default(false)
    set_showmenu(true)
YdrMaster's avatar
YdrMaster committed
51
    set_description("Whether to compile implementations for Nvidia GPU")
PanZezhongQY's avatar
PanZezhongQY committed
52
53
54
option_end()

if has_config("nv-gpu") then
55
    add_defines("ENABLE_NVIDIA_API")
56
    includes("xmake/nvidia.lua")
PanZezhongQY's avatar
PanZezhongQY committed
57
58
end

59
60
option("cudnn")
    set_default(true)
YdrMaster's avatar
YdrMaster committed
61
    set_showmenu(true)
YdrMaster's avatar
YdrMaster committed
62
    set_description("Whether to compile cudnn for Nvidia GPU")
YdrMaster's avatar
YdrMaster committed
63
64
option_end()

65
66
if has_config("cudnn") then
    add_defines("ENABLE_CUDNN_API")
YdrMaster's avatar
YdrMaster committed
67
68
end

PanZezhongQY's avatar
PanZezhongQY committed
69
70
71
72
-- 寒武纪
option("cambricon-mlu")
    set_default(false)
    set_showmenu(true)
YdrMaster's avatar
YdrMaster committed
73
    set_description("Whether to compile implementations for Cambricon MLU")
PanZezhongQY's avatar
PanZezhongQY committed
74
75
76
77
option_end()

if has_config("cambricon-mlu") then
    add_defines("ENABLE_CAMBRICON_API")
PanZezhong's avatar
PanZezhong committed
78
    includes("xmake/bang.lua")
PanZezhongQY's avatar
PanZezhongQY committed
79
80
81
82
83
84
end

-- 华为昇腾
option("ascend-npu")
    set_default(false)
    set_showmenu(true)
YdrMaster's avatar
YdrMaster committed
85
    set_description("Whether to compile implementations for Huawei Ascend NPU")
PanZezhongQY's avatar
PanZezhongQY committed
86
87
88
89
option_end()

if has_config("ascend-npu") then
    add_defines("ENABLE_ASCEND_API")
Pan Zezhong's avatar
Pan Zezhong committed
90
    includes("xmake/ascend.lua")
PanZezhongQY's avatar
PanZezhongQY committed
91
92
end

93
94
95
96
-- 天数智芯
option("iluvatar-gpu")
    set_default(false)
    set_showmenu(true)
YdrMaster's avatar
YdrMaster committed
97
    set_description("Whether to compile implementations for Iluvatar GPU")
98
99
100
option_end()

if has_config("iluvatar-gpu") then
101
    add_defines("ENABLE_ILUVATAR_API")
102
103
104
    includes("xmake/iluvatar.lua")
end

105
106
107
108
109
110
111
112
113
114
115
116
-- qy
option("qy-gpu")
    set_default(false)
    set_showmenu(true)
    set_description("Whether to compile implementations for Qy GPU")
option_end()

if has_config("qy-gpu") then
    add_defines("ENABLE_QY_API")
    includes("xmake/qy.lua")
end

PanZezhongQY's avatar
PanZezhongQY committed
117
118
119
120
-- 沐曦
option("metax-gpu")
    set_default(false)
    set_showmenu(true)
YdrMaster's avatar
YdrMaster committed
121
    set_description("Whether to compile implementations for MetaX GPU")
PanZezhongQY's avatar
PanZezhongQY committed
122
123
option_end()

124
125
126
127
128
129
option("use-mc")
    set_default(false)
    set_showmenu(true)
    set_description("Use MC version")
option_end()

PanZezhongQY's avatar
PanZezhongQY committed
130
if has_config("metax-gpu") then
131
    add_defines("ENABLE_METAX_API")
132
133
134
    if has_config("use-mc") then
        add_defines("ENABLE_METAX_MC_API")
    end
135
    includes("xmake/metax.lua")
PanZezhongQY's avatar
PanZezhongQY committed
136
137
138
139
140
141
end

-- 摩尔线程
option("moore-gpu")
    set_default(false)
    set_showmenu(true)
YdrMaster's avatar
YdrMaster committed
142
    set_description("Whether to compile implementations for Moore Threads GPU")
PanZezhongQY's avatar
PanZezhongQY committed
143
144
option_end()

145
if has_config("moore-gpu") then
146
    add_defines("ENABLE_MOORE_API")
147
    includes("xmake/moore.lua")
148
end
PanZezhongQY's avatar
PanZezhongQY committed
149

150
151
-- 海光DCU
option("hygon-dcu")
PanZezhongQY's avatar
PanZezhongQY committed
152
153
    set_default(false)
    set_showmenu(true)
154
    set_description("Whether to compile implementations for Hygon DCU")
PanZezhongQY's avatar
PanZezhongQY committed
155
156
option_end()

157
158
159
if has_config("hygon-dcu") then
    add_defines("ENABLE_HYGON_API")
    includes("xmake/hygon.lua")
PanZezhongQY's avatar
PanZezhongQY committed
160
161
end

162
163
164
165
166
167
168
169
170
171
172
-- 昆仑芯
option("kunlun-xpu")
    set_default(false)
    set_showmenu(true)
    set_description("Enable or disable Kunlun XPU kernel")
option_end()

if has_config("kunlun-xpu") then
    add_defines("ENABLE_KUNLUN_API")
    includes("xmake/kunlun.lua")
end
PanZezhongQY's avatar
PanZezhongQY committed
173

174
175
176
177
178
179
180
181
182
183
184
-- 九齿
option("ninetoothed")
    set_default(false)
    set_showmenu(true)
    set_description("Whether to complie NineToothed implementations")
option_end()

if has_config("ninetoothed") then
    add_defines("ENABLE_NINETOOTHED")
end

185
186
187
188
-- InfiniCCL
option("ccl")
    set_default(false)
    set_showmenu(true)
YdrMaster's avatar
YdrMaster committed
189
    set_description("Wether to compile implementations for InfiniCCL")
190
191
192
193
194
195
option_end()

if has_config("ccl") then
    add_defines("ENABLE_CCL")
end

PanZezhong's avatar
PanZezhong committed
196
197
target("infini-utils")
    set_kind("static")
PanZezhong's avatar
PanZezhong committed
198
    on_install(function (target) end)
PanZezhong's avatar
PanZezhong committed
199
    set_languages("cxx17")
200
201
202
203
204
205
206
207
208
209
210
211

    set_warnings("all", "error")

    if is_plat("windows") then
        add_cxflags("/wd4068")
        if has_config("omp") then
            add_cxflags("/openmp")
        end
    else
        add_cxflags("-fPIC", "-Wno-unknown-pragmas")
        if has_config("omp") then
            add_cxflags("-fopenmp")
PanZezhong's avatar
PanZezhong committed
212
            add_ldflags("-fopenmp", {force = true})
213
214
215
        end
    end

PanZezhong's avatar
PanZezhong committed
216
217
218
    add_files("src/utils/*.cc")
target_end()

219
220
221
222
223
224
225
target("infinirt")
    set_kind("shared")

    if has_config("cpu") then
        add_deps("infinirt-cpu")
    end
    if has_config("nv-gpu") then
226
        add_deps("infinirt-nvidia")
227
    end
228
229
230
    if has_config("cambricon-mlu") then
        add_deps("infinirt-cambricon")
    end
231
232
233
    if has_config("ascend-npu") then
        add_deps("infinirt-ascend")
    end
234
235
236
    if has_config("metax-gpu") then
        add_deps("infinirt-metax")
    end
qinyiqun's avatar
qinyiqun committed
237
238
239
    if has_config("moore-gpu") then
        add_deps("infinirt-moore")
    end
YdrMaster's avatar
YdrMaster committed
240
241
242
    if has_config("iluvatar-gpu") then
        add_deps("infinirt-iluvatar")
    end
243
244
245
246
    if has_config("qy-gpu") then
        add_deps("infinirt-qy")
        add_files("build/.objs/infinirt-qy/rules/qy.cuda/src/infinirt/cuda/*.cu.o", {public = true})
    end
zhangyue's avatar
zhangyue committed
247
248
249
    if has_config("kunlun-xpu") then
        add_deps("infinirt-kunlun")
    end
250
251
252
    if has_config("hygon-dcu") then
        add_deps("infinirt-hygon")
    end
253
254
255
    set_languages("cxx17")
    set_installdir(os.getenv("INFINI_ROOT") or (os.getenv(is_host("windows") and "HOMEPATH" or "HOME") .. "/.infini"))
    add_files("src/infinirt/*.cc")
256
    add_installfiles("include/infinirt.h", {prefixdir = "include"})
257
258
target_end()

PanZezhongQY's avatar
PanZezhongQY committed
259
260
target("infiniop")
    set_kind("shared")
261
262
    add_deps("infinirt")

PanZezhongQY's avatar
PanZezhongQY committed
263
264
265
266
    if has_config("cpu") then
        add_deps("infiniop-cpu")
    end
    if has_config("nv-gpu") then
267
        add_deps("infiniop-nvidia")
PanZezhongQY's avatar
PanZezhongQY committed
268
    end
YdrMaster's avatar
YdrMaster committed
269
270
271
    if has_config("iluvatar-gpu") then
        add_deps("infiniop-iluvatar")
    end
272
273
274
275
276
    if has_config("qy-gpu") then
        add_deps("infiniop-qy")
        add_files("build/.objs/infiniop-qy/rules/qy.cuda/src/infiniop/ops/*/nvidia/*.cu.o", {public = true})
        add_files("build/.objs/infiniop-qy/rules/qy.cuda/src/infiniop/devices/nvidia/*.cu.o", {public = true})
    end
PanZezhongQY's avatar
PanZezhongQY committed
277
278

    if has_config("cambricon-mlu") then
PanZezhong's avatar
PanZezhong committed
279
        add_deps("infiniop-cambricon")
PanZezhongQY's avatar
PanZezhongQY committed
280
281
    end
    if has_config("ascend-npu") then
Pan Zezhong's avatar
Pan Zezhong committed
282
        add_deps("infiniop-ascend")
PanZezhongQY's avatar
PanZezhongQY committed
283
284
    end
    if has_config("metax-gpu") then
285
        add_deps("infiniop-metax")
PanZezhongQY's avatar
PanZezhongQY committed
286
    end
287
    if has_config("moore-gpu") then
288
        add_deps("infiniop-moore")
289
    end
290
291
292
    if has_config("kunlun-xpu") then
        add_deps("infiniop-kunlun")
    end
293
294
295
    if has_config("hygon-dcu") then
        add_deps("infiniop-hygon")
    end
PanZezhongQY's avatar
PanZezhongQY committed
296
297
298
299
300
301
302
303
304
305
306
    set_languages("cxx17")
    add_files("src/infiniop/devices/handle.cc")
    add_files("src/infiniop/ops/*/operator.cc")
    add_files("src/infiniop/*.cc")

    set_installdir(os.getenv("INFINI_ROOT") or (os.getenv(is_host("windows") and "HOMEPATH" or "HOME") .. "/.infini"))
    add_installfiles("include/infiniop/(**/*.h)", {prefixdir = "include/infiniop"})
    add_installfiles("include/infiniop/*.h", {prefixdir = "include/infiniop"})
    add_installfiles("include/infiniop.h", {prefixdir = "include"})
    add_installfiles("include/infinicore.h", {prefixdir = "include"})
target_end()
307

308
309
310
311
312
target("infiniccl")
    set_kind("shared")
    add_deps("infinirt")

    if has_config("nv-gpu") then
313
        add_deps("infiniccl-nvidia")
314
    end
Pan Zezhong's avatar
Pan Zezhong committed
315
316
317
    if has_config("ascend-npu") then
        add_deps("infiniccl-ascend")
    end
wooway777's avatar
wooway777 committed
318
319
320
    if has_config("cambricon-mlu") then
        add_deps("infiniccl-cambricon")
    end
PanZezhong's avatar
PanZezhong committed
321
322
323
    if has_config("metax-gpu") then
        add_deps("infiniccl-metax")
    end
YdrMaster's avatar
YdrMaster committed
324
325
326
    if has_config("iluvatar-gpu") then
        add_deps("infiniccl-iluvatar")
    end
327
328
    if has_config("qy-gpu") then
        add_deps("infiniccl-qy")
329
        add_files("build/.objs/infiniccl-qy/rules/qy.cuda/src/infiniccl/cuda/*.cu.o", {public = true})
330
    end
YdrMaster's avatar
YdrMaster committed
331

spike-zhu's avatar
spike-zhu committed
332
333
334
    if has_config("moore-gpu") then
        add_deps("infiniccl-moore")
    end
335

336
337
338
    if has_config("kunlun-xpu") then
        add_deps("infiniccl-kunlun")
    end
339
340
341
    if has_config("hygon-dcu") then
        add_deps("infiniccl-hygon")
    end
342

343
344
345
346
347
348
349
    set_languages("cxx17")

    add_files("src/infiniccl/*.cc")
    add_installfiles("include/infiniccl.h", {prefixdir = "include"})

    set_installdir(os.getenv("INFINI_ROOT") or (os.getenv(is_host("windows") and "HOMEPATH" or "HOME") .. "/.infini"))
target_end()
350

351
352
target("infinicore_c_api")

353
target("infinicore_c_api")
354
    set_kind("phony")
355
    add_deps("infiniop", "infinirt", "infiniccl")
356
357
    after_build(function (target) print(YELLOW .. "[Congratulations!] Now you can install the libraries with \"xmake install\"" .. NC) end)
target_end()
358

359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
target("infinicore_cpp_api")
    set_kind("shared")
    add_deps("infiniop", "infinirt", "infiniccl")
    set_languages("cxx17")

    local INFINI_ROOT = os.getenv("INFINI_ROOT") or (os.getenv(is_host("windows") and "HOMEPATH" or "HOME") .. "/.infini")

    add_includedirs("include")
    add_includedirs(INFINI_ROOT.."/include", { public = true })

    add_linkdirs(INFINI_ROOT.."/lib")
    add_links("infiniop", "infinirt", "infiniccl")

    -- Add InfiniCore C++ source files (needed for RoPE and other nn modules)
    add_files("src/infinicore/*.cc")
    add_files("src/infinicore/context/*.cc")
    add_files("src/infinicore/context/*/*.cc")
    add_files("src/infinicore/tensor/*.cc")
    add_files("src/infinicore/nn/*.cc")
    add_files("src/infinicore/ops/*/*.cc")

    set_installdir(INFINI_ROOT)
    add_installfiles("include/infinicore/(**.h)",    {prefixdir = "include/infinicore"})
    add_installfiles("include/infinicore/(**.hpp)",    {prefixdir = "include/infinicore"})
    add_installfiles("include/infinicore/(**/*.h)",  {prefixdir = "include/infinicore"})
    add_installfiles("include/infinicore/(**/*.hpp)",{prefixdir = "include/infinicore"})
    add_installfiles("include/infinicore.h",          {prefixdir = "include"})
    add_installfiles("include/infinicore.hpp",        {prefixdir = "include"})
    after_build(function (target) print(YELLOW .. "[Congratulations!] Now you can install the libraries with \"xmake install\"" .. NC) end)
target_end()

390
391
392
393
394
395
396
397
398
399
target("_infinicore")
    add_packages("boost")
    if is_mode("debug") then
        add_defines("BOOST_STACKTRACE_USE_BACKTRACE")
        add_links("backtrace")
    else
        add_defines("BOOST_STACKTRACE_USE_NOOP")
    end

    set_default(false)
400
401
    add_rules("python.library", {soabi = true})
    add_packages("pybind11")
402
    set_languages("cxx17")
403
404

    set_kind("shared")
405
406
407
408
409
    local INFINI_ROOT = os.getenv("INFINI_ROOT") or (os.getenv(is_host("windows") and "HOMEPATH" or "HOME") .. "/.infini")
    add_includedirs(INFINI_ROOT.."/include", { public = true })

    add_linkdirs(INFINI_ROOT.."/lib")
    add_links("infiniop", "infinirt", "infiniccl")
410
411

    add_files("src/infinicore/*.cc")
412
413
414
    add_files("src/infinicore/context/*.cc")
    add_files("src/infinicore/context/*/*.cc")
    add_files("src/infinicore/tensor/*.cc")
415
    add_files("src/infinicore/nn/*.cc")
416
    add_files("src/infinicore/ops/*/*.cc")
417
    add_files("src/infinicore/pybind11/**.cc")
418

419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
    set_installdir("python/infinicore")
target_end()

option("editable")
    set_default(false)
    set_showmenu(true)
    set_description("Install the `infinicore` Python package in editable mode")
option_end()

target("infinicore")
    set_kind("phony")

    set_default(false)

    add_deps("_infinicore")

    on_install(function (target)
        local pip_install_args = {}

        if has_config("editable") then
            table.insert(pip_install_args, "--editable")
        end

        os.execv("python", table.join({"-m", "pip", "install"}, pip_install_args, {"."}))
    end)
444
445
target_end()

446
447
-- Tests
includes("xmake/test.lua")