diff options
author | Chun-wei Fan <fanc999@yahoo.com.tw> | 2023-02-03 17:43:45 +0800 |
---|---|---|
committer | Chun-wei Fan <fanc999@yahoo.com.tw> | 2023-02-04 11:02:47 +0800 |
commit | 7937255c56819e32e3c77f6883f040b800aebf24 (patch) | |
tree | 49877c9142b4d602d237b40692aa0608ec7ccac9 /win32 | |
parent | 805e4ed8849aeb563c5b92a18a518a5d15e924a3 (diff) | |
download | librsvg-7937255c56819e32e3c77f6883f040b800aebf24.tar.gz |
NMake Makefiles: Clean up a bit
This attempts to clean up the NMake Makefiles, as well as making running
Cargo in a cleaner manner, by:
* Reduce repetitions in the code using Makefile variables and expanding
on them.
* Use --target-dir and --manifest-path to reduce changing directories
and setting envvars during the build.
* Use the correct intermediate directories for cross- and
non-cross-builds, for at least Cargo 1.67.x or later. For RustC
1.63.x to 1.66.x non-cross builds, please update to 1.67.x if this
becomes an issue, or file an issue to support the older method.
* Use the toolchain flag (the +$(toolchain) flag) so that we do not
attempt to set the default toolchain when building 32-bit builds on a
64-bit system, for instance. Note that for cross-builds (i.e. x64
builds in a 32-bit build/cross environment and ARM64 builds) continue
to use the --target=... flag, as it is required.
* Add two NMake Makefile options, VERBOSE and USE_NIGHTLY_TOOLCHAIN,
to use verbose mode during Rust compilation and use a nightly
toolchain instead of a stable toolchain. This means, verbose Rust
compilation mode is now only enabled on demand, and one can choose to
use a nightly Rust toolchain instead of the stable one if needed.
Diffstat (limited to 'win32')
-rw-r--r-- | win32/MSVC-Builds.md | 5 | ||||
-rw-r--r-- | win32/build-rules-msvc.mak | 6 | ||||
-rw-r--r-- | win32/config-msvc.mak.in | 2 | ||||
-rw-r--r-- | win32/info-msvc.mak | 7 | ||||
-rw-r--r-- | win32/rsvg-rust.mak | 70 |
5 files changed, 54 insertions, 36 deletions
diff --git a/win32/MSVC-Builds.md b/win32/MSVC-Builds.md index 81847342..af994afb 100644 --- a/win32/MSVC-Builds.md +++ b/win32/MSVC-Builds.md @@ -167,3 +167,8 @@ Where: additionally require Pango built with FreeType support, meaning
that HarfBuzz, FontConfig and FreeType will also be required for
the test programs to run.
+ * `VERBOSE`: Use verbose mode when building the Rust code.
+ * `USE_NIGHTLY_TOOLCHAIN`: Use a nightly/unstable Rust toolchain
+ instead of the default stable toolchain. Useful for testing
+ the librsvg code against an unstable toolchain or the unstable
+ toolchain itself.
diff --git a/win32/build-rules-msvc.mak b/win32/build-rules-msvc.mak index 374e8b2b..cbc33507 100644 --- a/win32/build-rules-msvc.mak +++ b/win32/build-rules-msvc.mak @@ -64,9 +64,9 @@ $(OUTDIR)\rsvg-gdk-pixbuf-loader\io-svg.obj # << # @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1 $(OUTDIR)\rsvg-convert.exe: \ -vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\rsvg-convert.exe - @copy /b $** $@ - @if exist $(**D)\rsvg_convert.pdb copy /b $(**D)\rsvg_convert.pdb $(@D) +$(CARGO_TARGET_OUTPUT_DIR)\rsvg-convert.exe + copy /b $** $@ + if exist $(**D)\rsvg_convert.pdb copy /b $(**D)\rsvg_convert.pdb $(@D) # Include the rules for the test programs !include rsvg_tests_rules.mak diff --git a/win32/config-msvc.mak.in b/win32/config-msvc.mak.in index d995edb8..3d219d35 100644 --- a/win32/config-msvc.mak.in +++ b/win32/config-msvc.mak.in @@ -106,7 +106,7 @@ TEST_DEP_LIBS = \ fontconfig.lib !endif -RSVG_INTERNAL_LIB = $(OUTDIR)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\librsvg.lib +RSVG_INTERNAL_LIB = $(CARGO_TARGET_OUTPUT_DIR)\librsvg.lib LIBRSVG_DEP_LIBS = \ $(RSVG_INTERNAL_LIB) \ diff --git a/win32/info-msvc.mak b/win32/info-msvc.mak index 9f6ac711..e94287c6 100644 --- a/win32/info-msvc.mak +++ b/win32/info-msvc.mak @@ -106,6 +106,13 @@ help: @echo Use a libtool-style DLL name to mimic the DLL file naming generated by @echo MinGW/autotools builds. Please note that this does not enable one to use @echo this build with MinGW builds. + @echo. + @echo VERBOSE: + @echo Run Cargo (i.e. the Rust compilation) in verbose mode. + @echo. + @echo USE_NIGHTLY_TOOLCHAIN: + @echo Use a nightly Rust toolchain instead of a stable one. Notice the nightly + @echo toolchain for the target architecture must be installed beforehand. @echo ====== @echo. @echo Other options: diff --git a/win32/rsvg-rust.mak b/win32/rsvg-rust.mak index 722f1eec..64bf359c 100644 --- a/win32/rsvg-rust.mak +++ b/win32/rsvg-rust.mak @@ -13,6 +13,17 @@ CARGO = cargo RUSTUP = rustup !endif +# For those who wish to use the nightly toolchain to build librsvg +!ifdef USE_NIGHTLY_TOOLCHAIN +TOOLCHAIN_TYPE = nightly +!else +TOOLCHAIN_TYPE = stable +!endif + +!ifdef VERBOSE +RUST_VERBOSE_FLAG = --verbose +!endif + # Use Rust's cross compiling capabilities? !ifndef FORCE_CROSS FORCE_CROSS = 0 @@ -38,14 +49,25 @@ BUILD_RUST = 0 !if "$(BUILD_RUST)" == "1" -CARGO_TARGET = --target $(RUST_TARGET)-pc-windows-msvc -DEFAULT_TARGET = stable-$(RUST_TARGET)-pc-windows-msvc +CARGO_TARGET = $(RUST_TARGET)-pc-windows-msvc +CARGO_TARGET_CMD = --target $(CARGO_TARGET) +CARGO_TARGET_TOOLCHAIN = $(TOOLCHAIN_TYPE)-$(CARGO_TARGET) RUSTUP_CMD = $(RUSTUP) default $(DEFAULT_TARGET) +CARGO_TARGET_DIR = vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api +CARGO_TARGET_DIR_FLAG = --target-dir=$(CARGO_TARGET_DIR) -!if "$(CFG)" == "release" || "$(CFG)" == "Release" -CARGO_CMD = $(CARGO) --locked build $(CARGO_TARGET) --release +MANIFEST_PATH_FLAG = --manifest-path=..\Cargo.toml +!if $(FORCE_CROSS) > 0 +CARGO_CMD = $(CARGO) --locked build $(CARGO_TARGET_CMD) $(MANIFEST_PATH_FLAG) $(CARGO_TARGET_DIR_FLAG) +CARGO_CLEAN_CMD = $(CARGO) clean $(CARGO_TARGET_CMD) $(MANIFEST_PATH_FLAG) $(CARGO_TARGET_DIR_FLAG) +CARGO_TARGET_OUTPUT_DIR = $(CARGO_TARGET_DIR)\$(CARGO_TARGET)\$(CFG) !else -CARGO_CMD = $(CARGO) --locked build $(CARGO_TARGET) +CARGO_CMD = $(CARGO) +$(CARGO_TARGET_TOOLCHAIN) --locked build $(MANIFEST_PATH_FLAG) $(CARGO_TARGET_DIR_FLAG) +CARGO_CLEAN_CMD = $(CARGO) +$(CARGO_TARGET_TOOLCHAIN) clean $(MANIFEST_PATH_FLAG) $(CARGO_TARGET_DIR_FLAG) +CARGO_TARGET_OUTPUT_DIR = $(CARGO_TARGET_DIR)\$(CFG) +!endif +!if "$(CFG)" == "release" || "$(CFG)" == "Release" +CARGO_CMD = $(CARGO_CMD) --release !endif # For building the Rust bits for ARM64 Windows, or when we are building on @@ -91,26 +113,24 @@ build-$(PLAT)-$(CFG).pre.bat: @echo set __VSCMD_script_err_count=>>$@ @echo if not "$(__VSCMD_PREINIT_PATH)" == "" set PATH=$(__VSCMD_PREINIT_PATH);%HOMEPATH%\.cargo\bin>>$@ @echo if "$(__VSCMD_PREINIT_PATH)" == "" set PATH=c:\Windows\system;c:\Windows;c:\Windows\system32\wbem;%HOMEPATH%\.cargo\bin>>$@ - @echo set CARGO_TARGET_DIR=win32\vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api>>$@ @echo set GTK_LIB_DIR=$(LIBDIR)>>$@ @echo set SYSTEM_DEPS_LIBXML2_LIB=$(LIBXML2_LIB:.lib=)>>$@ @if not "$(PKG_CONFIG_PATH)" == "" echo set PKG_CONFIG_PATH=$(PKG_CONFIG_PATH)>>$@ @if not "$(PKG_CONFIG)" == "" echo set PKG_CONFIG=$(PKG_CONFIG)>>$@ - @echo cd ..>>$@ build-$(PLAT)-$(CFG)-lib.bat: build-$(PLAT)-$(CFG).pre.bat @type $**>$@ - @echo $(CARGO_CMD) --verbose --lib>>$@ + @echo $(CARGO_CMD) $(RUST_VERBOSE_FLAG) --lib>>$@ build-$(PLAT)-$(CFG)-bin.bat: build-$(PLAT)-$(CFG).pre.bat @type $**>$@ - @echo $(CARGO_CMD) --verbose --bin rsvg-convert>>$@ + @echo $(CARGO_CMD) $(RUST_VERBOSE_FLAG) --bin rsvg-convert>>$@ -vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\librsvg.lib: build-$(PLAT)-$(CFG)-lib.bat -vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\rsvg-convert.exe: build-$(PLAT)-$(CFG)-bin.bat +$(CARGO_TARGET_OUTPUT_DIR)\librsvg.lib: build-$(PLAT)-$(CFG)-lib.bat +$(CARGO_TARGET_OUTPUT_DIR)\rsvg-convert.exe: build-$(PLAT)-$(CFG)-bin.bat -vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\librsvg.lib \ -vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\rsvg-convert.exe: +$(CARGO_TARGET_OUTPUT_DIR)\librsvg.lib \ +$(CARGO_TARGET_OUTPUT_DIR)\rsvg-convert.exe: @echo Please do not manually close the command window that pops up... @echo. @echo If this fails due to LNK1112 or a linker executable cannot be found, run @@ -120,43 +140,29 @@ vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\r @start "Building the Rust bits for $(PLAT) Windows MSVC Build, please do not close this console window..." /wait /i cmd /c $** !else -vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\librsvg.lib: +$(CARGO_TARGET_OUTPUT_DIR)\librsvg.lib: @set PATH=%PATH%;%HOMEPATH%\.cargo\bin - @set CARGO_TARGET_DIR=win32\vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api @set GTK_LIB_DIR=$(LIBDIR);$(LIB) @set SYSTEM_DEPS_LIBXML2_LIB=$(LIBXML2_LIB:.lib=) @if not "$(PKG_CONFIG_PATH)" == "" set PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) @if not "$(PKG_CONFIG)" == "" set PKG_CONFIG=$(PKG_CONFIG) - $(RUSTUP_CMD) - @cd .. - $(CARGO_CMD) --verbose --lib - @cd win32 + $(CARGO_CMD) $(RUST_VERBOSE_FLAG) --lib @set GTK_LIB_DIR= - @set CARGO_TARGET_DIR= -vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api\$(RUST_TARGET)-pc-windows-msvc\$(CFG)\rsvg-convert.exe: +$(CARGO_TARGET_OUTPUT_DIR)\rsvg-convert.exe: @set PATH=%PATH%;%HOMEPATH%\.cargo\bin - @set CARGO_TARGET_DIR=win32\vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api @set GTK_LIB_DIR=$(LIBDIR);$(LIB) @set SYSTEM_DEPS_LIBXML2_LIB=$(LIBXML2_LIB:.lib=) @if not "$(PKG_CONFIG_PATH)" == "" set PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) @if not "$(PKG_CONFIG)" == "" set PKG_CONFIG=$(PKG_CONFIG) - $(RUSTUP_CMD) - @cd .. - $(CARGO_CMD) --verbose --bin $(@B) - @cd win32 + $(CARGO_CMD) $(RUST_VERBOSE_FLAG) --bin $(@B) @set GTK_LIB_DIR= - @set CARGO_TARGET_DIR= !endif cargo-clean: @set PATH=%PATH%;%HOMEPATH%\.cargo\bin - @set CARGO_TARGET_DIR=win32\vs$(VSVER)\$(CFG)\$(PLAT)\obj\rsvg_c_api @if exist build-$(PLAT)-$(CFG).bat del /f/q build-$(PLAT)-$(CFG).bat - @cd .. - @$(CARGO) clean - @cd win32 - @set CARGO_TARGET_DIR= + @$(CARGO_CLEAN_CMD) !else !if "$(VALID_CFGSET)" == "FALSE" |