Building Julia (Detailed)

Downloading the Julia source code

إذا كنت خلف جدار ناري، قد تحتاج إلى استخدام بروتوكول https بدلاً من بروتوكول git:

git config --global url."https://".insteadOf git://

تأكد من تكوين نظامك أيضًا لاستخدام إعدادات الوكيل المناسبة، على سبيل المثال عن طريق تعيين متغيرات https_proxy و http_proxy.

Building Julia

عند التجميع للمرة الأولى، سيقوم البناء تلقائيًا بتنزيل external dependencies مسبقًا. إذا كنت تفضل بناء جميع التبعيات بنفسك، أو كنت تبني على نظام لا يمكنه الوصول إلى الشبكة أثناء عملية البناء، أضف ما يلي في Make.user:

USE_BINARYBUILDER=0

يتطلب بناء جوليا 5 جيجابايت إذا تم بناء جميع التبعيات وحوالي 4 جيجابايت من الذاكرة الافتراضية.

لإجراء بناء متوازي، استخدم make -j N وقدم الحد الأقصى لعدد العمليات المتزامنة. إذا لم تعمل الإعدادات الافتراضية في البناء بالنسبة لك، وكنت بحاجة إلى تعيين معلمات make محددة، يمكنك حفظها في Make.user، ووضع الملف في جذر مصدر جوليا الخاص بك. سيتحقق البناء تلقائيًا من وجود Make.user ويستخدمه إذا كان موجودًا.

يمكنك إنشاء بناءات خارج الشجرة لـ Julia عن طريق تحديد make O=<build-directory> configure في سطر الأوامر. سيؤدي ذلك إلى إنشاء مرآة دليل، مع جميع ملفات Make اللازمة لبناء Julia، في الدليل المحدد. ستشارك هذه البناءات ملفات المصدر في Julia و deps/srccache. يمكن أن يحتوي كل دليل بناء خارج الشجرة على ملف Make.user الخاص به لتجاوز ملف Make.user العالمي في المجلد العلوي.

إذا كانت كل الأمور تعمل بشكل صحيح، سترى لافتة جوليا وموجه تفاعلي يمكنك من إدخال التعبيرات للتقييم. (قد تكون الأخطاء المتعلقة بالمكتبات ناتجة عن وجود مكتبات قديمة وغير متوافقة في مسار PATH الخاص بك. في هذه الحالة، حاول نقل دليل julia إلى مكان أبكر في PATH). لاحظ أن معظم التعليمات المذكورة أعلاه تنطبق على أنظمة يونكس.

لتشغيل جوليا من أي مكان يمكنك:

  • أضف اسم مستعار (في bash: echo "alias julia='/path/to/install/folder/bin/julia'" >> ~/.bashrc && source ~/.bashrc)، أو
  • إضافة رابط ناعم إلى تنفيذ julia في دليل julia إلى /usr/local/bin (أو أي دليل مناسب موجود بالفعل في مسارك)، أو
  • أضف دليل julia إلى مسار التنفيذ الخاص بك لجلسة الصدفة هذه (في bash: export PATH="$(pwd):$PATH" ؛ في csh أو tcsh:

set path= ( $path $cwd ) ), أو

  • أضف دليل julia إلى مسار التنفيذ الخاص بك بشكل دائم (على سبيل المثال، في .bash_profile)، أو
  • اكتب prefix=/path/to/install/folder في Make.user ثم قم بتشغيل make install. إذا كان هناك إصدار من جوليا مثبت بالفعل في هذا المجلد، يجب عليك حذفه قبل تشغيل make install.

بعض الخيارات التي يمكنك تعيينها للتحكم في بناء جوليا مدرجة ومُوثقة في بداية ملف Make.inc، ولكن يجب عليك عدم تحريره لهذا الغرض، استخدم Make.user بدلاً من ذلك.

تحدد ملفات Makefiles الخاصة بـ Julia قواعد تلقائية مريحة تُسمى print-<VARNAME> لطباعة قيمة المتغيرات، حيث يتم استبدال <VARNAME> باسم المتغير لطباعة قيمته. على سبيل المثال

$ make print-JULIA_PRECOMPILE
JULIA_PRECOMPILE=1

هذه القواعد مفيدة لأغراض تصحيح الأخطاء.

الآن يجب أن تكون قادرًا على تشغيل جوليا بهذه الطريقة:

julia

إذا كنت تبني حزمة جوليا للتوزيع على لينكس أو ماك أو إس أو ويندوز، ألقِ نظرة على الملاحظات التفصيلية في distributing.md.

Updating an existing source tree

إذا كنت قد قمت سابقًا بتنزيل julia باستخدام git clone، يمكنك تحديث شجرة المصدر الحالية باستخدام git pull بدلاً من البدء من جديد:

cd julia
git pull && make

بافتراض أنك لم تقم بإجراء أي تغييرات على شجرة المصدر التي ستتعارض مع التحديثات من المصدر الرئيسي، ستؤدي هذه الأوامر إلى بدء عملية بناء لتحديث إلى أحدث إصدار.

General troubleshooting

  1. مع مرور الوقت، قد تتراكم تغييرات كافية في مكتبة الأساس بحيث تفشل عملية التمهيد في بناء صورة النظام. إذا حدث ذلك، قد يفشل البناء مع خطأ مثل

    sh *** This error is usually fixed by running 'make clean'. If the error persists, try 'make cleanall' ***

    كما هو موصوف، فإن تشغيل make clean && make عادة ما يكون كافياً. في بعض الأحيان، تكون التنظيف الأقوى الذي يتم بواسطة make cleanall ضرورية.

  2. قد يتم تقديم إصدارات جديدة من التبعيات الخارجية والتي قد تتسبب أحيانًا في حدوث تعارضات مع الإصدارات القديمة الموجودة.

    أ. توجد أهداف خاصة في make للمساعدة في مسح البناء الحالي للاعتماد. على سبيل المثال، سيقوم الأمر make -C deps clean-llvm بمسح البناء الحالي لـ llvm بحيث يتم إعادة بناء llvm من توزيع المصدر الذي تم تنزيله في المرة التالية التي يتم فيها استدعاء make. الأمر make -C deps distclean-llvm هو مسح أقوى سيقوم أيضًا بحذف توزيع المصدر الذي تم تنزيله، مما يضمن أنه سيتم تنزيل نسخة جديدة من توزيع المصدر وأن أي تصحيحات جديدة سيتم تطبيقها في المرة التالية التي يتم فيها استدعاء make.

    b. لحذف الثنائيات الموجودة لـ julia وجميع تبعياتها، احذف دليل ./usr في شجرة المصدر.

  3. إذا قمت بتحديث macOS مؤخرًا، تأكد من تشغيل xcode-select --install لتحديث أدوات سطر الأوامر. خلاف ذلك، قد تواجه أخطاء بسبب عدم وجود رؤوس ومكتبات، مثل ld: library not found for -lcrt1.10.6.o.

  4. إذا قمت بنقل دليل المصدر، قد تحصل على أخطاء مثل CMake Error: The current CMakeCache.txt directory ... is different than the directory ... where CMakeCache.txt was created.، وفي هذه الحالة يمكنك حذف الاعتماد المسبب للمشكلة تحت deps

  5. في الحالات القصوى، قد ترغب في إعادة تعيين شجرة المصدر إلى حالة نقية. قد تكون الأوامر التالية في git مفيدة:

    sh git reset --hard #Forcibly remove any changes to any files under version control git clean -x -f -d #Forcibly remove any file or directory not under version control

    لتجنب فقدان العمل، تأكد من أنك تعرف ما تفعله هذه الأوامر قبل تشغيلها. git لن يكون قادرًا على التراجع عن هذه التغييرات!

Platform-Specific Notes

ملاحظات لأنظمة التشغيل المختلفة:

ملاحظات حول هياكل مختلفة:

Required Build Tools and External Libraries

يتطلب بناء جوليا تثبيت البرامج التالية:

  • [GNU make] — بناء التبعيات.
  • [gcc & g++][gcc] (>= 7.1) أو [Clang][clang] (>= 5.0، >= 9.3 لـ Apple Clang) — تجميع وربط C، C++.
  • [libatomic][gcc] — مقدمة من [gcc] ومطلوبة لدعم العمليات الذرية.
  • [python] (>=2.7) — مطلوب لبناء LLVM.
  • [gfortran] — تجميع وربط مكتبات Fortran.
  • [perl] — معالجة ملفات الرأس للمكتبات.
  • [wget]، [curl]، أو [fetch] (FreeBSD) — لتنزيل المكتبات الخارجية تلقائيًا.
  • [m4] — مطلوب لبناء GMP.
  • [awk] — أداة مساعدة لملفات Make.
  • [patch] — لتعديل الشيفرة المصدرية.
  • [cmake] (>= 3.4.3) — مطلوب لبناء libgit2.
  • [pkg-config] — مطلوب لبناء libgit2 بشكل صحيح، خاصة لدعم الوكيل.
  • [powershell] (>= 3.0) — ضروري فقط على نظام ويندوز.
  • [which] — مطلوب للتحقق من تبعيات البناء.

