Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'build_files')
-rw-r--r--build_files/build_environment/CMakeLists.txt1
-rw-r--r--build_files/build_environment/cmake/ffmpeg.cmake6
-rw-r--r--build_files/build_environment/cmake/nasm.cmake29
-rw-r--r--build_files/build_environment/cmake/versions.cmake4
-rw-r--r--build_files/build_environment/cmake/x264.cmake7
-rw-r--r--build_files/build_environment/patches/nasm.diff129
6 files changed, 176 insertions, 0 deletions
diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt
index 876372ca8c4..7e7c5d58d71 100644
--- a/build_files/build_environment/CMakeLists.txt
+++ b/build_files/build_environment/CMakeLists.txt
@@ -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/ffmpeg.cmake b/build_files/build_environment/cmake/ffmpeg.cmake
index 02e78c605af..7b759ab8f1d 100644
--- a/build_files/build_environment/cmake/ffmpeg.cmake
+++ b/build_files/build_environment/cmake/ffmpeg.cmake
@@ -143,6 +143,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/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/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..62a46254a99 100644
--- a/build_files/build_environment/cmake/x264.cmake
+++ b/build_files/build_environment/cmake/x264.cmake
@@ -39,3 +39,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/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 */