summaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
authorChun-wei Fan <fanc999@yahoo.com.tw>2023-02-03 17:43:45 +0800
committerChun-wei Fan <fanc999@yahoo.com.tw>2023-02-04 11:02:47 +0800
commit7937255c56819e32e3c77f6883f040b800aebf24 (patch)
tree49877c9142b4d602d237b40692aa0608ec7ccac9 /win32
parent805e4ed8849aeb563c5b92a18a518a5d15e924a3 (diff)
downloadlibrsvg-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.md5
-rw-r--r--win32/build-rules-msvc.mak6
-rw-r--r--win32/config-msvc.mak.in2
-rw-r--r--win32/info-msvc.mak7
-rw-r--r--win32/rsvg-rust.mak70
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"