mirror of
https://github.com/odriverobotics/ODrive.git
synced 2026-02-08 08:21:52 +08:00
144 lines
3.7 KiB
Lua
144 lines
3.7 KiB
Lua
|
|
-- Projects that include fibre-cpp and also use tup can place a Tuprules.lua file
|
|
-- into their root directory with the line `no_libfibre = true` to prevent
|
|
-- libfibre from building.
|
|
if no_libfibre == true then
|
|
return
|
|
end
|
|
|
|
tup.include('package.lua')
|
|
|
|
CFLAGS = {'-fPIC -std=c++11 -DFIBRE_COMPILE -Wall'}
|
|
LDFLAGS = {'-static-libstdc++'}
|
|
|
|
|
|
if tup.getconfig("CC") == "" then
|
|
CXX = 'clang++'
|
|
LINKER = 'clang++'
|
|
else
|
|
CXX = tup.getconfig("CC")
|
|
LINKER = tup.getconfig("CC")
|
|
end
|
|
|
|
function get_bool_config(name, default)
|
|
if tup.getconfig(name) == "" then
|
|
return default
|
|
elseif tup.getconfig(name) == "true" then
|
|
return true
|
|
elseif tup.getconfig(name) == "false" then
|
|
return false
|
|
else
|
|
error(name.." ("..tup.getconfig(name)..") must be 'true' or 'false'.")
|
|
end
|
|
end
|
|
|
|
CFLAGS += tup.getconfig("CFLAGS")
|
|
LDFLAGS += tup.getconfig("LDFLAGS")
|
|
DEBUG = get_bool_config("DEBUG", true)
|
|
STRICT = get_bool_config("STRICT", false)
|
|
|
|
machine = fibre_run_now(CXX..' -dumpmachine') -- works with both clang and GCC
|
|
|
|
BUILD_TYPE='-shared'
|
|
|
|
if string.find(machine, "x86_64.*%-linux%-.*") then
|
|
outname = 'libfibre-linux-amd64.so'
|
|
LDFLAGS += '-lpthread -Wl,--version-script=libfibre.version -Wl,--gc-sections'
|
|
STRIP = not DEBUG
|
|
elseif string.find(machine, "arm.*%-linux%-.*") then
|
|
outname = 'libfibre-linux-armhf.so'
|
|
LDFLAGS += '-lpthread -Wl,--version-script=libfibre.version -Wl,--gc-sections'
|
|
STRIP = false
|
|
elseif string.find(machine, "x86_64.*-mingw.*") then
|
|
outname = 'libfibre-windows-amd64.dll'
|
|
LDFLAGS += '-lpthread -Wl,--version-script=libfibre.version'
|
|
STRIP = not DEBUG
|
|
elseif string.find(machine, "x86_64.*-apple-.*") then
|
|
outname = 'libfibre-macos-x86.dylib'
|
|
STRIP = false
|
|
elseif string.find(machine, "wasm.*") then
|
|
outname = 'libfibre-wasm.js'
|
|
STRIP = false
|
|
BUILD_TYPE = ''
|
|
else
|
|
error('unknown machine identifier '..machine)
|
|
end
|
|
|
|
LDFLAGS += BUILD_TYPE
|
|
|
|
if DEBUG then
|
|
CFLAGS += '-O1 -g'
|
|
else
|
|
CFLAGS += '-O3' -- TODO: add back -lfto
|
|
end
|
|
|
|
if STRICT then
|
|
CFLAGS += '-Werror'
|
|
end
|
|
|
|
function compile(src_file)
|
|
obj_file = 'build/'..tup.file(src_file)..'.o'
|
|
tup.frule{
|
|
inputs={src_file},
|
|
command='^co^ '..CXX..' -c %f '..tostring(CFLAGS)..' -o %o',
|
|
outputs={obj_file}
|
|
}
|
|
return obj_file
|
|
end
|
|
|
|
pkg = get_fibre_package({
|
|
enable_server=false,
|
|
enable_client=true,
|
|
enable_tcp_server_backend=get_bool_config("ENABLE_TCP_SERVER_BACKEND", true),
|
|
enable_tcp_client_backend=get_bool_config("ENABLE_TCP_CLIENT_BACKEND", true),
|
|
enable_libusb_backend=get_bool_config("ENABLE_LIBUSB_BACKEND", true),
|
|
allow_heap=true,
|
|
pkgconf=(tup.getconfig("USE_PKGCONF") != "") and tup.getconfig("USE_PKGCONF") or nil
|
|
})
|
|
|
|
CFLAGS += pkg.cflags
|
|
LDFLAGS += pkg.ldflags
|
|
|
|
for _, inc in pairs(pkg.include_dirs) do
|
|
CFLAGS += '-I./'..inc
|
|
end
|
|
|
|
for _, src_file in pairs(pkg.code_files) do
|
|
object_files += compile(src_file)
|
|
end
|
|
object_files += compile('libfibre.cpp')
|
|
|
|
outname = 'build/'..outname
|
|
|
|
if not STRIP then
|
|
compile_outname=outname
|
|
else
|
|
compile_outname=outname..'.fat'
|
|
end
|
|
|
|
if tup.ext(outname) == 'js' then
|
|
extra_outputs = {tup.base(compile_outname)..'.wasm'}
|
|
else
|
|
extra_outputs = {}
|
|
end
|
|
|
|
tup.frule{
|
|
inputs=object_files,
|
|
command='^c^ '..LINKER..' %f '..tostring(CFLAGS)..' '..tostring(LDFLAGS)..' -o %o',
|
|
outputs={compile_outname, extra_outputs=extra_outputs}
|
|
}
|
|
|
|
if STRIP then
|
|
tup.frule{
|
|
inputs={compile_outname},
|
|
command='strip --strip-all --discard-all %f -o %o',
|
|
outputs={outname}
|
|
}
|
|
end
|
|
|
|
if string.find(machine, "x86_64.*-apple-.*") then
|
|
tup.frule{
|
|
inputs=outname,
|
|
command='^c^ chmod 644 %f',
|
|
}
|
|
end |