Add tool to build the core DLL for multiple platforms using MSVC.
FossilOrigin-Name: e42f5812f142522852f6dc72430bc7afdd6f2ed3
This commit is contained in:
parent
486801909c
commit
31856a35b9
@ -30,6 +30,11 @@ USE_NATIVE_LIBPATHS = 0
|
||||
#
|
||||
FOR_WINRT = 0
|
||||
|
||||
# Set this non-0 to skip attempting to look for and/or link with the Tcl
|
||||
# runtime library.
|
||||
#
|
||||
NO_TCL = 0
|
||||
|
||||
# Set this to non-0 to create and use PDBs.
|
||||
#
|
||||
SYMBOLS = 1
|
||||
@ -345,8 +350,10 @@ LDFLAGS = /DEBUG
|
||||
!ENDIF
|
||||
|
||||
# Start with the Tcl related linker options.
|
||||
!IF $(NO_TCL)==0
|
||||
LTLIBPATHS = /LIBPATH:$(TCLLIBDIR)
|
||||
LTLIBS = $(LIBTCL)
|
||||
!ENDIF
|
||||
|
||||
# If ICU support is enabled, add the linker options for it.
|
||||
!IF $(USE_ICU)!=0
|
||||
|
13
manifest
13
manifest
@ -1,9 +1,9 @@
|
||||
C Add\stool\sto\sgenerate\sa\sVSIX\spackage\susable\sby\sVisual\sStudio\s2012\sRC.
|
||||
D 2012-07-27T02:36:06.349
|
||||
C Add\stool\sto\sbuild\sthe\score\sDLL\sfor\smultiple\splatforms\susing\sMSVC.
|
||||
D 2012-07-27T07:13:25.700
|
||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||
F Makefile.in 8f6d858bf3df9978ba43df19985146a1173025e4
|
||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||
F Makefile.msc a2a8fcd4104a67e037351323c88e0e4822596926
|
||||
F Makefile.msc d598bf4a464d2e9ecbeeea809969c2ac3bf97359
|
||||
F Makefile.vxworks 879f034a64062a364b21000266bbd5bc6e0c19b9
|
||||
F README cd04a36fbc7ea56932a4052d7d0b7f09f27c33d6
|
||||
F VERSION a71848df48082f1d6585d4b0819d530fc455485d
|
||||
@ -966,6 +966,7 @@ F test/wherelimit.test 5e9fd41e79bb2b2d588ed999d641d9c965619b31
|
||||
F test/win32lock.test b2a539e85ae6b2d78475e016a9636b4451dc7fb9
|
||||
F test/zeroblob.test caaecfb4f908f7bc086ed238668049f96774d688
|
||||
F test/zerodamage.test 0de750389990b1078bab203c712dc3fefd1d8b82
|
||||
F tool/build-all-msvc.bat fe0f031dce6881469b0949283a3cfa8a93032eca x
|
||||
F tool/build-shell.sh b64a481901fc9ffe5ca8812a2a9255b6cfb77381
|
||||
F tool/diffdb.c 7524b1b5df217c20cd0431f6789851a4e0cb191b
|
||||
F tool/extract.c 054069d81b095fbdc189a6f5d4466e40380505e2
|
||||
@ -1007,7 +1008,7 @@ F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
||||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
|
||||
F tool/win/sqlite.vsix 84163b633f01f35cb47495c05dd2b640159677ff
|
||||
P d8da26f1f43610ac83af2a5d0e170be5abaf7aaa
|
||||
R e89b8d51f4ab3734c03bdfc7ca67399b
|
||||
P 8b90e0c4dbcedaf3e61c5d49452997705be1ef98
|
||||
R 352e3b46f2ff977e05b0828462f57f7b
|
||||
U mistachkin
|
||||
Z ca7c7ef3778a69af10a33d78de2dc884
|
||||
Z 1ba4e6125d90314090d1c67374bcfabc
|
||||
|
@ -1 +1 @@
|
||||
8b90e0c4dbcedaf3e61c5d49452997705be1ef98
|
||||
e42f5812f142522852f6dc72430bc7afdd6f2ed3
|
331
tool/build-all-msvc.bat
Executable file
331
tool/build-all-msvc.bat
Executable file
@ -0,0 +1,331 @@
|
||||
@ECHO OFF
|
||||
|
||||
::
|
||||
:: build-all-msvc.bat --
|
||||
::
|
||||
:: Multi-Platform Build Tool for MSVC
|
||||
::
|
||||
|
||||
SETLOCAL
|
||||
|
||||
REM SET __ECHO=ECHO
|
||||
REM SET __ECHO2=ECHO
|
||||
IF NOT DEFINED _AECHO (SET _AECHO=REM)
|
||||
IF NOT DEFINED _CECHO (SET _CECHO=REM)
|
||||
IF NOT DEFINED _VECHO (SET _VECHO=REM)
|
||||
|
||||
%_AECHO% Running %0 %*
|
||||
|
||||
REM SET DFLAGS=/L
|
||||
|
||||
%_VECHO% DFlags = '%DFLAGS%'
|
||||
|
||||
SET FFLAGS=/V /F /G /H /I /R /Y /Z
|
||||
|
||||
%_VECHO% FFlags = '%FFLAGS%'
|
||||
|
||||
SET ROOT=%~dp0\..
|
||||
SET ROOT=%ROOT:\\=\%
|
||||
|
||||
%_VECHO% Root = '%ROOT%'
|
||||
|
||||
REM
|
||||
REM NOTE: The first and only argument to this batch file should be the output
|
||||
REM directory where the platform-specific binary directories should be
|
||||
REM created.
|
||||
REM
|
||||
SET BINARYDIRECTORY=%1
|
||||
|
||||
IF NOT DEFINED BINARYDIRECTORY (
|
||||
GOTO usage
|
||||
)
|
||||
|
||||
%_VECHO% BinaryDirectory = '%BINARYDIRECTORY%'
|
||||
|
||||
SET DUMMY=%2
|
||||
|
||||
IF DEFINED DUMMY (
|
||||
GOTO usage
|
||||
)
|
||||
|
||||
REM
|
||||
REM NOTE: From this point, we need a clean error level. Reset it now.
|
||||
REM
|
||||
CALL :fn_ResetErrorLevel
|
||||
|
||||
REM
|
||||
REM NOTE: Change the current directory to the root of the source tree, saving
|
||||
REM the current directory on the directory stack.
|
||||
REM
|
||||
%__ECHO2% PUSHD "%ROOT%"
|
||||
|
||||
IF ERRORLEVEL 1 (
|
||||
ECHO Could not change directory to "%ROOT%".
|
||||
GOTO errors
|
||||
)
|
||||
|
||||
REM
|
||||
REM NOTE: This batch file requires the ComSpec environment variable to be set,
|
||||
REM typically to something like "C:\Windows\System32\cmd.exe".
|
||||
REM
|
||||
IF NOT DEFINED ComSpec (
|
||||
ECHO The ComSpec environment variable must be defined.
|
||||
GOTO errors
|
||||
)
|
||||
|
||||
REM
|
||||
REM NOTE: This batch file requires the VcInstallDir environment variable to be
|
||||
REM set. Tyipcally, this means this batch file needs to be run from an
|
||||
REM MSVC command prompt.
|
||||
REM
|
||||
IF NOT DEFINED VCINSTALLDIR (
|
||||
ECHO The VCINSTALLDIR environment variable must be defined.
|
||||
GOTO errors
|
||||
)
|
||||
|
||||
REM
|
||||
REM NOTE: If the list of platforms is not already set, use the default list.
|
||||
REM
|
||||
IF NOT DEFINED PLATFORMS (
|
||||
SET PLATFORMS=x86 x86_amd64 x86_arm
|
||||
)
|
||||
|
||||
%_VECHO% Platforms = '%PLATFORMS%'
|
||||
|
||||
REM
|
||||
REM NOTE: Setup environment variables to translate between the MSVC platform
|
||||
REM names and the names to be used for the platform-specific binary
|
||||
REM directories.
|
||||
REM
|
||||
SET x86_NAME=x86
|
||||
SET x86_amd64_NAME=x64
|
||||
SET x86_arm_NAME=ARM
|
||||
|
||||
%_VECHO% x86_Name = '%x86_NAME%'
|
||||
%_VECHO% x86_amd64_Name = '%x86_amd64_NAME%'
|
||||
%_VECHO% x86_arm_Name = '%x86_arm_NAME%'
|
||||
|
||||
REM
|
||||
REM NOTE: Check for the external tools needed during the build process ^(i.e.
|
||||
REM those that do not get compiled as part of the build process itself^)
|
||||
REM along the PATH.
|
||||
REM
|
||||
FOR %%T IN (gawk.exe tclsh85.exe) DO (
|
||||
SET %%T_PATH=%%~dp$PATH:T
|
||||
)
|
||||
|
||||
REM
|
||||
REM NOTE: Set the TOOLPATH variable to contain all the directories where the
|
||||
REM external tools were found in the search above.
|
||||
REM
|
||||
SET TOOLPATH=%gawk.exe_PATH%;%tclsh85.exe_PATH%
|
||||
|
||||
%_VECHO% ToolPath = '%TOOLPATH%'
|
||||
|
||||
REM
|
||||
REM NOTE: This is the outer loop. There should be exactly one iteration per
|
||||
REM platform.
|
||||
REM
|
||||
FOR %%P IN (%PLATFORMS%) DO (
|
||||
REM
|
||||
REM NOTE: Using the MSVC platform name, lookup the simpler platform name to
|
||||
REM be used for the name of the platform-specific binary directory via
|
||||
REM the environment variables setup earlier.
|
||||
REM
|
||||
CALL :fn_SetVariable %%P_NAME PLATFORMNAME
|
||||
|
||||
REM
|
||||
REM NOTE: This is the inner loop. There should be exactly one iteration.
|
||||
REM This loop is necessary because the PlatformName environment
|
||||
REM variable was set above and that value is needed by some of the
|
||||
REM commands contained in the inner loop. If these commands were
|
||||
REM directly contained in the outer loop, the PlatformName environment
|
||||
REM variable would be stuck with its initial empty value instead.
|
||||
REM
|
||||
FOR /F "tokens=2* delims==" %%D IN ('SET PLATFORMNAME') DO (
|
||||
REM
|
||||
REM NOTE: Attempt to clean the environment of all variables used by MSVC
|
||||
REM and/or Visual Studio. This block may need to be updated in the
|
||||
REM future to account for additional environment variables.
|
||||
REM
|
||||
CALL :fn_UnsetVariable DevEnvDir
|
||||
CALL :fn_UnsetVariable Framework35Version
|
||||
CALL :fn_UnsetVariable FrameworkDir
|
||||
CALL :fn_UnsetVariable FrameworkDir32
|
||||
CALL :fn_UnsetVariable FrameworkVersion
|
||||
CALL :fn_UnsetVariable FrameworkVersion32
|
||||
CALL :fn_UnsetVariable INCLUDE
|
||||
CALL :fn_UnsetVariable LIB
|
||||
CALL :fn_UnsetVariable LIBPATH
|
||||
CALL :fn_UnsetVariable Platform
|
||||
REM CALL :fn_UnsetVariable VCINSTALLDIR
|
||||
CALL :fn_UnsetVariable VSINSTALLDIR
|
||||
CALL :fn_UnsetVariable WindowsSdkDir
|
||||
|
||||
REM
|
||||
REM NOTE: Reset the PATH here to the absolute bare minimum required.
|
||||
REM
|
||||
SET PATH=%TOOLPATH%;%SystemRoot%\System32;%SystemRoot%
|
||||
|
||||
%_VECHO% Path = '%PATH%'
|
||||
|
||||
REM
|
||||
REM NOTE: Launch a nested command shell to perform the following steps:
|
||||
REM
|
||||
REM 1. Setup the MSVC environment for this platform using the
|
||||
REM official batch file.
|
||||
REM
|
||||
REM 2. Make sure that no stale build output files are present.
|
||||
REM
|
||||
REM 3. Build the "sqlite3.dll" and "sqlite3.lib" binaries for this
|
||||
REM platform.
|
||||
REM
|
||||
REM 4. Copy the "sqlite3.dll" and "sqlite3.lib" binaries for this
|
||||
REM platform to the platform-specific directory beneath the
|
||||
REM binary directory.
|
||||
REM
|
||||
"%ComSpec%" /C (
|
||||
REM
|
||||
REM NOTE: Attempt to setup the MSVC environment for this platform.
|
||||
REM
|
||||
%__ECHO% CALL "%VCINSTALLDIR%\vcvarsall.bat" %%P
|
||||
|
||||
IF ERRORLEVEL 1 (
|
||||
ECHO Failed to call "%VCINSTALLDIR%\vcvarsall.bat" for platform %%P.
|
||||
GOTO errors
|
||||
)
|
||||
|
||||
REM
|
||||
REM NOTE: If this batch file is not running in "what-if" mode, check to
|
||||
REM be sure we were actually able to setup the MSVC environment as
|
||||
REM current versions of their official batch file do not set the
|
||||
REM exit code upon failure.
|
||||
REM
|
||||
IF NOT DEFINED __ECHO (
|
||||
IF NOT DEFINED WindowsSdkDir (
|
||||
ECHO Cannot build, Windows SDK not found for platform %%P.
|
||||
GOTO errors
|
||||
)
|
||||
)
|
||||
|
||||
REM
|
||||
REM NOTE: Invoke NMAKE with the MSVC makefile to clean any stale build
|
||||
REM output from previous iterations of this loop and/or previous
|
||||
REM runs of this batch file, etc.
|
||||
REM
|
||||
%__ECHO% nmake -f Makefile.msc clean
|
||||
|
||||
IF ERRORLEVEL 1 (
|
||||
ECHO Failed to clean for platform %%P.
|
||||
GOTO errors
|
||||
)
|
||||
|
||||
REM
|
||||
REM NOTE: Invoke NMAKE with the MSVC makefile to build the "sqlite3.dll"
|
||||
REM binary. The x86 compiler will be used to compile the native
|
||||
REM command line tools needed during the build process itself.
|
||||
REM Also, disable looking for and/or linking to the native Tcl
|
||||
REM runtime library.
|
||||
REM
|
||||
%__ECHO% nmake -f Makefile.msc sqlite3.dll "NCC=""%VCINSTALLDIR%\bin\cl.exe""" USE_NATIVE_LIBPATHS=1 NO_TCL=1 %NMAKE_ARGS%
|
||||
|
||||
IF ERRORLEVEL 1 (
|
||||
ECHO Failed to build "sqlite3.dll" for platform %%P.
|
||||
GOTO errors
|
||||
)
|
||||
|
||||
REM
|
||||
REM NOTE: Copy the "sqlite3.dll" file to the platform-specific directory
|
||||
REM beneath the binary directory.
|
||||
REM
|
||||
%__ECHO% XCOPY sqlite3.dll "%BINARYDIRECTORY%\%%D\" %FFLAGS% %DFLAGS%
|
||||
|
||||
IF ERRORLEVEL 1 (
|
||||
ECHO Failed to copy "sqlite3.dll" to "%BINARYDIRECTORY%\%%D\".
|
||||
GOTO errors
|
||||
)
|
||||
|
||||
REM
|
||||
REM NOTE: Copy the "sqlite3.lib" file to the platform-specific directory
|
||||
REM beneath the binary directory.
|
||||
REM
|
||||
%__ECHO% XCOPY sqlite3.lib "%BINARYDIRECTORY%\%%D\" %FFLAGS% %DFLAGS%
|
||||
|
||||
IF ERRORLEVEL 1 (
|
||||
ECHO Failed to copy "sqlite3.lib" to "%BINARYDIRECTORY%\%%D\".
|
||||
GOTO errors
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
REM
|
||||
REM NOTE: Handle any errors generated during the nested command shell.
|
||||
REM
|
||||
IF ERRORLEVEL 1 (
|
||||
GOTO errors
|
||||
)
|
||||
)
|
||||
|
||||
REM
|
||||
REM NOTE: Restore the saved current directory from the directory stack.
|
||||
REM
|
||||
%__ECHO2% POPD
|
||||
|
||||
IF ERRORLEVEL 1 (
|
||||
ECHO Could not restore directory.
|
||||
GOTO errors
|
||||
)
|
||||
|
||||
REM
|
||||
REM NOTE: If we get to this point, we have succeeded.
|
||||
REM
|
||||
GOTO no_errors
|
||||
|
||||
:fn_ResetErrorLevel
|
||||
VERIFY > NUL
|
||||
GOTO :EOF
|
||||
|
||||
:fn_SetErrorLevel
|
||||
VERIFY MAYBE 2> NUL
|
||||
GOTO :EOF
|
||||
|
||||
:fn_SetVariable
|
||||
SETLOCAL
|
||||
IF NOT DEFINED %1 GOTO :EOF
|
||||
IF "%2" == "" GOTO :EOF
|
||||
SET __ECHO_CMD=ECHO %%%1%%
|
||||
FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO (
|
||||
SET VALUE=%%V
|
||||
)
|
||||
ENDLOCAL && SET %2=%VALUE%
|
||||
GOTO :EOF
|
||||
|
||||
:fn_UnsetVariable
|
||||
IF NOT "%1" == "" (
|
||||
SET %1=
|
||||
CALL :fn_ResetErrorLevel
|
||||
)
|
||||
GOTO :EOF
|
||||
|
||||
:usage
|
||||
ECHO.
|
||||
ECHO Usage: %~nx0 ^<binaryDirectory^>
|
||||
ECHO.
|
||||
GOTO errors
|
||||
|
||||
:errors
|
||||
CALL :fn_SetErrorLevel
|
||||
ENDLOCAL
|
||||
ECHO.
|
||||
ECHO Failure, errors were encountered.
|
||||
GOTO end_of_file
|
||||
|
||||
:no_errors
|
||||
CALL :fn_ResetErrorLevel
|
||||
ENDLOCAL
|
||||
ECHO.
|
||||
ECHO Success, no errors were encountered.
|
||||
GOTO end_of_file
|
||||
|
||||
:end_of_file
|
||||
%__ECHO% EXIT /B %ERRORLEVEL%
|
Loading…
x
Reference in New Issue
Block a user