على التوزيعات المعتمدة على ديبيان (مثل أوبونتو)، يمكنك تثبيتها بسهولة باستخدام apt-get:

sudo apt-get install build-essential libatomic1 python gfortran perl wget m4 cmake pkg-config curl

تستخدم جوليا المكتبات الخارجية التالية، والتي يتم تنزيلها تلقائيًا (أو في بعض الحالات، مدرجة في مستودع مصدر جوليا) ثم يتم تجميعها من المصدر في المرة الأولى التي تقوم فيها بتشغيل make. يتم سرد أرقام الإصدارات المحددة لهذه المكتبات التي تستخدمها جوليا في deps/$(libname).version.

  • [LLVM] (15.0 + patches) — بنية تحتية للمجمع (انظر note below).
  • [FemtoLisp] — مُعبّأ مع مصدر جوليا، ويستخدم لتنفيذ واجهة المترجم.
  • [libuv] (تفرع مخصص) — مكتبة إدخال/إخراج قائمة على الأحداث، محمولة وعالية الأداء.
  • [OpenLibm] — مكتبة libm المحمولة التي تحتوي على دوال الرياضيات الأساسية.
  • [DSFMT] — مكتبة مولد الأعداد العشوائية السريعة Mersenne Twister.
  • [OpenBLAS] — سريع، مفتوح، ومُدار [basic linear algebra subprograms (BLAS)]
  • [LAPACK] — مكتبة من روتينات الجبر الخطي لحل أنظمة المعادلات الخطية المتزامنة، وحلول المربعات الصغرى لأنظمة المعادلات الخطية، ومشاكل القيم الذاتية، ومشاكل القيم الفردية.
  • [MKL] (اختياري) – يمكن استبدال OpenBLAS و LAPACK بمكتبة MKL من إنتل.
  • [SuiteSparse] — مكتبة من روتينات الجبر الخطي للمصفوفات المتناثرة.
  • [PCRE] — مكتبة التعبيرات العادية المتوافقة مع Perl.
  • [GMP] — مكتبة الحسابات الدقيقة المتعددة GNU، مطلوبة لدعم BigInt.
  • [MPFR] — مكتبة GNU للعمليات العائمة ذات الدقة المتعددة، مطلوبة لدعم العمليات العائمة ذات الدقة التعسفية (BigFloat).
  • [libgit2] — مكتبة قابلة للربط مع Git، تُستخدم من قبل مدير حزم جوليا.
  • [curl] — توفر libcurl دعم التنزيل والوكيل.
  • [libssh2] — مكتبة لنقل SSH، تُستخدم بواسطة libgit2 للحزم التي تحتوي على بُعد SSH.
  • [mbedtls] — مكتبة تستخدم للتشفير وأمان طبقة النقل، تستخدمها libssh2
  • [utf8proc] — مكتبة لمعالجة سلاسل Unicode المشفرة بتنسيق UTF-8.
  • [LLVM libunwind] — نسخة LLVM من [libunwind]، مكتبة تحدد سلسلة الاستدعاءات لبرنامج.
  • [ITTAPI] — تقنية Intel للأدوات والتتبع وواجهة برمجة التطبيقات عند الطلب.

