Last active
March 2, 2020 13:41
-
-
Save JCash/76a803d8b30675cef1663daa27927ed7 to your computer and use it in GitHub Desktop.
Setting up Win32 build pipeline in Docker
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
x86_64-win32: | |
env: | |
TMP: "{{build_folder}}" | |
TEMP: "{{build_folder}}" | |
MSVC_DIR: "{{env.WINDOWS_MSVC_2019_DIR}}" | |
SDK8_DIR: "{{env.WINDOWS_SDK_8_DIR}}" | |
SDK10_DIR: "{{env.WINDOWS_SDK_10_DIR}}" | |
SDK10_VERSION: "{{env.WINDOWS_SDK_10_VERSION}}" | |
VCINSTALLDIR: "{{env.WINDOWS_VCINSTALLDIR}}" | |
VSINSTALLDIR: "{{env.WINDOWS_VSINSTALLDIR}}" | |
context: | |
engineLibs: ["libengine","libengine_service","libmbedtls","libwebviewext","libprofilerext","libfacebookext","libiapext","libpushext","libiacext","librecord","libgameobject","libddf","libresource","libgamesys","libgraphics","libphysics","libBulletDynamics","libBulletCollision","libLinearMath","libBox2D","librender","libscript","libluajit-5.1","libextension","libhid","libinput","libparticle","librig","libdlib","libdmglfw","libgui","libcrashext","libliveupdate","libsound","vpx","libcares"] | |
libPaths: ["{{dynamo_home}}/lib/x86_64-win32", "{{dynamo_home}}/ext/lib/x86_64-win32", "{{env.MSVC_DIR}}/lib/x64", "{{env.MSVC_DIR}}/atlmfc/lib/x64", "{{env.SDK10_DIR}}/Lib/{{env.SDK10_VERSION}}/ucrt/x64", "{{env.SDK8_DIR}}/Lib/winv6.3/um/x64"] | |
platformIncludes: ["{{env.MSVC_DIR}}/atlmfc/include", "{{env.SDK10_DIR}}/Include/{{env.SDK10_VERSION}}/ucrt", "{{env.SDK8_DIR}}/Include/winrt", "{{env.SDK8_DIR}}/Include/um", "{{env.SDK8_DIR}}/Include/shared"] | |
defines: ["DM_PLATFORM_WINDOWS", "LUA_BYTECODE_ENABLE_64", "_CRT_SECURE_NO_WARNINGS", "_WINSOCK_DEPRECATED_NO_WARNINGS", "__STDC_LIMIT_MACROS", "WINVER=0x0600", "WIN32"] | |
flags: ["-O2", "-Wall", "-Werror=format", "-fvisibility=hidden"] | |
linkFlags: ["-O2", "-fuse-ld=lld", "-Wl,/entry:mainCRTStartup", "-Wl,/safeseh:no"] | |
libs: ["OpenGL32", "Delayimp", "User32", "shell32", "Xinput9_1_0", "OpenAL32", "WS2_32", "IPHlpApi", "DbgHelp", "AdvAPI32", "Psapi"] | |
symbols: [] | |
exePrefix: '' | |
exeExt: '.exe' | |
shlibRe: '(.+).dll' | |
stlibRe: '(.+).lib' | |
sourceRe: '(?i).*(\.cpp|\.c|\.cc|\.cxx|\.c\+\+)' | |
writeLibPattern: '%s.lib' | |
writeExePattern: 'dmengine.exe' | |
zipContentPattern: 'dmengine.exe' | |
symbolsPattern: '.*pdb' | |
allowedLibs: ["(\\w[\\w\\.+-]+)"] | |
allowedFlags: ["-Wa,{{comma_separated_arg}}","-W{{warning}}","-Wno-{{warning}}","-ansi","--ansi","-std-default={{arg}}","-stdlib=(libstdc\\+\\+|libc\\+\\+)","-w","-std=(c89|c99|c\\+\\+98|c\\+\\+0x|c\\+\\+11|c\\+\\+14|c\\+\\+17)","-Wp,{{comma_separated_arg}}","--extra-warnings","--warn-{{warning}}","--warn-={{warning}}","-ferror-limit={{number}}","-O([0-4]?|fast|s|z)","-rdynamic","-Wl,[-_a-zA-Z0-9]+","-fno-rtti","-fpermissive","-Wl,/subsystem:(console|windows)","-Wl,/entry:\\w+","-f\\w[\\w-=]+"] | |
compileCmd: 'clang++ -target x86_64-pc-win32-msvc -m64 -g -gcodeview {{#defines}}-D{{{.}}} {{/defines}} {{#flags}}{{{.}}} {{/flags}} {{#platformIncludes}}-isystem {{{.}}} {{/platformIncludes}} {{#ext.includes}}-I{{{.}}} {{/ext.includes}} {{#includes}}-I{{{.}}} {{/includes}} {{src}} -c -o {{tgt}}' | |
linkCmd: 'clang++ -target x86_64-pc-win32-msvc -m64 -g -o {{tgt}} {{#linkFlags}}{{{.}}} {{/linkFlags}} {{#ext.libPaths}}-L{{{.}}} {{/ext.libPaths}} {{#libs}}-l{{{.}}} {{/libs}} {{#ext.libs}}-l{{{.}}} {{/ext.libs}} {{#libPaths}}-L{{{.}}} {{/libPaths}} {{#engineLibs}}-l{{{.}}} {{/engineLibs}} {{#src}}{{{.}}} {{/src}}' | |
libCmd: '/usr/bin/ar rcs {{tgt}} {{#objs}}{{{.}}} {{/objs}}' | |
windresCmd: 'windres -i {{dynamo_home}}/lib/x86_64-win32/engine.rc -O coff -o {{tgt}}' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
FROM ubuntu:16.04 | |
# Base stuff | |
RUN \ | |
echo "LINUX TOOLS + COMPILER" && \ | |
dpkg --add-architecture i386 && \ | |
apt-get update && \ | |
apt-get install -y software-properties-common && \ | |
add-apt-repository ppa:openjdk-r/ppa && \ | |
apt-get update && \ | |
apt-get install -y --no-install-recommends \ | |
wget \ | |
locales \ | |
openjdk-11-jdk \ | |
gcc \ | |
g++ \ | |
gcc-multilib \ | |
g++-multilib \ | |
libssl-dev \ | |
openssl \ | |
libtool \ | |
autoconf \ | |
automake \ | |
uuid-dev \ | |
libxi-dev \ | |
libopenal-dev \ | |
libgl1-mesa-dev \ | |
libglw1-mesa-dev \ | |
freeglut3-dev \ | |
unzip \ | |
tree \ | |
silversearcher-ag \ | |
less \ | |
nano \ | |
zlib1g:i386 && \ | |
# cleanup | |
rm -rf /var/lib/apt/lists/* && \ | |
rm -rf /var/cache/oracle-jdk8-installer | |
ENV JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64 | |
# Add extender user | |
RUN useradd -r -u 2222 extender && \ | |
mkdir -p /var/extender && \ | |
chown extender: /var/extender && \ | |
chown extender: $(readlink -f /usr/bin/java) && \ | |
chmod +s $(readlink -f /usr/bin/java) | |
ARG S3_URL | |
# Put all SDK's into a single folder (just as we do in the regular engine build) | |
ENV PLATFORMSDK_DIR /opt/platformsdk | |
RUN mkdir $PLATFORMSDK_DIR | |
# These packages are downloaded from here: http://releases.llvm.org/download.html | |
# and then uploaded as-is to S3 | |
RUN wget -q -O - ${S3_URL}/clang%2Bllvm-9.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz | tar xJ -C /usr/local --strip-components=1 | |
# Darwin | |
RUN locale-gen en_US.UTF-8 | |
ENV LANG=en_US.UTF-8 \ | |
LANGUAGE=en_US:en \ | |
LC_ALL=en_US.UTF-8 | |
RUN \ | |
ln -s /usr/local/bin/llvm-ar /usr/local/bin/ar && \ | |
ln -s /usr/local/bin/clang /usr/local/bin/x86_64-pc-win32-clang && \ | |
ln -s /usr/local/bin/llvm-ar /usr/local/bin/x86_64-pc-win32-clang-ar | |
# | |
# Windows | |
# | |
ENV \ | |
PLATFORMSDK_WIN32=$PLATFORMSDK_DIR/Win32 \ | |
WINDOWS_SDK_10_VERSION=10.0.18362.0 \ | |
WINDOWS_MSVC_2019_VERSION=14.23.28105 | |
# windres: Allows for generating .res files that can be used during linking | |
RUN \ | |
echo "Win32 SDK - WINDRES" && \ | |
apt-get update && \ | |
apt-get install -y binutils-mingw-w64-x86-64 && \ | |
ls -la /usr/bin/x86_64-w64-mingw32-windres && \ | |
ln -s /usr/bin/x86_64-w64-mingw32-windres /usr/local/bin/windres | |
RUN \ | |
echo "WIN32 2019 SDK" && \ | |
mkdir -p ${PLATFORMSDK_WIN32}/WindowsKits && \ | |
wget -q -O - ${S3_URL}/WindowsKits-8.1_slim.tar.gz | tar xz -C ${PLATFORMSDK_WIN32}/WindowsKits && \ | |
wget -q -O - ${S3_URL}/WindowsKits-${WINDOWS_SDK_10_VERSION}.tar.gz | tar xz -C ${PLATFORMSDK_WIN32}/WindowsKits && \ | |
mkdir ${PLATFORMSDK_WIN32}/MicrosoftVisualStudio2019 && \ | |
wget -q -O - ${S3_URL}/Microsoft-Visual-Studio-2019-${WINDOWS_MSVC_2019_VERSION}.tar.gz | tar xz -C ${PLATFORMSDK_WIN32}/MicrosoftVisualStudio2019 | |
RUN \ | |
echo "WIN32 2015 SDK" && \ | |
wget -q -O - ${S3_URL}/Microsoft-Visual-Studio-14-0.tar.gz | tar xz -C ${PLATFORMSDK_WIN32} && \ | |
mv ${PLATFORMSDK_WIN32}/Microsoft\ Visual\ Studio\ 14.0 ${PLATFORMSDK_WIN32}/MicrosoftVisualStudio14.0 && \ | |
rm -rf ${PLATFORMSDK_WIN32}/MicrosoftVisualStudio14.0/Common7/IDE && \ | |
wget -q -O - ${S3_URL}/WindowsKits-10.0.tar.gz | tar xz -C ${PLATFORMSDK_WIN32}/WindowsKits | |
# Due to Windows' case insensitive file system, the sources reference lib files with wrong cases | |
# so we solve the bulk by making the suffixes lowercase | |
RUN find $PLATFORMSDK_WIN32 -iname '*.Lib' -exec sh -c 'a=$(echo "$0" | sed -r "s/([^.]*)\$/\L\1/"); [ "$a" != "$0" ] && mv "$0" "$a" ' {} \; | |
# Make a copy of all the headers too, in lower case (e.g. Windows.h -> windows.h etc) | |
RUN find $PLATFORMSDK_WIN32 -iname '*.h' -exec sh -c 'd=$(dirname "$0"); a=$(basename "$0" | tr [:upper:] [:lower:]); [ "$a" != $(basename "$0") ] && cp "$0" "$d/$a" ' {} \; | |
# Grabbed after a starting MSVC 2019, and choosing "Tools -> Command Line -> Developer Command Prompt" | |
# Note: VCINSTALLDIR is special since clang will use it as the last "-internal-isystem" option | |
ENV \ | |
VCINSTALLDIR="${PLATFORMSDK_WIN32}/MicrosoftVisualStudio14.0/VC/" \ | |
VSINSTALLDIR="${PLATFORMSDK_WIN32}/MicrosoftVisualStudio14.0/" \ | |
WINDOWS_MSVC_2015_DIR="${PLATFORMSDK_WIN32}/MicrosoftVisualStudio14.0/VC/" \ | |
WINDOWS_MSVC_2019_DIR="${PLATFORMSDK_WIN32}/MicrosoftVisualStudio2019/VC/Tools/MSVC/${WINDOWS_MSVC_2019_VERSION}/" \ | |
WINDOWS_SDK_8_DIR="${PLATFORMSDK_WIN32}/WindowsKits/8.1/" \ | |
WINDOWS_SDK_10_DIR="${PLATFORMSDK_WIN32}/WindowsKits/10/" \ | |
VS140COMNTOOLS="${PLATFORMSDK_WIN32}/MicrosoftVisualStudio14.0/Common7/Tools/" \ | |
VS160COMNTOOLS="${PLATFORMSDK_WIN32}/MicrosoftVisualStudio2019/Common7/Tools/" \ | |
WINDOWS_VCINSTALLDIR="${PLATFORMSDK_WIN32}/MicrosoftVisualStudio2019/VC/Tools/MSVC/${WINDOWS_MSVC_2019_VERSION}/" \ | |
WINDOWS_VSINSTALLDIR="${PLATFORMSDK_WIN32}/MicrosoftVisualStudio2019/" \ | |
WindowsLibPath="${PLATFORMSDK_WIN32}/WindowsKits/8.1/References/CommonConfiguration/Neutral" \ | |
WindowsSdkDir="${PLATFORMSDK_WIN32}/WindowsKits/8.1/" \ | |
WindowsSDKLibVersion="winv6.3/" \ | |
WindowsSDKVersion="/" | |
# # and the rest are manually copied (or made lower case) | |
RUN \ | |
echo "WIN32 SDK - Cleanup" && \ | |
(cd ${WINDOWS_MSVC_2015_DIR}/lib/amd64 && cp oldnames.lib OLDNAMES.lib) && \ | |
(cd ${WINDOWS_MSVC_2015_DIR}/lib && cp oldnames.lib OLDNAMES.lib) && \ | |
(cd ${WINDOWS_MSVC_2015_DIR}/lib/amd64 && cp delayimp.lib Delayimp.lib) && \ | |
(cd ${WINDOWS_MSVC_2015_DIR}/lib && cp delayimp.lib Delayimp.lib) && \ | |
(cd ${WINDOWS_MSVC_2019_DIR}/lib/x64 && cp oldnames.lib OLDNAMES.lib) && \ | |
(cd ${WINDOWS_MSVC_2019_DIR}/lib/x86 && cp oldnames.lib OLDNAMES.lib) && \ | |
(cd ${WINDOWS_MSVC_2019_DIR}/lib/x64 && cp delayimp.lib Delayimp.lib) && \ | |
(cd ${WINDOWS_MSVC_2019_DIR}/lib/x86 && cp delayimp.lib Delayimp.lib) && \ | |
(cd ${WINDOWS_SDK_8_DIR}/Include/shared && cp driverspecs.h DriverSpecs.h) && \ | |
(cd ${WINDOWS_SDK_8_DIR}/Include/shared && cp specstrings.h SpecStrings.h) && \ | |
(cd ${WINDOWS_SDK_8_DIR}/Include/shared && cp concurrencysal.h ConcurrencySal.h) && \ | |
(cd ${WINDOWS_SDK_8_DIR}/Lib/winv6.3/um/x64 && find . -type f -exec sh -c 'x="{}"; xl=$(echo $x | sed -e "s/\(.*\)/\L\1/"); if [ $x != $xl ]; then cp $x $xl; fi' \;) && \ | |
(cd ${WINDOWS_SDK_8_DIR}/Lib/winv6.3/um/x86 && find . -type f -exec sh -c 'x="{}"; xl=$(echo $x | sed -e "s/\(.*\)/\L\1/"); if [ $x != $xl ]; then cp $x $xl; fi' \;) | |
# Always run last to minimize the size | |
RUN apt-get clean autoclean autoremove |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment