mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-07-02 19:03:24 +03:00
windows: compile dependencies with ninja instead of nmake
This commit is contained in:
parent
407489a0dc
commit
abd2a3f7ee
|
@ -24,7 +24,10 @@ Download and install:
|
||||||
* `CMake 3.13 or newer <https://cmake.org/download/>`_
|
* `CMake 3.13 or newer <https://cmake.org/download/>`_
|
||||||
(also available as Visual Studio component C++ CMake tools for Windows)
|
(also available as Visual Studio component C++ CMake tools for Windows)
|
||||||
|
|
||||||
* x86/x64: `NASM <https://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D>`_
|
* `Ninja <https://ninja-build.org/>`_
|
||||||
|
(optional, use ``--nmake`` if not available; bundled in Visual Studio CMake component)
|
||||||
|
|
||||||
|
* x86/x64: `Netwide Assembler (NASM) <https://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D>`_
|
||||||
|
|
||||||
Any version of Visual Studio 2017 or newer should be supported,
|
Any version of Visual Studio 2017 or newer should be supported,
|
||||||
including Visual Studio 2017 Community, or Build Tools for Visual Studio 2019.
|
including Visual Studio 2017 Community, or Build Tools for Visual Studio 2019.
|
||||||
|
@ -53,6 +56,7 @@ behaviour of ``build_prepare.py``:
|
||||||
``build_prepare.py`` also supports the following command line parameters:
|
``build_prepare.py`` also supports the following command line parameters:
|
||||||
|
|
||||||
* ``-v`` will print generated scripts.
|
* ``-v`` will print generated scripts.
|
||||||
|
* ``--nmake`` will use NMake instead of Ninja for CMake dependencies
|
||||||
* ``--no-imagequant`` will skip GPL-licensed ``libimagequant`` optional dependency
|
* ``--no-imagequant`` will skip GPL-licensed ``libimagequant`` optional dependency
|
||||||
* ``--no-fribidi`` or ``--no-raqm`` will skip optional LGPL-licensed dependency FriBiDi
|
* ``--no-fribidi`` or ``--no-raqm`` will skip optional LGPL-licensed dependency FriBiDi
|
||||||
(required for Raqm text shaping).
|
(required for Raqm text shaping).
|
||||||
|
|
|
@ -55,24 +55,28 @@ def cmd_nmake(makefile=None, target="", params=None):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def cmd_cmake(params=None, file="."):
|
def cmds_cmake(target, *params):
|
||||||
if params is None:
|
if isinstance(target, str):
|
||||||
params = ""
|
targets = ("clean", target)
|
||||||
elif isinstance(params, (list, tuple)):
|
|
||||||
params = " ".join(params)
|
|
||||||
else:
|
else:
|
||||||
params = str(params)
|
targets = ("clean", *target)
|
||||||
return " ".join(
|
|
||||||
|
return [
|
||||||
|
" ".join(
|
||||||
[
|
[
|
||||||
"{cmake}",
|
"{cmake}",
|
||||||
"-DCMAKE_VERBOSE_MAKEFILE=ON",
|
|
||||||
"-DCMAKE_RULE_MESSAGES:BOOL=OFF",
|
|
||||||
"-DCMAKE_BUILD_TYPE=Release",
|
"-DCMAKE_BUILD_TYPE=Release",
|
||||||
f"{params}",
|
"-DCMAKE_VERBOSE_MAKEFILE=ON",
|
||||||
'-G "NMake Makefiles"',
|
"-DCMAKE_RULE_MESSAGES:BOOL=OFF", # for NMake
|
||||||
f'"{file}"',
|
"-DCMAKE_C_COMPILER=cl.exe", # for Ninja
|
||||||
|
"-DCMAKE_CXX_COMPILER=cl.exe", # for Ninja
|
||||||
|
*params,
|
||||||
|
'-G "{cmake_generator}"',
|
||||||
|
".",
|
||||||
|
]
|
||||||
|
),
|
||||||
|
*(f"{{cmake}} --build . --target {tgt}" for tgt in targets),
|
||||||
]
|
]
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def cmd_msbuild(
|
def cmd_msbuild(
|
||||||
|
@ -118,19 +122,14 @@ deps = {
|
||||||
".+(libjpeg-turbo Licenses\n======================\n\n.+)$"
|
".+(libjpeg-turbo Licenses\n======================\n\n.+)$"
|
||||||
),
|
),
|
||||||
"build": [
|
"build": [
|
||||||
cmd_cmake(
|
*cmds_cmake(
|
||||||
[
|
("jpeg-static", "cjpeg-static", "djpeg-static"),
|
||||||
"-DENABLE_SHARED:BOOL=FALSE",
|
"-DENABLE_SHARED:BOOL=FALSE",
|
||||||
"-DWITH_JPEG8:BOOL=TRUE",
|
"-DWITH_JPEG8:BOOL=TRUE",
|
||||||
"-DWITH_CRT_DLL:BOOL=TRUE",
|
"-DWITH_CRT_DLL:BOOL=TRUE",
|
||||||
]
|
|
||||||
),
|
),
|
||||||
cmd_nmake(target="clean"),
|
|
||||||
cmd_nmake(target="jpeg-static"),
|
|
||||||
cmd_copy("jpeg-static.lib", "libjpeg.lib"),
|
cmd_copy("jpeg-static.lib", "libjpeg.lib"),
|
||||||
cmd_nmake(target="cjpeg-static"),
|
|
||||||
cmd_copy("cjpeg-static.exe", "cjpeg.exe"),
|
cmd_copy("cjpeg-static.exe", "cjpeg.exe"),
|
||||||
cmd_nmake(target="djpeg-static"),
|
|
||||||
cmd_copy("djpeg-static.exe", "djpeg.exe"),
|
cmd_copy("djpeg-static.exe", "djpeg.exe"),
|
||||||
],
|
],
|
||||||
"headers": ["j*.h"],
|
"headers": ["j*.h"],
|
||||||
|
@ -157,9 +156,7 @@ deps = {
|
||||||
"dir": "xz-5.4.1",
|
"dir": "xz-5.4.1",
|
||||||
"license": "COPYING",
|
"license": "COPYING",
|
||||||
"build": [
|
"build": [
|
||||||
cmd_cmake("-DBUILD_SHARED_LIBS:BOOL=OFF"),
|
*cmds_cmake("liblzma", "-DBUILD_SHARED_LIBS:BOOL=OFF"),
|
||||||
cmd_nmake(target="clean"),
|
|
||||||
cmd_nmake(target="liblzma"),
|
|
||||||
cmd_mkdir(r"{inc_dir}\lzma"),
|
cmd_mkdir(r"{inc_dir}\lzma"),
|
||||||
cmd_copy(r"src\liblzma\api\lzma\*.h", r"{inc_dir}\lzma"),
|
cmd_copy(r"src\liblzma\api\lzma\*.h", r"{inc_dir}\lzma"),
|
||||||
],
|
],
|
||||||
|
@ -205,11 +202,11 @@ deps = {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"build": [
|
"build": [
|
||||||
cmd_cmake(
|
*cmds_cmake(
|
||||||
"-DBUILD_SHARED_LIBS:BOOL=OFF", "-DCMAKE_C_FLAGS=-DLZMA_API_STATIC"
|
"tiff",
|
||||||
),
|
"-DBUILD_SHARED_LIBS:BOOL=OFF",
|
||||||
cmd_nmake(target="clean"),
|
"-DCMAKE_C_FLAGS=-DLZMA_API_STATIC",
|
||||||
cmd_nmake(target="tiff"),
|
)
|
||||||
],
|
],
|
||||||
"headers": [r"libtiff\tiff*.h"],
|
"headers": [r"libtiff\tiff*.h"],
|
||||||
"libs": [r"libtiff\*.lib"],
|
"libs": [r"libtiff\*.lib"],
|
||||||
|
@ -221,10 +218,7 @@ deps = {
|
||||||
"dir": "lpng1639",
|
"dir": "lpng1639",
|
||||||
"license": "LICENSE",
|
"license": "LICENSE",
|
||||||
"build": [
|
"build": [
|
||||||
# lint: do not inline
|
*cmds_cmake("png_static", "-DPNG_SHARED:BOOL=OFF", "-DPNG_TESTS:BOOL=OFF"),
|
||||||
cmd_cmake(("-DPNG_SHARED:BOOL=OFF", "-DPNG_TESTS:BOOL=OFF")),
|
|
||||||
cmd_nmake(target="clean"),
|
|
||||||
cmd_nmake(),
|
|
||||||
cmd_copy("libpng16_static.lib", "libpng16.lib"),
|
cmd_copy("libpng16_static.lib", "libpng16.lib"),
|
||||||
],
|
],
|
||||||
"headers": [r"png*.h"],
|
"headers": [r"png*.h"],
|
||||||
|
@ -236,10 +230,7 @@ deps = {
|
||||||
"dir": "brotli-1.0.9",
|
"dir": "brotli-1.0.9",
|
||||||
"license": "LICENSE",
|
"license": "LICENSE",
|
||||||
"build": [
|
"build": [
|
||||||
cmd_cmake(),
|
*cmds_cmake(("brotlicommon-static", "brotlidec-static")),
|
||||||
cmd_nmake(target="clean"),
|
|
||||||
cmd_nmake(target="brotlicommon-static"),
|
|
||||||
cmd_nmake(target="brotlidec-static"),
|
|
||||||
cmd_xcopy(r"c\include", "{inc_dir}"),
|
cmd_xcopy(r"c\include", "{inc_dir}"),
|
||||||
],
|
],
|
||||||
"libs": ["*.lib"],
|
"libs": ["*.lib"],
|
||||||
|
@ -317,9 +308,9 @@ deps = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"build": [
|
"build": [
|
||||||
cmd_cmake(("-DBUILD_CODEC:BOOL=OFF", "-DBUILD_SHARED_LIBS:BOOL=OFF")),
|
*cmds_cmake(
|
||||||
cmd_nmake(target="clean"),
|
"openjp2", "-DBUILD_CODEC:BOOL=OFF", "-DBUILD_SHARED_LIBS:BOOL=OFF"
|
||||||
cmd_nmake(target="openjp2"),
|
),
|
||||||
cmd_mkdir(r"{inc_dir}\openjpeg-2.5.0"),
|
cmd_mkdir(r"{inc_dir}\openjpeg-2.5.0"),
|
||||||
cmd_copy(r"src\lib\openjp2\*.h", r"{inc_dir}\openjpeg-2.5.0"),
|
cmd_copy(r"src\lib\openjp2\*.h", r"{inc_dir}\openjpeg-2.5.0"),
|
||||||
],
|
],
|
||||||
|
@ -338,10 +329,7 @@ deps = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"build": [
|
"build": [
|
||||||
# lint: do not inline
|
*cmds_cmake("imagequant_a"),
|
||||||
cmd_cmake(),
|
|
||||||
cmd_nmake(target="clean"),
|
|
||||||
cmd_nmake(target="imagequant_a"),
|
|
||||||
cmd_copy("imagequant_a.lib", "imagequant.lib"),
|
cmd_copy("imagequant_a.lib", "imagequant.lib"),
|
||||||
],
|
],
|
||||||
"headers": [r"*.h"],
|
"headers": [r"*.h"],
|
||||||
|
@ -354,9 +342,7 @@ deps = {
|
||||||
"license": "COPYING",
|
"license": "COPYING",
|
||||||
"build": [
|
"build": [
|
||||||
cmd_set("CXXFLAGS", "-d2FH4-"),
|
cmd_set("CXXFLAGS", "-d2FH4-"),
|
||||||
cmd_cmake("-DHB_HAVE_FREETYPE:BOOL=TRUE"),
|
*cmds_cmake("harfbuzz", "-DHB_HAVE_FREETYPE:BOOL=TRUE"),
|
||||||
cmd_nmake(target="clean"),
|
|
||||||
cmd_nmake(target="harfbuzz"),
|
|
||||||
],
|
],
|
||||||
"headers": [r"src\*.h"],
|
"headers": [r"src\*.h"],
|
||||||
"libs": [r"*.lib"],
|
"libs": [r"*.lib"],
|
||||||
|
@ -369,9 +355,7 @@ deps = {
|
||||||
"build": [
|
"build": [
|
||||||
cmd_copy(r"COPYING", r"{bin_dir}\fribidi-1.0.12-COPYING"),
|
cmd_copy(r"COPYING", r"{bin_dir}\fribidi-1.0.12-COPYING"),
|
||||||
cmd_copy(r"{winbuild_dir}\fribidi.cmake", r"CMakeLists.txt"),
|
cmd_copy(r"{winbuild_dir}\fribidi.cmake", r"CMakeLists.txt"),
|
||||||
cmd_cmake(),
|
*cmds_cmake("fribidi"),
|
||||||
cmd_nmake(target="clean"),
|
|
||||||
cmd_nmake(target="fribidi"),
|
|
||||||
],
|
],
|
||||||
"bins": [r"*.dll"],
|
"bins": [r"*.dll"],
|
||||||
},
|
},
|
||||||
|
@ -600,10 +584,13 @@ if __name__ == "__main__":
|
||||||
else ("x86" if struct.calcsize("P") == 4 else "x64"),
|
else ("x86" if struct.calcsize("P") == 4 else "x64"),
|
||||||
)
|
)
|
||||||
build_dir = os.environ.get("PILLOW_BUILD", os.path.join(winbuild_dir, "build"))
|
build_dir = os.environ.get("PILLOW_BUILD", os.path.join(winbuild_dir, "build"))
|
||||||
|
cmake_generator = "Ninja"
|
||||||
sources_dir = ""
|
sources_dir = ""
|
||||||
for arg in sys.argv[1:]:
|
for arg in sys.argv[1:]:
|
||||||
if arg == "-v":
|
if arg == "-v":
|
||||||
verbose = True
|
verbose = True
|
||||||
|
elif arg == "--nmake":
|
||||||
|
cmake_generator = "NMake Makefiles"
|
||||||
elif arg == "--no-imagequant":
|
elif arg == "--no-imagequant":
|
||||||
disabled += ["libimagequant"]
|
disabled += ["libimagequant"]
|
||||||
elif arg == "--no-raqm" or arg == "--no-fribidi":
|
elif arg == "--no-raqm" or arg == "--no-fribidi":
|
||||||
|
@ -679,6 +666,7 @@ if __name__ == "__main__":
|
||||||
# Compilers / Tools
|
# Compilers / Tools
|
||||||
**msvs,
|
**msvs,
|
||||||
"cmake": "cmake.exe", # TODO find CMAKE automatically
|
"cmake": "cmake.exe", # TODO find CMAKE automatically
|
||||||
|
"cmake_generator": cmake_generator,
|
||||||
# TODO find NASM automatically
|
# TODO find NASM automatically
|
||||||
# script header
|
# script header
|
||||||
"header": sum([header, msvs["header"], ["@echo on"]], []),
|
"header": sum([header, msvs["header"], ["@echo on"]], []),
|
||||||
|
|
Loading…
Reference in New Issue
Block a user