diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..8ad19d5 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.pythonPath": "/usr/local/bin/python" +} \ No newline at end of file diff --git a/README.md b/README.md index f79bd04..a415784 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,10 @@ FFMpeg prebuilt binaries with proprietary codecs and build instructions for window, linux and macos. -### Downloads (v0.37.4) -- Linux: [32bit](https://github.com/iteufel/nwjs-ffmpeg-prebuilt/releases/download/0.37.4/0.37.4-linux-ia32.zip) / [64bit](https://github.com/iteufel/nwjs-ffmpeg-prebuilt/releases/download/0.37.4/0.37.4-linux-x64.zip) -- Windows: [32bit](https://github.com/iteufel/nwjs-ffmpeg-prebuilt/releases/download/0.37.4/0.37.4-win-ia32.zip) / [64bit](https://github.com/iteufel/nwjs-ffmpeg-prebuilt/releases/download/0.37.4/0.37.4-win-x64.zip) -- Mac: [64bit](https://github.com/iteufel/nwjs-ffmpeg-prebuilt/releases/download/0.37.4/0.37.4-osx-x64.zip) +### Downloads (v0.38.1) +- Linux: [32bit](https://github.com/iteufel/nwjs-ffmpeg-prebuilt/releases/download/0.38.1/0.38.1-linux-ia32.zip) / [64bit](https://github.com/iteufel/nwjs-ffmpeg-prebuilt/releases/download/0.38.1/0.38.1-linux-x64.zip) +- Windows: [32bit](https://github.com/iteufel/nwjs-ffmpeg-prebuilt/releases/download/0.38.1/0.38.1-win-ia32.zip) / [64bit](https://github.com/iteufel/nwjs-ffmpeg-prebuilt/releases/download/0.38.1/0.38.1-win-x64.zip) +- Mac: [64bit](https://github.com/iteufel/nwjs-ffmpeg-prebuilt/releases/download/0.38.1/0.38.1-osx-x64.zip) ### Build diff --git a/build/.cipd/pkgs/0/_current b/build/.cipd/pkgs/0/_current new file mode 120000 index 0000000..43f3578 --- /dev/null +++ b/build/.cipd/pkgs/0/_current @@ -0,0 +1 @@ +kykIT8m8YzNqqLP2xFGBTuo0ZtU9lom3BwiStWleyWkC \ No newline at end of file diff --git a/build/.cipd/pkgs/0/description.json b/build/.cipd/pkgs/0/description.json new file mode 100644 index 0000000..7abd1f2 --- /dev/null +++ b/build/.cipd/pkgs/0/description.json @@ -0,0 +1,4 @@ +{ + "subdir": "src/tools/clang/dsymutil", + "package_name": "chromium/llvm-build-tools/dsymutil" +} \ No newline at end of file diff --git a/build/.cipd/pkgs/0/kykIT8m8YzNqqLP2xFGBTuo0ZtU9lom3BwiStWleyWkC/.cipdpkg/manifest.json b/build/.cipd/pkgs/0/kykIT8m8YzNqqLP2xFGBTuo0ZtU9lom3BwiStWleyWkC/.cipdpkg/manifest.json new file mode 100644 index 0000000..f589135 --- /dev/null +++ b/build/.cipd/pkgs/0/kykIT8m8YzNqqLP2xFGBTuo0ZtU9lom3BwiStWleyWkC/.cipdpkg/manifest.json @@ -0,0 +1,12 @@ +{ + "format_version": "1.1", + "package_name": "chromium/llvm-build-tools/dsymutil", + "install_mode": "copy", + "files": [ + { + "name": "bin/dsymutil", + "size": 38635964, + "executable": true + } + ] +} \ No newline at end of file diff --git a/build_ffmpeg.py b/build_ffmpeg.py index 577ec2d..9e095e0 100644 --- a/build_ffmpeg.py +++ b/build_ffmpeg.py @@ -42,8 +42,6 @@ COLOR_WARNING_WINDOWS = 14 def main(): - proprietary_codecs = False - nw_version = get_latest_stable_nwjs() host_platform = get_host_platform() target_arch = get_host_architecture() @@ -73,12 +71,8 @@ def main(): if target_arch == 'ia32': target_cpu = 'x86' - proprietary_codecs = args.proprietary_codecs - if proprietary_codecs and platform.system() == 'Windows' and not 'CYGWIN_NT' in platform.system(): - print_warning('Script needs to be executed under CygWin to build FFmpeg \nwith proprietary codecs on Windows environments, \nread https://github.com/nwjs/nwjs-ffmpeg-prebuilt/blob/master/guides/build_windows.md\nExiting...') - sys.exit(1) - print_info('Building ffmpeg for {0} on {1} for {2}, proprietary_codecs = {3}'.format(nw_version, host_platform, target_cpu, proprietary_codecs)) + print_info('Building ffmpeg for {0} on {1} for {2}'.format(nw_version, host_platform, target_cpu)) isVersion = bool(re.match(r"\d+\.\d+\.\d+", nw_version)) @@ -98,13 +92,11 @@ def main(): gclient_sync() - check_build_with_proprietary_codecs(proprietary_codecs, host_platform, target_arch) - patch_linux_sanitizer_ia32(target_cpu) build(target_cpu) - zip_release_output_library(nw_version, platform_release_name, target_arch, proprietary_codecs, get_out_library_path(host_platform), PATH_RELEASES) + zip_release_output_library(nw_version, platform_release_name, target_arch, get_out_library_path(host_platform), PATH_RELEASES) print_ok('DONE!!') @@ -130,9 +122,8 @@ def patch_linux_sanitizer_ia32(target_cpu): def parse_args(): parser = argparse.ArgumentParser(description='ffmpeg builder script.') parser.add_argument('-c', '--clean', help='Clean the workspace, removes downloaded source code', required=False, action='store_true') - parser.add_argument('-nw', '--nw_version', help='Build ffmpeg for the specified Nw.js version', required=False) + parser.add_argument('-nw', '--nw_version', help='Build ffmpeg for the specified Nw.js version or Branche', required=False) parser.add_argument('-ta', '--target_arch', help='Target architecture, ia32, x64', required=False) - parser.add_argument('-pc', '--proprietary_codecs', help='Build ffmpeg with proprietary codecs', required=False, action='store_true') return parser.parse_args() @@ -263,12 +254,6 @@ def reset_chromium_src_to_nw_version(nw_version, isVersion = True): def get_min_deps(deps_str): # deps deps_list = { - 'buildtools': { - 'reg': ur"buildtools_revision':\s*'(.+)'", - 'repo': '/chromium/buildtools.git', - 'path': 'src/buildtools', - 'opts': re.IGNORECASE - }, 'gyp': { 'reg': ur"gyp.git.+@'.+'(.+)'", 'repo': '/external/gyp.git', @@ -310,6 +295,18 @@ def get_min_deps(deps_str): 'repo': '/chromium/deps/xz.git', 'path': 'src/chrome/installer/mac/third_party/xz/xz', 'opts': re.IGNORECASE + }, + 'libcxx': { + 'reg': ur"libcxx_revision.*\"(.+)\"", + 'repo': '/chromium/llvm-project/libcxx.git', + 'path': 'src/buildtools/third_party/libc++/trunk', + 'opts': re.IGNORECASE + }, + 'libcxxabi': { + 'reg': ur"libcxxabi_revision.*\"(.+)\"", + 'repo': '/chromium/llvm-project/libcxxabi.git', + 'path': 'src/buildtools/third_party/libc++abi/trunk', + 'opts': re.IGNORECASE } } min_deps_list = [] @@ -576,81 +573,11 @@ def generate_build_and_deps_files(): f.write(BUILD_gn) -def cygwin_linking_setup(): - if 'CYGWIN_NT' in platform.system(): - if os.path.isfile('/usr/bin/link.exe'): - print_info('Overriding CygWin linker with MSVC linker...') - shutil.move('/usr/bin/link.exe', '/usr/bin/link.exe.1') - - if not os.path.isfile('/usr/local/bin/cygwin-wrapper'): - print_info('Copying Cygwin wrapper...') - shutil.copy(os.getcwd() + '/chromium/scripts/cygwin-wrapper', '/usr/local/bin/cygwin-wrapper') - - -def check_build_with_proprietary_codecs(proprietary_codecs, host_platform, target_arch): - - # going to ffmpeg folder - os.chdir(PATH_THIRD_PARTY_FFMPEG) - - if proprietary_codecs: - print_info('Building ffmpeg with proprietary codecs...') - if not os.path.isfile('build_ffmpeg_proprietary_codecs.patch'): - print_info('Applying codecs patch with ac3 for {0}...'.format(host_platform)) - # os.path.join - shutil.copy(os.path.join(PATH_BASE, 'patch', host_platform, 'build_ffmpeg_proprietary_codecs.patch'), os.getcwd()) - # apply codecs patch - os.system('git apply --ignore-space-change --ignore-whitespace build_ffmpeg_proprietary_codecs.patch') - - cygwin_linking_setup() - - print_info('Starting build...') - - # build ffmpeg - subprocess.check_call('./chromium/scripts/build_ffmpeg.py {0} {1}'.format(host_platform, target_arch), shell=True) - # copy the new generated ffmpeg config - print_info('Copying new ffmpeg configuration...') - subprocess.call('./chromium/scripts/copy_config.sh', shell=True) - print_info('Creating a GYP include file for building FFmpeg from source...') - # generate the ffmpeg configuration - subprocess.check_call('./chromium/scripts/generate_gn.py', shell=True) - - if 'CYGWIN_NT' in platform.system(): - print_info('Applying fix for error LNK2001: unresolved external symbol _ff_w64_guid_data') - fix_external_symbol_ff_w64_guid_data() - else: - if os.path.isfile('build_ffmpeg_proprietary_codecs.patch'): - print_info('Restoring ffmpeg configuration to defaults...') - os.system('git clean -df') - os.system('git checkout -- .') - - -def replace_in_file(file_name, search_string, replace_string): - filedata = None - with open(file_name, 'r') as file : - filedata = file.read() - - filedata = filedata.replace(search_string, replace_string) - - with open(file_name, 'w') as file : - file.write(filedata) - - -def fix_external_symbol_ff_w64_guid_data(): - # https://bugs.chromium.org/p/chromium/issues/detail?id=264459 - shutil.copyfile('ffmpeg_generated.gni', 'ffmpeg_generated.gni.bak') - replace = '''"libavformat/vorbiscomment.c", - "libavformat/w64.c",''' - replace_in_file('ffmpeg_generated.gni', '"libavformat/vorbiscomment.c",', replace) - - -def zip_release_output_library(nw_version, platform_release_name, target_arch, proprietary_codecs, out_library_path, output_release_path): +def zip_release_output_library(nw_version, platform_release_name, target_arch, out_library_path, output_release_path): create_directory(output_release_path) print_info('Creating release zip...') - pc = '' - if proprietary_codecs: - pc = '-custom' if os.path.isfile(out_library_path): - with zipfile.ZipFile(os.path.join(output_release_path, '{0}-{1}-{2}{3}.zip'.format(nw_version, platform_release_name, target_arch, pc)), 'w', zipfile.ZIP_DEFLATED) as release_zip: + with zipfile.ZipFile(os.path.join(output_release_path, '{0}-{1}-{2}{3}.zip'.format(nw_version, platform_release_name, target_arch, '')), 'w', zipfile.ZIP_DEFLATED) as release_zip: release_zip.write(out_library_path, os.path.basename(out_library_path)) release_zip.close() else: diff --git a/guides/build_linux.md b/guides/build_linux.md index 3740b91..2e3277e 100644 --- a/guides/build_linux.md +++ b/guides/build_linux.md @@ -2,7 +2,7 @@ ## Requirements -- 3GB of free space +- 10GB of free space - Ubuntu 16.04.5 or higher ## Install deps diff --git a/guides/build_mac.md b/guides/build_mac.md index 78eaee2..5229c29 100644 --- a/guides/build_mac.md +++ b/guides/build_mac.md @@ -2,7 +2,7 @@ ## Requirements -- 3GB of free space +- 10GB of free space - OSX 10.11.x ## Install deps diff --git a/guides/build_windows.md b/guides/build_windows.md index ea130f5..803fedb 100644 --- a/guides/build_windows.md +++ b/guides/build_windows.md @@ -2,8 +2,10 @@ ## Requirements -- 3GB of free space -- Windows 7/8.1/10 +- 10GB of free space. +- A 64-bit Intel machine with at least 8GB of RAM. +- An appropriate version of Visual Studio, as described below. +- Windows 7 or newer. ## Install deps ### Open a **cmd** as Admin @@ -20,14 +22,15 @@ #### Install VisualStudio 2017 [Download Visualstudio 2017](https://docs.microsoft.com/en-us/visualstudio/install/use-command-line-parameters-to-install-visual-studio) -> As of September, 2017 (R503915) Chromium requires Visual Studio 2017 update 3.x to build. -The clang-cl compiler is used but Visual Studio's header files, libraries, and some tools are required. -Visual Studio Community Edition should work if its license is appropriate for you. -You must install the “**Desktop development with C++**” component and the “**MFC and ATL support***” sub-component. +> Chromium requires Visual Studio 2017 (>=15.7.2) or 2019 (>=16.0.0) to build. The clang-cl compiler is used but Visual Studio's header files, libraries, and some tools are required. Visual Studio Community Edition should work if its license is appropriate for you. You must install the “Desktop development with C++” component and the “MFC/ATL support” sub-components. This can be done from the command line by passing these arguments to the Visual Studio installer -> You must have the version **10.0.17134 Windows 10 SDK** installed. This can be installed separately or by checking the appropriate box in the Visual Studio Installer. + PATH_TO_INSTALLER.EXE --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Component.VC.ATLMFC --includeRecommended -## Build ffmpeg.dll (WITHOUT proprietary codecs) +> You must have the version **10.0.17763** or higher Windows 10 SDK installed. This can be installed separately or by checking the appropriate box in the Visual Studio Installer. + +> The SDK Debugging Tools must also be installed. If the Windows 10 SDK was installed via the Visual Studio installer, then they can be installed by going to: Control Panel → Programs → Programs and Features → Select the “Windows Software Development Kit” → Change → Change → Check “Debugging Tools For Windows” → Change. Or, you can download the standalone SDK installer and use it to install the Debugging Tools + +## Build ffmpeg.dll This is the default behaviour, does not require additional steps, just run it and tadaaaa :tada:... @@ -39,61 +42,3 @@ This is the default behaviour, does not require additional steps, just run it an //Build ffmpeg x64 python build_ffmpeg.py --target_arch=x64 - -## Build ffmpeg.dll (WITH proprietary codecs) - -The build procedure for Windows is a little bit complex and require additional steps to generate the FFmpeg library. Unfortunately we can not generate the library natively, we need to use a CygWin environment and do a few tricks: - -* Clone the script - ``` - git clone https://github.com/iteufel/nwjs-ffmpeg-prebuilt.git - ``` - -* Download and install the latest CygWin with the following packages : - - ```yasm, make, diffutils, pkg-config, git```. - - You can do it with the typical CygWin installation package manager. - -* Setup the building environment: assuming you have installed VS2015 with choco in the previous steps, open a Windows console (CMD.exe) and type - - ``` - C:\>cd %VS140COMNTOOLS% - C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools>cd ..\..\VC - C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>vcvarsall.bat [amd64, amd64_x86] - ``` - - Don't close the console. - -* Start CygWin sharing the previous environment variables: - - ``` - C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>cd C:\cygwin64\bin - C:\cygwin64\bin>START mintty.exe -i /Cygwin-Terminal.ico - - ``` - - The CygWin console will be shown. - - -* From the CygWin console: - - ``` - $ cd /cygdrive/drive/path-to-nwjs-ffmpeg-prebuilt - ``` - where ```drive``` is your main drive and ```path-to-nwjs-ffmpeg-prebuilt``` is the path where you cloned the nwjs-ffmpeg-prebuilt script, an example - - ``` - $ cd /cygdrive/c/dev/nwjs-ffmpeg-prebuilt - ``` - then run the script with - ``` - $ python build_ffmpeg.py -pc (default host architecture) - ``` - - or - - ``` - $ python build_ffmpeg.py -ta [ia32|x64] -pc - ``` - -If you want to build for different architectures you must close CygWin and close the Windows CMD console, and repeat the above process in order to setup the building environment values for the desired architecture.