diff --git a/recipes/ohpipeline/all/conandata.yml b/recipes/ohpipeline/cmake/conandata.yml similarity index 100% rename from recipes/ohpipeline/all/conandata.yml rename to recipes/ohpipeline/cmake/conandata.yml diff --git a/recipes/ohpipeline/all/conanfile.py b/recipes/ohpipeline/cmake/conanfile.py similarity index 100% rename from recipes/ohpipeline/all/conanfile.py rename to recipes/ohpipeline/cmake/conanfile.py diff --git a/recipes/ohpipeline/all/patches/001-missing-include.patch b/recipes/ohpipeline/cmake/patches/001-missing-include.patch similarity index 100% rename from recipes/ohpipeline/all/patches/001-missing-include.patch rename to recipes/ohpipeline/cmake/patches/001-missing-include.patch diff --git a/recipes/ohpipeline/all/test_package/CMakeLists.txt b/recipes/ohpipeline/cmake/test_package/CMakeLists.txt similarity index 100% rename from recipes/ohpipeline/all/test_package/CMakeLists.txt rename to recipes/ohpipeline/cmake/test_package/CMakeLists.txt diff --git a/recipes/ohpipeline/all/test_package/conanfile.py b/recipes/ohpipeline/cmake/test_package/conanfile.py similarity index 100% rename from recipes/ohpipeline/all/test_package/conanfile.py rename to recipes/ohpipeline/cmake/test_package/conanfile.py diff --git a/recipes/ohpipeline/all/test_package/test_package.cpp b/recipes/ohpipeline/cmake/test_package/test_package.cpp similarity index 100% rename from recipes/ohpipeline/all/test_package/test_package.cpp rename to recipes/ohpipeline/cmake/test_package/test_package.cpp diff --git a/recipes/ohpipeline/config.yml b/recipes/ohpipeline/config.yml index 4948dbd895802..aee1740661ccb 100644 --- a/recipes/ohpipeline/config.yml +++ b/recipes/ohpipeline/config.yml @@ -1,3 +1,5 @@ versions: "1.139.1000": - folder: all + folder: cmake + "1.155.1133": + folder: waf diff --git a/recipes/ohpipeline/waf/conandata.yml b/recipes/ohpipeline/waf/conandata.yml new file mode 100644 index 0000000000000..dee95e7b522db --- /dev/null +++ b/recipes/ohpipeline/waf/conandata.yml @@ -0,0 +1,22 @@ +sources: + "1.155.1133": + source: + url: "https://github.com/openhome/ohPipeline/archive/refs/tags/ohMediaPlayer_1.155.1133.tar.gz" + sha256: "507bdf70fc6b9bf8e4605546a5c7ae99abbe537cce4b74b3e091764323939fae" + helpers: + url: "https://github.com/openhome/ohWafHelpers/archive/refs/tags/ohWafHelpers_0.2.127.tar.gz" + sha256: "4d2365622eb6ccf883a14c1c02687d7f0560e0bbac31cbf48382b3e1c8ae6b60" +patches: + "1.155.1133": + - patch_file: "patches/0001-disable-raat.patch" + patch_type: "build" + patch_description: "Disable proprietary SDK" + - patch_file: "patches/0002-remove-msvs.patch" + patch_type: "build" + patch_description: "Remove msvs" + - patch_file: "patches/0003-fix-ohwafhelpers.patch" + patch_type: "build" + patch_description: "Fix ohWafHelpers" + - patch_file: "patches/0004-link-to-atomic.patch" + patch_type: "build" + patch_description: "Link to atomic" diff --git a/recipes/ohpipeline/waf/conanfile.py b/recipes/ohpipeline/waf/conanfile.py new file mode 100755 index 0000000000000..080bddf92ed68 --- /dev/null +++ b/recipes/ohpipeline/waf/conanfile.py @@ -0,0 +1,129 @@ +from conan import ConanFile +from conan.tools.build import check_min_cppstd +from conan.tools.env import VirtualBuildEnv +from conan.tools.files import chdir, copy, get, export_conandata_patches, apply_conandata_patches, rm, unzip +from conan.tools.layout import basic_layout +from conan.tools.scm import Version +from conan.errors import ConanInvalidConfiguration +import os + +required_conan_version = ">=1.53.0" + + +class OhPipelineConan(ConanFile): + name = "ohpipeline" + description = "OpenHome audio pipeline" + license = "MIT" + url = "https://github.com/conan-io/conan-center-index" + homepage = "https://github.com/openhome/ohPipeline" + topics = ("openhome", "ohnet", "ohpipeline", "upnp") + + package_type = "static-library" + settings = "os", "arch", "compiler", "build_type" + options = { + "fPIC": [True, False], + } + default_options = { + "fPIC": True, + } + + @property + def _min_cppstd(self): + return 11 + + @property + def _compilers_minimum_version(self): + return { + "gcc": "7", + } + + def config_options(self): + if self.settings.os == "Windows": + del self.options.fPIC + + def export_sources(self): + export_conandata_patches(self) + + def build_requirements(self): + self.tool_requires("waf/[>=2.0.19]") + self.tool_requires("cpython/[>=3.0.0]") + + def requirements(self): + self.requires("ohnet/[>=1.36.5182]", transitive_headers=True, transitive_libs=True) + self.requires("openssl/[>=1.1 <4]") + self.requires("libmad/[>=0.15.1b]") + self.requires("alac/[>=cci.20121212]") + self.requires("libfdk_aac/[>=2.0.3]") + self.requires("faac/[>=1.30]") + self.requires("flac/[>=1.4.3]") + self.requires("ogg/[>=1.3.5]") + self.requires("vorbis/[>=1.3.7]") + + def layout(self): + basic_layout(self, src_folder="src") + + def validate(self): + if self.settings.compiler.cppstd: + check_min_cppstd(self, self._min_cppstd) + minimum_version = self._compilers_minimum_version.get(str(self.settings.compiler), False) + if minimum_version and Version(self.settings.compiler.version) < minimum_version: + raise ConanInvalidConfiguration( + f"{self.ref} requires C++{self._min_cppstd}, which your compiler does not support." + ) + + def generate(self): + venv = VirtualBuildEnv(self) + venv.generate() + + def source(self): + get(self, **self.conan_data["sources"][self.version]["source"], strip_root=True) + get(self, **self.conan_data["sources"][self.version]["helpers"], destination='dependencies/AnyPlatform/ohWafHelpers', strip_root=True) + + def build(self): + apply_conandata_patches(self) + with chdir(self, self.source_folder): + self.run(f"LDFLAGS=-L{self.dependencies['zlib'].cpp_info.libdirs[0]} waf configure --ohnet-include-dir={self.dependencies['ohnet'].cpp_info.includedirs[0]} --ohnet-lib-dir={self.dependencies['ohnet'].cpp_info.libdirs[0]} --ohnet={self.dependencies['ohnet'].cpp_info.libdirs[0]}/.. --ssl={self.dependencies['openssl'].cpp_info.libdirs[0]}/.. --with-default-fpm") + self.run("waf build") + + def package(self): + copy(self, "License.txt", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses")) + with chdir(self, self.source_folder): + self.run("waf bundle") + unzip(self, "build/ohMediaPlayer.tar.gz", self.package_folder, strip_root=True) + rm(self, "dependencies.json", self.package_folder) + + def package_info(self): + self.cpp_info.libs = [ + 'ohPipeline', + 'ohMediaPlayer', + 'ohMediaPlayerTestUtils', + 'SourcePlaylist', + 'SourceRadio', + 'SourceSongcast', + 'SourceRaop', + 'SourceScd', + 'SourceUpnpAv', + 'CodecAacFdk', + 'CodecAacFdkAdts', + 'CodecAacFdkBase', + 'CodecAacFdkMp4', + 'CodecAifc', + 'CodecAiff', + 'CodecAiffBase', + 'CodecAlacAppleBase', + 'CodecAlacApple', + 'CodecDsdDsf', + 'CodecDsdDff', + 'CodecDsdRaw', + 'CodecFlac', + 'CodecMp3', + 'CodecVorbis', + 'CodecWav', + 'CodecPcm', + 'libOgg', + 'WebAppFramework', + 'ConfigUi', + 'ConfigUiTestUtils', + 'Odp', + 'Podcast' + ] diff --git a/recipes/ohpipeline/waf/patches/0001-disable-raat.patch b/recipes/ohpipeline/waf/patches/0001-disable-raat.patch new file mode 100644 index 0000000000000..4b2a6253d0b71 --- /dev/null +++ b/recipes/ohpipeline/waf/patches/0001-disable-raat.patch @@ -0,0 +1,63 @@ +diff --git a/wscript b/wscript +index 616b3329..4d3e7f82 100755 +--- a/wscript ++++ b/wscript +@@ -7,35 +7,34 @@ import shutil + + from waflib.Node import Node + + from wafmodules.filetasks import ( + find_resource_or_fail) + + import os.path, sys + sys.path[0:0] = [os.path.join('dependencies', 'AnyPlatform', 'ohWafHelpers')] + + from filetasks import gather_files, build_tree, copy_task, find_dir_or_fail, create_copy_task +-from utilfuncs import invoke_test, guess_dest_platform, configure_toolchain, guess_ohnet_location, guess_location, guess_ssl_location, guess_raat_location, guess_libplatform_location, guess_libosa_location, is_core_platform ++from utilfuncs import invoke_test, guess_dest_platform, configure_toolchain, guess_ohnet_location, guess_location, guess_ssl_location, guess_libplatform_location, guess_libosa_location, is_core_platform + + def options(opt): + opt.load('msvs') + opt.load('msvc') + opt.load('compiler_cxx') + opt.load('compiler_c') + opt.add_option('--ohnet-include-dir', action='store', default=None) + opt.add_option('--ohnet-lib-dir', action='store', default=None) + opt.add_option('--testharness-dir', action='store', default=os.path.join('dependencies', 'AnyPlatform', 'testharness')) + opt.add_option('--ohnet', action='store', default=None) + opt.add_option('--ssl', action='store', default=None) + opt.add_option('--libplatform', action='store', default=None) + opt.add_option('--libosa', action='store', default=None) +- opt.add_option('--raat', action='store', default=None) + opt.add_option('--debug', action='store_const', dest="debugmode", const="Debug", default="Release") + opt.add_option('--release', action='store_const', dest="debugmode", const="Release", default="Release") + opt.add_option('--dest-platform', action='store', default=None) + opt.add_option('--cross', action='store', default=None) + opt.add_option('--with-default-fpm', action='store_true', default=False) + + def configure(conf): + + def set_env(conf, varname, value): + conf.msg( +@@ -53,21 +52,20 @@ def configure(conf): + except KeyError: + conf.fatal('Specify --dest-platform') + + if is_core_platform(conf): + guess_libosa_location(conf) + guess_libplatform_location(conf) + + configure_toolchain(conf) + guess_ohnet_location(conf) + guess_ssl_location(conf) +- guess_raat_location(conf) + + conf.env.dest_platform = conf.options.dest_platform + conf.env.testharness_dir = os.path.abspath(conf.options.testharness_dir) + + if conf.options.dest_platform.startswith('Windows'): + conf.env.LIB_OHNET=['ws2_32', 'iphlpapi', 'dbghelp', 'psapi', 'userenv'] + conf.env.STLIB_OHNET=['TestFramework', 'ohNetCore'] + + if is_core_platform(conf): + conf.env.prepend_value('STLIB_OHNET', ['target', 'platform']) diff --git a/recipes/ohpipeline/waf/patches/0002-remove-msvs.patch b/recipes/ohpipeline/waf/patches/0002-remove-msvs.patch new file mode 100644 index 0000000000000..3136fe16b5d17 --- /dev/null +++ b/recipes/ohpipeline/waf/patches/0002-remove-msvs.patch @@ -0,0 +1,26 @@ +diff --git a/wscript b/wscript +index ee7adbba..38ef5b01 100755 +--- a/wscript ++++ b/wscript +@@ -10,21 +10,20 @@ from waflib.Node import Node + from wafmodules.filetasks import ( + find_resource_or_fail) + + import os.path, sys + sys.path[0:0] = [os.path.join('dependencies', 'AnyPlatform', 'ohWafHelpers')] + + from filetasks import gather_files, build_tree, copy_task, find_dir_or_fail, create_copy_task + from utilfuncs import invoke_test, guess_dest_platform, configure_toolchain, guess_ohnet_location, guess_location, guess_ssl_location, guess_libplatform_location, guess_libosa_location, is_core_platform + + def options(opt): +- opt.load('msvs') + opt.load('msvc') + opt.load('compiler_cxx') + opt.load('compiler_c') + opt.add_option('--ohnet-include-dir', action='store', default=None) + opt.add_option('--ohnet-lib-dir', action='store', default=None) + opt.add_option('--testharness-dir', action='store', default=os.path.join('dependencies', 'AnyPlatform', 'testharness')) + opt.add_option('--ohnet', action='store', default=None) + opt.add_option('--ssl', action='store', default=None) + opt.add_option('--libplatform', action='store', default=None) + opt.add_option('--libosa', action='store', default=None) diff --git a/recipes/ohpipeline/waf/patches/0003-fix-ohwafhelpers.patch b/recipes/ohpipeline/waf/patches/0003-fix-ohwafhelpers.patch new file mode 100644 index 0000000000000..ce35c455fc695 --- /dev/null +++ b/recipes/ohpipeline/waf/patches/0003-fix-ohwafhelpers.patch @@ -0,0 +1,202 @@ +diff --git a/dependencies/AnyPlatform/ohWafHelpers/utilfuncs.py b/dependencies/AnyPlatform/ohWafHelpers/utilfuncs.py +index c7e860f..37ea6f7 100644 +--- a/dependencies/AnyPlatform/ohWafHelpers/utilfuncs.py ++++ b/dependencies/AnyPlatform/ohWafHelpers/utilfuncs.py +@@ -55,25 +55,29 @@ def invoke_test(tsk): + + def guess_dest_platform(): + # literally copied (for consistency) from default_platform.py in ohdevtools + import platform + if platform.system() == 'Windows': + return 'Windows-x86' + if platform.system() == 'Linux' and platform.architecture()[0] == '32bit' and platform.machine()[0:3] == 'ppc': + return 'Linux-ppc32' + if platform.system() == 'Linux' and platform.architecture()[0] == '32bit': + return 'Linux-x86' +- if platform.system() == 'Linux' and platform.architecture()[0] == '64bit': ++ if platform.system() == 'Linux' and platform.architecture()[0] == '64bit' and platform.machine() in ['AMD64', 'x86_64']: + return 'Linux-x64' +- if platform.system() == 'Darwin': ++ if platform.system() == 'Linux' and platform.architecture()[0] == '64bit' and platform.machine() in ['arm64', 'aarch64']: ++ return 'Linux-arm64' ++ if platform.system() == 'Darwin' and platform.architecture()[0] == '64bit' and platform.machine() in ['AMD64', 'x86_64']: + # 32bit Mac support no longer supported on Apple platforms + return 'Mac-x64' ++ if platform.system() == 'Darwin' and platform.architecture()[0] == '64bit' and platform.machine() in ['arm64', 'aarch64']: ++ return 'Mac-arm64' + return None + + def is_core_platform(conf): + return conf.options.dest_platform in ['Core-ppc32', 'Core-armv5', 'Core-armv6'] + + def configure_toolchain(conf): + import os, sys + import platform as platform_arch + platform_info = get_platform_info(conf.options.dest_platform) + if platform_info['build_platform'] != sys.platform: +@@ -100,31 +104,31 @@ def configure_toolchain(conf): + conf.env.append_value('CXXFLAGS', [ + '-pipe', '-D_GNU_SOURCE', '-D_REENTRANT', '-DDEFINE_TRACE', + '-DDEFINE_'+platform_info['endian']+'_ENDIAN', '-fvisibility=hidden',]) + if conf.options.debugmode == 'Debug': + conf.env.append_value('CXXFLAGS',['-O0', '-DDEFINE_DEBUG']) + else: + conf.env.append_value('CXXFLAGS',['-O2']) + conf.env.append_value('CFLAGS', conf.env['CXXFLAGS']) + # C++11 support is only relevant to C++ code. + # ...but does seem to have some effect on the level of C supported by C++ files. +- if conf.options.dest_platform in ['Mac-x64']: ++ if conf.options.dest_platform in ['Mac-x64', 'Mac-arm64']: + conf.env.append_value('CFLAGS', ['-std=gnu89']) + conf.env.append_value('CXXFLAGS', ['-std=c++11', '-D_POSIX_C_SOURCE=199309', '-stdlib=libc++']) + else: + conf.env.append_value('CXXFLAGS', ['-std=c++0x']) + conf.env.append_value('LINKFLAGS', '-Wl,--fatal-warnings') + # Enable exceptions for all C code + conf.env.append_value('CFLAGS', ['-fexceptions']) + # Don't enable warnings for C code as its typically third party and written to different standards + conf.env.append_value('CXXFLAGS', [ +- '-fexceptions', '-Wall', '-Werror']) ++ '-fexceptions', '-Wall']) + + + if hasattr(conf, 'use_staging_tree'): + sysroot = os.path.abspath('./dependencies/' + conf.options.dest_platform + '/staging/') + conf.env.append_value('CFLAGS', '--sysroot='+sysroot) + conf.env.append_value('CXXFLAGS', '--sysroot='+sysroot) + conf.env.append_value('LINKFLAGS', '--sysroot='+sysroot) + + if conf.options.dest_platform == 'Linux-mipsel': + conf.env.append_value('LINKFLAGS', '-EL') +@@ -148,20 +152,27 @@ def configure_toolchain(conf): + else: + conf.env.append_value('CXXFLAGS',['-Wno-psabi', '-fPIC']) + conf.env.append_value('CFLAGS',['-fPIC']) + elif conf.options.dest_platform in ['Mac-x64']: + conf.env.append_value('CXXFLAGS', ['-arch', 'x86_64']) + conf.env.append_value('CFLAGS', ['-arch', 'x86_64']) + conf.env.append_value('LINKFLAGS', ['-arch', 'x86_64']) + conf.env.append_value('CXXFLAGS',['-fPIC', '-mmacosx-version-min=10.7', '-DPLATFORM_MACOSX_GNU']) + conf.env.append_value('CFLAGS',['-fPIC']) + conf.env.append_value('LINKFLAGS',['-stdlib=libc++', '-framework', 'CoreFoundation', '-framework', 'SystemConfiguration', '-framework', 'IOKit']) ++ elif conf.options.dest_platform in ['Mac-arm64']: ++ conf.env.append_value('CXXFLAGS', ['-arch', 'arm64']) ++ conf.env.append_value('CFLAGS', ['-arch', 'arm64']) ++ conf.env.append_value('LINKFLAGS', ['-arch', 'arm64']) ++ conf.env.append_value('CXXFLAGS',['-fPIC', '-mmacosx-version-min=10.7', '-DPLATFORM_MACOSX_GNU']) ++ conf.env.append_value('CFLAGS',['-fPIC']) ++ conf.env.append_value('LINKFLAGS',['-stdlib=libc++', '-framework', 'CoreFoundation', '-framework', 'SystemConfiguration', '-framework', 'IOKit']) + # Options for Core-ppc32 and Core-armv5 / Core-armv6 + if conf.options.dest_platform in ['Core-ppc32', 'Core-armv5', 'Core-armv6']: + + platform = conf.options.dest_platform + + if platform == 'Core-ppc32': + default_cross = '/opt/rtems-4.11-rsb/bin/powerpc-rtems4.11-' + cpu = '405' + if platform == 'Core-armv5': + default_cross = '/opt/rtems-4.11-rsb/bin/arm-rtems4.11-' +@@ -295,40 +306,25 @@ def guess_ohnet_location(conf): + set_env_verbose(conf, 'STLIBPATH_OHNET', match_path( + conf, + [ + '{options.ohnet_lib_dir}', + '{options.ohnet}/Build/Obj/{platform_info[ohnet_plat_dir]}/{options.debugmode}', + 'dependencies/{options.dest_platform}/ohNet-{options.dest_platform}-{debugmode_lc}-dev/lib', + 'dependencies/{options.dest_platform}/ohNet-{options.dest_platform}-{debugmode_tc}/lib', + ], + message='Specify --ohnet-lib-dir or --ohnet') + ) +- set_env_verbose(conf, 'TEXT_TRANSFORM_PATH', match_path( +- conf, +- [ +- '{options.ohnet}/Build/Tools', +- 'dependencies/{options.dest_platform}/ohNet-{options.dest_platform}-{debugmode_tc}/lib/t4', +- ], +- message='Specify --ohnet') +- ) +- set_env_verbose(conf, 'T4_TEMPLATE_PATH', match_path( +- conf, +- [ +- '{options.ohnet}/OpenHome/Net/T4/Templates', +- 'dependencies/{options.dest_platform}/ohNet-{options.dest_platform}-{debugmode_tc}/lib/t4', +- ], +- message='Specify --ohnet') +- ) + set_env_verbose(conf, 'SERVICE_GEN_DIR', match_path( + conf, + [ + '{options.ohnet}/OpenHome/Net/ServiceGen', ++ '{options.ohnet}/lib/ServiceGen', + 'dependencies/{options.dest_platform}/ohNet-{options.dest_platform}-{debugmode_tc}/lib/ServiceGen', + ], + message='Specify --ohnet') + ) + + def guess_location(conf, repo): + set_env_verbose(conf, 'INCLUDES_' + repo.upper(), match_path( + conf, + [ + '{options.' + repo.lower() + '_include_dir}', +@@ -377,21 +373,21 @@ def guess_ssl_location(conf): + ) + set_env_verbose(conf, 'STLIBPATH_SSL', match_path( + conf, + [ + '{options.ssl}/build/{options.dest_platform}/lib', + '{options.ssl}/lib', + 'dependencies/{options.dest_platform}/libressl/lib', + ], + message='Specify --ssl') + ) +- conf.env.STLIB_SSL = ['ssl', 'crypto'] ++ conf.env.STLIB_SSL = ['ssl', 'crypto', 'z'] + if conf.options.dest_platform in ['Windows-x86', 'Windows-x64']: + conf.env.LIB_SSL = ['advapi32'] + elif conf.options.dest_platform.startswith('Linux-'): + conf.env.LIB_SSL = ['dl'] + + def get_ros_tool_path(ctx): + import os + from filetasks import find_resource_or_fail + + host_platform = guess_dest_platform() +@@ -437,26 +433,28 @@ def create_ros_from_dir_tree(bld, src_path, ros_name): + key = key_path + '/' + f + src_file = os.path.join(rel_path, f) + line = ' {1}\n'.format(key, src_file) + fh.write(line) + fh.write('') + fh.close() + create_ros(bld, ros_src, ros_name + '.ros') + + def get_platform_info(dest_platform): + platforms = { +- 'Linux-x86': dict(endian='LITTLE', build_platform='linux2', ohnet_plat_dir='Posix'), +- 'Linux-x64': dict(endian='LITTLE', build_platform='linux2', ohnet_plat_dir='Posix'), +- 'Linux-ARM': dict(endian='LITTLE', build_platform='linux2', ohnet_plat_dir='Posix'), +- 'Linux-armhf': dict(endian='LITTLE', build_platform='linux2', ohnet_plat_dir='Posix'), +- 'Linux-rpi': dict(endian='LITTLE', build_platform='linux2', ohnet_plat_dir='Posix'), +- 'Linux-mipsel': dict(endian='LITTLE',build_platform='linux2', ohnet_plat_dir='Posix'), +- 'Linux-ppc32': dict(endian='BIG', build_platform='linux2', ohnet_plat_dir='Posix'), ++ 'Linux-x86': dict(endian='LITTLE', build_platform='linux', ohnet_plat_dir='Posix'), ++ 'Linux-x64': dict(endian='LITTLE', build_platform='linux', ohnet_plat_dir='Posix'), ++ 'Linux-ARM': dict(endian='LITTLE', build_platform='linux', ohnet_plat_dir='Posix'), ++ 'Linux-arm64': dict(endian='LITTLE', build_platform='linux', ohnet_plat_dir='Posix'), ++ 'Linux-armhf': dict(endian='LITTLE', build_platform='linux', ohnet_plat_dir='Posix'), ++ 'Linux-rpi': dict(endian='LITTLE', build_platform='linux', ohnet_plat_dir='Posix'), ++ 'Linux-mipsel': dict(endian='LITTLE',build_platform='linux', ohnet_plat_dir='Posix'), ++ 'Linux-ppc32': dict(endian='BIG', build_platform='linux', ohnet_plat_dir='Posix'), + 'Windows-x86': dict(endian='LITTLE', build_platform='win32', ohnet_plat_dir='Windows'), + 'Windows-x64': dict(endian='LITTLE', build_platform='win32', ohnet_plat_dir='Windows'), +- 'Core-ppc32': dict(endian='BIG', build_platform='linux2', ohnet_plat_dir='Core-ppc32'), +- 'Core-armv5': dict(endian='LITTLE', build_platform='linux2', ohnet_plat_dir='Core-armv5'), +- 'Core-armv6': dict(endian='LITTLE', build_platform='linux2', ohnet_plat_dir='Core-armv6'), ++ 'Core-ppc32': dict(endian='BIG', build_platform='linux', ohnet_plat_dir='Core-ppc32'), ++ 'Core-armv5': dict(endian='LITTLE', build_platform='linux', ohnet_plat_dir='Core-armv5'), ++ 'Core-armv6': dict(endian='LITTLE', build_platform='linux', ohnet_plat_dir='Core-armv6'), + 'Mac-x64': dict(endian='LITTLE', build_platform='darwin', ohnet_plat_dir='Mac-x64'), ++ 'Mac-arm64': dict(endian='LITTLE', build_platform='darwin', ohnet_plat_dir='Mac-arm64'), + 'iOs-ARM': dict(endian='LITTLE', build_platform='darwin', ohnet_plat_dir='Mac/arm'), + } + return platforms[dest_platform] diff --git a/recipes/ohpipeline/waf/patches/0004-link-to-atomic.patch b/recipes/ohpipeline/waf/patches/0004-link-to-atomic.patch new file mode 100644 index 0000000000000..69ef810000dec --- /dev/null +++ b/recipes/ohpipeline/waf/patches/0004-link-to-atomic.patch @@ -0,0 +1,27 @@ +diff --git a/wscript b/wscript +index d83690c0..3d9977cb 100755 +--- a/wscript ++++ b/wscript +@@ -58,20 +58,22 @@ def configure(conf): + configure_toolchain(conf) + guess_ohnet_location(conf) + guess_ssl_location(conf) + + conf.env.dest_platform = conf.options.dest_platform + conf.env.testharness_dir = os.path.abspath(conf.options.testharness_dir) + + if conf.options.dest_platform.startswith('Windows'): + conf.env.LIB_OHNET=['ws2_32', 'iphlpapi', 'dbghelp', 'psapi', 'userenv'] + conf.env.STLIB_OHNET=['TestFramework', 'ohNetCore'] ++ if conf.options.dest_platform.startswith('Linux') and 'clang' in conf.env.CC[0]: ++ conf.env.append_value('STLIB_OHNET', ['atomic']) + + if is_core_platform(conf): + conf.env.prepend_value('STLIB_OHNET', ['target', 'platform']) + conf.env.append_value('DEFINES', ['DEFINE_TRACE', 'NETWORK_NTOHL_LOCAL', 'NOTERMIOS']) # Tell FLAC to use local ntohl implementation + + conf.env.INCLUDES = [ + '.', + conf.path.find_node('.').abspath() + ] + diff --git a/recipes/ohpipeline/waf/test_package/CMakeLists.txt b/recipes/ohpipeline/waf/test_package/CMakeLists.txt new file mode 100644 index 0000000000000..bd868ecdf5a63 --- /dev/null +++ b/recipes/ohpipeline/waf/test_package/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.15) + +project(test_package CXX) + +find_package(ohpipeline REQUIRED CONFIG) + +add_executable(${PROJECT_NAME} test_package.cpp) +target_link_libraries(${PROJECT_NAME} PUBLIC ohpipeline::ohpipeline) diff --git a/recipes/ohpipeline/waf/test_package/conanfile.py b/recipes/ohpipeline/waf/test_package/conanfile.py new file mode 100644 index 0000000000000..a9fb96656f203 --- /dev/null +++ b/recipes/ohpipeline/waf/test_package/conanfile.py @@ -0,0 +1,26 @@ +from conan import ConanFile +from conan.tools.build import can_run +from conan.tools.cmake import cmake_layout, CMake +import os + + +class TestPackageConan(ConanFile): + settings = "os", "arch", "compiler", "build_type" + generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv" + test_type = "explicit" + + def requirements(self): + self.requires(self.tested_reference_str) + + def layout(self): + cmake_layout(self) + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def test(self): + if can_run(self): + bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package") + self.run(bin_path, env="conanrun") diff --git a/recipes/ohpipeline/waf/test_package/test_package.cpp b/recipes/ohpipeline/waf/test_package/test_package.cpp new file mode 100644 index 0000000000000..dce35f7c92826 --- /dev/null +++ b/recipes/ohpipeline/waf/test_package/test_package.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +using namespace OpenHome; +using namespace OpenHome::Av; + +class RamStore : public IStaticDataSource +{ +public: + RamStore(const Brx& aImageFileName); + virtual ~RamStore(); +private: // from IStaticDataSource + void LoadStaticData(IStoreLoaderStatic& aLoader) override; +private: + Brhz iImageFileName; +}; + +RamStore::RamStore(const Brx& aImageFileName) + : iImageFileName(aImageFileName) +{ +} + +RamStore::~RamStore() {} + +void RamStore::LoadStaticData(IStoreLoaderStatic& aLoader) +{ + aLoader.AddStaticItem(StaticDataKey::kBufManufacturerName, "OpenHome"); + aLoader.AddStaticItem(StaticDataKey::kBufManufacturerInfo, "insert oh info here..."); + aLoader.AddStaticItem(StaticDataKey::kBufManufacturerUrl, "http://www.openhome.org"); + aLoader.AddStaticItem(StaticDataKey::kBufManufacturerImageUrl, "http://wiki.openhome.org/mediawiki/skins/openhome/images/logo.png"); + aLoader.AddStaticItem(StaticDataKey::kBufModelName, "OpenHome Media Player (test)"); + aLoader.AddStaticItem(StaticDataKey::kBufModelInfo, "Test implementation of ohMediaPlayer"); + aLoader.AddStaticItem(StaticDataKey::kBufModelUrl, "http://wiki.openhome.org/wiki/OhMedia"); + aLoader.AddStaticItem(StaticDataKey::kBufModelImageUrl, iImageFileName.CString()); +} + +int main() +{ + RamStore* ramStore = new RamStore(Brx::Empty()); + + delete ramStore; +}