Hi Andreas, I've played a little with new release and I guess I know what the cause of a problem. Sometimes gnustep-make adds `-fobjc-runtime=gcc` to the ObjC compiler options. Check your config.log if test compiles with this flag.
On Tue, Dec 18, 2018 at 9:31 AM Andreas Fink <[email protected]> wrote: > Hi all, > > I'm trying to build gnustep base with clang-7 on debian 9 and I > constantly run into incompatibilities from the runtime or tests failing and > I can't figure out the dependency issues here. > > > clang-7 comes from the clang repository > > deb http://apt.llvm.org/stretch/ llvm-toolchain-stretch-7 main > deb-src http://apt.llvm.org/stretch/ llvm-toolchain-stretch-7 main > > > My gnustep make is configured like this: > > > export CC=/usr/bin/clang-7 > export CXX=/usr/bin/clang++-7 > export LD=/usr/bin/lld-7 > export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin > export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ > export RUNTIME_VERSION=gnustep-1.9 > export OBJCFLAGS="-fblocks" > export CFLAGS="-L/usr/local/lib" > ./configure \ > --with-layout=fhs \ > --disable-importing-config-file \ > --enable-native-objc-exceptions \ > --enable-objc-arc \ > --enable-install-ld-so-conf \ > --with-library-combo=ng-gnu-gnu \ > --with-config-file=/usr/local/etc/GNUstep/GNUstep.conf \ > --with-user-config-file='.GNUstep.conf' \ > --with-user-defaults-dir='GNUstep/Library/Defaults' \ > --with-objc-lib-flag="-l:libobjc.so.4.6" \ > > > my libobjc2 is compiled like this: > > cmake .. -DCMAKE_C_COMPILER=/usr/bin/clang-7 > -DCMAKE_CXX_COMPILER=/usr/bin/clang++-7 -DCMAKE_LINKER=/usr/bin/lld-7 > -DCMAKE_BUILD_TYPE=RelWithDebInfo > > > and then when I compile gnustep-base > > export RUNTIME_VERSION=gnustep-1.9 > export OBJCFLAGS="-fblocks" > export CFLAGS="-L/usr/local/lib" > ./configure \ > --with-layout=fhs \ > --disable-importing-config-file \ > --enable-native-objc-exceptions \ > --enable-objc-arc \ > --enable-install-ld-so-conf \ > --with-library-combo=ng-gnu-gnu \ > --with-config-file=/usr/local/etc/GNUstep/GNUstep.conf \ > --with-user-config-file='.GNUstep.conf' \ > --with-user-defaults-dir='GNUstep/Library/Defaults' \ > --with-objc-lib-flag="-l:libobjc.so.4.6" \ > > > > I get this: > > *configure: error: Your compiler does not appear to implement the > -fconstant-string-class option needed for support of strings. Please check > for a more recent version or consider using --enable-nxconstantstring* > > well clang-7 definitively does know -fconstant-string so this test is > going nuts somehow. > > > I looked at the test config/config.constant-string-class.m > and I figured out it segfaults: > > > # clang-7 -O0 -g config/config.constant-string-class.m -l:libobjc.so.4.6 > In file included from config/config.constant-string-class.m:19: > config/objc-common.g:54:3: warning: assignment to Objective-C's isa is > deprecated in favor of object_setClass() [-Wdeprecated-objc-isa-usage] > obj->isa = self; > ^ ~~~~~~~ > object_setClass( , ) > config/objc-common.g:47:5: note: instance variable is declared here > id isa; > ^ > config/objc-common.g:45:31: warning: class 'NSObject' defined without > specifying a base class [-Wobjc-root-class] > GS_OBJC_ROOT_CLASS @interface NSObject > ^ > config/objc-common.g:45:39: note: add a super class to fix this problem > GS_OBJC_ROOT_CLASS @interface NSObject > ^ > : NSObject > config/config.constant-string-class.m:23:31: warning: class > 'FooConstantString' defined without specifying a base class > [-Wobjc-root-class] > GS_OBJC_ROOT_CLASS @interface FooConstantString > ^ > config/config.constant-string-class.m:23:48: note: add a super class to > fix this problem > GS_OBJC_ROOT_CLASS @interface FooConstantString > ^ > : NSObject > config/config.constant-string-class.m:49:23: warning: incompatible pointer > types initializing 'FooConstantString *' with an expression of type > 'NSString *' > [-Wincompatible-pointer-types] > FooConstantString *string = @"Antonio Valente"; > ^ ~~~~~~~~~~~~~~~~~~ > 4 warnings generated. > [[email protected] base]# lldb ./a.out > (lldb) target create "./a.out" > Current executable set to './a.out' (x86_64). > (lldb) run > Process 15116 launched: '/Users/afink/development/gnustep/base/a.out' > (x86_64) > Process 15116 stopped > * thread #1, name = 'a.out', stop reason = signal SIGSEGV: invalid address > (fault address: 0x0) > frame #0: 0x00007ffff7bcaae8 > libobjc.so.4`___lldb_unnamed_symbol45$$libobjc.so.4 + 72 > libobjc.so.4`___lldb_unnamed_symbol45$$libobjc.so.4: > -> 0x7ffff7bcaae8 <+72>: movq (%r12), %rax > 0x7ffff7bcaaec <+76>: movl %eax, %ecx > 0x7ffff7bcaaee <+78>: movq %rax, %rdx > 0x7ffff7bcaaf1 <+81>: shll $0x5, %ecx > (lldb) > > > > if I patch out the constant string test in configure.ac and rebuild it, > then most gnustep-base test cases fail. > > So I'm kind of lost on where the heck this comes from. I noticed in the > past that my classes get referred to the wrong runtime version and thus > access to members of superclasses returned wrong values which apparently > depends on runtime version which is the reason why I want to recompile > everything with a specific runtime version so we have 100% sure everything > uses the same ABI. I only run my own code so I dont' need backwards > compatibility. > > Does anyone have a clue on how to fix this? > > > > _______________________________________________ > Discuss-gnustep mailing list > [email protected] > https://lists.gnu.org/mailman/listinfo/discuss-gnustep > -- Sergii Stoian, ProjectCenter lead developer NEXTSPACE owner, lead developer
_______________________________________________ Discuss-gnustep mailing list [email protected] https://lists.gnu.org/mailman/listinfo/discuss-gnustep
