Я пытаюсь создать плагин iOS для Godot Game Engine. Теперь мой плагин требует интеграции с FirebaseAuth, поэтому я создал подфайл и добавил эти зависимости. Вот полный исходный код
Это мой файл SConstruct
#!/usr/bin/env python
import os
import sys
import subprocess
if sys.version_info < (3,):
def decode_utf8(x):
return x
else:
import codecs
def decode_utf8(x):
return codecs.utf_8_decode(x)[0]
# Most of the settings are taken from https://github.com/BastiaanOlij/gdnative_cpp_example
opts = Variables([], ARGUMENTS)
# Gets the standard flags CC, CCX, etc.
env = DefaultEnvironment()
# Define our options
opts.Add(EnumVariable('target', "Compilation target", 'debug', ['debug', 'release', "release_debug"]))
opts.Add(EnumVariable('arch', "Compilation Architecture", '', ['', 'arm64', 'armv7', 'x86_64']))
opts.Add(BoolVariable('simulator', "Compilation platform", 'no'))
opts.Add(BoolVariable('use_llvm', "Use the LLVM / Clang compiler", 'no'))
opts.Add(PathVariable('target_path', 'The path where the lib is installed.', 'bin/'))
opts.Add(EnumVariable('plugin', 'Plugin to build', '', ['', 'arithematic']))
opts.Add(EnumVariable('version', 'Godot version to target', '', ['', '3.x', '4.0']))
# Updates the environment with the option variables.
opts.Update(env)
# Process some arguments
if env['use_llvm']:
env['CC'] = 'clang'
env['CXX'] = 'clang++'
if env['arch'] == '':
print("No valid arch selected.")
quit();
if env['plugin'] == '':
print("No valid plugin selected.")
quit();
if env['version'] == '':
print("No valid Godot version selected.")
quit();
# For the reference:
# - CCFLAGS are compilation flags shared between C and C++
# - CFLAGS are for C-specific compilation flags
# - CXXFLAGS are for C++-specific compilation flags
# - CPPFLAGS are for pre-processor flags
# - CPPDEFINES are for pre-processor defines
# - LINKFLAGS are for linking flags
# Enable Obj-C modules
env.Append(CCFLAGS=["-fmodules", "-fcxx-modules"])
if env['simulator']:
sdk_name = 'iphonesimulator'
env.Append(CCFLAGS=['-mios-simulator-version-min=10.0'])
env.Append(LINKFLAGS=["-mios-simulator-version-min=10.0"])
else:
sdk_name = 'iphoneos'
env.Append(CCFLAGS=['-miphoneos-version-min=10.0'])
env.Append(LINKFLAGS=["-miphoneos-version-min=10.0"])
try:
sdk_path = decode_utf8(subprocess.check_output(['xcrun', '--sdk', sdk_name, '--show-sdk-path']).strip())
except (subprocess.CalledProcessError, OSError):
raise ValueError("Failed to find SDK path while running xcrun --sdk {} --show-sdk-path.".format(sdk_name))
env.Append(CCFLAGS=[
'-fobjc-arc',
'-fmessage-length=0', '-fno-strict-aliasing', '-fdiagnostics-print-source-range-info',
'-fdiagnostics-show-category=id', '-fdiagnostics-parseable-fixits', '-fpascal-strings',
'-fblocks', '-fvisibility=hidden', '-MMD', '-MT', 'dependencies', '-fno-exceptions',
'-Wno-ambiguous-macro',
'-Wall', '-Werror=return-type',
# '-Wextra',
])
env.Append(CCFLAGS=['-arch', env['arch'], "-isysroot", "$IOS_SDK_PATH", "-stdlib=libc++", '-isysroot', sdk_path])
env.Append(CCFLAGS=['-DPTRCALL_ENABLED'])
env.Prepend(CXXFLAGS=[
'-DNEED_LONG_INT', '-DLIBYUV_DISABLE_NEON',
'-DIOS_ENABLED', '-DUNIX_ENABLED', '-DCOREAUDIO_ENABLED'
])
env.Append(LINKFLAGS=["-arch", env['arch'], '-isysroot', sdk_path, '-F' + sdk_path])
if env['arch'] == 'armv7':
env.Prepend(CXXFLAGS=['-fno-aligned-allocation'])
if env['version'] == '3.x':
env.Append(CCFLAGS=["$IPHONESDK"])
env.Prepend(CXXFLAGS=['-DIPHONE_ENABLED'])
env.Prepend(CXXFLAGS=['-DVERSION_3_X'])
env.Prepend(CFLAGS=['-std=gnu11'])
env.Prepend(CXXFLAGS=['-DGLES_ENABLED', '-std=gnu++14'])
if env['target'] == 'debug':
env.Prepend(CXXFLAGS=[
'-gdwarf-2', '-O0',
'-DDEBUG_MEMORY_ALLOC', '-DDISABLE_FORCED_INLINE',
'-D_DEBUG', '-DDEBUG=1', '-DDEBUG_ENABLED',
'-DPTRCALL_ENABLED',
])
elif env['target'] == 'release_debug':
env.Prepend(CXXFLAGS=['-O2', '-ftree-vectorize',
'-DNDEBUG', '-DNS_BLOCK_ASSERTIONS=1', '-DDEBUG_ENABLED',
'-DPTRCALL_ENABLED',
])
if env['arch'] != 'armv7':
env.Prepend(CXXFLAGS=['-fomit-frame-pointer'])
else:
env.Prepend(CXXFLAGS=[
'-O2', '-ftree-vectorize',
'-DNDEBUG', '-DNS_BLOCK_ASSERTIONS=1',
'-DPTRCALL_ENABLED',
])
if env['arch'] != 'armv7':
env.Prepend(CXXFLAGS=['-fomit-frame-pointer'])
elif env['version'] == '4.0':
env.Append(CCFLAGS=["$IOS_SDK_PATH"])
env.Prepend(CXXFLAGS=['-DIOS_ENABLED'])
env.Prepend(CXXFLAGS=['-DVERSION_4_0'])
env.Prepend(CFLAGS=['-std=gnu11'])
env.Prepend(CXXFLAGS=['-DVULKAN_ENABLED', '-std=gnu++17'])
if env['target'] == 'debug':
env.Prepend(CXXFLAGS=[
'-gdwarf-2', '-O0',
'-DDEBUG_MEMORY_ALLOC', '-DDISABLE_FORCED_INLINE',
'-D_DEBUG', '-DDEBUG=1', '-DDEBUG_ENABLED',
])
elif env['target'] == 'release_debug':
env.Prepend(CXXFLAGS=[
'-O2', '-ftree-vectorize',
'-DNDEBUG', '-DNS_BLOCK_ASSERTIONS=1', '-DDEBUG_ENABLED',
])
if env['arch'] != 'armv7':
env.Prepend(CXXFLAGS=['-fomit-frame-pointer'])
else:
env.Prepend(CXXFLAGS=[
'-O2', '-ftree-vectorize',
'-DNDEBUG', '-DNS_BLOCK_ASSERTIONS=1',
])
if env['arch'] != 'armv7':
env.Prepend(CXXFLAGS=['-fomit-frame-pointer'])
else:
print("No valid version to set flags for.")
quit();
# Adding header files
if env['version'] == '3.x':
env.Append(CPPPATH=[
'.',
'godot',
'godot/platform/iphone',
])
else:
env.Append(CPPPATH=[
'.',
'godot',
'godot/platform/ios',
])
sources = Glob('arithematic/*.cpp')
sources.append(Glob('arithematic/*.mm'))
sources.append(Glob('arithematic/*.m'))
library_platform = env["arch"] + "-" + ("simulator" if env["simulator"] else "iphone")
library_name = env['plugin'] + "." + library_platform + "." + env["target"] + ".a"
library = env.StaticLibrary(target=env['target_path'] + library_name, source=sources)
Если я запустил scons target=release_debug Arch=arm64 плагин=arithematic version=4.0, я получаю сообщение об ошибке
In file included from arithematic/arithematic.mm:16:
arithematic/arithematic.h:19:9:{19:9-19:38}: fatal error: 'FirebaseCore/FirebaseCore.h' file not found [1]
#import
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
scons: *** [arithematic/arithematic.o] Error 1
scons: building terminated because of errors.
Default(library)
# Generates help for the -h scons option.
Help(opts.GenerateHelpText(env))
затем я добавил
sources.append(Glob('Pods/FirebaseCore/FirebaseCore/Sources/*.m'))
sources.append(Glob('Pods/FirebaseAuth/FirebaseAuth/Sources/*.m'))
и снова запустил команду, но теперь получаю
Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m:17:9:{17:9-17:59}: fatal error: 'FirebaseCore/Sources/FIRAnalyticsConfiguration.h' file not found [1]
#import "FirebaseCore/Sources/FIRAnalyticsConfiguration.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
scons: *** [Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.o] Error 1
scons: building terminated because of errors.
Есть ли способ включить всю папку Pods, поскольку в каталогах есть несколько подкаталогов
Я тоже попробовал
def collect_sources(directory, extensions):
sources = []
for root, _, files in os.walk(directory):
for file in files:
if file.endswith(extensions):
sources.append(os.path.join(root, file))
return sources
pod_sources = collect_sources('Pods', ('.m', '.mm', '.cpp', '.h'))
sources.extend(pod_sources)
но выдает ошибку
Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m:17:9:{17:9-17:59}: fatal error: 'FirebaseCore/Sources/FIRAnalyticsConfiguration.h' file not found [1]
#import "FirebaseCore/Sources/FIRAnalyticsConfiguration.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
scons: *** [Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.o] Error 1
scons: building terminated because of errors.
РЕДАКТИРОВАТЬ:
Компилировать командную строку:
Command: gcc -o Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.o -c -std=gnu11 -fmodules -fcxx-modules -miphoneos-version-min=10.0 -fobjc-arc -fmessage-length=0 -fno-strict-aliasing -fdiagnostics-print-source-range-info -fdiagnostics-show-category=id -fdiagnostics-parseable-fixits -fpascal-strings -fblocks -fvisibility=hidden -MMD -MT dependencies -fno-exceptions -Wno-ambiguous-macro -Wall -Werror=return-type -arch arm64 -isysroot -stdlib=libc++ -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS17.5.sdk -DPTRCALL_ENABLED -I. -Igodot -Igodot/platform/ios Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m
Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m:17:9:{17:9-17:59}: fatal error: 'FirebaseCore/Sources/FIRAnalyticsConfiguration.h' file not found [1]
Подробнее здесь: https://stackoverflow.com/questions/785 ... sing-scons
Как скомпилировать зависимость iOS Cocoapods с помощью Scons? ⇐ IOS
Программируем под IOS
-
Anonymous
1717302487
Anonymous
Я пытаюсь создать плагин iOS для Godot Game Engine. Теперь мой плагин требует интеграции с FirebaseAuth, поэтому я создал подфайл и добавил эти зависимости. Вот полный исходный код
Это мой файл SConstruct
#!/usr/bin/env python
import os
import sys
import subprocess
if sys.version_info < (3,):
def decode_utf8(x):
return x
else:
import codecs
def decode_utf8(x):
return codecs.utf_8_decode(x)[0]
# Most of the settings are taken from https://github.com/BastiaanOlij/gdnative_cpp_example
opts = Variables([], ARGUMENTS)
# Gets the standard flags CC, CCX, etc.
env = DefaultEnvironment()
# Define our options
opts.Add(EnumVariable('target', "Compilation target", 'debug', ['debug', 'release', "release_debug"]))
opts.Add(EnumVariable('arch', "Compilation Architecture", '', ['', 'arm64', 'armv7', 'x86_64']))
opts.Add(BoolVariable('simulator', "Compilation platform", 'no'))
opts.Add(BoolVariable('use_llvm', "Use the LLVM / Clang compiler", 'no'))
opts.Add(PathVariable('target_path', 'The path where the lib is installed.', 'bin/'))
opts.Add(EnumVariable('plugin', 'Plugin to build', '', ['', 'arithematic']))
opts.Add(EnumVariable('version', 'Godot version to target', '', ['', '3.x', '4.0']))
# Updates the environment with the option variables.
opts.Update(env)
# Process some arguments
if env['use_llvm']:
env['CC'] = 'clang'
env['CXX'] = 'clang++'
if env['arch'] == '':
print("No valid arch selected.")
quit();
if env['plugin'] == '':
print("No valid plugin selected.")
quit();
if env['version'] == '':
print("No valid Godot version selected.")
quit();
# For the reference:
# - CCFLAGS are compilation flags shared between C and C++
# - CFLAGS are for C-specific compilation flags
# - CXXFLAGS are for C++-specific compilation flags
# - CPPFLAGS are for pre-processor flags
# - CPPDEFINES are for pre-processor defines
# - LINKFLAGS are for linking flags
# Enable Obj-C modules
env.Append(CCFLAGS=["-fmodules", "-fcxx-modules"])
if env['simulator']:
sdk_name = 'iphonesimulator'
env.Append(CCFLAGS=['-mios-simulator-version-min=10.0'])
env.Append(LINKFLAGS=["-mios-simulator-version-min=10.0"])
else:
sdk_name = 'iphoneos'
env.Append(CCFLAGS=['-miphoneos-version-min=10.0'])
env.Append(LINKFLAGS=["-miphoneos-version-min=10.0"])
try:
sdk_path = decode_utf8(subprocess.check_output(['xcrun', '--sdk', sdk_name, '--show-sdk-path']).strip())
except (subprocess.CalledProcessError, OSError):
raise ValueError("Failed to find SDK path while running xcrun --sdk {} --show-sdk-path.".format(sdk_name))
env.Append(CCFLAGS=[
'-fobjc-arc',
'-fmessage-length=0', '-fno-strict-aliasing', '-fdiagnostics-print-source-range-info',
'-fdiagnostics-show-category=id', '-fdiagnostics-parseable-fixits', '-fpascal-strings',
'-fblocks', '-fvisibility=hidden', '-MMD', '-MT', 'dependencies', '-fno-exceptions',
'-Wno-ambiguous-macro',
'-Wall', '-Werror=return-type',
# '-Wextra',
])
env.Append(CCFLAGS=['-arch', env['arch'], "-isysroot", "$IOS_SDK_PATH", "-stdlib=libc++", '-isysroot', sdk_path])
env.Append(CCFLAGS=['-DPTRCALL_ENABLED'])
env.Prepend(CXXFLAGS=[
'-DNEED_LONG_INT', '-DLIBYUV_DISABLE_NEON',
'-DIOS_ENABLED', '-DUNIX_ENABLED', '-DCOREAUDIO_ENABLED'
])
env.Append(LINKFLAGS=["-arch", env['arch'], '-isysroot', sdk_path, '-F' + sdk_path])
if env['arch'] == 'armv7':
env.Prepend(CXXFLAGS=['-fno-aligned-allocation'])
if env['version'] == '3.x':
env.Append(CCFLAGS=["$IPHONESDK"])
env.Prepend(CXXFLAGS=['-DIPHONE_ENABLED'])
env.Prepend(CXXFLAGS=['-DVERSION_3_X'])
env.Prepend(CFLAGS=['-std=gnu11'])
env.Prepend(CXXFLAGS=['-DGLES_ENABLED', '-std=gnu++14'])
if env['target'] == 'debug':
env.Prepend(CXXFLAGS=[
'-gdwarf-2', '-O0',
'-DDEBUG_MEMORY_ALLOC', '-DDISABLE_FORCED_INLINE',
'-D_DEBUG', '-DDEBUG=1', '-DDEBUG_ENABLED',
'-DPTRCALL_ENABLED',
])
elif env['target'] == 'release_debug':
env.Prepend(CXXFLAGS=['-O2', '-ftree-vectorize',
'-DNDEBUG', '-DNS_BLOCK_ASSERTIONS=1', '-DDEBUG_ENABLED',
'-DPTRCALL_ENABLED',
])
if env['arch'] != 'armv7':
env.Prepend(CXXFLAGS=['-fomit-frame-pointer'])
else:
env.Prepend(CXXFLAGS=[
'-O2', '-ftree-vectorize',
'-DNDEBUG', '-DNS_BLOCK_ASSERTIONS=1',
'-DPTRCALL_ENABLED',
])
if env['arch'] != 'armv7':
env.Prepend(CXXFLAGS=['-fomit-frame-pointer'])
elif env['version'] == '4.0':
env.Append(CCFLAGS=["$IOS_SDK_PATH"])
env.Prepend(CXXFLAGS=['-DIOS_ENABLED'])
env.Prepend(CXXFLAGS=['-DVERSION_4_0'])
env.Prepend(CFLAGS=['-std=gnu11'])
env.Prepend(CXXFLAGS=['-DVULKAN_ENABLED', '-std=gnu++17'])
if env['target'] == 'debug':
env.Prepend(CXXFLAGS=[
'-gdwarf-2', '-O0',
'-DDEBUG_MEMORY_ALLOC', '-DDISABLE_FORCED_INLINE',
'-D_DEBUG', '-DDEBUG=1', '-DDEBUG_ENABLED',
])
elif env['target'] == 'release_debug':
env.Prepend(CXXFLAGS=[
'-O2', '-ftree-vectorize',
'-DNDEBUG', '-DNS_BLOCK_ASSERTIONS=1', '-DDEBUG_ENABLED',
])
if env['arch'] != 'armv7':
env.Prepend(CXXFLAGS=['-fomit-frame-pointer'])
else:
env.Prepend(CXXFLAGS=[
'-O2', '-ftree-vectorize',
'-DNDEBUG', '-DNS_BLOCK_ASSERTIONS=1',
])
if env['arch'] != 'armv7':
env.Prepend(CXXFLAGS=['-fomit-frame-pointer'])
else:
print("No valid version to set flags for.")
quit();
# Adding header files
if env['version'] == '3.x':
env.Append(CPPPATH=[
'.',
'godot',
'godot/platform/iphone',
])
else:
env.Append(CPPPATH=[
'.',
'godot',
'godot/platform/ios',
])
sources = Glob('arithematic/*.cpp')
sources.append(Glob('arithematic/*.mm'))
sources.append(Glob('arithematic/*.m'))
library_platform = env["arch"] + "-" + ("simulator" if env["simulator"] else "iphone")
library_name = env['plugin'] + "." + library_platform + "." + env["target"] + ".a"
library = env.StaticLibrary(target=env['target_path'] + library_name, source=sources)
Если я запустил scons target=release_debug Arch=arm64 плагин=arithematic version=4.0, я получаю сообщение об ошибке
In file included from arithematic/arithematic.mm:16:
arithematic/arithematic.h:19:9:{19:9-19:38}: fatal error: 'FirebaseCore/FirebaseCore.h' file not found [1]
#import
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
scons: *** [arithematic/arithematic.o] Error 1
scons: building terminated because of errors.
Default(library)
# Generates help for the -h scons option.
Help(opts.GenerateHelpText(env))
затем я добавил
sources.append(Glob('Pods/FirebaseCore/FirebaseCore/Sources/*.m'))
sources.append(Glob('Pods/FirebaseAuth/FirebaseAuth/Sources/*.m'))
и снова запустил команду, но теперь получаю
Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m:17:9:{17:9-17:59}: fatal error: 'FirebaseCore/Sources/FIRAnalyticsConfiguration.h' file not found [1]
#import "FirebaseCore/Sources/FIRAnalyticsConfiguration.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
scons: *** [Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.o] Error 1
scons: building terminated because of errors.
Есть ли способ включить всю папку Pods, поскольку в каталогах есть несколько подкаталогов
Я тоже попробовал
def collect_sources(directory, extensions):
sources = []
for root, _, files in os.walk(directory):
for file in files:
if file.endswith(extensions):
sources.append(os.path.join(root, file))
return sources
pod_sources = collect_sources('Pods', ('.m', '.mm', '.cpp', '.h'))
sources.extend(pod_sources)
но выдает ошибку
Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m:17:9:{17:9-17:59}: fatal error: 'FirebaseCore/Sources/FIRAnalyticsConfiguration.h' file not found [1]
#import "FirebaseCore/Sources/FIRAnalyticsConfiguration.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
scons: *** [Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.o] Error 1
scons: building terminated because of errors.
[b]РЕДАКТИРОВАТЬ:[/b]
Компилировать командную строку:
Command: gcc -o Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.o -c -std=gnu11 -fmodules -fcxx-modules -miphoneos-version-min=10.0 -fobjc-arc -fmessage-length=0 -fno-strict-aliasing -fdiagnostics-print-source-range-info -fdiagnostics-show-category=id -fdiagnostics-parseable-fixits -fpascal-strings -fblocks -fvisibility=hidden -MMD -MT dependencies -fno-exceptions -Wno-ambiguous-macro -Wall -Werror=return-type -arch arm64 -isysroot -stdlib=libc++ -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS17.5.sdk -DPTRCALL_ENABLED -I. -Igodot -Igodot/platform/ios Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m
Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m:17:9:{17:9-17:59}: fatal error: 'FirebaseCore/Sources/FIRAnalyticsConfiguration.h' file not found [1]
Подробнее здесь: [url]https://stackoverflow.com/questions/78553805/how-to-compile-ios-cocoapods-dependency-using-scons[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия