From f6064eea53965bab69fda268137f8b0aced04007 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Fri, 9 Jun 2023 19:30:01 +0100 Subject: [PATCH] tools: kexttool: include directory support; pre-processor defines for internal kexts --- Makefile | 6 ++++-- tools/kexttool/select.py | 30 +++++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 847203d..5300de4 100644 --- a/Makefile +++ b/Makefile @@ -48,12 +48,14 @@ CWARNINGS := -Wall -Werror -pedantic -Wno-language-extension-token -Wno-unused-f OPTIMISATION_LEVEL := -O2 CFLAGS := $(CFLAGS) -DBUILD_ID=\"$(BUILD_ID)\" $(OPTIMISATION_LEVEL) -g -fPIC -std=gnu17 \ - -Iinclude -Iarch/$(SOCKS_ARCH)/include -Ilibc/include $(CWARNINGS) + -Iinclude -Iarch/$(SOCKS_ARCH)/include -Ilibc/include $(CWARNINGS) \ + $(INTERNAL_KEXT_INCLUDES) $(INTERNAL_KEXT_DEFINES) KERNEL_DEFINES := -DSOCKS_INTERNAL=1 CXXFLAGS := $(CXXFLAGS) -DBUILD_ID=\"$(BUILD_ID)\" $(OPTIMISATION_LEVEL) -g -fPIC -std=gnu++17 \ - -Iinclude -Iarch/$(SOCKS_ARCH)/include -Ilibc/include -Wno-language-extension-token $(CWARNINGS) + -Iinclude -Iarch/$(SOCKS_ARCH)/include -Ilibc/include -Wno-language-extension-token $(CWARNINGS) \ + $(INTERNAL_KEXT_INCLUDES) $(INTERNAL_KEXT_DEFINES) ASMFLAGS := $(ASMFLAGS) -DBUILD_ID=\"$(BUILD_ID)\" LDFLAGS := $(LDFLAGS) -g -lgcc $(OPTIMISATION_LEVEL) diff --git a/tools/kexttool/select.py b/tools/kexttool/select.py index 3a6ade7..eacf16b 100644 --- a/tools/kexttool/select.py +++ b/tools/kexttool/select.py @@ -1,5 +1,6 @@ import yaml import os +import re from kexttool.kext import KextSource @@ -84,6 +85,12 @@ def write_external_kext_variables(fp, kexts): fp.write('\n') +def c_define_from_kext_id(ident): + out = ident.upper() + out = re.sub('[^0-9a-zA-Z]+', '_', out) + return 'KEXT_{}'.format(out) + + def create_kext_makefile(): all_kexts = KextSource.scan(os.path.join(os.getcwd(), 'kexts')) selection_info = {} @@ -102,6 +109,7 @@ def create_kext_makefile(): return internal_source_files = [] + internal_kexts = [] external_kexts = [] print('the following kernel extensions will be built:') @@ -119,6 +127,7 @@ def create_kext_makefile(): continue if build_info['build'] == 'internal': + internal_kexts.append(kext_info) internal_source_files += kext_info.sources_filepath() elif build_info['build'] == 'external': external_kexts.append(kext_info) @@ -141,11 +150,30 @@ def create_kext_makefile(): makefile_fp.write(' \\') makefile_fp.write('\n') + if len(internal_kexts) > 0: + makefile_fp.write('INTERNAL_KEXT_DEFINES := \\\n') + + for i, kext_info in enumerate(internal_kexts): + makefile_fp.write('\t-D{}=1'.format(c_define_from_kext_id(kext_info.id()))) + + if i != len(internal_kexts) - 1: + makefile_fp.write(' \\') + makefile_fp.write('\n') + + if len(internal_kexts) > 0: + makefile_fp.write('INTERNAL_KEXT_INCLUDES := \\\n') + + for i, kext_info in enumerate(internal_kexts): + makefile_fp.write('\t-I{}'.format(os.path.join('$(ROOT_DIR)', kext_info.src_dirpath(), 'include'))) + + if i != len(selection_info.items()) - 1: + makefile_fp.write(' \\') + makefile_fp.write('\n') + write_external_kext_variables(makefile_fp, external_kexts) for kext in external_kexts: makefile_fp.write('\nkexts/{}: $({})\n'.format(kext.id(), external_kext_obj_variable_name(kext))) - def select_kexts():