[GNU make]: https://www.gnu.org/software/make [patch]: https://www.gnu.org/software/patch [wget]: https://www.gnu.org/software/wget [m4]: https://www.gnu.org/software/m4 [awk]: https://www.gnu.org/software/gawk [gcc]: https://gcc.gnu.org [clang]: https://clang.llvm.org [python]: https://www.python.org/ [gfortran]: https://gcc.gnu.org/fortran/ [curl]: https://curl.haxx.se [fetch]: https://www.freebsd.org/cgi/man.cgi?fetch(1) [perl]: https://www.perl.org [cmake]: https://www.cmake.org [OpenLibm]: https://github.com/JuliaLang/openlibm [DSFMT]: https://github.com/MersenneTwister-Lab/dSFMT [OpenBLAS]: https://github.com/xianyi/OpenBLAS [LAPACK]: https://www.netlib.org/lapack [MKL]: https://software.intel.com/en-us/articles/intel-mkl [SuiteSparse]: https://people.engr.tamu.edu/davis/suitesparse.html [PCRE]: https://www.pcre.org [LLVM]: https://www.llvm.org [LLVM libunwind]: https://github.com/llvm/llvm-project/tree/main/libunwind [FemtoLisp]: https://github.com/JeffBezanson/femtolisp [GMP]: https://gmplib.org [MPFR]: https://www.mpfr.org [libuv]: https://github.com/JuliaLang/libuv [libgit2]: https://libgit2.org/ [utf8proc]: https://julialang.org/utf8proc/ [libunwind]: https://www.nongnu.org/libunwind [libssh2]: https://www.libssh2.org [mbedtls]: https://tls.mbed.org/ [pkg-config]: https://www.freedesktop.org/wiki/Software/pkg-config/ [powershell]: https://docs.microsoft.com/en-us/powershell/scripting/wmf/overview [which]: https://carlowood.github.io/which/ [ITTAPI]: https://github.com/intel/ittapi

Build dependencies

إذا كان لديك بالفعل حزمة واحدة أو أكثر مثبتة على نظامك، يمكنك منع جوليا من تجميع نسخ مكررة من هذه المكتبات عن طريق تمرير USE_SYSTEM_...=1 إلى make أو إضافة السطر إلى Make.user. يمكن العثور على القائمة الكاملة للعلامات الممكنة في Make.inc.

يرجى العلم أن هذه العملية غير مدعومة رسميًا، حيث إنها تضيف تباينًا إضافيًا في تثبيت وإصدار التبعيات، ويوصى بها فقط لمشرفي حزم النظام. قد تحدث أخطاء غير متوقعة في الترجمة، حيث لن يقوم نظام البناء بأي فحص إضافي للتأكد من تثبيت الحزم الصحيحة.

LLVM

أكثر الاعتماد تعقيدًا هو LLVM، الذي نحتاج فيه إلى تصحيحات إضافية من المصدر (LLVM غير متوافق مع الإصدارات السابقة).

لعبوة جوليا مع LLVM، نوصي إما:

  • تجميع مكتبة LLVM الخاصة بـ Julia داخل حزمة Julia، أو

  • إضافة التصحيحات إلى حزمة LLVM في التوزيعة.

    • قائمة كاملة من التصحيحات متاحة على Github راجع فرع julia-release/15.x.
    • الرقعة الوحيدة الخاصة بـ Julia هي إعادة تسمية المكتبة (llvm7-symver-jlprefix.patch)، والتي لا ينبغي تطبيقها على LLVM النظام.
    • الرقع المتبقية هي جميع إصلاحات الأخطاء في النسخة الأصلية، وقد تم المساهمة بها في LLVM النسخة الأصلية.

استخدام إصدار غير مصحح أو إصدار مختلف من LLVM سيؤدي إلى أخطاء و/أو أداء ضعيف. يمكنك بناء إصدار مختلف من LLVM من مستودع Git بعيد باستخدام الخيارات التالية في ملف Make.user:

# Force source build of LLVM
USE_BINARYBUILDER_LLVM = 0
# Use Git for fetching LLVM source code
# this is either `1` to get all of them
DEPS_GIT = 1
# or a space-separated list of specific dependencies to download with git
DEPS_GIT = llvm

# Other useful options:
#URL of the Git repository you want to obtain LLVM from:
#  LLVM_GIT_URL = ...
#Name of the alternate branch to clone from git
#  LLVM_BRANCH = julia-16.0.6-0
#SHA hash of the alterate commit to check out automatically
#  LLVM_SHA1 = $(LLVM_BRANCH)
#List of LLVM targets to build.  It is strongly recommended to keep at least all the
#default targets listed in `deps/llvm.mk`, even if you don't necessarily need all of them.
#  LLVM_TARGETS = ...
#Use ccache for faster recompilation in case you need to restart a build.
#  USECCACHE = 1
#  CMAKE_GENERATOR=Ninja
#  LLVM_ASSERTIONS=1
#  LLVM_DEBUG=Symbols

تتحكم ملفات محددة في مراحل البناء المختلفة:

  • deps/llvm.version : قم بلمسها أو تغييرها لتسجيل نسخة جديدة، make get-llvm check-llvm
  • deps/srccache/llvm/source-extracted : نتيجة make extract-llvm
  • deps/llvm/build_Release*/build-configured : نتيجة make configure-llvm
  • deps/llvm/build_Release*/build-configured : نتيجة make compile-llvm
  • usr-staging/llvm/build_Release*.tgz : نتيجة make stage-llvm (إعادة توليد باستخدام make reinstall-llvm)
  • usr/manifest/llvm : نتيجة make install-llvm (تجديد مع make uninstall-llvm)
  • make version-check-llvm : يعمل في كل مرة لتحذير المستخدم إذا كانت هناك تعديلات محلية

على الرغم من أنه يمكن بناء جوليا باستخدام إصدارات LLVM الأحدث، يجب اعتبار الدعم لذلك تجريبيًا وليس مناسبًا للتعبئة.

libuv

تستخدم جوليا نسخة مخصصة من libuv. إنها اعتماد صغير، ويمكن تضمينها بأمان في نفس حزمة جوليا، ولن تتعارض مع مكتبة النظام. يجب ألا تحاول بناء جوليا استخدام libuv الخاص بالنظام.

BLAS and LAPACK

كلغة عددية عالية الأداء، يجب ربط جوليا بمكتبة BLAS و LAPACK متعددة الخيوط، مثل OpenBLAS أو ATLAS، والتي ستوفر أداءً أفضل بكثير من تنفيذات libblas المرجعية التي قد تكون افتراضية على بعض الأنظمة.

Source distributions of releases

كل إصدار مسبق وإصدار من جوليا يحتوي على توزيع مصدر "كامل" وتوزيع مصدر "خفيف".

تحتوي حزمة المصدر الكاملة على كود المصدر لجوليا وجميع التبعيات بحيث يمكن بناؤها من المصدر دون اتصال بالإنترنت. لا تتضمن حزمة المصدر الخفيفة كود المصدر للتبعيات.

على سبيل المثال، julia-1.0.0.tar.gz هو توزيع مصدر الضوء لإصدار v1.0.0 من جوليا، بينما julia-1.0.0-full.tar.gz هو توزيع المصدر الكامل.

Building Julia from source with a Git checkout of a stdlib

إذا كنت بحاجة إلى بناء جوليا من المصدر مع نسخة Git من stdlib، فاستخدم make DEPS_GIT=NAME_OF_STDLIB عند بناء جوليا.

على سبيل المثال، إذا كنت بحاجة إلى بناء جوليا من المصدر مع نسخة Git من Pkg، فاستخدم make DEPS_GIT=Pkg عند بناء جوليا. مستودع Pkg موجود في stdlib/Pkg، وتم إنشاؤه في البداية مع HEAD مفصول. إذا كنت تقوم بذلك من مستودع جوليا موجود مسبقًا، فقد تحتاج إلى make clean مسبقًا.

إذا كنت بحاجة إلى بناء جوليا من المصدر مع عمليات التحقق من Git لأكثر من مكتبة قياسية واحدة، فيجب أن تكون DEPS_GIT قائمة مفصولة بمسافات بأسماء المكتبات القياسية. على سبيل المثال، إذا كنت بحاجة إلى بناء جوليا من المصدر مع عملية تحقق Git من Pkg و Tar و Downloads، فاستخدم make DEPS_GIT='Pkg Tar Downloads' عند بناء جوليا.

Building an "assert build" of Julia

بناء "assert build" من جوليا هو بناء تم إنشاؤه مع كل من FORCE_ASSERTIONS=1 و LLVM_ASSERTIONS=1. لإنشاء بناء assert، قم بتعريف كلا المتغيرين التاليين في ملف Make.user:

FORCE_ASSERTIONS=1
LLVM_ASSERTIONS=1

يرجى ملاحظة أن إصدارات assert من جوليا ستكون أبطأ من الإصدارات العادية (غير assert).

Building 32-bit Julia on a 64-bit machine

