Thread overview
build runtime for embedded Linux (cross)
Oct 28
kinke
October 27

What's can be wrong with i686-linux-musl cross target for ldc-build-runtime ?

ponyatov@debian:~/player$ rm -rf tmp/ldc_i686-linux-musl ; CORES=1 make ldc
PATH=/home/ponyatov/player/host/bin:/opt/ldc2-1.32.0-linux-x86_64/bin:/home/ponyatov/.cargo/bin:/home/ponyatov/.npm/bin:/home/ponyatov/.opam/default/bin:/home/ponyatov/.nimble/bin:/home/ponyatov/Arduino/arduino-ide_2.2.1_Linux_64bit/resources/app/lib/backend/resources:/home/ponyatov/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin:/home/ponyatov/Arduino/arduino-ide_2.2.1_Linux_64bit:/usr/lib/jvm/java-11-openjdk-amd64/bin:/home/ponyatov/.cache/rebar3/bin:/home/ponyatov/bin:/home/ponyatov/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/games CC=i686-linux-musl-gcc CXX=i686-linux-musl-g++ /opt/ldc2-1.32.0-linux-x86_64/bin/ldc-build-runtime -j1 --ldc /opt/ldc2-1.32.0-linux-x86_64/bin/ldc2  \
        --buildDir /home/ponyatov/player/tmp/ldc_i686-linux-musl --ldcSrcDir /home/ponyatov/player/tmp/ldc-1.32.0-src \
        --targetSystem i686-linux-musl BUILD_SHARED_LIBS=ON \
        --dFlags="-mtriple=i686-linux-musl;-mcpu=i686"
.: Creating build directory: /home/ponyatov/player/tmp/ldc_i686-linux-musl
.: Invoking: cmake -DLDC_EXE_FULL=/opt/ldc2-1.32.0-linux-x86_64/bin/ldc2 -DDMDFE_MINOR_VERSION=102 -DDMDFE_PATCH_VERSION=2 -DTARGET_SYSTEM=i686-linux-musl '-DD_EXTRA_FLAGS=-mtriple=i686-linux-musl;-mcpu=i686' -DBUILD_SHARED_LIBS=ON /home/ponyatov/player/tmp/ldc-1.32.0-src/runtime
-- The C compiler identification is GNU 12.3.0
-- Check for working C compiler: /home/ponyatov/player/host/bin/i686-linux-musl-gcc
-- Check for working C compiler: /home/ponyatov/player/host/bin/i686-linux-musl-gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
CMake Error at CMakeLists.txt:111 (message):
  Shared libraries (BUILD_SHARED_LIBS) are only supported on Windows, Linux,
  macOS, FreeBSD and DragonFly for the time being.
October 27
>

Shared libraries (BUILD_SHARED_LIBS) are only supported on Windows, Linux,

fixed with

	--targetSystem='Linux;UNIX' CMAKE_SYSTEM_NAME=Linux BUILD_SHARED_LIBS=ON   \

Now have some problems with right ldc2.conf:

.PHONY: hello
hello: $(ROOT)/bin/hello
$(ROOT)/bin/hello: hello/hello.d ldc2.conf
	$(XPATH) ldc2 -mtriple $(TARGET) -of=$@ $< && file $@

project-local: ~/player/ldc2.conf

"i686-.+-linux-musl":
{
    switches = [
        "-mcpu=i686",
        "-I%%ldcbinarypath%%/../import",
        "-gcc=i686-linux-musl-gcc"
    ];
    lib-dirs = [
        "/home/ponyatov/player/root/lib"
    ];
}
ldc2 -mtriple i686-linux-musl -of=/home/ponyatov/player/root/bin/hello hello/hello.d && file /home/ponyatov/player/root/bin/hello
/home/ponyatov/player/host/lib/gcc/i686-linux-musl/12.3.0/../../../../i686-linux-musl/bin/ld: cannot find -lunwind: No such file or directory
collect2: error: ld returned 1 exit status
ponyatov@debian:~/player$ ls root/lib/
crt1.o             libcrypt.a                             libdruntime-ldc-shared.so           libphobos2-ldc-debug-shared.so.102.2  librt.a
crti.o             libc.so                                libdruntime-ldc-shared.so.102       libphobos2-ldc-shared.so              libutil.a
crtn.o             libdl.a                                libdruntime-ldc-shared.so.102.2     libphobos2-ldc-shared.so.102          libxnet.a
ldc_rt.dso.o       libdruntime-ldc-debug-shared.so        libm.a                              libphobos2-ldc-shared.so.102.2        modules
ld-musl-i386.so.1  libdruntime-ldc-debug-shared.so.102    libphobos2-ldc-debug-shared.so      libpthread.a                          rcrt1.o
libc.a             libdruntime-ldc-debug-shared.so.102.2  libphobos2-ldc-debug-shared.so.102  libresolv.a                           Scrt1.o
October 28

On Friday, 27 October 2023 at 17:14:07 UTC, Dmitry Ponyatov wrote:

>

Now have some problems with right ldc2.conf:
[...]
/home/ponyatov/player/host/lib/gcc/i686-linux-musl/12.3.0/../../../../i686-linux-musl/bin/ld: cannot find -lunwind: No such file or directory

The .conf seems fine. On musl, druntime depends on libunwind (-lunwind is injected by LDC). There's a package for Alpine, incl. a link to the project home page to build it yourself: https://pkgs.alpinelinux.org/package/edge/main/x86/libunwind