1. Immediate issue:On windows, when building using a native 64 bit compiler, e.g. using:> mkdir bld &&
cd bld && configure ../ --cpu=x86-64 --enable-cross && make && make install
I get the following error during install, which is ignored (`make install` returns a success
code):> install -m644 lib/x86_64-win32/libtcc1.a <prefix>"/lib/64"
install: cannot stat `lib/x86_64-win32/libtcc1.a': No such file or directory>
make: [install] Error 1 (ignored)
And when building with a 32 bit compiler then the equivalent 32 bit libtcc1.a
is missing.
While it's not critical since we have the native version anyway which is
equivalent, having this error is not nice.
It's possible to just skip the native-variant cross build installl, but I think
it would be simpler to just build all the cross progs, which then installs
successfully. The native and cross progs and libs (for the same platform) don't
clash as far as I can tell, so it doesn't hurt to just build and install all of
them. It also helps that the Makefile has less exceptions, e.g. this patch
solves it (note that it also adds $(I386_CROSS) which I think is accidentally
missing):
diff --git a/Makefile b/Makefile
index 00d17bb..81b652d 100644
--- a/Makefile
+++ b/Makefile
@@ -97,13 +97,11 @@ C67_FILES = $(CORE_FILES) c67-gen.c c67-link.c tcccoff.c
ifdef CONFIG_WIN32
ifeq ($(ARCH),x86_64)
NATIVE_FILES=$(WIN64_FILES)
- PROGS_CROSS=$(WIN32_CROSS) $(X64_CROSS) $(ARM_CROSS) $(ARM64_CROSS)
$(C67_CROSS) $(WINCE_CROSS)
- LIBTCC1_CROSS=lib/i386-win32/libtcc1.a
else
NATIVE_FILES=$(WIN32_FILES)
- PROGS_CROSS=$(WIN64_CROSS) $(X64_CROSS) $(ARM_CROSS) $(ARM64_CROSS)
$(C67_CROSS) $(WINCE_CROSS)
- LIBTCC1_CROSS=lib/x86_64-win32/libtcc1.a
endif
+PROGS_CROSS=$(I386_CROSS) $(X64_CROSS) $(WIN32_CROSS) $(WIN64_CROSS)
$(ARM_CROSS) $(ARM64_CROSS) $(C67_CROSS) $(WINCE_CROSS)
+LIBTCC1_CROSS=lib/i386-win32/libtcc1.a lib/x86_64-win32/libtcc1.a
else ifeq ($(ARCH),i386)
NATIVE_FILES=$(I386_FILES)
2. In general, it seems that libtcc1.a for the cross progs is only built for
the windows progs, and only on x86[_64] platforms. E.g. on arm, $(CROSS_PROGS)
includes the windows compilers but not their libtcc1.a, and on linux 64 there's
no libtcc1.a for linux 32.
It's not entirely clear to me if libtcc1.a can be built for all the cross
progs, but it does seem to me that all of them need it, and it probably cannot
be expected to be available as part of the native toolchain of the cross target.
E.g. create a minimal c program with main which just returns 0 and try to
compile it with all the cross compilers. All of them complain of a missing
libtcc1.a (except for windows, if the native platform is x86[-64]), and most of
them also complain on few missing crt?.o and libc.
E.g. on Ubuntu 64, trying to use i386-tcc to compile the test program results in (some real path shows at <prefix>):
tcc: error: file 'crt1.o' not found
tcc: error: file 'crti.o' not found
tcc: error: library 'c' not found
tcc: error: file <prefix>'/lib/tcc/i386/libtcc1.a' not found
tcc: error: file 'crtn.o' not found
I'd think that if it's possible to build libtcc1.a for more platforms, then a
patch similar to the above but even more general could be useful. I.e. use as
little exceptions as possible, e.g. on i386 also build cross i386, etc. It
might be even possible to use the exact same set of cross progs and cross libs
regardless of the host.
However, trying the above just for linux and windows, it seems that install
still doesn't copy all of them, so maybe that could be generalized too.
------------------------------------------------------------------------
_______________________________________________
Tinycc-devel mailing list
address@hidden
https://lists.nongnu.org/mailman/listinfo/tinycc-devel