From 607634970fab63275b721b8bb88172dd943a1bd1 Mon Sep 17 00:00:00 2001 From: Eduardo Speroni Date: Tue, 10 May 2022 18:09:55 -0300 Subject: [PATCH 01/13] feat: update metadata generator to work with llvm 13.0.1 and CLANG_ENABLE_MODULES --- .gitignore | 2 + README.md | 7 +++ build_metadata_generator.sh | 8 +++- download_llvm.sh | 15 +++++++ llvm | 1 - llvm/.gitkeep | 0 metadata-generator/CMakeLists.txt | 12 +++-- .../build-step-metadata-generator.py | 23 ++++++---- .../Binary/binaryTypeEncodingSerializer.cpp | 44 +++++++++---------- .../src/HeadersParser/Parser.cpp | 6 +-- .../ResolveGlobalNamesCollisionsFilter.h | 2 +- metadata-generator/src/Meta/MetaFactory.cpp | 16 ++++--- metadata-generator/src/Meta/TypeFactory.cpp | 13 ++++-- metadata-generator/src/Meta/TypeFactory.h | 2 + metadata-generator/src/Yaml/MetaYamlTraits.h | 2 +- metadata-generator/src/Yaml/YamlSerializer.h | 2 +- metadata-generator/src/main.cpp | 8 ++-- 17 files changed, 107 insertions(+), 56 deletions(-) create mode 100755 download_llvm.sh delete mode 160000 llvm create mode 100644 llvm/.gitkeep diff --git a/.gitignore b/.gitignore index 04e22979..aa6017ed 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,5 @@ package-lock.json *.pyc v8 .npmrc + +llvm/ diff --git a/README.md b/README.md index 70e01237..3a0bd950 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,10 @@ To start diving into the v8 iOS runtime make sure you have XCode and [Homebrew]( # Install CMake brew install cmake +# To avoid errors, you might need to link cmake to: /usr/local/bin/cmake +# xcode doesn't read your profile during the build step, which causes it to ignore the PATH +sudo ln -s /usr/local/bin/cmake $(which cmake) + # Clone repo git clone https://github.com/NativeScript/ns-v8ios-runtime.git @@ -12,6 +16,9 @@ git clone https://github.com/NativeScript/ns-v8ios-runtime.git cd ns-v8ios-runtime git submodule update --init +# Ensure that you have the required llvm binaries for building the metadata generator +./download_llvm.sh + # Open the runtime in XCode open v8ios.xcodeproj ``` diff --git a/build_metadata_generator.sh b/build_metadata_generator.sh index 95b6e551..4257750e 100755 --- a/build_metadata_generator.sh +++ b/build_metadata_generator.sh @@ -1,13 +1,19 @@ #!/bin/bash set -e +./download_llvm.sh + +# try to build in the amount of threads available +# change this to 1 if you want single threaded builds +NUMJOBS=$(nproc) + function build { rm -rf build mkdir build pushd "build" cmake -DCMAKE_BUILD_TYPE=Release -DMETADATA_BINARY_ARCH=$1 -DCMAKE_OSX_ARCHITECTURES=$1 ../ make clean - make + make -j$NUMJOBS cp ../build-step-metadata-generator.py bin popd mkdir "dist/$1" diff --git a/download_llvm.sh b/download_llvm.sh new file mode 100755 index 00000000..e0e00483 --- /dev/null +++ b/download_llvm.sh @@ -0,0 +1,15 @@ +#!/bin/bash +set -e + +function download_llvm() { + echo 'Downloading llvm...' + mkdir -p /tmp/llvm-dl/ + curl -L https://github.com/NativeScript/ios-llvm/releases/download/v13.0.1/llvm-13.0.1.tgz -o /tmp/llvm-dl/llvm-13.0.1.tgz + mkdir -p ./llvm/ + echo 'extracting llvm...' + tar -xzf /tmp/llvm-dl/llvm-13.0.1.tgz -C ./llvm/ +} + +if [ ! -d "./llvm/13.0.1" ]; then + download_llvm +fi diff --git a/llvm b/llvm deleted file mode 160000 index 6545eb0e..00000000 --- a/llvm +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6545eb0ec791c1aca0b7b32440c6cadddbdecf96 diff --git a/llvm/.gitkeep b/llvm/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/metadata-generator/CMakeLists.txt b/metadata-generator/CMakeLists.txt index 0a5dc596..1aea8e69 100644 --- a/metadata-generator/CMakeLists.txt +++ b/metadata-generator/CMakeLists.txt @@ -1,5 +1,5 @@ project(MetadataGenerator) -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.20) #set(CMAKE_VERBOSE_MAKEFILE ON) @@ -12,16 +12,20 @@ if (NOT LIBXML2_FOUND) message(FATAL_ERROR "libXML2 not found") endif () -get_filename_component(LLVM_ROOT "../../llvm/8.0.0" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}") +get_filename_component(LLVM_ROOT "../../llvm/13.0.1" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}") set(CMAKE_OSX_DEPLOYMENT_TARGET 10.12) set(LLVM_SYSTEM_LIBS "-lz -lcurses -lm -lxml2") set(LLVM_PREPROCESSOR_FLAGS "-I${LLVM_ROOT}/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS") -set(LLVM_LIBS "-lLLVMLTO -lLLVMPasses -lLLVMObjCARCOpts -lLLVMMIRParser -lLLVMSymbolize -lLLVMDebugInfoPDB -lLLVMDebugInfoDWARF -lLLVMCoverage -lLLVMMCA -lLLVMTableGen -lLLVMDlltoolDriver -lLLVMXRay -lLLVMOrcJIT -lLLVMXCoreDisassembler -lLLVMXCoreCodeGen -lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMXCoreAsmPrinter -lLLVMWebAssemblyDisassembler -lLLVMWebAssemblyCodeGen -lLLVMWebAssemblyDesc -lLLVMWebAssemblyAsmPrinter -lLLVMWebAssemblyAsmParser -lLLVMWebAssemblyInfo -lLLVMSystemZDisassembler -lLLVMSystemZCodeGen -lLLVMSystemZAsmParser -lLLVMSystemZDesc -lLLVMSystemZInfo -lLLVMSystemZAsmPrinter -lLLVMSparcDisassembler -lLLVMSparcCodeGen -lLLVMSparcAsmParser -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMSparcAsmPrinter -lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter -lLLVMNVPTXCodeGen -lLLVMNVPTXDesc -lLLVMNVPTXInfo -lLLVMNVPTXAsmPrinter -lLLVMMSP430Disassembler -lLLVMMSP430CodeGen -lLLVMMSP430AsmParser -lLLVMMSP430Desc -lLLVMMSP430Info -lLLVMMSP430AsmPrinter -lLLVMMipsDisassembler -lLLVMMipsCodeGen -lLLVMMipsAsmParser -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMMipsAsmPrinter -lLLVMLanaiDisassembler -lLLVMLanaiCodeGen -lLLVMLanaiAsmParser -lLLVMLanaiDesc -lLLVMLanaiAsmPrinter -lLLVMLanaiInfo -lLLVMHexagonDisassembler -lLLVMHexagonCodeGen -lLLVMHexagonAsmParser -lLLVMHexagonDesc -lLLVMHexagonInfo -lLLVMBPFDisassembler -lLLVMBPFCodeGen -lLLVMBPFAsmParser -lLLVMBPFDesc -lLLVMBPFInfo -lLLVMBPFAsmPrinter -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter -lLLVMARMUtils -lLLVMAMDGPUDisassembler -lLLVMAMDGPUCodeGen -lLLVMAMDGPUAsmParser -lLLVMAMDGPUDesc -lLLVMAMDGPUInfo -lLLVMAMDGPUAsmPrinter -lLLVMAMDGPUUtils -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen -lLLVMAArch64AsmParser -lLLVMAArch64Desc -lLLVMAArch64Info -lLLVMAArch64AsmPrinter -lLLVMAArch64Utils -lLLVMObjectYAML -lLLVMLibDriver -lLLVMOption -lLLVMOptRemarks -lLLVMWindowsManifest -lLLVMTextAPI -lLLVMFuzzMutate -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMGlobalISel -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMMCJIT -lLLVMLineEditor -lLLVMInterpreter -lLLVMExecutionEngine -lLLVMRuntimeDyld -lLLVMCodeGen -lLLVMTarget -lLLVMCoroutines -lLLVMipo -lLLVMInstrumentation -lLLVMVectorize -lLLVMScalarOpts -lLLVMLinker -lLLVMIRReader -lLLVMAsmParser -lLLVMInstCombine -lLLVMBitWriter -lLLVMAggressiveInstCombine -lLLVMTransformUtils -lLLVMAnalysis -lLLVMProfileData -lLLVMObject -lLLVMMCParser -lLLVMMC -lLLVMDebugInfoCodeView -lLLVMDebugInfoMSF -lLLVMBitReader -lLLVMCore -lLLVMBinaryFormat -lLLVMSupport -lLLVMDemangle") +# these are all available libs currently, we probably don't need all +#set(LLVM_LIBS "-lLLVMCFGuard -lLLVMMipsInfo -lclangFrontend -lclangToolingRefactoring -lLLVMGlobalISel -lLLVMFileCheck -lLLVMAnalysis -lLLVMAArch64AsmParser -lLLVMBPFAsmParser -lclangToolingASTDiff -lLLVMAArch64Utils -lLLVMMCA -lclangHandleLLVM -lLLVMMIRParser -lLLVMHexagonAsmParser -lLLVMLanaiDesc -lLLVMSparcDisassembler -llldELF -lLLVMMipsAsmParser -lLLVMDebugInfoDWARF -lLLVMAVRDisassembler -lLLVMWebAssemblyInfo -lLLVMHexagonInfo -lLLVMARMCodeGen -lLLVMPowerPCCodeGen -lLLVMXRay -lLLVMMSP430CodeGen -lLLVMVectorize -lLLVMHexagonCodeGen -lclangCrossTU -lLLVMSupport -lLLVMDWP -lLLVMWindowsManifest -lclangToolingInclusions -lLLVMNVPTXDesc -lc++ -lLLVMXCoreCodeGen -lLLVMSystemZInfo -lclangFormat -lLLVMWebAssemblyUtils -lLLVMCFIVerify -lLLVMXCoreInfo -lLLVMAVRDesc -lLLVMARMDisassembler -lclangAPINotes -lLLVMSparcDesc -llldCOFF -lLLVMAggressiveInstCombine -lLLVMAMDGPUDesc -lLLVMMSP430AsmParser -lclangIndexSerialization -lLLVMExtensions -lLLVMInstCombine -lLLVMDWARFLinker -lclangHandleCXX -lLLVMRISCVDisassembler -lclangDependencyScanning -lLLVMRISCVAsmParser -lLLVMFuzzMutate -lLLVMExegesisMips -lclangDynamicASTMatchers -lclangTransformer -lclangCodeGen -lLLVMScalarOpts -lLLVMTextAPI -lclangSerialization -lLLVMPasses -lLLVMBPFInfo -lLLVMLinker -lLLVMObject -lLLVMMCJIT -lPollyISL -lLLVMExegesisPowerPC -lLLVMCore -lLLVMLanaiCodeGen -lLLVMipo -lLLVMAArch64Info -lLLVMMC -lLLVMObjCARCOpts -lclangRewrite -lLLVMCodeGen -lclangAST -lLLVMTarget -lLLVMX86AsmParser -lLLVMFrontendOpenACC -llldYAML -lLLVMDebugInfoPDB -lLLVMMCDisassembler -lclangEdit -lLLVMX86CodeGen -lLLVMX86Info -lLLVMBPFCodeGen -lLLVMDebugInfoGSYM -lLLVMBPFDisassembler -lclangRewriteFrontend -lclangLex -lLLVMRISCVInfo -lLLVMJITLink -lLLVMBitReader -lLLVMHexagonDisassembler -lLLVMExecutionEngine -lLLVMMSP430Desc -lLLVMPowerPCDesc -llldCommon -lLLVMWebAssemblyAsmParser -lclangBasic -lLLVMSystemZAsmParser -lLLVMLTO -lLLVMSystemZCodeGen -lLLVMRemarks -lLLVMOption -lLLVMARMDesc -lLLVMAMDGPUUtils -lclangAnalysis -lLLVMPowerPCAsmParser -lLLVMOrcTargetProcess -lLLVMInterfaceStub -lclangStaticAnalyzerCore -lclangASTMatchers -lLLVMIRReader -llldWasm -lLLVMFrontendOpenMP -llldDriver -lLLVMAArch64Desc -lclangDirectoryWatcher -lLLVMAVRCodeGen -lLLVMWebAssemblyDisassembler -lLLVMLanaiAsmParser -lLLVMRISCVCodeGen -lLLVMBPFDesc -lLLVMMSP430Disassembler -lclangDriver -lLLVMTransformUtils -lLLVMLibDriver -lLLVMCoverage -lLLVMARMInfo -lLLVMExegesisAArch64 -lclangParse -lLLVMInterpreter -lLLVMPowerPCInfo -lLLVMRuntimeDyld -lLLVMMSP430Info -lLLVMProfileData -lLLVMSymbolize -lLLVMSelectionDAG -lLLVMRISCVDesc -lLLVMExegesisX86 -lLLVMX86Desc -lLLVMSparcCodeGen -lLLVMBitWriter -lclangStaticAnalyzerCheckers -lLLVMObjectYAML -lclangTooling -lLLVMBinaryFormat -lLLVMMCParser -lLLVMWebAssemblyDesc -lLLVMHexagonDesc -lLLVMAMDGPUCodeGen -lLLVMX86Disassembler -lclangToolingCore -lLLVMDemangle -lLLVMARMAsmParser -lLLVMLanaiDisassembler -lLLVMLineEditor -lLLVMMipsCodeGen -lclangTesting -lLLVMLanaiInfo -lLLVMOrcJIT -lclangInterpreter -llldReaderWriter -lLLVMAsmPrinter -lLLVMExegesis -lLLVMAArch64Disassembler -lLLVMTableGenGlobalISel -lclangToolingSyntax -lLLVMMipsDesc -lPolly -lLLVMMCACustomBehaviourAMDGPU -llldMinGW -lLLVMXCoreDisassembler -lLLVMTableGen -lLLVMAArch64CodeGen -llldMachO -lLLVMCoroutines -llldMachO2 -lLLVMAVRAsmParser -lLLVMPowerPCDisassembler -lLLVMDebugInfoCodeView -lLLVMNVPTXCodeGen -lclangFrontendTool -lLLVMAMDGPUInfo -llldCore -lLLVMWebAssemblyCodeGen -lLLVMSystemZDisassembler -lLLVMSparcInfo -lLLVMAMDGPUDisassembler -lLLVMAVRInfo -lclangARCMigrate -lLLVMSparcAsmParser -lLLVMXCoreDesc -lLLVMAsmParser -lLLVMDebugInfoMSF -lLLVMOrcShared -lLLVMSystemZDesc -lLLVMNVPTXInfo -lLLVMBitstreamReader -lclangStaticAnalyzerFrontend -lclangIndex -lLLVMInstrumentation -lclangSema -lLLVMDlltoolDriver -lLLVMARMUtils -lLLVMMipsDisassembler -lLLVMAMDGPUAsmParser") +# these come from the older llvm plus some added ones at the end +set(LLVM_LIBS "-lLLVMLTO -lLLVMPasses -lLLVMObjCARCOpts -lLLVMMIRParser -lLLVMSymbolize -lLLVMDebugInfoPDB -lLLVMDebugInfoDWARF -lLLVMCoverage -lLLVMMCA -lLLVMTableGen -lLLVMDlltoolDriver -lLLVMXRay -lLLVMOrcJIT -lLLVMXCoreDisassembler -lLLVMXCoreCodeGen -lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMWebAssemblyDisassembler -lLLVMWebAssemblyCodeGen -lLLVMWebAssemblyDesc -lLLVMWebAssemblyAsmParser -lLLVMWebAssemblyInfo -lLLVMSystemZDisassembler -lLLVMSystemZCodeGen -lLLVMSystemZAsmParser -lLLVMSystemZDesc -lLLVMSystemZInfo -lLLVMSparcDisassembler -lLLVMSparcCodeGen -lLLVMSparcAsmParser -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMNVPTXCodeGen -lLLVMNVPTXDesc -lLLVMNVPTXInfo -lLLVMMSP430Disassembler -lLLVMMSP430CodeGen -lLLVMMSP430AsmParser -lLLVMMSP430Desc -lLLVMMSP430Info -lLLVMMipsDisassembler -lLLVMMipsCodeGen -lLLVMMipsAsmParser -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMLanaiDisassembler -lLLVMLanaiCodeGen -lLLVMLanaiAsmParser -lLLVMLanaiDesc -lLLVMLanaiInfo -lLLVMHexagonDisassembler -lLLVMHexagonCodeGen -lLLVMHexagonAsmParser -lLLVMHexagonDesc -lLLVMHexagonInfo -lLLVMBPFDisassembler -lLLVMBPFCodeGen -lLLVMBPFAsmParser -lLLVMBPFDesc -lLLVMBPFInfo -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMUtils -lLLVMAMDGPUDisassembler -lLLVMAMDGPUCodeGen -lLLVMAMDGPUAsmParser -lLLVMAMDGPUDesc -lLLVMAMDGPUInfo -lLLVMAMDGPUUtils -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen -lLLVMAArch64AsmParser -lLLVMAArch64Desc -lLLVMAArch64Info -lLLVMAArch64Utils -lLLVMObjectYAML -lLLVMLibDriver -lLLVMOption -lLLVMWindowsManifest -lLLVMTextAPI -lLLVMFuzzMutate -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMGlobalISel -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc -lLLVMMCDisassembler -lLLVMX86Info -lLLVMMCJIT -lLLVMLineEditor -lLLVMInterpreter -lLLVMExecutionEngine -lLLVMRuntimeDyld -lLLVMCodeGen -lLLVMTarget -lLLVMCoroutines -lLLVMipo -lLLVMInstrumentation -lLLVMVectorize -lLLVMScalarOpts -lLLVMLinker -lLLVMIRReader -lLLVMAsmParser -lLLVMInstCombine -lLLVMBitWriter -lLLVMAggressiveInstCombine -lLLVMTransformUtils -lLLVMAnalysis -lLLVMProfileData -lLLVMObject -lLLVMMCParser -lLLVMMC -lLLVMDebugInfoCodeView -lLLVMDebugInfoMSF -lLLVMBitReader -lLLVMCore -lLLVMBinaryFormat -lLLVMSupport -lLLVMDemangle -lLLVMRemarks -lLLVMFrontendOpenMP -lLLVMBitstreamReader") + set(LLVM_LIBDIR "${LLVM_ROOT}/lib_${METADATA_BINARY_ARCH}") set(LLVM_LINKER_FLAGS "-L${LLVM_LIBDIR} -Wl,-search_paths_first -Wl,-headerpad_max_install_names") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -target ${METADATA_BINARY_ARCH}-apple-darwin -std=c++11 -fno-rtti ${LLVM_PREPROCESSOR_FLAGS}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -target ${METADATA_BINARY_ARCH}-apple-darwin -std=c++17 -fno-rtti ${LLVM_PREPROCESSOR_FLAGS}") set(LLVM_LINKER_FLAGS "${LLVM_LINKER_FLAGS} ${LLVM_SYSTEM_LIBS} ${LLVM_LIBS}") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/lib) diff --git a/metadata-generator/build-step-metadata-generator.py b/metadata-generator/build-step-metadata-generator.py index 1466d315..5c561a5c 100755 --- a/metadata-generator/build-step-metadata-generator.py +++ b/metadata-generator/build-step-metadata-generator.py @@ -35,33 +35,40 @@ def map_and_list(func, iterable): # process environment variables -effective_platofrm_name = env("EFFECTIVE_PLATFORM_NAME") +effective_platform_name = env("EFFECTIVE_PLATFORM_NAME") docset_platform = "iOS" default_deployment_target_flag_name = "-mios-simulator-version-min" default_deployment_target_clang_env_name = "IPHONEOS_DEPLOYMENT_TARGET" -if effective_platofrm_name is "-macosx": +if effective_platform_name is "-macosx": docset_platform = "OSX" default_deployment_target_flag_name = "-mmacosx-version-min" default_deployment_target_clang_env_name = "MACOSX_DEPLOYMENT_TARGET" -elif effective_platofrm_name is "-watchos": +elif effective_platform_name is "-watchos": docset_platform = "watchOS" default_deployment_target_flag_name = "-mwatchos-version-min" default_deployment_target_clang_env_name = "WATCHOS_DEPLOYMENT_TARGET" -elif effective_platofrm_name is "-watchsimulator": +elif effective_platform_name is "-watchsimulator": docset_platform = "watchOS" default_deployment_target_flag_name = "-mwatchos-simulator-version-min" default_deployment_target_clang_env_name = "WATCHOS_DEPLOYMENT_TARGET" -elif effective_platofrm_name is "-appletvos": +elif effective_platform_name is "-appletvos": docset_platform = "tvOS" default_deployment_target_flag_name = "-mappletvos-version-min" default_deployment_target_clang_env_name = "APPLETVOS_DEPLOYMENT_TARGET" -elif effective_platofrm_name is "-appletvsimulator": +elif effective_platform_name is "-appletvsimulator": docset_platform = "tvOS" default_deployment_target_flag_name = "-mappletvsimulator-version-min" default_deployment_target_clang_env_name = "APPLETVOS_DEPLOYMENT_TARGET" -elif effective_platofrm_name is "-iphoneos": +elif effective_platform_name is "-iphoneos": default_deployment_target_flag_name = "-miphoneos-version-min" +sdk_version = env("SDK_VERSION") or "13.0" +llvm_target_triple_suffix = env_or_empty("LLVM_TARGET_TRIPLE_SUFFIX") +llvm_target_triple_os_version = "ios{}".format(sdk_version) +# env("LLVM_TARGET_TRIPLE_OS_VERSION") is the deployment target, so doesn't have all APIs +# usually it's ios9.0 for NativeScript projects +llvm_target_triple_vendor = env("LLVM_TARGET_TRIPLE_VENDOR") or "apple" + conf_build_dir = env("CONFIGURATION_BUILD_DIR") sdk_root = env("SDKROOT") src_root = env("SRCROOT") @@ -136,7 +143,7 @@ def generate_metadata(arch): if env_or_empty("IS_UIKITFORMAC").capitalize() is "YES": generator_call.extend(["-arch", arch]) else: - generator_call.extend(["-target", "{}-apple-ios13.0-macabi".format(arch)]) + generator_call.extend(["-target", "{}-{}-{}{}".format(arch, llvm_target_triple_vendor, llvm_target_triple_os_version, llvm_target_triple_suffix)]) generator_call.extend(header_search_paths_parsed) # HEADER_SEARCH_PATHS generator_call.extend(framework_search_paths_parsed) # FRAMEWORK_SEARCH_PATHS diff --git a/metadata-generator/src/Binary/binaryTypeEncodingSerializer.cpp b/metadata-generator/src/Binary/binaryTypeEncodingSerializer.cpp index ab44e2c7..34481127 100644 --- a/metadata-generator/src/Binary/binaryTypeEncodingSerializer.cpp +++ b/metadata-generator/src/Binary/binaryTypeEncodingSerializer.cpp @@ -19,112 +19,112 @@ binary::MetaFileOffset binary::BinaryTypeEncodingSerializer::visit(std::vector< unique_ptr binary::BinaryTypeEncodingSerializer::visitVoid() { - return llvm::make_unique(binary::BinaryTypeEncodingType::Void); + return std::make_unique(binary::BinaryTypeEncodingType::Void); } unique_ptr binary::BinaryTypeEncodingSerializer::visitBool() { - return llvm::make_unique(binary::BinaryTypeEncodingType::Bool); + return std::make_unique(binary::BinaryTypeEncodingType::Bool); } unique_ptr binary::BinaryTypeEncodingSerializer::visitShort() { - return llvm::make_unique(binary::BinaryTypeEncodingType::Short); + return std::make_unique(binary::BinaryTypeEncodingType::Short); } unique_ptr binary::BinaryTypeEncodingSerializer::visitUShort() { - return llvm::make_unique(binary::BinaryTypeEncodingType::UShort); + return std::make_unique(binary::BinaryTypeEncodingType::UShort); } unique_ptr binary::BinaryTypeEncodingSerializer::visitInt() { - return llvm::make_unique(binary::BinaryTypeEncodingType::Int); + return std::make_unique(binary::BinaryTypeEncodingType::Int); } unique_ptr binary::BinaryTypeEncodingSerializer::visitUInt() { - return llvm::make_unique(binary::BinaryTypeEncodingType::UInt); + return std::make_unique(binary::BinaryTypeEncodingType::UInt); } unique_ptr binary::BinaryTypeEncodingSerializer::visitLong() { - return llvm::make_unique(binary::BinaryTypeEncodingType::Long); + return std::make_unique(binary::BinaryTypeEncodingType::Long); } unique_ptr binary::BinaryTypeEncodingSerializer::visitUlong() { - return llvm::make_unique(binary::BinaryTypeEncodingType::ULong); + return std::make_unique(binary::BinaryTypeEncodingType::ULong); } unique_ptr binary::BinaryTypeEncodingSerializer::visitLongLong() { - return llvm::make_unique(binary::BinaryTypeEncodingType::LongLong); + return std::make_unique(binary::BinaryTypeEncodingType::LongLong); } unique_ptr binary::BinaryTypeEncodingSerializer::visitULongLong() { - return llvm::make_unique(binary::BinaryTypeEncodingType::ULongLong); + return std::make_unique(binary::BinaryTypeEncodingType::ULongLong); } unique_ptr binary::BinaryTypeEncodingSerializer::visitSignedChar() { - return llvm::make_unique(binary::BinaryTypeEncodingType::Char); + return std::make_unique(binary::BinaryTypeEncodingType::Char); } unique_ptr binary::BinaryTypeEncodingSerializer::visitUnsignedChar() { - return llvm::make_unique(binary::BinaryTypeEncodingType::UChar); + return std::make_unique(binary::BinaryTypeEncodingType::UChar); } unique_ptr binary::BinaryTypeEncodingSerializer::visitUnichar() { - return llvm::make_unique(binary::BinaryTypeEncodingType::Unichar); + return std::make_unique(binary::BinaryTypeEncodingType::Unichar); } unique_ptr binary::BinaryTypeEncodingSerializer::visitCString() { - return llvm::make_unique(binary::BinaryTypeEncodingType::CString); + return std::make_unique(binary::BinaryTypeEncodingType::CString); } unique_ptr binary::BinaryTypeEncodingSerializer::visitFloat() { - return llvm::make_unique(binary::BinaryTypeEncodingType::Float); + return std::make_unique(binary::BinaryTypeEncodingType::Float); } unique_ptr binary::BinaryTypeEncodingSerializer::visitDouble() { - return llvm::make_unique(binary::BinaryTypeEncodingType::Double); + return std::make_unique(binary::BinaryTypeEncodingType::Double); } unique_ptr binary::BinaryTypeEncodingSerializer::visitVaList() { - return llvm::make_unique(binary::BinaryTypeEncodingType::VaList); + return std::make_unique(binary::BinaryTypeEncodingType::VaList); } unique_ptr binary::BinaryTypeEncodingSerializer::visitSelector() { - return llvm::make_unique(binary::BinaryTypeEncodingType::Selector); + return std::make_unique(binary::BinaryTypeEncodingType::Selector); } unique_ptr binary::BinaryTypeEncodingSerializer::visitInstancetype() { - return llvm::make_unique(binary::BinaryTypeEncodingType::InstanceType); + return std::make_unique(binary::BinaryTypeEncodingType::InstanceType); } unique_ptr binary::BinaryTypeEncodingSerializer::visitClass(const ::Meta::ClassType& type) { - return llvm::make_unique(binary::BinaryTypeEncodingType::Class); // TODO: Add protocols + return std::make_unique(binary::BinaryTypeEncodingType::Class); // TODO: Add protocols } unique_ptr binary::BinaryTypeEncodingSerializer::visitProtocol() { - return llvm::make_unique(binary::BinaryTypeEncodingType::ProtocolType); + return std::make_unique(binary::BinaryTypeEncodingType::ProtocolType); } unique_ptr binary::BinaryTypeEncodingSerializer::visitId(const ::Meta::IdType& type) { - auto s = llvm::make_unique(); + auto s = std::make_unique(); std::vector offsets; for (auto protocol : type.protocols) { offsets.push_back(this->_heapWriter.push_string(protocol->name)); diff --git a/metadata-generator/src/HeadersParser/Parser.cpp b/metadata-generator/src/HeadersParser/Parser.cpp index a9172789..4d2a0706 100644 --- a/metadata-generator/src/HeadersParser/Parser.cpp +++ b/metadata-generator/src/HeadersParser/Parser.cpp @@ -59,11 +59,11 @@ static std::error_code collectModuleHeaderIncludes(FileManager& fileMgr, ModuleM continue; // If this header is marked 'unavailable' in this module, don't include it. - if (const FileEntry* header = fileMgr.getFile(dir->path())) { - if (modMap.isHeaderUnavailableInModule(header, module)) + if (const llvm::ErrorOr header = fileMgr.getFile(dir->path())) { + if (modMap.isHeaderUnavailableInModule(*header, module)) continue; - addHeaderInclude(header, includes); + addHeaderInclude(*header, includes); } // Include this header as part of the umbrella directory. diff --git a/metadata-generator/src/Meta/Filters/ResolveGlobalNamesCollisionsFilter.h b/metadata-generator/src/Meta/Filters/ResolveGlobalNamesCollisionsFilter.h index e0ed65b5..bf3e5793 100644 --- a/metadata-generator/src/Meta/Filters/ResolveGlobalNamesCollisionsFilter.h +++ b/metadata-generator/src/Meta/Filters/ResolveGlobalNamesCollisionsFilter.h @@ -20,7 +20,7 @@ class ResolveGlobalNamesCollisionsFilter { std::unique_ptr > getResult() { - std::unique_ptr > result = llvm::make_unique >(MetasByModules(), InterfacesByName()); + std::unique_ptr > result = std::make_unique >(MetasByModules(), InterfacesByName()); MetasByModules& metasByModules = result->first; InterfacesByName& interfacesByName = result->second; diff --git a/metadata-generator/src/Meta/MetaFactory.cpp b/metadata-generator/src/Meta/MetaFactory.cpp index 21be3437..78bd6945 100644 --- a/metadata-generator/src/Meta/MetaFactory.cpp +++ b/metadata-generator/src/Meta/MetaFactory.cpp @@ -167,15 +167,15 @@ Meta* MetaFactory::create(const clang::Decl& decl, bool resetCached /* = false*/ return insertedMetaPtrRef.get(); } catch (MetaCreationException& e) { if (e.getMeta() == insertedMetaPtrRef.get()) { - insertedException = llvm::make_unique(e); + insertedException = std::make_unique(e); throw; } std::string message = CreationException::constructMessage("Can't create meta dependency.", e.getDetailedMessage()); - insertedException = llvm::make_unique(insertedMetaPtrRef.get(), message, e.isError()); + insertedException = std::make_unique(insertedMetaPtrRef.get(), message, e.isError()); POLYMORPHIC_THROW(insertedException); } catch (TypeCreationException& e) { std::string message = CreationException::constructMessage("Can't create type dependency.", e.getDetailedMessage()); - insertedException = llvm::make_unique(insertedMetaPtrRef.get(), message, e.isError()); + insertedException = std::make_unique(insertedMetaPtrRef.get(), message, e.isError()); POLYMORPHIC_THROW(insertedException); } } @@ -294,8 +294,8 @@ void MetaFactory::createFromVar(const clang::VarDecl& var, VarMeta& varMeta) throw MetaCreationException(&varMeta, "Not supported compile-time constant value: Union.", false); case clang::APValue::ValueKind::Vector: throw MetaCreationException(&varMeta, "Not supported compile-time constant value: Vector.", false); - case clang::APValue::ValueKind::Uninitialized: - throw MetaCreationException(&varMeta, "Not supported compile-time constant value: Uninitialized.", false); + case clang::APValue::ValueKind::Indeterminate: + throw MetaCreationException(&varMeta, "Not supported compile-time constant value: Indeterminate.", false); default: throw MetaCreationException(&varMeta, "Not supported compile-time constant value: -.", false); } @@ -321,8 +321,10 @@ void MetaFactory::createFromEnum(const clang::EnumDecl& enumeration, EnumMeta& e // Convert values having the signed bit set to 1 to signed in order to represent them correctly in JS (-1, -2, etc) // NOTE: Values having bits 53 to 62 different than the sign bit will continue to not be represented exactly // as MAX_SAFE_INTEGER is 2 ^ 53 - 1 - bool asSigned = enumField->getInitVal().isSigned() || enumField->getInitVal().getActiveBits() > 63; - std::string valueStr = enumField->getInitVal().toString(10, asSigned); + // bool asSigned = enumField->getInitVal().isSigned() || enumField->getInitVal().getActiveBits() > 63; + llvm::SmallString<100> valueAsString; + enumField->getInitVal().toString(valueAsString, 10); + std::string valueStr = valueAsString.c_str(); if (fieldNamePrefixLength > 0) { enumMeta.swiftNameFields.push_back({ enumField->getNameAsString().substr(fieldNamePrefixLength, std::string::npos), valueStr }); diff --git a/metadata-generator/src/Meta/TypeFactory.cpp b/metadata-generator/src/Meta/TypeFactory.cpp index c74f2f65..fb45d5e1 100644 --- a/metadata-generator/src/Meta/TypeFactory.cpp +++ b/metadata-generator/src/Meta/TypeFactory.cpp @@ -192,23 +192,25 @@ shared_ptr TypeFactory::create(const clang::Type* type) resultType = createFromAttributedType(concreteType); else if (const clang::ObjCTypeParamType* concreteType = clang::dyn_cast(type)) resultType = createFromObjCTypeParamType(concreteType); + else if (const clang::MacroQualifiedType* concreteType = clang::dyn_cast(type)) + resultType = createFromMacroQualifiedParamType(concreteType); else throw TypeCreationException(type, "Unable to create encoding for this type.", true); } catch (TypeCreationException& e) { if (e.getType() == type) { - _cache.insert(make_pair(&typeRef, make_pair(nullptr, llvm::make_unique(e)))); + _cache.insert(make_pair(&typeRef, make_pair(nullptr, std::make_unique(e)))); throw; }; pair insertionResult = _cache.insert(make_pair(&typeRef, make_pair(nullptr, nullptr))); string message = CreationException::constructMessage("Can't create type dependency.", e.getDetailedMessage()); - insertionResult.first->second.second = llvm::make_unique(type, message, e.isError()); + insertionResult.first->second.second = std::make_unique(type, message, e.isError()); POLYMORPHIC_THROW(insertionResult.first->second.second); } catch (MetaCreationException& e) { pair insertionResult = _cache.insert(make_pair(&typeRef, make_pair(nullptr, nullptr))); string message = CreationException::constructMessage("Can't create meta dependency.", e.getDetailedMessage()); - insertionResult.first->second.second = llvm::make_unique(type, message, e.isError()); + insertionResult.first->second.second = std::make_unique(type, message, e.isError()); POLYMORPHIC_THROW(insertionResult.first->second.second); } @@ -493,6 +495,11 @@ shared_ptr TypeFactory::createFromObjCTypeParamType(const clang::ObjCTypeP return make_shared(this->create(typeParamDecl->getUnderlyingType()).get(), typeParamDecl->getNameAsString(), protocols); } +shared_ptr TypeFactory::createFromMacroQualifiedParamType(const clang::MacroQualifiedType* type) +{ + return create(type->desugar()); +} + bool TypeFactory::isSpecificTypedefType(const clang::TypedefType* type, const string& typedefName) { const vector typedefNames{ typedefName }; diff --git a/metadata-generator/src/Meta/TypeFactory.h b/metadata-generator/src/Meta/TypeFactory.h index 179800f2..9eb47dc2 100644 --- a/metadata-generator/src/Meta/TypeFactory.h +++ b/metadata-generator/src/Meta/TypeFactory.h @@ -99,6 +99,8 @@ class TypeFactory { std::shared_ptr createFromAttributedType(const clang::AttributedType* type); std::shared_ptr createFromObjCTypeParamType(const clang::ObjCTypeParamType* type); + + std::shared_ptr createFromMacroQualifiedParamType(const clang::MacroQualifiedType* type); // helpers bool isSpecificTypedefType(const clang::TypedefType* type, const std::string& typedefName); diff --git a/metadata-generator/src/Yaml/MetaYamlTraits.h b/metadata-generator/src/Yaml/MetaYamlTraits.h index 90dbaec7..15dfcef5 100644 --- a/metadata-generator/src/Yaml/MetaYamlTraits.h +++ b/metadata-generator/src/Yaml/MetaYamlTraits.h @@ -328,7 +328,7 @@ namespace yaml { } io.mapRequired("Filename", meta->fileName); io.mapRequired("Module", meta->module); - io.mapOptional("IntroducedIn", meta->introducedIn, UNKNOWN_VERSION); + io.mapOptional("IntroducedIn", meta->introducedIn); io.mapRequired("Flags", meta->flags); io.mapRequired("Type", meta->type); } diff --git a/metadata-generator/src/Yaml/YamlSerializer.h b/metadata-generator/src/Yaml/YamlSerializer.h index 965b32c3..235ee65c 100644 --- a/metadata-generator/src/Yaml/YamlSerializer.h +++ b/metadata-generator/src/Yaml/YamlSerializer.h @@ -11,7 +11,7 @@ class YamlSerializer { static void serialize(std::string outputFilePath, T& object) { std::error_code errorCode; - llvm::raw_fd_ostream fileStream(outputFilePath, errorCode, llvm::sys::fs::OpenFlags::F_None); + llvm::raw_fd_ostream fileStream(outputFilePath, errorCode, llvm::sys::fs::OpenFlags::OF_None); if (errorCode) throw std::runtime_error(std::string("Unable to open file ") + outputFilePath + "."); llvm::yaml::Output output(fileStream); diff --git a/metadata-generator/src/main.cpp b/metadata-generator/src/main.cpp index c35e4224..f4b7b8ae 100644 --- a/metadata-generator/src/main.cpp +++ b/metadata-generator/src/main.cpp @@ -70,7 +70,7 @@ class MetaGenerationConsumer : public clang::ASTConsumer { for (clang::Module*& module : modules) { std::string filePath = std::string(cla_outputModuleMapsFolder) + std::string("/") + module->getFullModuleName() + ".modulemap"; std::error_code error; - llvm::raw_fd_ostream file(filePath, error, llvm::sys::fs::F_Text); + llvm::raw_fd_ostream file(filePath, error, llvm::sys::fs::OF_Text); if (error) { std::cout << error.message(); continue; @@ -112,7 +112,7 @@ class MetaGenerationConsumer : public clang::ASTConsumer { llvm::SmallString<128> path; llvm::sys::path::append(path, cla_outputDtsFolder, "objc!" + modulePair.first->getFullModuleName() + ".d.ts"); std::error_code error; - llvm::raw_fd_ostream file(path.str(), error, llvm::sys::fs::F_Text); + llvm::raw_fd_ostream file(path.str(), error, llvm::sys::fs::OF_Text); if (error) { std::cout << error.message(); return; @@ -222,7 +222,7 @@ int main(int argc, const char** argv) // Save the umbrella file if (!cla_outputUmbrellaHeaderFile.empty()) { std::error_code errorCode; - llvm::raw_fd_ostream umbrellaFileStream(cla_outputUmbrellaHeaderFile, errorCode, llvm::sys::fs::OpenFlags::F_None); + llvm::raw_fd_ostream umbrellaFileStream(cla_outputUmbrellaHeaderFile, errorCode, llvm::sys::fs::OpenFlags::OF_None); if (!errorCode) { umbrellaFileStream << umbrellaContent; umbrellaFileStream.close(); @@ -230,7 +230,7 @@ int main(int argc, const char** argv) } // generate metadata for the intermediate sdk header Meta::ModulesBlacklist modulesBlacklist(cla_whiteListModuleRegexesFile, cla_blackListModuleRegexesFile); - clang::tooling::runToolOnCodeWithArgs(new MetaGenerationFrontendAction(/*r*/modulesBlacklist), umbrellaContent, clangArgs, "umbrella.h", "objc-metadata-generator"); + clang::tooling::runToolOnCodeWithArgs(std::unique_ptr(new MetaGenerationFrontendAction(/*r*/modulesBlacklist)), umbrellaContent, clangArgs, "umbrella.h", "objc-metadata-generator"); std::clock_t end = clock(); double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC; From 189278d2d26694e7bad04fec53ef5f05fa972e27 Mon Sep 17 00:00:00 2001 From: Eduardo Speroni Date: Wed, 11 May 2022 11:00:15 -0300 Subject: [PATCH 02/13] fix: correctly map enums and yaml metadata --- metadata-generator/src/Meta/MetaFactory.cpp | 8 ++++++-- metadata-generator/src/Yaml/MetaYamlTraits.h | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/metadata-generator/src/Meta/MetaFactory.cpp b/metadata-generator/src/Meta/MetaFactory.cpp index 78bd6945..1731b412 100644 --- a/metadata-generator/src/Meta/MetaFactory.cpp +++ b/metadata-generator/src/Meta/MetaFactory.cpp @@ -321,9 +321,13 @@ void MetaFactory::createFromEnum(const clang::EnumDecl& enumeration, EnumMeta& e // Convert values having the signed bit set to 1 to signed in order to represent them correctly in JS (-1, -2, etc) // NOTE: Values having bits 53 to 62 different than the sign bit will continue to not be represented exactly // as MAX_SAFE_INTEGER is 2 ^ 53 - 1 - // bool asSigned = enumField->getInitVal().isSigned() || enumField->getInitVal().getActiveBits() > 63; llvm::SmallString<100> valueAsString; - enumField->getInitVal().toString(valueAsString, 10); + if(enumField->getInitVal().getActiveBits() > 63 && !enumField->getInitVal().isSigned()) { + llvm::APSInt intVal = enumField->getInitVal(); + intVal.setIsSigned(true); + } else { + enumField->getInitVal().toString(valueAsString, 10); + } std::string valueStr = valueAsString.c_str(); if (fieldNamePrefixLength > 0) { diff --git a/metadata-generator/src/Yaml/MetaYamlTraits.h b/metadata-generator/src/Yaml/MetaYamlTraits.h index 15dfcef5..698cc183 100644 --- a/metadata-generator/src/Yaml/MetaYamlTraits.h +++ b/metadata-generator/src/Yaml/MetaYamlTraits.h @@ -328,7 +328,7 @@ namespace yaml { } io.mapRequired("Filename", meta->fileName); io.mapRequired("Module", meta->module); - io.mapOptional("IntroducedIn", meta->introducedIn); + io.mapOptional("IntroducedIn", meta->introducedIn, (Meta::Version) UNKNOWN_VERSION); io.mapRequired("Flags", meta->flags); io.mapRequired("Type", meta->type); } From f690e6ce96d6ad6ed0d73647c67cf995c5d6a58f Mon Sep 17 00:00:00 2001 From: Eduardo Speroni Date: Wed, 11 May 2022 12:12:18 -0300 Subject: [PATCH 03/13] fix: convert signed values --- metadata-generator/src/Meta/MetaFactory.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/metadata-generator/src/Meta/MetaFactory.cpp b/metadata-generator/src/Meta/MetaFactory.cpp index 1731b412..fe4b1ca0 100644 --- a/metadata-generator/src/Meta/MetaFactory.cpp +++ b/metadata-generator/src/Meta/MetaFactory.cpp @@ -325,6 +325,7 @@ void MetaFactory::createFromEnum(const clang::EnumDecl& enumeration, EnumMeta& e if(enumField->getInitVal().getActiveBits() > 63 && !enumField->getInitVal().isSigned()) { llvm::APSInt intVal = enumField->getInitVal(); intVal.setIsSigned(true); + intVal.toString(valueAsString, 10); } else { enumField->getInitVal().toString(valueAsString, 10); } From 60a3987fc2271354130f0c168d873c2dc20fc428 Mon Sep 17 00:00:00 2001 From: Eduardo Speroni Date: Wed, 11 May 2022 12:27:53 -0300 Subject: [PATCH 04/13] chore: rollback to previous implementation of signed conversion --- metadata-generator/src/Meta/MetaFactory.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/metadata-generator/src/Meta/MetaFactory.cpp b/metadata-generator/src/Meta/MetaFactory.cpp index fe4b1ca0..c96d1c14 100644 --- a/metadata-generator/src/Meta/MetaFactory.cpp +++ b/metadata-generator/src/Meta/MetaFactory.cpp @@ -321,14 +321,9 @@ void MetaFactory::createFromEnum(const clang::EnumDecl& enumeration, EnumMeta& e // Convert values having the signed bit set to 1 to signed in order to represent them correctly in JS (-1, -2, etc) // NOTE: Values having bits 53 to 62 different than the sign bit will continue to not be represented exactly // as MAX_SAFE_INTEGER is 2 ^ 53 - 1 + bool asSigned = enumField->getInitVal().isSigned() || enumField->getInitVal().getActiveBits() > 63; llvm::SmallString<100> valueAsString; - if(enumField->getInitVal().getActiveBits() > 63 && !enumField->getInitVal().isSigned()) { - llvm::APSInt intVal = enumField->getInitVal(); - intVal.setIsSigned(true); - intVal.toString(valueAsString, 10); - } else { - enumField->getInitVal().toString(valueAsString, 10); - } + enumField->getInitVal().toString(valueAsString, 10, asSigned); std::string valueStr = valueAsString.c_str(); if (fieldNamePrefixLength > 0) { From 3b2fc94b76ac0d2e62b2daf8929aedbec2e90206 Mon Sep 17 00:00:00 2001 From: Eduardo Speroni Date: Wed, 11 May 2022 13:24:29 -0300 Subject: [PATCH 05/13] chore: refine metadata generator building and docs --- build_metadata_generator.sh | 11 +++---- metadata-generator/CMakeLists.txt | 2 ++ metadata-generator/README.md | 48 +++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 7 deletions(-) create mode 100644 metadata-generator/README.md diff --git a/build_metadata_generator.sh b/build_metadata_generator.sh index 4257750e..dab5d534 100755 --- a/build_metadata_generator.sh +++ b/build_metadata_generator.sh @@ -5,17 +5,14 @@ set -e # try to build in the amount of threads available # change this to 1 if you want single threaded builds -NUMJOBS=$(nproc) +NUMJOBS=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 1) function build { rm -rf build mkdir build - pushd "build" - cmake -DCMAKE_BUILD_TYPE=Release -DMETADATA_BINARY_ARCH=$1 -DCMAKE_OSX_ARCHITECTURES=$1 ../ - make clean - make -j$NUMJOBS - cp ../build-step-metadata-generator.py bin - popd + cmake -B build -DCMAKE_BUILD_TYPE=Release -DMETADATA_BINARY_ARCH=$1 -DCMAKE_OSX_ARCHITECTURES=$1 + cmake --build build --target clean + cmake --build build -j$NUMJOBS mkdir "dist/$1" cp -r "build/bin" "dist/$1" } diff --git a/metadata-generator/CMakeLists.txt b/metadata-generator/CMakeLists.txt index 1aea8e69..45f70c29 100644 --- a/metadata-generator/CMakeLists.txt +++ b/metadata-generator/CMakeLists.txt @@ -41,3 +41,5 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) add_subdirectory(src) +# copy build-step-metadata-generator.py to the bin folder +configure_file(build-step-metadata-generator.py ${CMAKE_CURRENT_BINARY_DIR}/bin/build-step-metadata-generator.py COPYONLY) diff --git a/metadata-generator/README.md b/metadata-generator/README.md new file mode 100644 index 00000000..899608a6 --- /dev/null +++ b/metadata-generator/README.md @@ -0,0 +1,48 @@ +# Objective-C Metadata Generator + +This project generates the metadata for the target iOS application. The build parameters are gathered by the `build-step-metadata-generator.py` and turned into command line parameters for the `objc-metadata-generator`. + +## Building + +```bash +cmake -B build +cmake --build build --target=clean +cmake --build build +# this can be sped up by using -jN where N is the number of cores. +# ex: cmake --build build -j10 +``` + +### Additional cmake flags + +* `-DMETADATA_BINARY_ARCH=arm64`: Generate the metadata for the arm64 architecture. Possible values: `arm64`, `x86_64`. +* `-DCMAKE_OSX_ARCHITECTURES=arm64`: Generate the metadata for the arm64 architecture. Possible values: `arm64`, `x86_64`. +* `-DCMAKE_BUILD_TYPE=Release`: Build the project in release mode. + +Example: + +```bash +METADATA_ARCH="arm64" # or "x86_64" +cmake -B build -DCMAKE_BUILD_TYPE=Release -DMETADATA_BINARY_ARCH=$METADATA_ARCH -DCMAKE_OSX_ARCHITECTURES=$METADATA_ARCH +cmake --build build +``` + +## Debugging the metadata generator + +To debug the metadata generator you first need to generate the xcode project for it: + +```bash +cmake -B cmake-build -G Xcode +``` + +This will create the xcode project in the `cmake-build` directory, which you can open with `open cmake-build/MetadataGenerator.xcodeproj`. + +To build and run the metadata generator you must first change the Scheme to `objc-metadata-generator`, then you must edit this scheme and add the command line parameters for the `Arguments Passed on Launch` section. These parameters can be found on the `build-step-metadata-generator.py` script or in the build logs for an app, in the metadata generator step. If getting this data from another app, ensure that the paths set on the command line are accurate (not relative to the app's directory). + +Example command line arguments: +```bash +# replace NSV8RUNTIMEPATH with the path to the ns-v8ios-runtime path, ex: /Users/you/ns-v8ios-runtime +# replace YOU with your username +-verbose -output-typescript /tmp/tsdeclarations/ -output-bin NSV8RUNTIMEPATH/build/Debug-iphonesimulator/metadata-arm64.bin -output-umbrella NSV8RUNTIMEPATH/build/Debug-iphonesimulator/umbrella-arm64.h -docset-path /Users/YOU/Library/Developer/Shared/Documentation/DocSets/com.apple.adc.documentation.iOS.docset Xclang -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.2.sdk -mios-simulator-version-min=9.0 -std=gnu99 -target arm64-apple-ios15.2-simulator -INSV8RUNTIMEPATH/build/Debug-iphonesimulator/include -INSV8RUNTIMEPATH/NativeScript -INSV8RUNTIMEPATH/TestFixtures -FNSV8RUNTIMEPATH/build/Debug-iphonesimulator -DCOCOAPODS=1 -DDEBUG=1 -I. -fmodules +``` + +For a better way of generating these arguments, just run the TestRunner scheme on the v8ios-runtime project and get the arguments from the log. From 286c5be17e3fa2672a5c43c4df97cfe351a4963d Mon Sep 17 00:00:00 2001 From: Igor Randjelovic Date: Wed, 11 May 2022 19:35:30 +0200 Subject: [PATCH 06/13] chore: cleanup build scripts --- build_metadata_generator.sh | 5 +++-- build_nativescript.sh | 27 ++++++++++++++++----------- build_tklivesync.sh | 15 ++++++++++++--- build_utils.sh | 19 +++++++++++++++++++ download_llvm.sh | 13 ++++++++----- 5 files changed, 58 insertions(+), 21 deletions(-) create mode 100644 build_utils.sh diff --git a/build_metadata_generator.sh b/build_metadata_generator.sh index dab5d534..2a1995cc 100755 --- a/build_metadata_generator.sh +++ b/build_metadata_generator.sh @@ -1,5 +1,6 @@ #!/bin/bash set -e +source "$(dirname "$0")/build_utils.sh" ./download_llvm.sh @@ -20,10 +21,10 @@ function build { pushd "metadata-generator" rm -rf dist mkdir dist -echo "Building metadata generator for x86_64 ..." +checkpoint "Building metadata generator for x86_64 ..." build "x86_64" -echo "Building metadata generator for arm64 ..." +checkpoint "Building metadata generator for arm64 ..." build "arm64" rm -rf build popd \ No newline at end of file diff --git a/build_nativescript.sh b/build_nativescript.sh index cccc9060..f8f8dec4 100755 --- a/build_nativescript.sh +++ b/build_nativescript.sh @@ -1,5 +1,6 @@ #!/bin/bash set -e +source "$(dirname "$0")/build_utils.sh" DEV_TEAM=${DEVELOPMENT_TEAM:-} DIST=$(PWD)/dist @@ -7,10 +8,13 @@ mkdir -p $DIST mkdir -p $DIST/intermediates -echo "Cleanup" -xcodebuild -project v8ios.xcodeproj -target "NativeScript" -configuration Release clean +checkpoint "Cleanup NativeScript" +xcodebuild -project v8ios.xcodeproj \ + -target "NativeScript" \ + -configuration Release clean \ + -quiet -echo "Building for Mac Catalyst" +checkpoint "Building NativeScript for Mac Catalyst" xcodebuild archive -project v8ios.xcodeproj \ -scheme "NativeScript" \ -configuration Release \ @@ -19,7 +23,7 @@ xcodebuild archive -project v8ios.xcodeproj \ SKIP_INSTALL=NO \ -archivePath $DIST/intermediates/NativeScript.maccatalyst.xcarchive -# echo "Building for x86_64 iphone simulator" +# checkpoint "Building for x86_64 iphone simulator" # xcodebuild archive -project v8ios.xcodeproj \ # -scheme "NativeScript" \ # -configuration Release \ @@ -30,7 +34,7 @@ xcodebuild archive -project v8ios.xcodeproj \ # SKIP_INSTALL=NO \ # -archivePath $DIST/NativeScript.x86_64-iphonesimulator.xcarchive -# echo "Building for ARM64 iphone simulator" +# checkpoint "Building for ARM64 iphone simulator" # xcodebuild archive -project v8ios.xcodeproj \ # -scheme "NativeScript" \ # -configuration Release \ @@ -41,25 +45,26 @@ xcodebuild archive -project v8ios.xcodeproj \ # SKIP_INSTALL=NO \ # -archivePath $DIST/NativeScript.arm64-iphonesimulator.xcarchive -echo "Building for iphone simulators (multi-arch)" +checkpoint "Building NativeScript for iphone simulators (multi-arch)" xcodebuild archive -project v8ios.xcodeproj \ -scheme "NativeScript" \ -configuration Release \ + -destination "generic/platform=iOS Simulator" \ -sdk iphonesimulator \ - -arch x86_64 \ - -arch arm64 \ -quiet \ + EXCLUDED_ARCHS="i386" \ DEVELOPMENT_TEAM=$DEV_TEAM \ SKIP_INSTALL=NO \ -archivePath $DIST/intermediates/NativeScript.iphonesimulator.xcarchive -echo "Building for ARM64 device" +checkpoint "Building NativeScript for ARM64 device" xcodebuild archive -project v8ios.xcodeproj \ -scheme "NativeScript" \ -configuration Release \ - -arch arm64 \ + -destination "generic/platform=iOS" \ -sdk iphoneos \ -quiet \ + EXCLUDED_ARCHS="armv7" \ DEVELOPMENT_TEAM=$DEV_TEAM \ SKIP_INSTALL=NO \ -archivePath $DIST/intermediates/NativeScript.iphoneos.xcarchive @@ -79,7 +84,7 @@ xcodebuild archive -project v8ios.xcodeproj \ # -output \ # "$DIST/NativeScript.iphonesimulator.xcarchive/Products/Library/Frameworks/NativeScript.framework/NativeScript" -echo "Creating NativeScript.xcframework" +checkpoint "Creating NativeScript.xcframework" OUTPUT_DIR="$DIST/NativeScript.xcframework" rm -rf $OUTPUT_DIR xcodebuild -create-xcframework \ diff --git a/build_tklivesync.sh b/build_tklivesync.sh index bbcc493b..c9b5ec8a 100755 --- a/build_tklivesync.sh +++ b/build_tklivesync.sh @@ -1,5 +1,6 @@ #!/bin/bash set -e +source "$(dirname "$0")/build_utils.sh" DIST=$(PWD)/dist mkdir -p $DIST @@ -7,9 +8,14 @@ mkdir -p $DIST mkdir -p $DIST/intermediates #cleanup -xcodebuild -project v8ios.xcodeproj -target TKLiveSync -configuration Release clean +checkpoint "Cleanup TKLiveSync" +xcodebuild -project v8ios.xcodeproj \ + -target TKLiveSync \ + -configuration Release clean \ + -quiet #generates library for Mac Catalyst target +checkpoint "Building TKLiveSync for Mac Catalyst" xcodebuild archive -project v8ios.xcodeproj \ -scheme TKLiveSync \ -configuration Release \ @@ -38,20 +44,22 @@ xcodebuild archive -project v8ios.xcodeproj \ # -archivePath $DIST/TKLiveSync.arm64-iphonesimulator.xcarchive # generates library for simulator targets (usually includes arm64, x86_64) +checkpoint "Building TKLiveSync for iphone simulators (multi-arch)" xcodebuild archive -project v8ios.xcodeproj \ -scheme TKLiveSync \ -configuration Release \ + -destination "generic/platform=iOS Simulator" \ -sdk iphonesimulator \ - -arch x86_64 \ - -arch arm64 \ -quiet \ SKIP_INSTALL=NO \ -archivePath $DIST/intermediates/TKLiveSync.iphonesimulator.xcarchive #generates library for device target +checkpoint "Building TKLiveSync for ARM64 device" xcodebuild archive -project v8ios.xcodeproj \ -scheme TKLiveSync \ -configuration Release \ + -destination "generic/platform=iOS" \ -sdk iphoneos \ -quiet \ SKIP_INSTALL=NO \ @@ -77,6 +85,7 @@ rm -rf "${OUTPUT_PATH}" # "$DIST/TKLiveSync.iphonesimulator.xcarchive/Products/Library/Frameworks/TKLiveSync.framework/TKLiveSync" #Creates xcframework +checkpoint "Creating TKLiveSync.xcframework" xcodebuild -create-xcframework \ -framework "$DIST/intermediates/TKLiveSync.maccatalyst.xcarchive/Products/Library/Frameworks/TKLiveSync.framework" \ -debug-symbols "$DIST/intermediates/TKLiveSync.maccatalyst.xcarchive/dSYMs/TKLiveSync.framework.dSYM" \ diff --git a/build_utils.sh b/build_utils.sh new file mode 100644 index 00000000..5b60fcf1 --- /dev/null +++ b/build_utils.sh @@ -0,0 +1,19 @@ +#!/bin/bash +set -e + +# include this in other bash scripts with the following line: +# +# source "$(dirname "$0")/build_utils.sh" +# + +# Prints a timestamp + title for a step/section +function checkpoint { + local delimiter="--------------------------------------------------------------------------------" + + echo "" + echo "" + echo "$delimiter" + echo "--- $(date +'%T') --- $1 " + echo "$delimiter" + echo "" +} \ No newline at end of file diff --git a/download_llvm.sh b/download_llvm.sh index e0e00483..b93fba99 100755 --- a/download_llvm.sh +++ b/download_llvm.sh @@ -1,15 +1,18 @@ #!/bin/bash set -e +source "$(dirname "$0")/build_utils.sh" + +LLVM_VERSION="13.0.1" function download_llvm() { - echo 'Downloading llvm...' + checkpoint "Downloading llvm (version $LLVM_VERSION)..." mkdir -p /tmp/llvm-dl/ - curl -L https://github.com/NativeScript/ios-llvm/releases/download/v13.0.1/llvm-13.0.1.tgz -o /tmp/llvm-dl/llvm-13.0.1.tgz + curl -L https://github.com/NativeScript/ios-llvm/releases/download/v$LLVM_VERSION/llvm-$LLVM_VERSION.tgz -o /tmp/llvm-dl/llvm-$LLVM_VERSION.tgz mkdir -p ./llvm/ - echo 'extracting llvm...' - tar -xzf /tmp/llvm-dl/llvm-13.0.1.tgz -C ./llvm/ + checkpoint 'extracting llvm...' + tar -xzf /tmp/llvm-dl/llvm-$LLVM_VERSION.tgz -C ./llvm/ } -if [ ! -d "./llvm/13.0.1" ]; then +if [ ! -d "./llvm/$LLVM_VERSION" ]; then download_llvm fi From d0ca2550dbd1c0bb2d1d8c6b1076ebd468bfc06b Mon Sep 17 00:00:00 2001 From: Igor Randjelovic Date: Wed, 11 May 2022 19:35:55 +0200 Subject: [PATCH 07/13] chore: update build-step-metadata-generator to python3 --- .../build-step-metadata-generator.py | 30 ++++++++----------- .../internal/nativescript-build.xcconfig | 10 +++---- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/metadata-generator/build-step-metadata-generator.py b/metadata-generator/build-step-metadata-generator.py index 5c561a5c..aede3ddb 100755 --- a/metadata-generator/build-step-metadata-generator.py +++ b/metadata-generator/build-step-metadata-generator.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import os import shlex @@ -39,27 +39,27 @@ def map_and_list(func, iterable): docset_platform = "iOS" default_deployment_target_flag_name = "-mios-simulator-version-min" default_deployment_target_clang_env_name = "IPHONEOS_DEPLOYMENT_TARGET" -if effective_platform_name is "-macosx": +if effective_platform_name == "-macosx": docset_platform = "OSX" default_deployment_target_flag_name = "-mmacosx-version-min" default_deployment_target_clang_env_name = "MACOSX_DEPLOYMENT_TARGET" -elif effective_platform_name is "-watchos": +elif effective_platform_name == "-watchos": docset_platform = "watchOS" default_deployment_target_flag_name = "-mwatchos-version-min" default_deployment_target_clang_env_name = "WATCHOS_DEPLOYMENT_TARGET" -elif effective_platform_name is "-watchsimulator": +elif effective_platform_name == "-watchsimulator": docset_platform = "watchOS" default_deployment_target_flag_name = "-mwatchos-simulator-version-min" default_deployment_target_clang_env_name = "WATCHOS_DEPLOYMENT_TARGET" -elif effective_platform_name is "-appletvos": +elif effective_platform_name == "-appletvos": docset_platform = "tvOS" default_deployment_target_flag_name = "-mappletvos-version-min" default_deployment_target_clang_env_name = "APPLETVOS_DEPLOYMENT_TARGET" -elif effective_platform_name is "-appletvsimulator": +elif effective_platform_name == "-appletvsimulator": docset_platform = "tvOS" default_deployment_target_flag_name = "-mappletvsimulator-version-min" default_deployment_target_clang_env_name = "APPLETVOS_DEPLOYMENT_TARGET" -elif effective_platform_name is "-iphoneos": +elif effective_platform_name == "-iphoneos": default_deployment_target_flag_name = "-miphoneos-version-min" sdk_version = env("SDK_VERSION") or "13.0" @@ -84,16 +84,12 @@ def map_and_list(func, iterable): enable_modules = env_bool("CLANG_ENABLE_MODULES") preprocessor_defs = env_or_empty("GCC_PREPROCESSOR_DEFINITIONS") preprocessor_defs_parsed = map_and_list((lambda s: "-D" + s), shlex.split(preprocessor_defs, '\'')) -typescript_output_folder = env_or_none("TNS_TYPESCRIPT_DECLARATIONS_PATH") - - - - +typescript_output_folder = env_or_none("NS_TYPESCRIPT_DECLARATIONS_PATH") or env_or_none("TNS_TYPESCRIPT_DECLARATIONS_PATH") docset_path = os.path.join(os.path.expanduser("~"), "Library/Developer/Shared/Documentation/DocSets/com.apple.adc.documentation.{}.docset" .format(docset_platform)) -yaml_output_folder = env_or_none("TNS_DEBUG_METADATA_PATH") -strict_includes = env_or_none("TNS_DEBUG_METADATA_STRICT_INCLUDES") +yaml_output_folder = env_or_none("NS_DEBUG_METADATA_PATH") or env_or_none("TNS_DEBUG_METADATA_PATH") +strict_includes = env_or_none("NS_DEBUG_METADATA_STRICT_INCLUDES") or env_or_none("TNS_DEBUG_METADATA_STRICT_INCLUDES") def save_stream_to_file(filename, stream): @@ -137,11 +133,11 @@ def generate_metadata(arch): # clang arguments generator_call.extend(["Xclang", "-isysroot", sdk_root, - "-" + deployment_target_flag_name + "=" + deployment_target, "-std=" + std]) - if env_or_empty("IS_UIKITFORMAC").capitalize() is "YES": - generator_call.extend(["-arch", arch]) + if env_or_empty("IS_UIKITFORMAC").capitalize() == "YES": + generator_call.extend(["-arch", arch, + deployment_target_flag_name + "=" + deployment_target]) else: generator_call.extend(["-target", "{}-{}-{}{}".format(arch, llvm_target_triple_vendor, llvm_target_triple_os_version, llvm_target_triple_suffix)]) diff --git a/project-template/internal/nativescript-build.xcconfig b/project-template/internal/nativescript-build.xcconfig index 7e214f7b..36fe1ec1 100644 --- a/project-template/internal/nativescript-build.xcconfig +++ b/project-template/internal/nativescript-build.xcconfig @@ -1,6 +1,6 @@ // * NativeScript build related flags // * Add [sdk=*] after each one to avoid conflict with CocoaPods flags -OTHER_LDFLAGS[sdk=*] = $(inherited) -ObjC -sectcreate __DATA __TNSMetadata "$(CONFIGURATION_BUILD_DIR)/metadata-$(CURRENT_ARCH).bin" -framework NativeScript -framework TKLiveSync -F"$(SRCROOT)/internal" -licucore -lz -lc++ -framework Foundation -framework UIKit -framework CoreGraphics -framework MobileCoreServices -framework Security +OTHER_LDFLAGS[sdk=*] = $(inherited) -ObjC -sectcreate __DATA __TNSMetadata "$(CONFIGURATION_BUILD_DIR)/metadata-$(CURRENT_ARCH).bin" -framework NativeScript -framework TKLiveSync -F"$(SRCROOT)/internal" -licucore -lz -lc++ -framework Foundation -framework UIKit -framework CoreGraphics -framework CoreServices -framework Security // We need to add CONFIGURATION_BUILD_DIR here so that we can explicitly quote-escape any paths in it, because the implicitly added path by Xcode is not always escaped FRAMEWORK_SEARCH_PATHS[sdk=*] = $(inherited) "$(SRCROOT)/internal/" "$(CONFIGURATION_BUILD_DIR)" @@ -10,13 +10,13 @@ LD = $SRCROOT/internal/nsld.sh LDPLUSPLUS = $SRCROOT/internal/nsld.sh // * Uncomment this setting to generate TypeScript declarations for the iOS SDK and all linked libraries. -// * They will be generated on each build, so you can find them after running "tns build ios" in "YOUR_APP/platforms/ios". -// TNS_TYPESCRIPT_DECLARATIONS_PATH = $(SRCROOT)/typescript-declarations +// * They will be generated on each build, so you can find them after running "ns build ios" in "YOUR_APP/platforms/ios". +// NS_TYPESCRIPT_DECLARATIONS_PATH = $(SRCROOT)/typescript-declarations // * Uncomment this setting to generate human readable metadata for the iOS SDK and all linked libraries. // * You can learn more about NativeScript metadata in the docs: http://docs.nativescript.org/runtimes/ios/Overview#metadata -// * It will be generated on each build, so you can find it after running "tns build ios" in "YOUR_APP/platforms/ios". -// TNS_DEBUG_METADATA_PATH = $(SRCROOT)/debug-metadata +// * It will be generated on each build, so you can find it after running "ns build ios" in "YOUR_APP/platforms/ios". +// NS_DEBUG_METADATA_PATH = $(SRCROOT)/debug-metadata // Xcode 12 EXCLUDED_ARCHS_x86_64 = arm64 arm64e From 9c5c8a90ccbe1856e5739bb8ba6570ca26ea972c Mon Sep 17 00:00:00 2001 From: Igor Randjelovic Date: Wed, 11 May 2022 19:49:51 +0200 Subject: [PATCH 08/13] chore: update project-template defaults --- .../project.pbxproj | 71 +++++++++++++------ .../xcschemes/__PROJECT_NAME__.xcscheme | 10 +-- 2 files changed, 54 insertions(+), 27 deletions(-) diff --git a/project-template/__PROJECT_NAME__.xcodeproj/project.pbxproj b/project-template/__PROJECT_NAME__.xcodeproj/project.pbxproj index d74f40c0..61c0f763 100644 --- a/project-template/__PROJECT_NAME__.xcodeproj/project.pbxproj +++ b/project-template/__PROJECT_NAME__.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -33,14 +33,14 @@ 391174B521F1D7BF00BA2583 /* nativescript-build.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = "nativescript-build.xcconfig"; path = "internal/nativescript-build.xcconfig"; sourceTree = SOURCE_ROOT; }; 391174B721F1D99900BA2583 /* plugins-release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "plugins-release.xcconfig"; sourceTree = SOURCE_ROOT; }; 391174B821F1D99900BA2583 /* plugins-debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "plugins-debug.xcconfig"; sourceTree = SOURCE_ROOT; }; + 39940D8122C4E84C0050DDE1 /* __PROJECT_NAME__.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = __PROJECT_NAME__.entitlements; sourceTree = ""; }; + 39940D8C22C4EAAA0050DDE1 /* NativeScript.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = NativeScript.xcframework; path = internal/NativeScript.xcframework; sourceTree = ""; }; + 39940E1B22C5DFFF0050DDE1 /* TKLiveSync.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = TKLiveSync.xcframework; path = internal/TKLiveSync.xcframework; sourceTree = ""; }; 42C751E2232B769100186695 /* nativescript-pre-link */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "nativescript-pre-link"; path = "internal/nativescript-pre-link"; sourceTree = SOURCE_ROOT; }; 42C751E3232B769100186695 /* strip-dynamic-framework-architectures.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "strip-dynamic-framework-architectures.sh"; path = "internal/strip-dynamic-framework-architectures.sh"; sourceTree = SOURCE_ROOT; }; 42C751E4232B769100186695 /* nsld.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = nsld.sh; path = internal/nsld.sh; sourceTree = SOURCE_ROOT; }; 42C751E5232B769100186695 /* nativescript-post-build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "nativescript-post-build"; path = "internal/nativescript-post-build"; sourceTree = SOURCE_ROOT; }; 42C751E6232B769100186695 /* nativescript-pre-build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "nativescript-pre-build"; path = "internal/nativescript-pre-build"; sourceTree = SOURCE_ROOT; }; - 39940D8122C4E84C0050DDE1 /* __PROJECT_NAME__.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = __PROJECT_NAME__.entitlements; sourceTree = ""; }; - 39940D8C22C4EAAA0050DDE1 /* NativeScript.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = NativeScript.xcframework; path = internal/NativeScript.xcframework; sourceTree = ""; }; - 39940E1B22C5DFFF0050DDE1 /* TKLiveSync.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = TKLiveSync.xcframework; path = internal/TKLiveSync.xcframework; sourceTree = ""; }; 858B832E18CA111C00AB12DE /* __PROJECT_NAME__.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = __PROJECT_NAME__.app; sourceTree = BUILT_PRODUCTS_DIR; }; 858B833918CA111C00AB12DE /* __PROJECT_NAME__-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "__PROJECT_NAME__-Info.plist"; sourceTree = ""; }; 858B833B18CA111C00AB12DE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -65,6 +65,15 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 39940D8E22C4EBCC0050DDE1 /* Sources */ = { + isa = PBXGroup; + children = ( + CD62955C1BB2678900AE3A93 /* main.m */, + 858B833F18CA111C00AB12DE /* __PROJECT_NAME__-Prefix.pch */, + ); + name = Sources; + sourceTree = ""; + }; 42C751E1232B767700186695 /* Build Scripts */ = { isa = PBXGroup; children = ( @@ -77,15 +86,6 @@ name = "Build Scripts"; sourceTree = ""; }; - 39940D8E22C4EBCC0050DDE1 /* Sources */ = { - isa = PBXGroup; - children = ( - CD62955C1BB2678900AE3A93 /* main.m */, - 858B833F18CA111C00AB12DE /* __PROJECT_NAME__-Prefix.pch */, - ); - name = Sources; - sourceTree = ""; - }; 858B832518CA111C00AB12DE = { isa = PBXGroup; children = ( @@ -179,9 +179,9 @@ 858B832618CA111C00AB12DE /* Project object */ = { isa = PBXProject; attributes = { - CLASSPREFIX = TNS; - LastUpgradeCheck = 0500; - ORGANIZATIONNAME = Telerik; + CLASSPREFIX = NSC; + LastUpgradeCheck = 1330; + ORGANIZATIONNAME = NativeScript; TargetAttributes = { 858B83EF18CA22B800AB12DE = { ProvisioningStyle = Automatic; @@ -190,11 +190,11 @@ }; buildConfigurationList = 858B832918CA111C00AB12DE /* Build configuration list for PBXProject "__PROJECT_NAME__" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( - English, en, + Base, ); mainGroup = 858B832518CA111C00AB12DE; productRefGroup = 858B832F18CA111C00AB12DE /* Products */; @@ -294,23 +294,39 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD)"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DERIVE_UIKITFORMAC_PRODUCT_BUNDLE_IDENTIFIER = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -319,7 +335,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; STRIP_SWIFT_SYMBOLS = NO; @@ -335,30 +351,45 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD)"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; DERIVE_UIKITFORMAC_PRODUCT_BUNDLE_IDENTIFIER = YES; ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; SDKROOT = iphoneos; STRIP_SWIFT_SYMBOLS = NO; SUPPORTS_UIKITFORMAC = YES; diff --git a/project-template/__PROJECT_NAME__.xcodeproj/xcshareddata/xcschemes/__PROJECT_NAME__.xcscheme b/project-template/__PROJECT_NAME__.xcodeproj/xcshareddata/xcschemes/__PROJECT_NAME__.xcscheme index 61b69af7..b51c69cc 100644 --- a/project-template/__PROJECT_NAME__.xcodeproj/xcshareddata/xcschemes/__PROJECT_NAME__.xcscheme +++ b/project-template/__PROJECT_NAME__.xcodeproj/xcshareddata/xcschemes/__PROJECT_NAME__.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - Date: Wed, 11 May 2022 20:06:41 +0200 Subject: [PATCH 09/13] chore: bump metadata-generator deployment target --- metadata-generator/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata-generator/CMakeLists.txt b/metadata-generator/CMakeLists.txt index 45f70c29..d17d7964 100644 --- a/metadata-generator/CMakeLists.txt +++ b/metadata-generator/CMakeLists.txt @@ -13,7 +13,7 @@ if (NOT LIBXML2_FOUND) endif () get_filename_component(LLVM_ROOT "../../llvm/13.0.1" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}") -set(CMAKE_OSX_DEPLOYMENT_TARGET 10.12) +set(CMAKE_OSX_DEPLOYMENT_TARGET 12.0) set(LLVM_SYSTEM_LIBS "-lz -lcurses -lm -lxml2") set(LLVM_PREPROCESSOR_FLAGS "-I${LLVM_ROOT}/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS") From 5cbe8d405d81b4dc1536a4a2dc7f1416e167cd09 Mon Sep 17 00:00:00 2001 From: Igor Randjelovic Date: Wed, 11 May 2022 20:11:51 +0200 Subject: [PATCH 10/13] chore(release): 8.2.4-alpha.2 --- NativeScript/NativeScript-Prefix.pch | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/NativeScript/NativeScript-Prefix.pch b/NativeScript/NativeScript-Prefix.pch index 7e7f0186..f8ae648a 100644 --- a/NativeScript/NativeScript-Prefix.pch +++ b/NativeScript/NativeScript-Prefix.pch @@ -1,7 +1,7 @@ #ifndef NativeScript_Prefix_pch #define NativeScript_Prefix_pch -#define NATIVESCRIPT_VERSION "8.2.4-alpha.1" +#define NATIVESCRIPT_VERSION "8.2.4-alpha.2" #ifdef DEBUG #define SIZEOF_OFF_T 8 diff --git a/package.json b/package.json index 626f27b7..e744a72e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@nativescript/ios", "description": "NativeScript Runtime for iOS", - "version": "8.2.4-alpha.1", + "version": "8.2.4-alpha.2", "keywords": [ "NativeScript", "iOS", From fabfcdb0606ce8e2180417ab3710daa813eed8ba Mon Sep 17 00:00:00 2001 From: Eduardo Speroni Date: Thu, 2 Jun 2022 16:41:24 -0300 Subject: [PATCH 11/13] fix: discard stderr on swift demangler --- metadata-generator/src/Meta/MetaFactory.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/metadata-generator/src/Meta/MetaFactory.cpp b/metadata-generator/src/Meta/MetaFactory.cpp index c96d1c14..a6d1aea8 100644 --- a/metadata-generator/src/Meta/MetaFactory.cpp +++ b/metadata-generator/src/Meta/MetaFactory.cpp @@ -497,7 +497,8 @@ std::string demangleSwiftName(std::string name) { // Otherwise, `swift demange` starts bufferring its stdout when it discovers that its not // in an interactive terminal. using namespace redi; - static const std::string cmd = "script -q /dev/null xcrun swift demangle"; + // script always pipes stderr to stdout, so ensure to discard stderr through sh + static const std::string cmd = "script -q /dev/null sh -c 'xcrun swift demangle 2>/dev/null'"; static pstream ps(cmd, pstreams::pstdin|pstreams::pstdout|pstreams::pstderr); // Send the name to child process From c0d1af92f58b6853889eb6a2b78ce1ac3c727fc2 Mon Sep 17 00:00:00 2001 From: Igor Randjelovic Date: Thu, 2 Jun 2022 22:47:24 +0200 Subject: [PATCH 12/13] chore(release): 8.2.4-alpha.3 --- NativeScript/NativeScript-Prefix.pch | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/NativeScript/NativeScript-Prefix.pch b/NativeScript/NativeScript-Prefix.pch index f8ae648a..e23fce02 100644 --- a/NativeScript/NativeScript-Prefix.pch +++ b/NativeScript/NativeScript-Prefix.pch @@ -1,7 +1,7 @@ #ifndef NativeScript_Prefix_pch #define NativeScript_Prefix_pch -#define NATIVESCRIPT_VERSION "8.2.4-alpha.2" +#define NATIVESCRIPT_VERSION "8.2.4-alpha.3" #ifdef DEBUG #define SIZEOF_OFF_T 8 diff --git a/package.json b/package.json index e744a72e..a7674018 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@nativescript/ios", "description": "NativeScript Runtime for iOS", - "version": "8.2.4-alpha.2", + "version": "8.2.4-alpha.3", "keywords": [ "NativeScript", "iOS", From c783a0999ab032466095288c182a4e734471d1bd Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Thu, 9 Jun 2022 19:11:21 -0500 Subject: [PATCH 13/13] chore: 8.3.0-preview.0 --- NativeScript/NativeScript-Prefix.pch | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/NativeScript/NativeScript-Prefix.pch b/NativeScript/NativeScript-Prefix.pch index e23fce02..040745b3 100644 --- a/NativeScript/NativeScript-Prefix.pch +++ b/NativeScript/NativeScript-Prefix.pch @@ -1,7 +1,7 @@ #ifndef NativeScript_Prefix_pch #define NativeScript_Prefix_pch -#define NATIVESCRIPT_VERSION "8.2.4-alpha.3" +#define NATIVESCRIPT_VERSION "8.3.0-alpha.0" #ifdef DEBUG #define SIZEOF_OFF_T 8 diff --git a/package.json b/package.json index a7674018..90270b98 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@nativescript/ios", "description": "NativeScript Runtime for iOS", - "version": "8.2.4-alpha.3", + "version": "8.3.0-preview.0", "keywords": [ "NativeScript", "iOS",