It is possible to compile
magic lantern and
qemu on windows,
without any third-party-programs like cygwin, MSYS, VirtualBox etc by solely using windows' native linux compatibility layer.
Magic Lantern
For those who didn't know, microsoft added wrappers to allow linux code to execute properly.
You have just to
enable it, as described on microsoft's website.This gives you "bash" the famous native linux shell executable directly within windows.
OS PreparationAfter you installed ubuntu, you should install a few standards tools.
Depending on the Windows 10 installation you have, you might be able to simply execute "bash" via Win+R or a menu entry called Bash or Ubuntu etc.
Then, in bash run:
sudo apt-get update
sudo apt-get install make gcc gcc-arm-none-eabi mercurial gcc-mingw-w64 python3-docutils zip
There were also cases when you had to install python2 - your mileage may vary.
sudo apt-get install python2
Downloaddirectly clone magic lantern from the mercurial repository using this command:
hg clone -u unified https://bitbucket.org/hudson/magic-lantern
it will download the latest version, the unified branch.
Configurationfirst determine the exact arm-gcc compiler version you have either by executing
ls /usr/lib/gcc/arm-none-eabi/
or by entering
arm-none-eabi-gcc- [TAB] [TAB]
then use your favorite text editor in either linux or windows and create a file named Makefile.user with only this content:
GCC_VERSION=-4.8.2
ARM_PATH=/usr
open a windows shell at the folder where your makefiles are and run 'bash'.
and you should be able to compile Magic Lantern on windows with *native* compile speed

here an "all-in-one" script by a1ex, a bit modified:
# prepare system
sudo apt-get update
sudo apt-get install make gcc gcc-arm-none-eabi mercurial gcc-mingw-w64 python3-docutils zip
# download and prepare ML
hg clone -u unified https://bitbucket.org/hudson/magic-lantern
cd magic-lantern
echo "GCC_VERSION=-`ls /usr/lib/gcc/arm-none-eabi/`" > Makefile.user
echo "ARM_PATH=/usr" >> Makefile.user
# preparation complete, now build ML
cd platform/5D3.123
make zip
# desktop utilities
cd ../../modules/mlv_rec
make mlv_dump.exe
cd ../../modules/dual_iso
make cr2hdr.exe
# ports in progress (100D, 70D)
hg update 100D_merge_fw101 -C # use TAB to find the exact name
hg merge unified # or lua_fix or whatever (optional)
cd ../../platform/100D.101
make zip
# 4K with sound
hg update crop_rec_4k_mlv_snd -C
cd ../../platform/5D3.123
make clean; make zip
# quick build (autoexec.bin only, without modules)
cd ../../platform/5D3.123
make zip ML_MODULES_DYNAMIC=
# recovery (portable display test, ROM dumper, CPU info...)
hg update recovery -C
cd ../../platform/portable.000
make zip ML_MODULES_DYNAMIC=
QEMU (or: how to run
Canon OS within
qemu within the
linux environment within
windows 10 on a
x64 CPU)
If you were successful with compiling magic lantern, then why not start compiling qemu?

install missing packages (review those please)
sudo apt-get update
sudo apt-get install zlib1g-dev libglib2.0 autoconf libtool libsdl-console flex bison libgtk2.0-dev mtools
sudo apt-get install libsdl-console-dev
the last one - libsdl-console-dev - caused some trouble. i could not download some (unnecessary) drm graphics drivers.
i used aptitude to inspect the status and don't ask me what i did, but aptitude asked me if i want to examine its recommendations and i accepted them.
suddenly libdrm was held back and all other packages got installed.
you probably have to switch to the qemu branch
hg update qemu
then it is time to compile qemu using the script in contrib/qemu/install.sh.
make sure your magic lantern path is named "magic-lantern" else the script will abort.
hint by a1ex, doesn't happen on my system:
for some reason, the output from install.sh is truncated
opening a new terminal appears to fix it (?!)
if it still doesn't work: ./install.sh |& tee install.log
then open install.log in a text editor to read it
when it's done, do what it says:
a) cd `pwd`/some_path_here"
b) ../configure_eos.sh"
c) make -j4 (or the numer of cores your CPU has)
if you now run the run_canon_fw.sh you get an error telling you:
qemu-system-arm: -chardev socket,server,nowait,path=qemu.monitor,id=monsock: Failed to bind socket to qemu.monitor: Operation not permitted
my assumption is, that either unix domain socket implementation in WSL is
buggy or at least incompatible to qemu.
so the script run_canon_fw.sh needs some patches before it runs - remove those lines:
-chardev socket,server,nowait,path=qemu.monitor,id=monsock \
-mon chardev=monsock,mode=readline \
enjoy!