أحيانًا، قد تظهر أخطاء محددة للمعماريات 32-بت، وعندما يحدث ذلك، يكون من المفيد أن تكون قادرًا على تصحيح المشكلة على جهازك المحلي. نظرًا لأن معظم الأنظمة الحديثة 64-بت تدعم تشغيل البرامج المبنية للأنظمة 32-بت، إذا لم يكن عليك إعادة تجميع جوليا من المصدر (على سبيل المثال، تحتاج بشكل أساسي إلى فحص سلوك جوليا 32-بت دون الحاجة إلى لمس كود C)، يمكنك على الأرجح استخدام إصدار 32-بت من جوليا لنظامك الذي يمكنك الحصول عليه من official downloads page. ومع ذلك، إذا كنت بحاجة إلى إعادة تجميع جوليا من المصدر، فإن إحدى الخيارات هي استخدام حاوية دوكر لنظام 32-بت. على الأقل في الوقت الحالي، فإن بناء إصدار 32-بت من جوليا هو أمر بسيط نسبيًا باستخدام ubuntu 32-bit docker images. باختصار، بعد إعداد docker، إليك الخطوات المطلوبة:

$ docker pull i386/ubuntu
$ docker run --platform i386 -i -t i386/ubuntu /bin/bash

في هذه المرحلة، يجب أن تكون في وحدة تحكم آلة 32 بت (لاحظ أن uname يُبلغ عن بنية المضيف، لذا سيظل يقول 64 بت، لكن هذا لن يؤثر على بناء جوليا). يمكنك إضافة حزم وتجميع الشيفرة؛ عندما تقوم بـ exit، ستفقد جميع التغييرات، لذا تأكد من إنهاء تحليلك في جلسة واحدة أو إعداد نص يمكن نسخه/لصقه يمكنك استخدامه لإعداد بيئتك.

من هذه النقطة، يجب عليك

# apt update

(لاحظ أن sudo غير مثبت، ولكن ليس من الضروري ذلك لأنك تعمل كـ root، لذا يمكنك حذف sudo من جميع الأوامر.)

ثم أضف جميع build dependencies، محرر قائم على وحدة التحكم من اختيارك، git، وأي شيء آخر ستحتاجه (مثل gdb، rr، إلخ). اختر دليلًا للعمل فيه وgit clone جوليا، تحقق من الفرع الذي ترغب في تصحيحه، وابنِ جوليا كالمعتاد.

Update the version number of a dependency

هناك نوعان من البنايات

  1. قم ببناء كل شيء (deps/ و src/) من الشيفرة المصدرية. (أضف USE_BINARYBUILDER=0 إلى Make.user، انظر Building Julia)
  2. بناء من المصدر (src/) مع الاعتماديات المجمعة مسبقًا (افتراضي)

عندما تريد تحديث رقم إصدار الاعتماد في deps/، قد ترغب في استخدام قائمة التحقق التالية:

### Check list

Version numbers:
- [ ] `deps/$(libname).version`: `LIBNAME_VER`, `LIBNAME_BRANCH`, `LIBNAME_SHA1` and `LIBNAME_JLL_VER`
- [ ] `stdlib/$(LIBNAME_JLL_NAME)_jll/Project.toml`: `version`

Checksum:
- [ ] `deps/checksums/$(libname)`
- [ ] `deps/checksums/$(LIBNAME_JLL_NAME)-*/`: `md5` and `sha512`

Patches:
- [ ] `deps/$(libname).mk`
- [ ] `deps/patches/$(libname)-*.patch`

ملاحظة:

  • بالنسبة للاعتمادات المحددة، قد لا توجد بعض العناصر في قائمة التحقق.
  • ملف التحقق من الصحة، قد يكون ملفًا واحدًا بدون لاحقة، أو مجلدًا يحتوي على ملفين.

Example: OpenLibm

  1. تحديث أرقام النسخة في deps/openlibm.version

    • OPENLIBM_VER := 0.X.Y
    • OPENLIBM_BRANCH = v0.X.Y
    • OPENLIBM_SHA1 = new-sha1-hash
  2. تحديث رقم الإصدار في stdlib/OpenLibm_jll/Project.toml

    • version = "0.X.Y+0"
  3. تحديث الشيكسمات في deps/checksums/openlibm

    • make -f contrib/refresh_checksums.mk openlibm
  4. تحقق مما إذا كانت ملفات التصحيح deps/patches/openlibm-*.patch موجودة

    • إذا لم توجد التصحيحات، تخطى.
    • إذا كانت التصحيحات موجودة، تحقق مما إذا كانت قد تم دمجها في النسخة الجديدة وتحتاج إلى الإزالة. عند حذف تصحيح، تذكر تعديل ملف Makefile المقابل (deps/openlibm.mk).