diff --git a/GNUmakefile b/GNUmakefile index 3210263..76442bb 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -21,9 +21,9 @@ else # # Start of GNUstep-make specific section. # +-include version.make PACKAGE_NAME = gnustep-objc2 -VERSION=4.6.0 SVN_MODULE_NAME = libobjc2 SVN_BASE_URL = svn+ssh://svn.gna.org/svn/gnustep/libs SVN_TAG_NAME=objc2 diff --git a/Makefile b/Makefile index 4d91a9b..8fc30a3 100644 --- a/Makefile +++ b/Makefile @@ -2,10 +2,7 @@ .SUFFIXES: .cc .c .m .o .S -MAJOR_VERSION = 4 -MINOR_VERSION = 6 -SUBMINOR_VERSION = 0 -VERSION = $(MAJOR_VERSION).$(MINOR_VERSION).$(SUBMINOR_VERSION) +-include version.make LIBOBJCLIBNAME=objc LIBOBJC=libobjc @@ -18,6 +15,12 @@ CXXFLAGS += -fPIC -fexceptions CPPFLAGS += -DTYPE_DEPENDENT_DISPATCH -DGNUSTEP CPPFLAGS += -D__OBJC_RUNTIME_INTERNAL__=1 -D_XOPEN_SOURCE=500 -D__BSD_VISIBLE=1 -D_BSD_SOURCE=1 +ifeq ($(CC),clang) +ASMFLAGS += -no-integrated-as +else +ASMFLAGS += +endif + STRIP=`if [ "$(strip)" = "yes" ] ; then echo -s ; fi` # Suppress warnings about incorrect selectors @@ -98,7 +101,7 @@ $(LIBOBJC).a: $(OBJECTS) .S.o: Makefile $(SILENT)echo Assembling `basename $<`... - $(SILENT)$(CC) $(CPPFLAGS) -no-integrated-as -c $< -o $@ + $(SILENT)$(CC) $(CPPFLAGS) $(ASMFLAGS) -c $< -o $@ install: all $(SILENT)echo Installing libraries... diff --git a/Makefile.clang b/Makefile.clang index a137f58..a8466a8 100644 --- a/Makefile.clang +++ b/Makefile.clang @@ -1,8 +1,8 @@ .POSIX: -.SUFFIXES: .c .bc .m +.SUFFIXES: .c .cc .bc .m .S .o -VERSION = 4 +-include version.make #CC=clang @@ -23,6 +23,7 @@ OBJECTS = \ abi_version.bc\ alias_table.bc\ blocks_runtime.bc\ + block_to_imp.bc\ caps.bc\ category_loader.bc\ class_table.bc\ @@ -44,17 +45,37 @@ OBJECTS = \ statics_loader.bc\ toydispatch.bc -all: libobjc.so.$(VERSION) libobjc.a +NATIVE_OBJECTS=\ + block_trampolines.o\ + objc_msgSend.o + +CXX_OBJECTS=\ + objcxx_eh.bc + +all: libobjc.so.$(VERSION) libobjc.a libobjcxx.so.$(VERSION) + @echo "'Makefile.clang' is deprecated. Please use 'Makefile' or 'GNUmakefile'" + +libobjcxx.so.$(VERSION): libobjc.so.$(VERSION) libobjcxx.o + @echo Linking shared C++ library... + @clang++ -shared -o $@ libobjcxx.o -L./ -lobjc + +libobjcxx.o: libobjcxx.bc + @echo Generating native C++ object code... + @llc -relocation-model=pic -O3 -filetype=obj -o $@ libobjcxx.bc + +libobjcxx.bc: $(CXX_OBJECTS) + @echo Linking C++ bitcode... + @llvm-ld -internalize -link-as-library -native -o libobjcxx.bc $(CXX_OBJECTS) libobjc.so.$(VERSION): libobjc.o @echo Linking shared library... @clang -shared -o $@ libobjc.o -lpthread -libobjc.a: libobjc.o +libobjc.a: libobjc.o $(NATIVE_OBJECTS) @echo Linking static library... - @ld -r -s -o $@ libobjc.o + @ld -r -s -o $@ libobjc.o $(NATIVE_OBJECTS) -libobjc.o: libobjc.bc +libobjc.o: libobjc.bc @echo Generating native object code... @llc -relocation-model=pic -O3 -filetype=obj -o libobjc.o libobjc.bc @@ -66,10 +87,19 @@ libobjc.bc: $(OBJECTS) @echo Compiling $<... @clang $(CPPFLAGS) $(CFLAGS) -emit-llvm -c $< -o $@ +.cc.bc: + @echo Compiling $<... + @clang++ $(CPPFLAGS) $(CFLAGS) -emit-llvm -c $< -o $@ + .m.bc: @echo Compiling $<... @clang $(CPPFLAGS) $(CFLAGS) -emit-llvm -c $< -o $@ +.S.o: + @echo Assembling `basename $<`... + @clang $(CPPFLAGS) -no-integrated-as -c $< -o $@ + + install: all install -m 444 libobjc.so.$(VERSION) $(LIB_DIR) install -m 444 libobjc.a $(LIB_DIR) @@ -79,4 +109,8 @@ install: all clean: @echo Cleaning... - @rm -f obj/* + @rm -f $(NATIVE_OBJECTS) + @rm -f $(OBJECTS) + @rm -f $(CXX_OBJECTS) + @rm -f libobjc.a libobjc.o libobjcxx.o libobjc.bc libobjcxx.bc + @rm -f libobjc.so.$(VERSION) libobjcxx.so.$(VERSION) diff --git a/version.make b/version.make new file mode 100644 index 0000000..4789e38 --- /dev/null +++ b/version.make @@ -0,0 +1,5 @@ +# Version information for libobjc2 +MAJOR_VERSION = 4 +MINOR_VERSION = 6 +SUBMINOR_VERSION = 0 +VERSION = $(MAJOR_VERSION).$(MINOR_VERSION).$(SUBMINOR_VERSION)