Hi everyone,
I am working actually on my Linux distribution. I did a package manager able to build a Linux system completely from scratch from the source.
I am just facing a small problem. I need to compile rustc for a custom target .
The target I have on the system is: x86_64-horizon-linux-gnu
How should I proceed ? I guess I need to change something in the file config.toml , but after lot of try, I don't get the result I want...
This is the script called by my package manager (even you don't know the API, should be easy to understand):
class Target < ISM::Software
def prepare
super
configData = <<-CODE
changelog-seen = 2
[llvm]
targets = "X86"
link-shared = true
[build]
full-bootstrap = true
docs = false
extended = true
locked-deps = true
tools = ["cargo", "clippy", "rustdoc", "rustfmt"]
vendor = true
[install]
prefix = "/usr"
docdir = "share/doc/rustc-1.71.1"
[rust]
channel = "stable"
[target.#{Ism.settings.systemTarget}]
llvm-config = "/usr/bin/llvm-config"
CODE
fileWriteData("#{buildDirectoryPath}/config.toml",configData)
end
def build
super
runPythonCommand( arguments: "./x.py build",
path: buildDirectoryPath,
environment: {"LIBSSH2_SYS_USE_PKG_CONFIG" => "1"})
end
def prepareInstallation
super
runPythonCommand( arguments: "./x.py install",
path: buildDirectoryPath,
environment: { "DESTDIR" => "#{builtSoftwareDirectoryPath}#{Ism.settings.rootPath}",
"LIBSSH2_SYS_USE_PKG_CONFIG" => "1"})
deleteAllFilesRecursivelyFinishing( path: "#{builtSoftwareDirectoryPath}#{Ism.settings.rootPath}",
extensions: ["old"])
end
end
This is my project page by the way: https://github.com/Fulgurance/ISM
(Horizon will be my linux system name)
jjpe
September 30, 2024, 7:14pm
2
While you were absolutely correct to post this here, in this particular case I think you may have a higher probability of getting a useful answer on IRLO .
The reason for that is that adding a new target is more akin to development of the Rust language itself rather than using Rust (even though that is ultimately the point).
Okay got it. It's done. Thanks a lot
Vorpal
October 1, 2024, 10:24am
4
As I understand it, Rust uses unknown
always, instead of for example pc
or whatever vanity name different distros want to use. Unlike GCC etc, the target triplet is considered as a single string that has to match exactly. So this sort of customisation simply isn't supported.
Okay, so in that case. I have a question. How can I then build properly firefox. Because of this, I get an error normally I don't have. Firefox can't find cmath
1:29.01 exit status: 0
1:29.01 running: "/usr/bin/clang" "-O1" "-ffunction-sections" "-fdata-sections" "-fPIC" "--target=x86_64-unknown-linux-gnu" "-std=gnu99" "-I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/dist/system_wrappers" "-include" "/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/config/gcc_hidden.h" "-U_FORTIFY_SOURCE" "-D_FORTIFY_SOURCE=2" "-fstack-protector-strong" "-fstack-clash-protection" "-DNDEBUG=1" "-DTRIMMED=1" "-I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/toolkit/library/rust" "-I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/toolkit/library/rust" "-I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/dist/include" "-I/usr/include/nspr" "-I/usr/include/nss" "-I/usr/include/nspr" "-I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/dist/include/nss" "-I/usr/include/libpng16" "-I/usr/include/pixman-1" "-include" "/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/mozilla-config.h" "-DMOZILLA_CLIENT" "-fPIC" "-ffunction-sections" "-fdata-sections" "-fno-math-errno" "-pthread" "-pipe" "-O2" "-fomit-frame-pointer" "-funwind-tables" "-Wno-error=tautological-type-limit-compare" "-Wno-range-loop-analysis" "-Wno-error=deprecated-declarations" "-Wno-error=array-bounds" "-Wno-error=free-nonheap-object" "-Wno-error=atomic-alignment" "-Wno-error=deprecated-builtins" "-Wno-psabi" "-Wno-error=builtin-macro-redefined" "-Wno-unknown-warning-option" "-fno-strict-aliasing" "-ffp-contract=off" "-DMOZILLA_CONFIG_H" "-I" "glsl-optimizer/include" "-I" "glsl-optimizer/src/mesa" "-I" "glsl-optimizer/src/mapi" "-I" "glsl-optimizer/src/compiler" "-I" "glsl-optimizer/src/compiler/glsl" "-I" "glsl-optimizer/src/gallium/auxiliary" "-I" "glsl-optimizer/src/gallium/include" "-I" "glsl-optimizer/src" "-I" "glsl-optimizer/src/util" "-D__STDC_FORMAT_MACROS" "-D_GNU_SOURCE" "-DHAVE_ENDIAN_H" "-DHAVE_PTHREAD" "-DHAVE_TIMESPEC_GET" "-DMOZ_INCLUDE_MOZALLOC_H" "-Dmozilla_throw_gcc_h" "-o" "/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/release/build/glslopt-ce80c9358cf233fd/out/glsl-optimizer/src/compiler/shader_enums.o" "-c" "glsl-optimizer/src/compiler/shader_enums.c"
1:29.01 exit status: 0
1:29.01 AR_x86_64-unknown-linux-gnu = None
1:29.01 AR_x86_64_unknown_linux_gnu = Some("/usr/bin/llvm-ar")
1:29.01 running: ZERO_AR_DATE="1" "/usr/bin/llvm-ar" "cq" "/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/release/build/glslopt-ce80c9358cf233fd/out/libmesa.a" "/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/release/build/glslopt-ce80c9358cf233fd/out/glsl-optimizer/src/mesa/program/dummy_errors.o" "/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/release/build/glslopt-ce80c9358cf233fd/out/glsl-optimizer/src/mesa/program/symbol_table.o" "/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/release/build/glslopt-ce80c9358cf233fd/out/glsl-optimizer/src/mesa/main/extensions_table.o" "/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/release/build/glslopt-ce80c9358cf233fd/out/glsl-optimizer/src/compiler/shader_enums.o"
1:29.01 exit status: 0
1:29.01 running: "/usr/bin/llvm-ar" "s" "/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/release/build/glslopt-ce80c9358cf233fd/out/libmesa.a"
1:29.01 exit status: 0
1:29.01 cargo:rustc-link-lib=static=mesa
1:29.01 cargo:rustc-link-search=native=/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/release/build/glslopt-ce80c9358cf233fd/out
1:29.01 TARGET = Some("x86_64-unknown-linux-gnu")
1:29.01 OPT_LEVEL = Some("1")
1:29.01 HOST = Some("x86_64-unknown-linux-gnu")
1:29.01 CXX_x86_64-unknown-linux-gnu = None
1:29.01 CXX_x86_64_unknown_linux_gnu = Some("/usr/bin/clang++")
1:29.01 CXXFLAGS_x86_64-unknown-linux-gnu = None
1:29.01 CXXFLAGS_x86_64_unknown_linux_gnu = Some(" -I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/dist/stl_wrappers -I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/dist/system_wrappers -include /sources/WebBrowsers-Main/Firefox/115.2.0/Sources/config/gcc_hidden.h -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fstack-clash-protection -DNDEBUG=1 -DTRIMMED=1 -I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/toolkit/library/rust -I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/toolkit/library/rust -I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/dist/include -I/usr/include/nspr -I/usr/include/nss -I/usr/include/nspr -I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/dist/include/nss -I/usr/include/libpng16 -I/usr/include/pixman-1 -DMOZILLA_CLIENT -include /sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/mozilla-config.h -fno-sized-deallocation -fno-aligned-new -fno-exceptions -fPIC -fno-rtti -ffunction-sections -fdata-sections -fno-exceptions -fno-math-errno -pthread -pipe -O2 -fomit-frame-pointer -funwind-tables -Wno-error=tautological-type-limit-compare -Wno-invalid-offsetof -Wno-range-loop-analysis -Wno-error=deprecated -Wno-error=deprecated-anon-enum-enum-conversion -Wno-error=deprecated-enum-enum-conversion -Wno-error=deprecated-pragma -Wno-error=deprecated-this-capture -Wno-inline-new-delete -Wno-error=deprecated-declarations -Wno-error=array-bounds -Wno-error=free-nonheap-object -Wno-error=atomic-alignment -Wno-error=deprecated-builtins -Wno-psabi -Wno-error=builtin-macro-redefined -Wno-unknown-warning-option -fno-strict-aliasing -ffp-contract=off -DMOZILLA_CONFIG_H")
1:29.01 CRATE_CC_NO_DEFAULTS = None
1:29.01 DEBUG = Some("false")
1:29.01 running: "/usr/bin/clang++" "-O1" "-ffunction-sections" "-fdata-sections" "-fPIC" "--target=x86_64-unknown-linux-gnu" "-I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/dist/stl_wrappers" "-I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/dist/system_wrappers" "-include" "/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/config/gcc_hidden.h" "-U_FORTIFY_SOURCE" "-D_FORTIFY_SOURCE=2" "-fstack-protector-strong" "-fstack-clash-protection" "-DNDEBUG=1" "-DTRIMMED=1" "-I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/toolkit/library/rust" "-I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/toolkit/library/rust" "-I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/dist/include" "-I/usr/include/nspr" "-I/usr/include/nss" "-I/usr/include/nspr" "-I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/dist/include/nss" "-I/usr/include/libpng16" "-I/usr/include/pixman-1" "-DMOZILLA_CLIENT" "-include" "/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/mozilla-config.h" "-fno-sized-deallocation" "-fno-aligned-new" "-fno-exceptions" "-fPIC" "-fno-rtti" "-ffunction-sections" "-fdata-sections" "-fno-exceptions" "-fno-math-errno" "-pthread" "-pipe" "-O2" "-fomit-frame-pointer" "-funwind-tables" "-Wno-error=tautological-type-limit-compare" "-Wno-invalid-offsetof" "-Wno-range-loop-analysis" "-Wno-error=deprecated" "-Wno-error=deprecated-anon-enum-enum-conversion" "-Wno-error=deprecated-enum-enum-conversion" "-Wno-error=deprecated-pragma" "-Wno-error=deprecated-this-capture" "-Wno-inline-new-delete" "-Wno-error=deprecated-declarations" "-Wno-error=array-bounds" "-Wno-error=free-nonheap-object" "-Wno-error=atomic-alignment" "-Wno-error=deprecated-builtins" "-Wno-psabi" "-Wno-error=builtin-macro-redefined" "-Wno-unknown-warning-option" "-fno-strict-aliasing" "-ffp-contract=off" "-DMOZILLA_CONFIG_H" "-I" "glsl-optimizer/include" "-I" "glsl-optimizer/src/mesa" "-I" "glsl-optimizer/src/mapi" "-I" "glsl-optimizer/src/compiler" "-I" "glsl-optimizer/src/compiler/glsl" "-I" "glsl-optimizer/src/gallium/auxiliary" "-I" "glsl-optimizer/src/gallium/include" "-I" "glsl-optimizer/src" "-I" "glsl-optimizer/src/util" "-D__STDC_FORMAT_MACROS" "-D_GNU_SOURCE" "-DHAVE_ENDIAN_H" "-DHAVE_PTHREAD" "-DHAVE_TIMESPEC_GET" "-DMOZ_INCLUDE_MOZALLOC_H" "-Dmozilla_throw_gcc_h" "-o" "/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/release/build/glslopt-ce80c9358cf233fd/out/glsl-optimizer/src/compiler/glsl_types.o" "-c" "glsl-optimizer/src/compiler/glsl_types.cpp"
1:29.01 cargo:warning=In file included from glsl-optimizer/src/compiler/glsl_types.cpp:25:
1:29.01 cargo:warning=In file included from glsl-optimizer/src/mesa/main/macros.h:35:
1:29.01 cargo:warning=In file included from glsl-optimizer/src/util/u_math.h:42:
1:29.01 cargo:warning=In file included from glsl-optimizer/include/c99_math.h:194:
1:29.01 cargo:warning=In file included from /sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/dist/stl_wrappers/cmath:62:
1:29.01 cargo:warning=/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/dist/system_wrappers/cmath:3:15: fatal error: 'cmath' file not found
1:29.01 cargo:warning=#include_next <cmath>
1:29.01 cargo:warning= ^~~~~~~
1:29.01 cargo:warning=1 error generated.
1:29.01 exit status: 1
1:29.02 --- stderr
1:29.02 error occurred: Command "/usr/bin/clang++" "-O1" "-ffunction-sections" "-fdata-sections" "-fPIC" "--target=x86_64-unknown-linux-gnu" "-I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/dist/stl_wrappers" "-I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/dist/system_wrappers" "-include" "/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/config/gcc_hidden.h" "-U_FORTIFY_SOURCE" "-D_FORTIFY_SOURCE=2" "-fstack-protector-strong" "-fstack-clash-protection" "-DNDEBUG=1" "-DTRIMMED=1" "-I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/toolkit/library/rust" "-I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/toolkit/library/rust" "-I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/dist/include" "-I/usr/include/nspr" "-I/usr/include/nss" "-I/usr/include/nspr" "-I/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/dist/include/nss" "-I/usr/include/libpng16" "-I/usr/include/pixman-1" "-DMOZILLA_CLIENT" "-include" "/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/mozilla-config.h" "-fno-sized-deallocation" "-fno-aligned-new" "-fno-exceptions" "-fPIC" "-fno-rtti" "-ffunction-sections" "-fdata-sections" "-fno-exceptions" "-fno-math-errno" "-pthread" "-pipe" "-O2" "-fomit-frame-pointer" "-funwind-tables" "-Wno-error=tautological-type-limit-compare" "-Wno-invalid-offsetof" "-Wno-range-loop-analysis" "-Wno-error=deprecated" "-Wno-error=deprecated-anon-enum-enum-conversion" "-Wno-error=deprecated-enum-enum-conversion" "-Wno-error=deprecated-pragma" "-Wno-error=deprecated-this-capture" "-Wno-inline-new-delete" "-Wno-error=deprecated-declarations" "-Wno-error=array-bounds" "-Wno-error=free-nonheap-object" "-Wno-error=atomic-alignment" "-Wno-error=deprecated-builtins" "-Wno-psabi" "-Wno-error=builtin-macro-redefined" "-Wno-unknown-warning-option" "-fno-strict-aliasing" "-ffp-contract=off" "-DMOZILLA_CONFIG_H" "-I" "glsl-optimizer/include" "-I" "glsl-optimizer/src/mesa" "-I" "glsl-optimizer/src/mapi" "-I" "glsl-optimizer/src/compiler" "-I" "glsl-optimizer/src/compiler/glsl" "-I" "glsl-optimizer/src/gallium/auxiliary" "-I" "glsl-optimizer/src/gallium/include" "-I" "glsl-optimizer/src" "-I" "glsl-optimizer/src/util" "-D__STDC_FORMAT_MACROS" "-D_GNU_SOURCE" "-DHAVE_ENDIAN_H" "-DHAVE_PTHREAD" "-DHAVE_TIMESPEC_GET" "-DMOZ_INCLUDE_MOZALLOC_H" "-Dmozilla_throw_gcc_h" "-o" "/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/firefox-build-dir/release/build/glslopt-ce80c9358cf233fd/out/glsl-optimizer/src/compiler/glsl_types.o" "-c" "glsl-optimizer/src/compiler/glsl_types.cpp" with args "clang++" did not execute successfully (status code exit status: 1).
1:29.02 warning: build failed, waiting for other jobs to finish...
1:34.20 devtools/platform
1:34.72 devtools/shared/heapsnapshot
1:36.32 docshell/base
1:39.69 docshell/base/timeline
1:41.19 docshell/build
1:41.20 docshell/shistory
1:41.24 dom/abort
1:41.25 dom/animation
1:41.26 dom/audiochannel
1:41.54 dom/base
1:42.20 dom/battery
1:43.53 make[4]: *** [/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/config/makefiles/rust.mk:441: force-cargo-library-build] Error 101
1:43.53 make[3]: *** [/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/config/recurse.mk:72: toolkit/library/rust/target] Error 2
1:43.54 make[3]: *** Waiting for unfinished jobs....
2:37.71 make[2]: *** [/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/config/recurse.mk:34: compile] Error 2
2:37.71 make[1]: *** [/sources/WebBrowsers-Main/Firefox/115.2.0/Sources/config/rules.mk:361: default] Error 2
2:37.71 make: *** [client.mk:60: build] Error 2
2:37.73 9 compiler warnings present.
[!] Failed to run python ./mach build in /sources/WebBrowsers-Main/Firefox/115.2.0/Sources// with given environment MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=none MOZBUILD_STATE_PATH=mozbuild with the loaded environment file
Vorpal
October 1, 2024, 10:31am
6
That I don't know. I have never attempted to mix vanity triplets with default ones.
Vorpal
October 1, 2024, 10:37am
7
You could perhaps check what other distros with vanity triplets do. Arch Linux appears to carry patches for example: Arch Linux / Packaging / Packages / rust ยท GitLab
I don't know where to find Debian packages etc, but they likely have similar things going on.
In general I would suggest avoiding custom triplets, it just creates unnecessary pain for you and your users.