diff options
Diffstat (limited to 'build_files/build_environment')
17 files changed, 359 insertions, 10 deletions
diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt index 3c228fd9f7d..7e7c5d58d71 100644 --- a/build_files/build_environment/CMakeLists.txt +++ b/build_files/build_environment/CMakeLists.txt @@ -30,7 +30,7 @@ # build_deps 2015 x64 / build_deps 2015 x86 # # MAC OS X USAGE: -# Install with homebrew: brew install cmake autoconf automake libtool yasm nasm +# Install with homebrew: brew install cmake autoconf automake libtool yasm nasm bison # Run "make deps" from main Blender directory # # LINUX USAGE: @@ -76,6 +76,7 @@ include(cmake/llvm.cmake) include(cmake/clang.cmake) if(APPLE) include(cmake/openmp.cmake) + include(cmake/nasm.cmake) endif() include(cmake/openimageio.cmake) include(cmake/tiff.cmake) diff --git a/build_files/build_environment/cmake/boost.cmake b/build_files/build_environment/cmake/boost.cmake index 94c649e9109..6e7ee8c66b1 100644 --- a/build_files/build_environment/cmake/boost.cmake +++ b/build_files/build_environment/cmake/boost.cmake @@ -44,7 +44,7 @@ if(WIN32) elseif(APPLE) set(BOOST_CONFIGURE_COMMAND ./bootstrap.sh) set(BOOST_BUILD_COMMAND ./b2) - set(BOOST_BUILD_OPTIONS toolset=darwin cxxflags=${PLATFORM_CXXFLAGS} linkflags=${PLATFORM_LDFLAGS} visibility=global --disable-icu boost.locale.icu=off) + set(BOOST_BUILD_OPTIONS toolset=clang-darwin cxxflags=${PLATFORM_CXXFLAGS} linkflags=${PLATFORM_LDFLAGS} visibility=global --disable-icu boost.locale.icu=off) set(BOOST_HARVEST_CMD echo .) set(BOOST_PATCH_COMMAND echo .) else() diff --git a/build_files/build_environment/cmake/check_software.cmake b/build_files/build_environment/cmake/check_software.cmake index f5774551879..384915aba84 100644 --- a/build_files/build_environment/cmake/check_software.cmake +++ b/build_files/build_environment/cmake/check_software.cmake @@ -30,6 +30,7 @@ if(UNIX) nasm yasm tclsh + bison ) foreach(_software ${_required_software}) @@ -40,6 +41,12 @@ if(UNIX) unset(_software_find CACHE) endforeach() + if(APPLE) + if(NOT EXISTS "/usr/local/opt/bison/bin/bison") + set(_software_missing "${_software_missing} bison") + endif() + endif() + if(_software_missing) message( "\n" @@ -50,7 +57,7 @@ if(UNIX) " apt install autoconf automake libtool yasm nasm tcl\n" "\n" "On macOS (with homebrew):\n" - " brew install cmake autoconf automake libtool yasm nasm\n" + " brew install cmake autoconf automake libtool yasm nasm bison\n" "\n" "Other platforms:\n" " Install equivalent packages.\n") diff --git a/build_files/build_environment/cmake/ffmpeg.cmake b/build_files/build_environment/cmake/ffmpeg.cmake index 02e78c605af..164997b9aa5 100644 --- a/build_files/build_environment/cmake/ffmpeg.cmake +++ b/build_files/build_environment/cmake/ffmpeg.cmake @@ -50,7 +50,8 @@ if(APPLE) set(FFMPEG_EXTRA_FLAGS ${FFMPEG_EXTRA_FLAGS} --target-os=darwin - ) + --x86asmexe=${LIBDIR}/nasm/bin/nasm + ) endif() ExternalProject_Add(external_ffmpeg @@ -143,6 +144,12 @@ if(WIN32) external_zlib_mingw ) endif() +if(APPLE) + add_dependencies( + external_ffmpeg + external_nasm + ) +endif() if(BUILD_MODE STREQUAL Release AND WIN32) ExternalProject_Add_Step(external_ffmpeg after_install diff --git a/build_files/build_environment/cmake/freetype.cmake b/build_files/build_environment/cmake/freetype.cmake index 30dd2eed676..fefe2c900bc 100644 --- a/build_files/build_environment/cmake/freetype.cmake +++ b/build_files/build_environment/cmake/freetype.cmake @@ -24,7 +24,8 @@ set(FREETYPE_EXTRA_ARGS -DFT_WITH_HARFBUZZ=OFF -DFT_WITH_BZIP2=OFF -DCMAKE_DISABLE_FIND_PACKAGE_HarfBuzz=TRUE - -DCMAKE_DISABLE_FIND_PACKAGE_BZip2=TRUE) + -DCMAKE_DISABLE_FIND_PACKAGE_BZip2=TRUE + -DCMAKE_DISABLE_FIND_PACKAGE_BrotliDec=TRUE) ExternalProject_Add(external_freetype URL ${FREETYPE_URI} diff --git a/build_files/build_environment/cmake/ispc.cmake b/build_files/build_environment/cmake/ispc.cmake index 0bb5db82aea..b67351dcf9f 100644 --- a/build_files/build_environment/cmake/ispc.cmake +++ b/build_files/build_environment/cmake/ispc.cmake @@ -22,6 +22,17 @@ if(WIN32) -DBISON_EXECUTABLE=${LIBDIR}/flexbison/win_bison.exe -DM4_EXECUTABLE=${DOWNLOAD_DIR}/mingw/mingw64/msys/1.0/bin/m4.exe ) +elseif(APPLE) + # Use bison installed via Homebrew. + # The one which comes which Xcode toolset is too old. + set(ISPC_EXTRA_ARGS_APPLE + -DBISON_EXECUTABLE=/usr/local/opt/bison/bin/bison + ) +elseif(UNIX) + set(ISPC_EXTRA_ARGS_UNIX + -DCMAKE_C_COMPILER=${LIBDIR}/clang/bin/clang + -DCMAKE_CXX_COMPILER=${LIBDIR}/clang/bin/clang++ + ) endif() set(ISPC_EXTRA_ARGS @@ -36,6 +47,8 @@ set(ISPC_EXTRA_ARGS -DCLANG_LIBRARY_DIR=${LIBDIR}/clang/lib -DCLANG_INCLUDE_DIRS=${LIBDIR}/clang/include ${ISPC_EXTRA_ARGS_WIN} + ${ISPC_EXTRA_ARGS_APPLE} + ${ISPC_EXTRA_ARGS_UNIX} ) ExternalProject_Add(external_ispc diff --git a/build_files/build_environment/cmake/nasm.cmake b/build_files/build_environment/cmake/nasm.cmake new file mode 100644 index 00000000000..51d7ebd8830 --- /dev/null +++ b/build_files/build_environment/cmake/nasm.cmake @@ -0,0 +1,29 @@ +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ***** END GPL LICENSE BLOCK ***** + +ExternalProject_Add(external_nasm + URL ${NASM_URI} + DOWNLOAD_DIR ${DOWNLOAD_DIR} + URL_HASH SHA256=${NASM_HASH} + PREFIX ${BUILD_DIR}/nasm + PATCH_COMMAND ${PATCH_CMD} --verbose -p 1 -N -d ${BUILD_DIR}/nasm/src/external_nasm < ${PATCH_DIR}/nasm.diff + CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/nasm/src/external_nasm/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/nasm + BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/nasm/src/external_nasm/ && make -j${MAKE_THREADS} + INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/nasm/src/external_nasm/ && make install + INSTALL_DIR ${LIBDIR}/nasm +) diff --git a/build_files/build_environment/cmake/ogg.cmake b/build_files/build_environment/cmake/ogg.cmake index e2d0f0905b8..808a35c6e4d 100644 --- a/build_files/build_environment/cmake/ogg.cmake +++ b/build_files/build_environment/cmake/ogg.cmake @@ -21,6 +21,7 @@ ExternalProject_Add(external_ogg DOWNLOAD_DIR ${DOWNLOAD_DIR} URL_HASH SHA256=${OGG_HASH} PREFIX ${BUILD_DIR}/ogg + PATCH_COMMAND ${PATCH_CMD} --verbose -p 1 -N -d ${BUILD_DIR}/ogg/src/external_ogg < ${PATCH_DIR}/ogg.diff CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/ogg/src/external_ogg/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/ogg --disable-shared --enable-static BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/ogg/src/external_ogg/ && make -j${MAKE_THREADS} INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/ogg/src/external_ogg/ && make install diff --git a/build_files/build_environment/cmake/options.cmake b/build_files/build_environment/cmake/options.cmake index 4b973067020..39334af0bcf 100644 --- a/build_files/build_environment/cmake/options.cmake +++ b/build_files/build_environment/cmake/options.cmake @@ -113,14 +113,18 @@ else() COMMAND xcode-select --print-path OUTPUT_VARIABLE XCODE_DEV_PATH OUTPUT_STRIP_TRAILING_WHITESPACE ) + execute_process( + COMMAND xcodebuild -version -sdk macosx SDKVersion + OUTPUT_VARIABLE MACOSX_SDK_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) + set(OSX_ARCHITECTURES x86_64) - set(OSX_DEPLOYMENT_TARGET 10.11) + set(OSX_DEPLOYMENT_TARGET 10.13) set(OSX_SYSROOT ${XCODE_DEV_PATH}/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk) set(PLATFORM_CFLAGS "-isysroot ${OSX_SYSROOT} -mmacosx-version-min=${OSX_DEPLOYMENT_TARGET}") set(PLATFORM_CXXFLAGS "-isysroot ${OSX_SYSROOT} -mmacosx-version-min=${OSX_DEPLOYMENT_TARGET} -std=c++11 -stdlib=libc++") set(PLATFORM_LDFLAGS "-isysroot ${OSX_SYSROOT} -mmacosx-version-min=${OSX_DEPLOYMENT_TARGET}") - set(PLATFORM_BUILD_TARGET --build=x86_64-apple-darwin15.0.0) # OS X 10.11 + set(PLATFORM_BUILD_TARGET --build=x86_64-apple-darwin17.0.0) # OS X 10.13 set(PLATFORM_CMAKE_FLAGS -DCMAKE_OSX_ARCHITECTURES:STRING=${OSX_ARCHITECTURES} -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${OSX_DEPLOYMENT_TARGET} @@ -155,6 +159,7 @@ else() set(CONFIGURE_ENV export MACOSX_DEPLOYMENT_TARGET=${OSX_DEPLOYMENT_TARGET} && + export MACOSX_SDK_VERSION=${OSX_DEPLOYMENT_TARGET} && export CFLAGS=${PLATFORM_CFLAGS} && export CXXFLAGS=${PLATFORM_CXXFLAGS} && export LDFLAGS=${PLATFORM_LDFLAGS} diff --git a/build_files/build_environment/cmake/python.cmake b/build_files/build_environment/cmake/python.cmake index 2d64feb9858..681b20577d6 100644 --- a/build_files/build_environment/cmake/python.cmake +++ b/build_files/build_environment/cmake/python.cmake @@ -48,7 +48,12 @@ if(WIN32) else() if(APPLE) - # disable functions that can be in 10.13 sdk but aren't available on 10.9 target + # Disable functions that can be in 10.13 sdk but aren't available on 10.9 target. + # + # Disable libintl (gettext library) as it might come from Homebrew, which makes + # it so test program compiles, but the Python does not. This is because for Python + # we use isysroot, which seems to forbid using libintl.h. + # The gettext functionality seems to come from CoreFoundation, so should be all fine. set(PYTHON_FUNC_CONFIGS export ac_cv_func_futimens=no && export ac_cv_func_utimensat=no && @@ -60,7 +65,10 @@ else() export ac_cv_func_getentropy=no && export ac_cv_func_mkostemp=no && export ac_cv_func_mkostemps=no && - export ac_cv_func_timingsafe_bcmp=no) + export ac_cv_func_timingsafe_bcmp=no && + export ac_cv_header_libintl_h=no && + export ac_cv_lib_intl_textdomain=no + ) set(PYTHON_CONFIGURE_ENV ${CONFIGURE_ENV} && ${PYTHON_FUNC_CONFIGS}) set(PYTHON_BINARY ${BUILD_DIR}/python/src/external_python/python.exe) else() diff --git a/build_files/build_environment/cmake/tiff.cmake b/build_files/build_environment/cmake/tiff.cmake index fa5a1423603..fe2c82a6eaa 100644 --- a/build_files/build_environment/cmake/tiff.cmake +++ b/build_files/build_environment/cmake/tiff.cmake @@ -16,6 +16,12 @@ # # ***** END GPL LICENSE BLOCK ***** +if(WITH_WEBP) + set(WITH_TIFF_WEBP ON) +else() + set(WITH_TIFF_WEBP OFF) +endif() + set(TIFF_EXTRA_ARGS -DZLIB_LIBRARY=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY} -DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include @@ -23,6 +29,8 @@ set(TIFF_EXTRA_ARGS -DBUILD_SHARED_LIBS=OFF -Dlzma=OFF -Djbig=OFF + -Dzstd=OFF + -Dwebp=${WITH_TIFF_WEBP} ) ExternalProject_Add(external_tiff diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake index 5ec5553079c..ce2a1191f17 100644 --- a/build_files/build_environment/cmake/versions.cmake +++ b/build_files/build_environment/cmake/versions.cmake @@ -305,6 +305,10 @@ set(MESA_VERSION 18.3.1) set(MESA_URI ftp://ftp.freedesktop.org/pub/mesa//mesa-${MESA_VERSION}.tar.xz) set(MESA_HASH d60828056d77bfdbae0970f9b15fb1be) +set(NASM_VERSION 2.15.02) +set(NASM_URI https://www.nasm.us/pub/nasm/releasebuilds/${NASM_VERSION}/nasm-${NASM_VERSION}.tar.xz) +set(NASM_HASH f4fd1329b1713e1ccd34b2fc121c4bcd278c9f91cc4cb205ae8fcd2e4728dd14) + set(XR_OPENXR_SDK_VERSION 1.0.8) set(XR_OPENXR_SDK_URI https://github.com/KhronosGroup/OpenXR-SDK/archive/release-${XR_OPENXR_SDK_VERSION}.tar.gz) set(XR_OPENXR_SDK_HASH c6de63d2e0f9029aa58dfa97cad8ce07) diff --git a/build_files/build_environment/cmake/x264.cmake b/build_files/build_environment/cmake/x264.cmake index 8bcb5a2938f..96bf031ce83 100644 --- a/build_files/build_environment/cmake/x264.cmake +++ b/build_files/build_environment/cmake/x264.cmake @@ -21,12 +21,21 @@ if(WIN32) endif() +if(APPLE) + set(X264_CONFIGURE_ENV + export AS=${LIBDIR}/nasm/bin/nasm + ) +else() + set(X264_CONFIGURE_ENV echo .) +endif() + ExternalProject_Add(external_x264 URL ${X264_URI} DOWNLOAD_DIR ${DOWNLOAD_DIR} URL_HASH SHA256=${X264_HASH} PREFIX ${BUILD_DIR}/x264 - CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/x264/src/external_x264/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/x264 + CONFIGURE_COMMAND ${CONFIGURE_ENV} && ${X264_CONFIGURE_ENV} && cd ${BUILD_DIR}/x264/src/external_x264/ && + ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/x264 --enable-static --enable-pic --disable-lavf @@ -39,3 +48,10 @@ ExternalProject_Add(external_x264 if(MSVC) set_target_properties(external_x264 PROPERTIES FOLDER Mingw) endif() + +if(APPLE) + add_dependencies( + external_x264 + external_nasm + ) +endif() diff --git a/build_files/build_environment/patches/ffmpeg.diff b/build_files/build_environment/patches/ffmpeg.diff index 960728ae980..e195ca272de 100644 --- a/build_files/build_environment/patches/ffmpeg.diff +++ b/build_files/build_environment/patches/ffmpeg.diff @@ -9,3 +9,62 @@ enabled libopenmpt && require_pkg_config libopenmpt "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create -lstdc++ && append libopenmpt_extralibs "-lstdc++" enabled libopus && { enabled libopus_decoder && { +--- a/libavcodec/cfhddata.c ++++ b/libavcodec/cfhddata.c +@@ -276,10 +276,10 @@ + av_cold int ff_cfhd_init_vlcs(CFHDContext *s) + { + int i, j, ret = 0; +- uint32_t new_cfhd_vlc_bits[NB_VLC_TABLE_18 * 2]; +- uint8_t new_cfhd_vlc_len[NB_VLC_TABLE_18 * 2]; +- uint16_t new_cfhd_vlc_run[NB_VLC_TABLE_18 * 2]; +- int16_t new_cfhd_vlc_level[NB_VLC_TABLE_18 * 2]; ++ uint32_t *new_cfhd_vlc_bits = av_calloc(sizeof(uint32_t), NB_VLC_TABLE_18 * 2); ++ uint8_t *new_cfhd_vlc_len = av_calloc(sizeof(uint8_t), NB_VLC_TABLE_18 * 2); ++ uint16_t *new_cfhd_vlc_run = av_calloc(sizeof(uint16_t), NB_VLC_TABLE_18 * 2); ++ int16_t *new_cfhd_vlc_level = av_calloc(sizeof(int16_t), NB_VLC_TABLE_18 * 2); + + /** Similar to dv.c, generate signed VLC tables **/ + +@@ -305,8 +305,13 @@ + + ret = init_vlc(&s->vlc_9, VLC_BITS, j, new_cfhd_vlc_len, + 1, 1, new_cfhd_vlc_bits, 4, 4, 0); +- if (ret < 0) ++ if (ret < 0) { ++ av_free(new_cfhd_vlc_bits); ++ av_free(new_cfhd_vlc_len); ++ av_free(new_cfhd_vlc_run); ++ av_free(new_cfhd_vlc_level); + return ret; ++ } + for (i = 0; i < s->vlc_9.table_size; i++) { + int code = s->vlc_9.table[i][0]; + int len = s->vlc_9.table[i][1]; +@@ -346,8 +351,14 @@ + + ret = init_vlc(&s->vlc_18, VLC_BITS, j, new_cfhd_vlc_len, + 1, 1, new_cfhd_vlc_bits, 4, 4, 0); +- if (ret < 0) ++ if (ret < 0) { ++ av_free(new_cfhd_vlc_bits); ++ av_free(new_cfhd_vlc_len); ++ av_free(new_cfhd_vlc_run); ++ av_free(new_cfhd_vlc_level); + return ret; ++ } ++ + av_assert0(s->vlc_18.table_size == 4572); + + for (i = 0; i < s->vlc_18.table_size; i++) { +@@ -367,5 +378,10 @@ + s->table_18_rl_vlc[i].run = run; + } + ++ av_free(new_cfhd_vlc_bits); ++ av_free(new_cfhd_vlc_len); ++ av_free(new_cfhd_vlc_run); ++ av_free(new_cfhd_vlc_level); ++ + return ret; + } diff --git a/build_files/build_environment/patches/ispc.diff b/build_files/build_environment/patches/ispc.diff index 710bfc7a448..689dd0abdc5 100644 --- a/build_files/build_environment/patches/ispc.diff +++ b/build_files/build_environment/patches/ispc.diff @@ -34,3 +34,52 @@ diff -Naur orig/cmake/GenerateBuiltins.cmake.txt external_ispc/cmake/GenerateBui elseif ("${bit}" STREQUAL "64" AND ${arch} STREQUAL "x86") set(target_arch "x86_64") elseif ("${bit}" STREQUAL "32" AND ${arch} STREQUAL "arm") +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 46a8db8..f53beef 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -36,8 +36,12 @@ + cmake_minimum_required(VERSION 3.13) + + if (UNIX) +- set(CMAKE_C_COMPILER "clang") +- set(CMAKE_CXX_COMPILER "clang++") ++ if (NOT CMAKE_C_COMPILER) ++ set(CMAKE_C_COMPILER "clang") ++ endif() ++ if (NOT CMAKE_CXX_COMPILER) ++ set(CMAKE_CXX_COMPILER "clang++") ++ endif() + endif() + + set(PROJECT_NAME ispc) +@@ -412,6 +416,29 @@ else() + endif() + endif() + ++# Link against libstdc++.a which must be provided to the linker after ++# LLVM and CLang libraries. ++# This is needed because some of LLVM/CLang dependencies are using ++# std::make_shared, which is defined in one of those: ++# - libclang-cpp.so ++# - libstdc++.a ++# Using the former one is tricky because then generated binary depends ++# on a library which is outside of the LD_LIBRARY_PATH. ++# ++# Hence, using C++ implementation from G++ which seems to work just fine. ++# In fact, from investigation seems that libclang-cpp.so itself is pulling ++# std::_Sp_make_shared_tag from G++'s libstdc++.a. ++if(UNIX AND NOT APPLE) ++ execute_process( ++ COMMAND g++ --print-file-name libstdc++.a ++ OUTPUT_VARIABLE GCC_LIBSTDCXX_A ++ OUTPUT_STRIP_TRAILING_WHITESPACE ++ ) ++ if(GCC_LIBSTDCXX_A AND EXISTS ${GCC_LIBSTDCXX_A}) ++ target_link_libraries(${PROJECT_NAME} ${GCC_LIBSTDCXX_A}) ++ endif() ++endif() ++ + # Build target for utility checking host ISA + if (ISPC_INCLUDE_UTILS) + add_executable(check_isa "") diff --git a/build_files/build_environment/patches/nasm.diff b/build_files/build_environment/patches/nasm.diff new file mode 100644 index 00000000000..821e1a1d905 --- /dev/null +++ b/build_files/build_environment/patches/nasm.diff @@ -0,0 +1,129 @@ +diff --git a/output/macho.h b/output/macho.h +index 538c531e..fd5e8849 100644 +--- a/output/macho.h ++++ b/output/macho.h +@@ -60,6 +60,8 @@ + #define LC_SEGMENT 0x1 + #define LC_SEGMENT_64 0x19 + #define LC_SYMTAB 0x2 ++#define LC_VERSION_MIN_MACOSX 0x24 ++#define LC_BUILD_VERSION 0x32 + + /* Symbol type bits */ + #define N_STAB 0xe0 +diff --git a/output/outmacho.c b/output/outmacho.c +index 08147883..de6ec902 100644 +--- a/output/outmacho.c ++++ b/output/outmacho.c +@@ -38,6 +38,8 @@ + + #include "compiler.h" + ++#include <stdlib.h> ++ + #include "nctype.h" + + #include "nasm.h" +@@ -64,6 +66,8 @@ + #define MACHO_SYMCMD_SIZE 24 + #define MACHO_NLIST_SIZE 12 + #define MACHO_RELINFO_SIZE 8 ++#define MACHO_BUILD_VERSION_SIZE 24 ++#define MACHO_VERSION_MIN_MACOSX_SIZE 16 + + #define MACHO_HEADER64_SIZE 32 + #define MACHO_SEGCMD64_SIZE 72 +@@ -1224,6 +1228,46 @@ static void macho_layout_symbols (uint32_t *numsyms, + } + } + ++static bool get_full_version_from_env (const char *variable_name, ++ int *r_major, ++ int *r_minor, ++ int *r_patch) { ++ *r_major = 0; ++ *r_minor = 0; ++ *r_patch = 0; ++ ++ const char *value = getenv(variable_name); ++ if (value == NULL || value[0] == '\0') { ++ return false; ++ } ++ ++ const char *current_value = value; ++ const char *end_value = value + strlen(value); ++ ++ char *endptr; ++ ++ *r_major = strtol(current_value, &endptr, 10); ++ if (endptr >= end_value) { ++ return true; ++ } ++ current_value = endptr + 1; ++ ++ *r_minor = strtol(current_value, &endptr, 10); ++ if (endptr >= end_value) { ++ return true; ++ } ++ current_value = endptr + 1; ++ ++ *r_patch = strtol(current_value, &endptr, 10); ++ ++ return true; ++} ++ ++static bool need_version_min_macosx_command (void) { ++ return getenv("MACOSX_DEPLOYMENT_TARGET") && ++ getenv("MACOSX_SDK_VERSION"); ++} ++ + /* Calculate some values we'll need for writing later. */ + + static void macho_calculate_sizes (void) +@@ -1270,6 +1314,12 @@ static void macho_calculate_sizes (void) + head_sizeofcmds += fmt.segcmd_size + seg_nsects * fmt.sectcmd_size; + } + ++ /* LC_VERSION_MIN_MACOSX */ ++ if (need_version_min_macosx_command()) { ++ ++head_ncmds; ++ head_sizeofcmds += MACHO_VERSION_MIN_MACOSX_SIZE; ++ } ++ + if (nsyms > 0) { + ++head_ncmds; + head_sizeofcmds += MACHO_SYMCMD_SIZE; +@@ -1653,6 +1703,33 @@ static void macho_write (void) + else + nasm_warn(WARN_OTHER, "no sections?"); + ++#define ENCODE_BUILD_VERSION(major, minor, patch) \ ++ (((major) << 16) | ((minor) << 8) | (patch)) ++ ++ if (0) { ++ fwriteint32_t(LC_BUILD_VERSION, ofile); /* cmd == LC_BUILD_VERSION */ ++ fwriteint32_t(MACHO_BUILD_VERSION_SIZE, ofile); /* size of load command */ ++ fwriteint32_t(1, ofile); /* platform */ ++ fwriteint32_t(ENCODE_BUILD_VERSION(10, 13, 0), ofile); /* minos, X.Y.Z is encoded in nibbles xxxx.yy.zz */ ++ fwriteint32_t(ENCODE_BUILD_VERSION(10, 15, 4), ofile); /* sdk, X.Y.Z is encoded in nibbles xxxx.yy.zz */ ++ fwriteint32_t(0, ofile); /* number of tool entries following this */ ++ } ++ ++ if (need_version_min_macosx_command()) { ++ int sdk_major, sdk_minor, sdk_patch; ++ get_full_version_from_env("MACOSX_SDK_VERSION", &sdk_major, &sdk_minor, &sdk_patch); ++ ++ int version_major, version_minor, version_patch; ++ get_full_version_from_env("MACOSX_DEPLOYMENT_TARGET", &version_major, &version_minor, &version_patch); ++ ++ fwriteint32_t(LC_VERSION_MIN_MACOSX, ofile); /* cmd == LC_VERSION_MIN_MACOSX */ ++ fwriteint32_t(MACHO_VERSION_MIN_MACOSX_SIZE, ofile); /* size of load command */ ++ fwriteint32_t(ENCODE_BUILD_VERSION(version_major, version_minor, version_patch), ofile); /* minos, X.Y.Z is encoded in nibbles xxxx.yy.zz */ ++ fwriteint32_t(ENCODE_BUILD_VERSION(sdk_major, sdk_minor, sdk_patch), ofile); /* sdk, X.Y.Z is encoded in nibbles xxxx.yy.zz */ ++ } ++ ++#undef ENCODE_BUILD_VERSION ++ + if (nsyms > 0) { + /* write out symbol command */ + fwriteint32_t(LC_SYMTAB, ofile); /* cmd == LC_SYMTAB */ diff --git a/build_files/build_environment/patches/ogg.diff b/build_files/build_environment/patches/ogg.diff new file mode 100644 index 00000000000..fca426e1d35 --- /dev/null +++ b/build_files/build_environment/patches/ogg.diff @@ -0,0 +1,12 @@ +diff --git a/include/ogg/os_types.h b/include/ogg/os_types.h +index eb8a322..6f73b72 100644 +--- a/include/ogg/os_types.h ++++ b/include/ogg/os_types.h +@@ -71,6 +71,7 @@ + #elif (defined(__APPLE__) && defined(__MACH__)) /* MacOS X Framework build */ + + # include <sys/types.h> ++# include <stdint.h> + typedef int16_t ogg_int16_t; + typedef uint16_t ogg_uint16_t; + typedef int32_t ogg_int32_t; |