From 3affbffeb656c314152fcde554fed0832fb9d595 Mon Sep 17 00:00:00 2001 From: Marcel Schneider Date: Tue, 30 Nov 2021 15:18:57 +0100 Subject: [PATCH 01/10] IPS-100 Draft a new system of Makefiles. The idea is pretty similar to GNUstep-make, but all our own. Minimalist and compliant to usual pEp policies. Probably needs more options for local.conf, but we can add them as needed. --- .gitignore | 2 + Makefile.common | 53 +++++++++++++++++++ Makefile.conf | 8 +++ .../PEPObjCTypes/build-linux/GNUmakefile | 44 --------------- .../PEPObjCTypes/build-linux/Makefile | 8 +++ 5 files changed, 71 insertions(+), 44 deletions(-) create mode 100644 Makefile.common create mode 100644 Makefile.conf delete mode 100644 Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/GNUmakefile create mode 100644 Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/Makefile diff --git a/.gitignore b/.gitignore index 58774e3e..4283934c 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,8 @@ ### Artefacts *.so* +*.a +*.o ### obj/ diff --git a/Makefile.common b/Makefile.common new file mode 100644 index 00000000..482471e5 --- /dev/null +++ b/Makefile.common @@ -0,0 +1,53 @@ +# Makefile skeleton to build static libraries from objective C. +# Define $(TARGET) (library name), $(OBJECTS) (*.o files) and then include this. +# This will respect local.conf automatically. + +HERE:=$(dir $(lastword $(MAKEFILE_LIST))) +include $(HERE)/Makefile.conf + +# Disable default rules. +.SUFFIXES: + +INCLUDES = \ + -I$(HERE)/pEpObjCAdapter \ + -I$(HERE)/pEpObjCAdapter/Extensions \ + -I$(HERE)/pEpObjCAdapter/PublicHeaders \ + -I$(HERE)/pEpObjCTests/TestUtils \ + -I$(HERE)/Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/PublicHeaders \ + -I$(HERE)/Subprojects/PEPObjCTypes/PEPObjCTypes/PublicHeaders \ + -I$(HERE)/Subprojects/PEPObjCTypes/PEPObjCTypes/src/PEPEqualableTools \ + -I$(HERE)/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/PublicHeaders \ + -I$(PREFIX)/System/Library/Headers \ + -I$(PREFIX)/include/ \ + -I../src/ \ + +OBJCFLAGS = $(CFLAGS) \ + -MMD -MP \ + -DGNUSTEP -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=0 -DGNUSTEP_RUNTIME=1 -D_NONFRAGILE_ABI=1 \ + -fno-strict-aliasing -fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS \ + -fconstant-string-class=NSConstantString \ + -fobjc-runtime=gnustep-2.0 -fobjc-arc -fblocks -x objective-c \ + -include PEPObjCGNUStepOptimizations.h + +# Unless any rule is defined before including this, this will be the default rule. +$(TARGET) : $(TARGET).a $(TARGET).so + +$(TARGET).a : $(OBJECTS) + ar rc $@ $^ + ranlib $@ + +$(TARGET).so : $(OBJECTS) + clang --shared $(LD_FLAGS) -o $@ $^ $(LD_LIBS) + + +%.o: %.m $(GENERATED) + clang $(OBJCFLAGS) $(INCLUDES) -o $@ -c $< + +clean: + rm -f $(OBJECTS) $(DEPFILES) $(TARGET).a + +install: + install $(TARGET).a $(PREFIX)/lib/ + install $(HEADERS) $(PREFIX)/include/ + + diff --git a/Makefile.conf b/Makefile.conf new file mode 100644 index 00000000..fa0e1d6d --- /dev/null +++ b/Makefile.conf @@ -0,0 +1,8 @@ + +# Build default config +PREFIX ?= $(HOME)/local/ +CFLAGS ?= -fPIC -DPIC -g -Og + +# Overrides +-include $(HERE)/local.conf + diff --git a/Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/GNUmakefile b/Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/GNUmakefile deleted file mode 100644 index f9024e57..00000000 --- a/Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/GNUmakefile +++ /dev/null @@ -1,44 +0,0 @@ -# -# Dox: http://www.gnustep.org/resources/documentation/make_1.html -# -# To Run: `make messages=yes shared=no debug=yes` -# - -# Include the common variables defined by the Makefile Package -include $(GNUSTEP_MAKEFILES)/common.make - -LIBRARY_NAME = pEpObjCTypes - -# Build pre-compiled prefix header -GNUSTEPHELPER_DIR=../../../../../pepgnustephelper -FLAGS_FOR_PRECOMPILED_HEADER_DEBUG="-MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNUSTEP_RUNTIME=1 -D_NONFRAGILE_ABI=1 -DGNUSTEP_BASE_LIBRARY=1 -I./obj/pEpObjCTypes.obj/PrecompiledHeaders/ObjC -fno-strict-aliasing -fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS -fobjc-runtime=gnustep-2.0 -fobjc-arc -fPIC -g -fblocks -fobjc-runtime=gnustep-2.0 -fblocks -fconstant-string-class=NSConstantString -I../PublicHeaders/ -I../src/ -I../src/PEPEqualableTools -I. -I/home/user/GNUstep/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/System/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/System/Library/Headers -I/usr/GNUstep/System/Library/Headers -fblocks -x objective-c -I/usr/include/libxml2 -I/usr/include/libxml2 -I/usr/include/p11-kit-1" -FLAGS_FOR_PRECOMPILED_HEADER_RELEASE="-MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNUSTEP_RUNTIME=1 -D_NONFRAGILE_ABI=1 -DGNUSTEP_BASE_LIBRARY=1 -I./obj/pEpObjCTypes.obj/PrecompiledHeaders/ObjC -fno-strict-aliasing -fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS -fobjc-runtime=gnustep-2.0 -fobjc-arc -fPIC -g -O2 -fblocks -fobjc-runtime=gnustep-2.0 -fblocks -fconstant-string-class=NSConstantString -I../PublicHeaders/ -I../src/ -I../src/PEPEqualableTools -I. -I/home/user/GNUstep/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/System/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/System/Library/Headers -I/usr/GNUstep/System/Library/Headers -fblocks -x objective-c -I/usr/include/libxml2 -I/usr/include/libxml2 -I/usr/include/p11-kit-1" -ifeq ($(debug), yes) - FLAGS_FOR_PRECOMPILED_HEADER = ${FLAGS_FOR_PRECOMPILED_HEADER_DEBUG} -else - FLAGS_FOR_PRECOMPILED_HEADER = ${FLAGS_FOR_PRECOMPILED_HEADER_RELEASE} -endif -SHELL_RESULT := $(shell ${GNUSTEPHELPER_DIR}/build-precompiled-header.sh ${FLAGS_FOR_PRECOMPILED_HEADER}) -# Keep. Useful to manually figure out flags for precompiled header. -#pEpObjCTypes_OBJC_PRECOMPILED_HEADERS = PEPObjCGNUStepOptimizations.h - -# Finds all dirs in src and prefixes with "-I" -ALL_PRIVATE_HEADER_DIRS_PREFIXED := $(shell find ../src/ -type d | sed -e 's/^/-I/;') -pEpObjCTypes_INCLUDE_DIRS = -I../PublicHeaders/ ${ALL_PRIVATE_HEADER_DIRS_PREFIXED} - -ALL_DOT_M_FILES := $(shell find ../src/ -type f | grep .m) -pEpObjCTypes_OBJC_FILES = ${ALL_DOT_M_FILES} -pEpObjCTypes_RESOURCE_FILES = - -ADDITIONAL_OBJCFLAGS += -include-pch PEPObjCGNUStepOptimizations.h.gch -Winvalid-pch -ADDITIONAL_OBJC_LIBS = -ldispatch -ADDITIONAL_FLAGS = -fobjc-runtime=gnustep-2.0 -fobjc-arc -fPIC - -HEADER_FILES_INSTALL_DIR = build - -# For lib -include $(GNUSTEP_MAKEFILES)/library.make - -# Copy Artefacts -SHELL_RESULT := $(shell mkdir -p build) -SHELL_RESULT := $(shell cp obj/*.a build/) diff --git a/Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/Makefile b/Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/Makefile new file mode 100644 index 00000000..1a8fbfd6 --- /dev/null +++ b/Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/Makefile @@ -0,0 +1,8 @@ + +OBJECTS := $(patsubst %.m,%.o,$(wildcard ../src/*.m)) +DEPFILES := $(wildcard ../src/*.d) +HEADERS := $(wildcard ../PublicHeaders/*.h) +TARGET = libPEPObjCTypes + +include ../../../../Makefile.common +include $(DEPFILES) From 6b00780ddea510ae875b9554a4000ada22899a24 Mon Sep 17 00:00:00 2001 From: Marcel Schneider Date: Tue, 30 Nov 2021 15:31:04 +0100 Subject: [PATCH 02/10] IPS-100 Another makefile. map_asn1.h is not installed by the engine, this currently needs a workaround in local.conf (point to the engine src there). --- Makefile.common | 2 + Makefile.conf | 4 ++ .../PEPObjCTypeUtils/build-linux/GNUmakefile | 49 ------------------- .../PEPObjCTypeUtils/build-linux/Makefile | 8 +++ 4 files changed, 14 insertions(+), 49 deletions(-) delete mode 100644 Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/GNUmakefile create mode 100644 Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile diff --git a/Makefile.common b/Makefile.common index 482471e5..d0069378 100644 --- a/Makefile.common +++ b/Makefile.common @@ -19,7 +19,9 @@ INCLUDES = \ -I$(HERE)/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/PublicHeaders \ -I$(PREFIX)/System/Library/Headers \ -I$(PREFIX)/include/ \ + -I$(PEP_INCLUDE) \ -I../src/ \ + $(EXTRA_INCLUDES) \ OBJCFLAGS = $(CFLAGS) \ -MMD -MP \ diff --git a/Makefile.conf b/Makefile.conf index fa0e1d6d..2b7d88d1 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -3,6 +3,10 @@ PREFIX ?= $(HOME)/local/ CFLAGS ?= -fPIC -DPIC -g -Og +# pEp Engine header files (including pEp/ prefix) +PEP_INCLUDE = $(PREFIX)/include/pEp/ +EXTRA_INCLUDES = + # Overrides -include $(HERE)/local.conf diff --git a/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/GNUmakefile b/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/GNUmakefile deleted file mode 100644 index 744805e3..00000000 --- a/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/GNUmakefile +++ /dev/null @@ -1,49 +0,0 @@ -# -# Dox: http://www.gnustep.org/resources/documentation/make_1.html -# -# To Run: `make install messages=yes shared=no debug=yes -# - -# Include the common variables defined by the Makefile Package -include $(GNUSTEP_MAKEFILES)/common.make - -LIBRARY_NAME = pEpObjCTypeUtils - -# Build Dependencies ... -SHELL_RESULT := $(shell ./build-dependencies.sh) - -# Build pre-compiled prefix header -GNUSTEPHELPER_DIR=../../../../../pepgnustephelper -FLAGS_FOR_PRECOMPILED_HEADER_DEBUG="-MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNUSTEP_RUNTIME=1 -D_NONFRAGILE_ABI=1 -DGNUSTEP_BASE_LIBRARY=1 -I./obj/pEpObjCTypes.obj/PrecompiledHeaders/ObjC -fno-strict-aliasing -fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS -fobjc-runtime=gnustep-2.0 -fobjc-arc -fPIC -g -fblocks -fobjc-runtime=gnustep-2.0 -fblocks -fconstant-string-class=NSConstantString -I../PublicHeaders/ -I../src/ -I../src/PEPEqualableTools -I. -I/home/user/GNUstep/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/System/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/System/Library/Headers -I/usr/GNUstep/System/Library/Headers -fblocks -x objective-c -I/usr/include/libxml2 -I/usr/include/libxml2 -I/usr/include/p11-kit-1" -FLAGS_FOR_PRECOMPILED_HEADER_RELEASE="-MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNUSTEP_RUNTIME=1 -D_NONFRAGILE_ABI=1 -DGNUSTEP_BASE_LIBRARY=1 -I./obj/pEpObjCTypes.obj/PrecompiledHeaders/ObjC -fno-strict-aliasing -fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS -fobjc-runtime=gnustep-2.0 -fobjc-arc -fPIC -g -O2 -fblocks -fobjc-runtime=gnustep-2.0 -fblocks -fconstant-string-class=NSConstantString -I../PublicHeaders/ -I../src/ -I../src/PEPEqualableTools -I. -I/home/user/GNUstep/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/System/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/System/Library/Headers -I/usr/GNUstep/System/Library/Headers -fblocks -x objective-c -I/usr/include/libxml2 -I/usr/include/libxml2 -I/usr/include/p11-kit-1" -ifeq ($(debug), yes) - FLAGS_FOR_PRECOMPILED_HEADER = ${FLAGS_FOR_PRECOMPILED_HEADER_DEBUG} -else - FLAGS_FOR_PRECOMPILED_HEADER = ${FLAGS_FOR_PRECOMPILED_HEADER_RELEASE} -endif -SHELL_RESULT := $(shell ${GNUSTEPHELPER_DIR}/build-precompiled-header.sh ${FLAGS_FOR_PRECOMPILED_HEADER}) -# Keep. Useful to manually figure out flags for precompiled header. -#pEpObjCTypeUtils_OBJC_PRECOMPILED_HEADERS = PEPObjCGNUStepOptimizations.h - -# Finds all dirs containing headers and prefixes with "-I" -ALL_LOCAL_INCLUDE_HEADER_DIRS_PREFIXED := $(shell find ~/local/include/ -type d | sed -e 's/^/-I/;') -PEP_OBJC_TYPES_HEADER_DIRS_PREFIXED := $(shell find ../../../PEPObjCTypes/PEPObjCTypes/PublicHeaders/ -type d | sed -e 's/^/-I/;') - -pEpObjCTypeUtils_INCLUDE_DIRS = -I../PublicHeaders/ ${ALL_LOCAL_INCLUDE_HEADER_DIRS_PREFIXED} ${PEP_OBJC_TYPES_HEADER_DIRS_PREFIXED} - -ALL_DOT_M_FILES := $(shell find ../ -type f -name "*.m") -pEpObjCTypeUtils_OBJC_FILES = ${ALL_DOT_M_FILES} -pEpObjCTypeUtils_RESOURCE_FILES = - -ADDITIONAL_OBJCFLAGS += -include-pch PEPObjCGNUStepOptimizations.h.gch -Winvalid-pch -ADDITIONAL_OBJC_LIBS = -ldispatch -ADDITIONAL_FLAGS = -fobjc-runtime=gnustep-2.0 -fobjc-arc -fPIC - -HEADER_FILES_INSTALL_DIR = build - -# For lib -include $(GNUSTEP_MAKEFILES)/library.make - -# Copy Artefacts -SHELL_RESULT := $(shell mkdir -p build) -SHELL_RESULT := $(shell cp obj/*.a build/) diff --git a/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile b/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile new file mode 100644 index 00000000..d909814b --- /dev/null +++ b/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile @@ -0,0 +1,8 @@ + +OBJECTS := $(patsubst %.m,%.o,$(wildcard ../*.m)) +DEPFILES := $(wildcard ../*.d) +HEADERS := $(wildcard ../PublicHeaders/*.h) +TARGET = libPEPObjCTypeUtils + +include ../../../../Makefile.common +include $(DEPFILES) From 0601073dcbeebc34cbd3b12a528e2f06da1e4f5b Mon Sep 17 00:00:00 2001 From: Marcel Schneider Date: Tue, 30 Nov 2021 15:50:30 +0100 Subject: [PATCH 03/10] IPS-100 Even more makefiles. The adapter does not build on linux due to URLsForDirectory:inDomains:, introduced in 1d1f8b6916fc6309 (IPS-91), which is not implemented in GNUstep. --- Makefile.common | 4 +- .../build-linux/GNUmakefile | 44 -------------- .../build-linux/Makefile | 8 +++ pEpObjCAdapter/build-linux/GNUmakefile | 57 ------------------- pEpObjCAdapter/build-linux/Makefile | 8 +++ 5 files changed, 18 insertions(+), 103 deletions(-) delete mode 100644 Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/build-linux/GNUmakefile create mode 100644 Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/build-linux/Makefile delete mode 100644 pEpObjCAdapter/build-linux/GNUmakefile create mode 100644 pEpObjCAdapter/build-linux/Makefile diff --git a/Makefile.common b/Makefile.common index d0069378..8855a271 100644 --- a/Makefile.common +++ b/Makefile.common @@ -39,14 +39,14 @@ $(TARGET).a : $(OBJECTS) ranlib $@ $(TARGET).so : $(OBJECTS) - clang --shared $(LD_FLAGS) -o $@ $^ $(LD_LIBS) + clang --shared $(LD_FLAGS) -Wl,--no-undefined -o $@ $^ $(LD_LIBS) %.o: %.m $(GENERATED) clang $(OBJCFLAGS) $(INCLUDES) -o $@ -c $< clean: - rm -f $(OBJECTS) $(DEPFILES) $(TARGET).a + rm -f $(OBJECTS) $(DEPFILES) $(TARGET).a $(TARGET).so install: install $(TARGET).a $(PREFIX)/lib/ diff --git a/Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/build-linux/GNUmakefile b/Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/build-linux/GNUmakefile deleted file mode 100644 index f29cc143..00000000 --- a/Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/build-linux/GNUmakefile +++ /dev/null @@ -1,44 +0,0 @@ -# -# Dox: http://www.gnustep.org/resources/documentation/make_1.html -# -# To Run: `make install messages=yes shared=no debug=yes -# - -# Include the common variables defined by the Makefile Package -include $(GNUSTEP_MAKEFILES)/common.make - -LIBRARY_NAME = pEpObjCAdapterProtocols - -# Build pre-compiled prefix header -GNUSTEPHELPER_DIR=../../../../../pepgnustephelper -FLAGS_FOR_PRECOMPILED_HEADER_DEBUG="-MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNUSTEP_RUNTIME=1 -D_NONFRAGILE_ABI=1 -DGNUSTEP_BASE_LIBRARY=1 -I./obj/pEpObjCTypes.obj/PrecompiledHeaders/ObjC -fno-strict-aliasing -fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS -fobjc-runtime=gnustep-2.0 -fobjc-arc -fPIC -g -fblocks -fobjc-runtime=gnustep-2.0 -fblocks -fconstant-string-class=NSConstantString -I../PublicHeaders/ -I../src/ -I../src/PEPEqualableTools -I. -I/home/user/GNUstep/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/System/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/System/Library/Headers -I/usr/GNUstep/System/Library/Headers -fblocks -x objective-c -I/usr/include/libxml2 -I/usr/include/libxml2 -I/usr/include/p11-kit-1" -FLAGS_FOR_PRECOMPILED_HEADER_RELEASE="-MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNUSTEP_RUNTIME=1 -D_NONFRAGILE_ABI=1 -DGNUSTEP_BASE_LIBRARY=1 -I./obj/pEpObjCTypes.obj/PrecompiledHeaders/ObjC -fno-strict-aliasing -fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS -fobjc-runtime=gnustep-2.0 -fobjc-arc -fPIC -g -O2 -fblocks -fobjc-runtime=gnustep-2.0 -fblocks -fconstant-string-class=NSConstantString -I../PublicHeaders/ -I../src/ -I../src/PEPEqualableTools -I. -I/home/user/GNUstep/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/System/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/System/Library/Headers -I/usr/GNUstep/System/Library/Headers -fblocks -x objective-c -I/usr/include/libxml2 -I/usr/include/libxml2 -I/usr/include/p11-kit-1" -ifeq ($(debug), yes) - FLAGS_FOR_PRECOMPILED_HEADER = ${FLAGS_FOR_PRECOMPILED_HEADER_DEBUG} -else - FLAGS_FOR_PRECOMPILED_HEADER = ${FLAGS_FOR_PRECOMPILED_HEADER_RELEASE} -endif -SHELL_RESULT := $(shell ${GNUSTEPHELPER_DIR}/build-precompiled-header.sh ${FLAGS_FOR_PRECOMPILED_HEADER}) - -# Header Search Paths -PEP_OBJC_TYPES_HEADER_DIRS_PREFIXED := -I../../../PEPObjCTypes/PEPObjCTypes/PublicHeaders/ -pEpObjCAdapterProtocols_INCLUDE_DIRS = -I../PublicHeaders/ ${PEP_OBJC_TYPES_HEADER_DIRS_PREFIXED} - -# SRC Files -ALL_DOT_M_FILES := $(shell find ../ -type f -name "*.m") -pEpObjCAdapterProtocols_OBJC_FILES = ${ALL_DOT_M_FILES} -pEpObjCAdapterProtocols_RESOURCE_FILES = - -# Build Settings -ADDITIONAL_OBJCFLAGS += -include-pch PEPObjCGNUStepOptimizations.h.gch -Winvalid-pch -ADDITIONAL_OBJC_LIBS = -ldispatch -ADDITIONAL_FLAGS = -fobjc-runtime=gnustep-2.0 -fobjc-arc -fPIC - -pEpObjCAdapterProtocols_HEADER_FILES_INSTALL_DIR = build/include - -# For lib -include $(GNUSTEP_MAKEFILES)/library.make - -# Copy Artefacts -SHELL_RESULT := $(shell mkdir -p build) -SHELL_RESULT := $(shell cp obj/*.a build/) diff --git a/Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/build-linux/Makefile b/Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/build-linux/Makefile new file mode 100644 index 00000000..db64e975 --- /dev/null +++ b/Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/build-linux/Makefile @@ -0,0 +1,8 @@ + +OBJECTS := $(patsubst %.m,%.o,$(wildcard ../*.m)) +DEPFILES := $(wildcard ../*.d) +HEADERS := $(wildcard ../PublicHeaders/*.h) +TARGET = libPEPObjCAdapterProtocols + +include ../../../../Makefile.common +include $(DEPFILES) diff --git a/pEpObjCAdapter/build-linux/GNUmakefile b/pEpObjCAdapter/build-linux/GNUmakefile deleted file mode 100644 index 1663756f..00000000 --- a/pEpObjCAdapter/build-linux/GNUmakefile +++ /dev/null @@ -1,57 +0,0 @@ -# -# Dox: http://www.gnustep.org/resources/documentation/make_1.html -# -# To Run: `make messages=yes shared=no debug=yes -# - -# Include the common variables defined by the Makefile Package -include $(GNUSTEP_MAKEFILES)/common.make - -# Build Dependencies -SHELL_RESULT := $(shell ./build-dependencies.sh) - -LIBRARY_NAME = pEpObjCAdapter - -# Build pre-compiled prefix header -GNUSTEPHELPER_DIR=../../../pepgnustephelper -FLAGS_FOR_PRECOMPILED_HEADER_DEBUG="-pthread -MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNUSTEP_RUNTIME=1 -D_NONFRAGILE_ABI=1 -DGNUSTEP_BASE_LIBRARY=1 -I./obj/pEpObjCTypes.obj/PrecompiledHeaders/ObjC -fno-strict-aliasing -fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS -fobjc-runtime=gnustep-2.0 -fobjc-arc -fPIC -g -fblocks -fobjc-runtime=gnustep-2.0 -fblocks -fconstant-string-class=NSConstantString -I../PublicHeaders/ -I../src/ -I../src/PEPEqualableTools -I. -I/home/user/GNUstep/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/System/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/System/Library/Headers -I/usr/GNUstep/System/Library/Headers -fblocks -x objective-c -I/usr/include/libxml2 -I/usr/include/libxml2 -I/usr/include/p11-kit-1" -FLAGS_FOR_PRECOMPILED_HEADER_RELEASE="-pthread -MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNUSTEP_RUNTIME=1 -D_NONFRAGILE_ABI=1 -DGNUSTEP_BASE_LIBRARY=1 -I./obj/pEpObjCTypes.obj/PrecompiledHeaders/ObjC -fno-strict-aliasing -fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS -fobjc-runtime=gnustep-2.0 -fobjc-arc -fPIC -g -O2 -fblocks -fobjc-runtime=gnustep-2.0 -fblocks -fconstant-string-class=NSConstantString -I../PublicHeaders/ -I../src/ -I../src/PEPEqualableTools -I. -I/home/user/GNUstep/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/System/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/System/Library/Headers -I/usr/GNUstep/System/Library/Headers -fblocks -x objective-c -I/usr/include/libxml2 -I/usr/include/libxml2 -I/usr/include/p11-kit-1" -ifeq ($(debug), yes) - FLAGS_FOR_PRECOMPILED_HEADER = ${FLAGS_FOR_PRECOMPILED_HEADER_DEBUG} -else - FLAGS_FOR_PRECOMPILED_HEADER = ${FLAGS_FOR_PRECOMPILED_HEADER_RELEASE} -endif -SHELL_RESULT := $(shell ${GNUSTEPHELPER_DIR}/build-precompiled-header.sh ${FLAGS_FOR_PRECOMPILED_HEADER}) -# Keep. Useful to manually figure out flags for precompiled header. -# pEpObjCAdapter_OBJC_PRECOMPILED_HEADERS = PEPObjCGNUStepOptimizations.h - -# Header Search Paths -#Finds all dirs containing headers and prefixes with "-I" -ALL_LOCAL_INCLUDE_HEADER_DIRS_PREFIXED := $(shell find ~/local/include/ -type d | sed -e 's/^/-I/;') -PEP_OBJC_TYPES_HEADER_DIRS_PREFIXED := -I../../Subprojects/PEPObjCTypes/PEPObjCTypes/PublicHeaders/ -PEP_OBJC_TYPE_UTILS_HEADER_DIRS_PREFIXED := -I../../Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/PublicHeaders/ -PEP_OBJC_ADAPTER_PROTOCOLS_HEADER_DIRS_PREFIXED := -I../../Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/PublicHeaders/ - -PEP_OBJC_ADAPTER_HEADER_DIRS_PREFIXED := $(shell find ../../pEpObjCAdapter/ -type d | sed -e 's/^/-I/;') -pEpObjCAdapter_INCLUDE_DIRS = ${PEP_OBJC_ADAPTER_HEADER_DIRS_PREFIXED} ${ALL_LOCAL_INCLUDE_HEADER_DIRS_PREFIXED} ${PEP_OBJC_TYPES_HEADER_DIRS_PREFIXED} ${PEP_OBJC_TYPE_UTILS_HEADER_DIRS_PREFIXED} ${PEP_OBJC_ADAPTER_PROTOCOLS_HEADER_DIRS_PREFIXED} - -# SRC Files -ALL_DOT_M_FILES := $(shell find ../ -type f -name "*.m") -pEpObjCAdapter_OBJC_FILES = ${ALL_DOT_M_FILES} -pEpObjCAdapter_RESOURCE_FILES = - -# Build Settings -pEpObjCAdapter_LDFLAGS = ../../Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/build/libpEpObjCTypes.a ../../Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/build/libpEpObjCTypeUtils.a ../../Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/build-linux/build/libpEpObjCAdapterProtocols.a - -ADDITIONAL_OBJCFLAGS += -include-pch PEPObjCGNUStepOptimizations.h.gch -Winvalid-pch -ADDITIONAL_OBJC_LIBS = -ldispatch -ADDITIONAL_FLAGS = -fobjc-runtime=gnustep-2.0 -fobjc-arc -fPIC -g -O0 - -HEADER_FILES_INSTALL_DIR = build - -# For lib -include $(GNUSTEP_MAKEFILES)/library.make - -# Copy Artefacts -SHELL_RESULT := $(shell mkdir -p build) -SHELL_RESULT := $(shell cp obj/*.a build/) diff --git a/pEpObjCAdapter/build-linux/Makefile b/pEpObjCAdapter/build-linux/Makefile new file mode 100644 index 00000000..28b1034c --- /dev/null +++ b/pEpObjCAdapter/build-linux/Makefile @@ -0,0 +1,8 @@ + +OBJECTS := $(patsubst %.m,%.o,$(wildcard ../*.m)) +DEPFILES := $(wildcard ../*.d) +HEADERS := $(wildcard ../PublicHeaders/*.h) +TARGET = libpEpObjCAdapter + +include ../../Makefile.common +include $(DEPFILES) From 3c7bdfb726ada52c0369cf6d7a19ff2c7ddfeed2 Mon Sep 17 00:00:00 2001 From: Marcel Schneider Date: Tue, 30 Nov 2021 16:26:18 +0100 Subject: [PATCH 04/10] IPS-100 Linking Experiments. We can't really link statically yet, but we can build a .so of the adapter, which means we know all the dependencies and we have the required obj-c options. --- .gitignore | 3 ++- Makefile.common | 12 ++++++++++-- Makefile.conf | 8 ++++++++ .../PEPObjCTypes/PEPObjCTypes/build-linux/Makefile | 2 +- pEpObjCAdapter/build-linux/Makefile | 2 ++ 5 files changed, 23 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 4283934c..84249f45 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ -##GNUstep +# pEp build config +local.conf ### Pre Compiled Headers *.d diff --git a/Makefile.common b/Makefile.common index 8855a271..4eaa47d5 100644 --- a/Makefile.common +++ b/Makefile.common @@ -1,5 +1,7 @@ # Makefile skeleton to build static libraries from objective C. -# Define $(TARGET) (library name), $(OBJECTS) (*.o files) and then include this. +# Define $(TARGET) (library name), $(OBJECTS) (*.o files), $(LIBS) (linker +# flags specific to this library), $(HEADERS) (header files to be installed) +# and then include this. # This will respect local.conf automatically. HERE:=$(dir $(lastword $(MAKEFILE_LIST))) @@ -31,6 +33,12 @@ OBJCFLAGS = $(CFLAGS) \ -fobjc-runtime=gnustep-2.0 -fobjc-arc -fblocks -x objective-c \ -include PEPObjCGNUStepOptimizations.h +OBJCLINKFLAGS = $(LDFLAGS) \ + -fuse-ld=/usr/bin/ld.gold \ + -pthread -fexceptions -rdynamic -fblocks \ + -fobjc-runtime=gnustep-2.0 \ + + # Unless any rule is defined before including this, this will be the default rule. $(TARGET) : $(TARGET).a $(TARGET).so @@ -39,7 +47,7 @@ $(TARGET).a : $(OBJECTS) ranlib $@ $(TARGET).so : $(OBJECTS) - clang --shared $(LD_FLAGS) -Wl,--no-undefined -o $@ $^ $(LD_LIBS) + clang --shared $(OBJCLINKFLAGS) -Wl,--no-undefined -o $@ $^ $(LD_LIBS) $(LIBS) %.o: %.m $(GENERATED) diff --git a/Makefile.conf b/Makefile.conf index 2b7d88d1..7e6ca268 100644 --- a/Makefile.conf +++ b/Makefile.conf @@ -1,12 +1,20 @@ # Build default config + +# Prefix to install things to, we also expect to find dependencies (incl. GNUstep) there. PREFIX ?= $(HOME)/local/ + CFLAGS ?= -fPIC -DPIC -g -Og # pEp Engine header files (including pEp/ prefix) PEP_INCLUDE = $(PREFIX)/include/pEp/ EXTRA_INCLUDES = +# these are only needed for building shared libs. +LD_LIBS = -L$(PREFIX)/lib/ -L$(PREFIX)/Library/Libraries -L$(PREFIX)/System/Library/Libraries \ + -lgnustep-base -ldispatch -lpthread -lobjc -lm + + # Overrides -include $(HERE)/local.conf diff --git a/Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/Makefile b/Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/Makefile index 1a8fbfd6..6110b526 100644 --- a/Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/Makefile +++ b/Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/Makefile @@ -1,5 +1,5 @@ -OBJECTS := $(patsubst %.m,%.o,$(wildcard ../src/*.m)) +OBJECTS := $(patsubst %.m,%.o,$(wildcard ../src/*.m ../src/*/*.m)) DEPFILES := $(wildcard ../src/*.d) HEADERS := $(wildcard ../PublicHeaders/*.h) TARGET = libPEPObjCTypes diff --git a/pEpObjCAdapter/build-linux/Makefile b/pEpObjCAdapter/build-linux/Makefile index 28b1034c..a74b2fbd 100644 --- a/pEpObjCAdapter/build-linux/Makefile +++ b/pEpObjCAdapter/build-linux/Makefile @@ -3,6 +3,8 @@ OBJECTS := $(patsubst %.m,%.o,$(wildcard ../*.m)) DEPFILES := $(wildcard ../*.d) HEADERS := $(wildcard ../PublicHeaders/*.h) TARGET = libpEpObjCAdapter +LIBS = -lpEpEngine -Wl,--whole-archive -lPEPObjCTypes -lPEPObjCTypeUtils -lPEPObjCAdapterProtocols -Wl,--no-whole-archive + include ../../Makefile.common include $(DEPFILES) From fee9168a31957896ef4966a53db6487de97da3d7 Mon Sep 17 00:00:00 2001 From: Marcel Schneider Date: Wed, 1 Dec 2021 10:31:01 +0100 Subject: [PATCH 05/10] IPS-100 Move Makefile.common outside the Repo. This repo is really four projects that happen to share the same repo. Everythin should either be project-local or pEp-global, not on repo-level. --- Makefile.common | 63 ------------------- Makefile.conf | 20 ------ .../PEPObjCTypeUtils/build-linux/Makefile | 1 + pEpObjCAdapter/build-linux/Makefile | 21 ++++++- 4 files changed, 20 insertions(+), 85 deletions(-) delete mode 100644 Makefile.common delete mode 100644 Makefile.conf diff --git a/Makefile.common b/Makefile.common deleted file mode 100644 index 4eaa47d5..00000000 --- a/Makefile.common +++ /dev/null @@ -1,63 +0,0 @@ -# Makefile skeleton to build static libraries from objective C. -# Define $(TARGET) (library name), $(OBJECTS) (*.o files), $(LIBS) (linker -# flags specific to this library), $(HEADERS) (header files to be installed) -# and then include this. -# This will respect local.conf automatically. - -HERE:=$(dir $(lastword $(MAKEFILE_LIST))) -include $(HERE)/Makefile.conf - -# Disable default rules. -.SUFFIXES: - -INCLUDES = \ - -I$(HERE)/pEpObjCAdapter \ - -I$(HERE)/pEpObjCAdapter/Extensions \ - -I$(HERE)/pEpObjCAdapter/PublicHeaders \ - -I$(HERE)/pEpObjCTests/TestUtils \ - -I$(HERE)/Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/PublicHeaders \ - -I$(HERE)/Subprojects/PEPObjCTypes/PEPObjCTypes/PublicHeaders \ - -I$(HERE)/Subprojects/PEPObjCTypes/PEPObjCTypes/src/PEPEqualableTools \ - -I$(HERE)/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/PublicHeaders \ - -I$(PREFIX)/System/Library/Headers \ - -I$(PREFIX)/include/ \ - -I$(PEP_INCLUDE) \ - -I../src/ \ - $(EXTRA_INCLUDES) \ - -OBJCFLAGS = $(CFLAGS) \ - -MMD -MP \ - -DGNUSTEP -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=0 -DGNUSTEP_RUNTIME=1 -D_NONFRAGILE_ABI=1 \ - -fno-strict-aliasing -fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS \ - -fconstant-string-class=NSConstantString \ - -fobjc-runtime=gnustep-2.0 -fobjc-arc -fblocks -x objective-c \ - -include PEPObjCGNUStepOptimizations.h - -OBJCLINKFLAGS = $(LDFLAGS) \ - -fuse-ld=/usr/bin/ld.gold \ - -pthread -fexceptions -rdynamic -fblocks \ - -fobjc-runtime=gnustep-2.0 \ - - -# Unless any rule is defined before including this, this will be the default rule. -$(TARGET) : $(TARGET).a $(TARGET).so - -$(TARGET).a : $(OBJECTS) - ar rc $@ $^ - ranlib $@ - -$(TARGET).so : $(OBJECTS) - clang --shared $(OBJCLINKFLAGS) -Wl,--no-undefined -o $@ $^ $(LD_LIBS) $(LIBS) - - -%.o: %.m $(GENERATED) - clang $(OBJCFLAGS) $(INCLUDES) -o $@ -c $< - -clean: - rm -f $(OBJECTS) $(DEPFILES) $(TARGET).a $(TARGET).so - -install: - install $(TARGET).a $(PREFIX)/lib/ - install $(HEADERS) $(PREFIX)/include/ - - diff --git a/Makefile.conf b/Makefile.conf deleted file mode 100644 index 7e6ca268..00000000 --- a/Makefile.conf +++ /dev/null @@ -1,20 +0,0 @@ - -# Build default config - -# Prefix to install things to, we also expect to find dependencies (incl. GNUstep) there. -PREFIX ?= $(HOME)/local/ - -CFLAGS ?= -fPIC -DPIC -g -Og - -# pEp Engine header files (including pEp/ prefix) -PEP_INCLUDE = $(PREFIX)/include/pEp/ -EXTRA_INCLUDES = - -# these are only needed for building shared libs. -LD_LIBS = -L$(PREFIX)/lib/ -L$(PREFIX)/Library/Libraries -L$(PREFIX)/System/Library/Libraries \ - -lgnustep-base -ldispatch -lpthread -lobjc -lm - - -# Overrides --include $(HERE)/local.conf - diff --git a/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile b/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile index d909814b..43717787 100644 --- a/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile +++ b/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile @@ -3,6 +3,7 @@ OBJECTS := $(patsubst %.m,%.o,$(wildcard ../*.m)) DEPFILES := $(wildcard ../*.d) HEADERS := $(wildcard ../PublicHeaders/*.h) TARGET = libPEPObjCTypeUtils +LIBS = -lpEpEngine -lasn1 include ../../../../Makefile.common include $(DEPFILES) diff --git a/pEpObjCAdapter/build-linux/Makefile b/pEpObjCAdapter/build-linux/Makefile index a74b2fbd..91f4e66a 100644 --- a/pEpObjCAdapter/build-linux/Makefile +++ b/pEpObjCAdapter/build-linux/Makefile @@ -1,10 +1,27 @@ +root = ../../ +# Content of this library +TARGET = libpEpObjCAdapter OBJECTS := $(patsubst %.m,%.o,$(wildcard ../*.m)) DEPFILES := $(wildcard ../*.d) HEADERS := $(wildcard ../PublicHeaders/*.h) -TARGET = libpEpObjCAdapter + +# Dependencies *within* this repo (other headers should be installed and found in $PREFIX). +INCLUDES = \ + -I$(root)/pEpObjCAdapter/PublicHeaders \ + -I$(root)/pEpObjCAdapter/Extensions \ + -I$(root)/pEpObjCAdapter \ + -I$(root)/Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/PublicHeaders \ + -I$(root)/Subprojects/PEPObjCTypes/PEPObjCTypes/PublicHeaders \ + -I$(root)/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/PublicHeaders \ + -I$(PEP_INCLUDE) + +# Only for making .so libs. Libs for static linking are defined with the final binary. LIBS = -lpEpEngine -Wl,--whole-archive -lPEPObjCTypes -lPEPObjCTypeUtils -lPEPObjCAdapterProtocols -Wl,--no-whole-archive +# Load the shared pEp ObjC Makefile. +MAKEFILE_COMMON ?= ../../../pepgnustephelper/ +include $(MAKEFILE_COMMON)/Makefile.common -include ../../Makefile.common +# This enables proper header-dependencies based on .d files made by the compiler. include $(DEPFILES) From 6fce4adbe235fe5706fbe06e35b454e96840719b Mon Sep 17 00:00:00 2001 From: Marcel Schneider Date: Wed, 1 Dec 2021 10:53:42 +0100 Subject: [PATCH 06/10] IPS-100 Adjust the other Make files. --- .../build-linux/Makefile | 18 +++++++++++--- .../PEPObjCTypeUtils/build-linux/Makefile | 24 ++++++++++++++++--- .../PEPObjCTypes/build-linux/Makefile | 21 ++++++++++++---- 3 files changed, 53 insertions(+), 10 deletions(-) diff --git a/Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/build-linux/Makefile b/Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/build-linux/Makefile index db64e975..33818834 100644 --- a/Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/build-linux/Makefile +++ b/Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/build-linux/Makefile @@ -1,8 +1,20 @@ - +# Content of this library +TARGET = libPEPObjCAdapterProtocols OBJECTS := $(patsubst %.m,%.o,$(wildcard ../*.m)) DEPFILES := $(wildcard ../*.d) HEADERS := $(wildcard ../PublicHeaders/*.h) -TARGET = libPEPObjCAdapterProtocols -include ../../../../Makefile.common +# Dependencies *within* this repo (other headers should be installed and found in $PREFIX). +INCLUDES = \ + -I../ \ + -I../PublicHeaders + +# Only for making .so libs. Libs for static linking are defined with the final binary. +LIBS = + +# Load the shared pEp ObjC Makefile. +MAKEFILE_COMMON ?= ../../../../../pepgnustephelper/ +include $(MAKEFILE_COMMON)/Makefile.common + +# This enables proper header-dependencies based on .d files made by the compiler. include $(DEPFILES) diff --git a/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile b/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile index 43717787..ab7064c4 100644 --- a/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile +++ b/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile @@ -1,9 +1,27 @@ +root = ../../../../ +# Content of this library +TARGET = libPEPObjCTypeUtils OBJECTS := $(patsubst %.m,%.o,$(wildcard ../*.m)) DEPFILES := $(wildcard ../*.d) HEADERS := $(wildcard ../PublicHeaders/*.h) -TARGET = libPEPObjCTypeUtils -LIBS = -lpEpEngine -lasn1 -include ../../../../Makefile.common +# Dependencies *within* this repo (other headers should be installed and found in $PREFIX). +# PEP_INCLUDE is the pEp/ folder (since we don't prefix headers here), PEP_SRC +# is the engine source directory, since we may use uninstalled headers. +INCLUDES = \ + -I../ \ + -I../PublicHeaders \ + -I$(PEP_INCLUDE) \ + -I$(PEP_SRC) + + +# Only for making .so libs. Libs for static linking are defined with the final binary. +LIBS = -lpEpEngine -lasn1 -lPEPObjCTypes + +# Load the shared pEp ObjC Makefile. +MAKEFILE_COMMON ?= ../../../../../pepgnustephelper/ +include $(MAKEFILE_COMMON)/Makefile.common + +# This enables proper header-dependencies based on .d files made by the compiler. include $(DEPFILES) diff --git a/Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/Makefile b/Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/Makefile index 6110b526..de70ee64 100644 --- a/Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/Makefile +++ b/Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/Makefile @@ -1,8 +1,21 @@ - +# Content of this library +TARGET = libPEPObjCTypes OBJECTS := $(patsubst %.m,%.o,$(wildcard ../src/*.m ../src/*/*.m)) -DEPFILES := $(wildcard ../src/*.d) +DEPFILES := $(wildcard ..src/*.d ../src/*/*.d) HEADERS := $(wildcard ../PublicHeaders/*.h) -TARGET = libPEPObjCTypes -include ../../../../Makefile.common +# Dependencies *within* this repo (other headers should be installed and found in $PREFIX). +INCLUDES = \ + -I../PublicHeaders \ + -I../src \ + -I../src/PEPEqualableTools + +# Only for making .so libs. Libs for static linking are defined with the final binary. +LIBS = + +# Load the shared pEp ObjC Makefile. +MAKEFILE_COMMON ?= ../../../../../pepgnustephelper/ +include $(MAKEFILE_COMMON)/Makefile.common + +# This enables proper header-dependencies based on .d files made by the compiler. include $(DEPFILES) From 1ca5b798a7722588cb8a98160795af17a3540530 Mon Sep 17 00:00:00 2001 From: Marcel Schneider Date: Wed, 1 Dec 2021 12:07:16 +0100 Subject: [PATCH 07/10] IPS-100 Build test_project. The linking step was pleasantly painless, but we don't have gnustep statically yet. --- pEpObjCAdapter/build-linux/Makefile | 2 +- .../build-linux/test_project/GNUmakefile | 72 ------------------- .../build-linux/test_project/Makefile | 39 ++++++++++ 3 files changed, 40 insertions(+), 73 deletions(-) delete mode 100644 pEpObjCAdapter/build-linux/test_project/GNUmakefile create mode 100644 pEpObjCAdapter/build-linux/test_project/Makefile diff --git a/pEpObjCAdapter/build-linux/Makefile b/pEpObjCAdapter/build-linux/Makefile index 91f4e66a..dc782e7a 100644 --- a/pEpObjCAdapter/build-linux/Makefile +++ b/pEpObjCAdapter/build-linux/Makefile @@ -2,7 +2,7 @@ root = ../../ # Content of this library TARGET = libpEpObjCAdapter -OBJECTS := $(patsubst %.m,%.o,$(wildcard ../*.m)) +OBJECTS := $(patsubst %.m,%.o,$(wildcard ../*.m ../*/*.m)) DEPFILES := $(wildcard ../*.d) HEADERS := $(wildcard ../PublicHeaders/*.h) diff --git a/pEpObjCAdapter/build-linux/test_project/GNUmakefile b/pEpObjCAdapter/build-linux/test_project/GNUmakefile deleted file mode 100644 index fd69a6c1..00000000 --- a/pEpObjCAdapter/build-linux/test_project/GNUmakefile +++ /dev/null @@ -1,72 +0,0 @@ -# -# An example GNUmakefile -# -# To Run: `make messages=yes -# Include the common variables defined by the Makefile Package -include $(GNUSTEP_MAKEFILES)/common.make -#include $(GNUSTEP_MAKEFILES)/rules.make - -####################################### -# Sampel Excecutable Using PEPObjCAdapter -####################################### - -# Build Dependencies -SHELL_RESULT := $(shell ./build-dependencies.sh) - -TOOL_NAME = ClientOfObjcAdapter - -# Build pre-compiled prefix header -GNUSTEPHELPER_DIR=../../../../pepgnustephelper -FLAGS_FOR_PRECOMPILED_HEADER_DEBUG="-pthread -MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNUSTEP_RUNTIME=1 -D_NONFRAGILE_ABI=1 -DGNUSTEP_BASE_LIBRARY=1 -I./obj/pEpObjCTypes.obj/PrecompiledHeaders/ObjC -fno-strict-aliasing -fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS -fobjc-runtime=gnustep-2.0 -fobjc-arc -fPIC -g -fblocks -fobjc-runtime=gnustep-2.0 -fblocks -fconstant-string-class=NSConstantString -I../PublicHeaders/ -I../src/ -I../src/PEPEqualableTools -I. -I/home/user/GNUstep/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/System/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/System/Library/Headers -I/usr/GNUstep/System/Library/Headers -fblocks -x objective-c -I/usr/include/libxml2 -I/usr/include/libxml2 -I/usr/include/p11-kit-1" -FLAGS_FOR_PRECOMPILED_HEADER_RELEASE="-pthread -MMD -MP -DGNUSTEP -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNUSTEP_RUNTIME=1 -D_NONFRAGILE_ABI=1 -DGNUSTEP_BASE_LIBRARY=1 -I./obj/pEpObjCTypes.obj/PrecompiledHeaders/ObjC -fno-strict-aliasing -fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS -fobjc-runtime=gnustep-2.0 -fobjc-arc -fPIC -g -O2 -fblocks -fobjc-runtime=gnustep-2.0 -fblocks -fconstant-string-class=NSConstantString -I../PublicHeaders/ -I../src/ -I../src/PEPEqualableTools -I. -I/home/user/GNUstep/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/System/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/Local/Library/Headers -I/usr/GNUstep/System/Library/Headers -I/usr/GNUstep/System/Library/Headers -fblocks -x objective-c -I/usr/include/libxml2 -I/usr/include/libxml2 -I/usr/include/p11-kit-1" -ifeq ($(debug), yes) - FLAGS_FOR_PRECOMPILED_HEADER = ${FLAGS_FOR_PRECOMPILED_HEADER_DEBUG} -else - FLAGS_FOR_PRECOMPILED_HEADER = ${FLAGS_FOR_PRECOMPILED_HEADER_RELEASE} -endif -SHELL_RESULT := $(shell ${GNUSTEPHELPER_DIR}/build-precompiled-header.sh ${FLAGS_FOR_PRECOMPILED_HEADER}) -# Keep. Useful to manually figure out flags for precompiled header. -#pEpObjCAdapter_OBJC_PRECOMPILED_HEADERS = ${GNUSTEPHELPER_DIR}/PEPObjCGNUStepOptimizations.h - -# Header Search Paths -PEP_OBJC_TYPES_HEADER_DIRS_PREFIXED := -I../../../Subprojects/PEPObjCTypes/PEPObjCTypes/PublicHeaders/ -PEP_OBJC_TYPE_UTILS_HEADER_DIRS_PREFIXED := -I../../../Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/PublicHeaders/ -PEP_OBJC_ADAPTER_PROTOCOLS_HEADER_DIRS_PREFIXED := -I../../../Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/PublicHeaders/ -PEP_OBJC_ADAPTER_HEADER_DIRS_PREFIXED := $(shell find ../../../pEpObjCAdapter/ -type d | sed -e 's/^/-I/;') -CLIENT_OF_OBJC_ADAPTER_HEADER_DIRS_PREFIXED := $(shell find ../ -type d | sed -e 's/^/-I/;') - -ClientOfObjcAdapter_INCLUDE_DIRS = ${CLIENT_OF_OBJC_ADAPTER_HEADER_DIRS_PREFIXED} ${PEP_OBJC_TYPES_HEADER_DIRS_PREFIXED} ${PEP_OBJC_TYPE_UTILS_HEADER_DIRS_PREFIXED} ${PEP_OBJC_ADAPTER_PROTOCOLS_HEADER_DIRS_PREFIXED} ${PEP_OBJC_ADAPTER_HEADER_DIRS_PREFIXED} - -# SRC Files -ALL_DOT_M_FILES := $(shell find . -type f -name "*.m") -ClientOfObjcAdapter_OBJC_FILES = main.m - -ClientOfObjcAdapter_RESOURCE_FILES = - -ADDITIONAL_OBJCFLAGS += -include-pch PEPObjCGNUStepOptimizations.h.gch -Winvalid-pch -ADDITIONAL_FLAGS += -fobjc-runtime=gnustep-2.0 -fobjc-arc - -## Linking Libs - Take Care !! The Order *DOES* Matter -ADDITIONAL_OBJC_LIBS = -ldispatch \ --l/usr/GNUstep/Local/Library/Libraries/libpEpObjCAdapter.so \ --l/usr/GNUstep/Local/Library/Libraries/libpEpObjCAdapterProtocols.a \ --l/usr/GNUstep/Local/Library/Libraries/libpEpObjCTypeUtils.a\ --l/usr/GNUstep/Local/Library/Libraries/libpEpObjCTypes.a \ --l${HOME}/local/lib/libpEpEngine.a \ --luuid \ --lz \ --l${HOME}/local/lib/libetpan.a \ --l${HOME}/local/lib/libasn1.a \ --l${HOME}/local/lib/libsqlite3.a \ --lpthread \ --ldl \ --l${HOME}/local/lib/libsequoia_openpgp_ffi.a \ --l${HOME}/local/lib/libhogweed.a \ --l${HOME}/local/lib/libnettle.a \ --l${HOME}/local/lib/libgmp.a - -# -l/usr/GNUstep/Local/Library/Libraries/libpEpObjCAdapter.a\ - -ADDITIONAL_LDFLAGS += -L/usr/GNUstep/Local/Library/Libraries - -include $(GNUSTEP_MAKEFILES)/tool.make diff --git a/pEpObjCAdapter/build-linux/test_project/Makefile b/pEpObjCAdapter/build-linux/test_project/Makefile new file mode 100644 index 00000000..fb2a7313 --- /dev/null +++ b/pEpObjCAdapter/build-linux/test_project/Makefile @@ -0,0 +1,39 @@ +root = ../../../ + +# Content of this library +TARGET_EXE = test_project +OBJECTS := $(patsubst %.m,%.o,$(wildcard *.m)) +DEPFILES := $(wildcard *.d) +HEADERS := + +# Dependencies *within* this repo (other headers should be installed and found in $PREFIX). +INCLUDES = \ + -I$(root)/pEpObjCAdapter/PublicHeaders + +# Since we link an excecuatble here, these options matter a lot. We also need +# to list all transitive dependincies if we want to link statically. +# ObjC stuff needs to be linked with --whole-archive to mae Extensions work. +# Otherwise, we link "our" dependencies with -Bstatic to perfer static linking, +# but allow dynamic linking in the end for system stuff. +LIBS = \ + -Wl,-Bstatic \ + -Wl,--whole-archive \ + -lpEpObjCAdapter \ + -lPEPObjCTypes \ + -lPEPObjCTypeUtils \ + -lPEPObjCAdapterProtocols \ + -Wl,--no-whole-archive \ + -lpEpEngine -lasn1 -lsqlite3 -letpan -liconv -luuid \ + -lsequoia_openpgp_ffi -lhogweed -lnettle -lgmp -lbz2 \ + -Wl,-Bdynamic \ + -ldl # dlsym is needed by some rust thing in sequoia. + +# Default rule, to build the executable instead of libraries. +all: $(TARGET_EXE) + +# Load the shared pEp ObjC Makefile. +MAKEFILE_COMMON ?= ../../../../pepgnustephelper/ +include $(MAKEFILE_COMMON)/Makefile.common + +# This enables proper header-dependencies based on .d files made by the compiler. +include $(DEPFILES) From 9c290bddd83e736aed202abbfbada0d65d919ce0 Mon Sep 17 00:00:00 2001 From: Marcel Schneider Date: Tue, 7 Dec 2021 16:18:05 +0100 Subject: [PATCH 08/10] IPS-100 We should not need headers from src/. If aything, we install them in our build script. --- .../PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile | 1 - 1 file changed, 1 deletion(-) diff --git a/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile b/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile index ab7064c4..7c942460 100644 --- a/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile +++ b/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile @@ -13,7 +13,6 @@ INCLUDES = \ -I../ \ -I../PublicHeaders \ -I$(PEP_INCLUDE) \ - -I$(PEP_SRC) # Only for making .so libs. Libs for static linking are defined with the final binary. From 67b80a8e21853944eb3110497f3f4480a247990d Mon Sep 17 00:00:00 2001 From: Marcel Schneider Date: Fri, 10 Dec 2021 11:10:09 +0100 Subject: [PATCH 09/10] IPS-100 Use new Makefile.common functions. --- .../PEPObjCAdapterProtocols/build-linux/Makefile | 9 ++++----- .../PEPObjCTypeUtils/build-linux/Makefile | 12 +++++++----- .../PEPObjCTypes/PEPObjCTypes/build-linux/Makefile | 9 ++++----- pEpObjCAdapter/build-linux/Makefile | 6 +++--- pEpObjCAdapter/build-linux/test_project/Makefile | 6 +++--- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/build-linux/Makefile b/Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/build-linux/Makefile index 33818834..32005ab3 100644 --- a/Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/build-linux/Makefile +++ b/Subprojects/PEPObjCAdapterProtocols/PEPObjCAdapterProtocols/build-linux/Makefile @@ -1,13 +1,12 @@ # Content of this library TARGET = libPEPObjCAdapterProtocols -OBJECTS := $(patsubst %.m,%.o,$(wildcard ../*.m)) -DEPFILES := $(wildcard ../*.d) -HEADERS := $(wildcard ../PublicHeaders/*.h) +OBJECTS = $(call find-objects,..) +DEPFILES = $(call find-deps,..) +HEADERS = $(call find-headers,../PublicHeaders/) # Dependencies *within* this repo (other headers should be installed and found in $PREFIX). INCLUDES = \ - -I../ \ - -I../PublicHeaders + $(call find-includes,..) # Only for making .so libs. Libs for static linking are defined with the final binary. LIBS = diff --git a/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile b/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile index 7c942460..ee7a43fa 100644 --- a/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile +++ b/Subprojects/PEPObjCTypeUtils/PEPObjCTypeUtils/build-linux/Makefile @@ -2,17 +2,16 @@ root = ../../../../ # Content of this library TARGET = libPEPObjCTypeUtils -OBJECTS := $(patsubst %.m,%.o,$(wildcard ../*.m)) -DEPFILES := $(wildcard ../*.d) -HEADERS := $(wildcard ../PublicHeaders/*.h) +OBJECTS = $(call find-objects,..) +DEPFILES = $(call find-deps,..) +HEADERS = $(call find-headers,../PublicHeaders) # Dependencies *within* this repo (other headers should be installed and found in $PREFIX). # PEP_INCLUDE is the pEp/ folder (since we don't prefix headers here), PEP_SRC # is the engine source directory, since we may use uninstalled headers. INCLUDES = \ - -I../ \ - -I../PublicHeaders \ -I$(PEP_INCLUDE) \ + $(call find-includes,..) # Only for making .so libs. Libs for static linking are defined with the final binary. @@ -22,5 +21,8 @@ LIBS = -lpEpEngine -lasn1 -lPEPObjCTypes MAKEFILE_COMMON ?= ../../../../../pepgnustephelper/ include $(MAKEFILE_COMMON)/Makefile.common +print: + echo $(OBJECTS) + # This enables proper header-dependencies based on .d files made by the compiler. include $(DEPFILES) diff --git a/Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/Makefile b/Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/Makefile index de70ee64..f70d2c17 100644 --- a/Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/Makefile +++ b/Subprojects/PEPObjCTypes/PEPObjCTypes/build-linux/Makefile @@ -1,14 +1,13 @@ # Content of this library TARGET = libPEPObjCTypes -OBJECTS := $(patsubst %.m,%.o,$(wildcard ../src/*.m ../src/*/*.m)) -DEPFILES := $(wildcard ..src/*.d ../src/*/*.d) -HEADERS := $(wildcard ../PublicHeaders/*.h) +OBJECTS = $(call find-objects,../src) +DEPFILES = $(call find-deps,../src) +HEADERS = $(call find-headers,../PublicHeaders/) # Dependencies *within* this repo (other headers should be installed and found in $PREFIX). INCLUDES = \ -I../PublicHeaders \ - -I../src \ - -I../src/PEPEqualableTools + $(call find-includes,..) # Only for making .so libs. Libs for static linking are defined with the final binary. LIBS = diff --git a/pEpObjCAdapter/build-linux/Makefile b/pEpObjCAdapter/build-linux/Makefile index dc782e7a..6b29d4c0 100644 --- a/pEpObjCAdapter/build-linux/Makefile +++ b/pEpObjCAdapter/build-linux/Makefile @@ -2,9 +2,9 @@ root = ../../ # Content of this library TARGET = libpEpObjCAdapter -OBJECTS := $(patsubst %.m,%.o,$(wildcard ../*.m ../*/*.m)) -DEPFILES := $(wildcard ../*.d) -HEADERS := $(wildcard ../PublicHeaders/*.h) +OBJECTS = $(call find-objects,..) +DEPFILES = $(call find-deps,..) +HEADERS = $(call find-headers,../PublicHeaders/) # Dependencies *within* this repo (other headers should be installed and found in $PREFIX). INCLUDES = \ diff --git a/pEpObjCAdapter/build-linux/test_project/Makefile b/pEpObjCAdapter/build-linux/test_project/Makefile index fb2a7313..f8d3b20a 100644 --- a/pEpObjCAdapter/build-linux/test_project/Makefile +++ b/pEpObjCAdapter/build-linux/test_project/Makefile @@ -2,9 +2,9 @@ root = ../../../ # Content of this library TARGET_EXE = test_project -OBJECTS := $(patsubst %.m,%.o,$(wildcard *.m)) -DEPFILES := $(wildcard *.d) -HEADERS := +OBJECTS = $(call find-objects,.) +DEPFILES = $(call find-deps,.) +HEADERS = # Dependencies *within* this repo (other headers should be installed and found in $PREFIX). INCLUDES = \ From 82534c74833ce1da88849c0449f1a67180746f39 Mon Sep 17 00:00:00 2001 From: Marcel Schneider Date: Fri, 10 Dec 2021 12:01:30 +0100 Subject: [PATCH 10/10] IPS-100 Fix pEpObjCAdapter Makefile. We could also patch Makefile.common to hide the build-* folders, but let's try to avoid magic for now. --- pEpObjCAdapter/build-linux/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pEpObjCAdapter/build-linux/Makefile b/pEpObjCAdapter/build-linux/Makefile index 6b29d4c0..fc5f46ed 100644 --- a/pEpObjCAdapter/build-linux/Makefile +++ b/pEpObjCAdapter/build-linux/Makefile @@ -2,7 +2,7 @@ root = ../../ # Content of this library TARGET = libpEpObjCAdapter -OBJECTS = $(call find-objects,..) +OBJECTS = $(patsubst %.m,%.o,$(wildcard ../*.m ../*/*.m)) DEPFILES = $(call find-deps,..) HEADERS = $(call find-headers,../PublicHeaders/)