Merge pull request #330 from atom/windows-webgl

Fix WebGL support on Windows
This commit is contained in:
Cheng Zhao 2014-05-19 00:02:34 +08:00
commit b2abeb9beb
9 changed files with 89 additions and 58 deletions

2
.gitignore vendored
View file

@ -1,7 +1,7 @@
.DS_Store
/build/
/dist/
/frameworks/
/external_binaries/
/out/
/vendor/brightray/vendor/download/
/vendor/python_26/

View file

@ -235,7 +235,7 @@
},
'target_defaults': {
'mac_framework_dirs': [
'<(atom_source_root)/frameworks',
'<(atom_source_root)/external_binaries',
],
'includes': [
# Rules for excluding e.g. foo_win.cc from the build on non-Windows.
@ -288,9 +288,9 @@
'files': [
'<(PRODUCT_DIR)/<(product_name) Helper.app',
'<(PRODUCT_DIR)/<(framework_name).framework',
'frameworks/Squirrel.framework',
'frameworks/ReactiveCocoa.framework',
'frameworks/Mantle.framework',
'external_binaries/Squirrel.framework',
'external_binaries/ReactiveCocoa.framework',
'external_binaries/Mantle.framework',
],
},
{
@ -327,8 +327,11 @@
'<(libchromiumcontent_library_dir)/chromiumcontent.dll',
'<(libchromiumcontent_library_dir)/ffmpegsumo.dll',
'<(libchromiumcontent_library_dir)/icudt.dll',
'<(libchromiumcontent_library_dir)/libEGL.dll',
'<(libchromiumcontent_library_dir)/libGLESv2.dll',
'<(libchromiumcontent_resources_dir)/content_shell.pak',
'external_binaries/d3dcompiler_43.dll',
'external_binaries/xinput1_3.dll',
],
},
{
@ -598,9 +601,9 @@
'link_settings': {
'libraries': [
'$(SDKROOT)/System/Library/Frameworks/Carbon.framework',
'frameworks/Squirrel.framework',
'frameworks/ReactiveCocoa.framework',
'frameworks/Mantle.framework',
'external_binaries/Squirrel.framework',
'external_binaries/ReactiveCocoa.framework',
'external_binaries/Mantle.framework',
],
},
'mac_bundle': 1,

View file

@ -16,6 +16,7 @@ def main():
rm_rf(os.path.join(SOURCE_ROOT, 'out'))
rm_rf(os.path.join(SOURCE_ROOT, 'node_modules'))
rm_rf(os.path.join(SOURCE_ROOT, 'frameworks'))
rm_rf(os.path.join(SOURCE_ROOT, 'external_binaries'))
rm_rf(os.path.join(SOURCE_ROOT, 'vendor', 'apm', 'node_modules'))
rm_rf(os.path.join(SOURCE_ROOT, 'vendor', 'brightray', 'vendor', 'download',
'libchromiumcontent'))
@ -25,7 +26,7 @@ def main():
if sys.platform != 'win32':
run_script('pylint.py')
run_script('coffeelint.py')
run_script('build.py')
run_script('build.py', ['-c', 'Debug'])
run_script('test.py', ['--ci'])

View file

@ -44,7 +44,10 @@ TARGET_BINARIES = {
'content_shell.pak',
'ffmpegsumo.dll',
'icudt.dll',
'libEGL.dll',
'libGLESv2.dll',
'd3dcompiler_43.dll',
'xinput1_3.dll',
],
'linux': [
'atom',

View file

@ -2,4 +2,4 @@
NODE_VERSION = 'v0.11.10'
BASE_URL = 'https://gh-contractor-zcbenz.s3.amazonaws.com/libchromiumcontent'
LIBCHROMIUMCONTENT_COMMIT = '276722e68bb643e3ae3b468b701c276aeb884838'
LIBCHROMIUMCONTENT_COMMIT = '34d71b3bcc65c5213663a967ee1950c6d3729346'

View file

@ -0,0 +1,63 @@
#!/usr/bin/env python
import errno
import sys
import os
from lib.util import safe_mkdir, extract_zip, tempdir, download
VERSION = 'v0.0.3'
SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
FRAMEWORKS_URL = 'https://github.com/atom/atom-shell-frameworks/releases' \
'/download/' + VERSION
def main():
os.chdir(SOURCE_ROOT)
version_file = os.path.join(SOURCE_ROOT, 'external_binaries', '.version')
safe_mkdir('external_binaries')
if (is_updated(version_file, VERSION)):
return
with open(version_file, 'w') as f:
f.write(VERSION)
if sys.platform == 'darwin':
download_and_unzip('Mantle')
download_and_unzip('ReactiveCocoa')
download_and_unzip('Squirrel')
elif sys.platform in ['cygwin', 'win32']:
download_and_unzip('directxsdk')
def is_updated(version_file, version):
existing_version = ''
try:
with open(version_file, 'r') as f:
existing_version = f.readline().strip()
except IOError as e:
if e.errno != errno.ENOENT:
raise
return existing_version == version
def download_and_unzip(framework):
zip_path = download_framework(framework)
if zip_path:
extract_zip(zip_path, 'external_binaries')
def download_framework(framework):
filename = framework + '.zip'
url = FRAMEWORKS_URL + '/' + filename
download_dir = tempdir(prefix='atom-shell-')
path = os.path.join(download_dir, filename)
download('Download ' + framework, url, path)
return path
if __name__ == '__main__':
sys.exit(main())

View file

@ -1,43 +0,0 @@
#!/usr/bin/env python
import sys
import os
from lib.util import safe_mkdir, extract_zip, tempdir, download
SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
FRAMEWORKS_URL = 'https://github.com/atom/atom-shell-frameworks/releases' \
'/download/v0.0.2'
def main():
os.chdir(SOURCE_ROOT)
safe_mkdir('frameworks')
download_and_unzip('Mantle')
download_and_unzip('ReactiveCocoa')
download_and_unzip('Squirrel')
def download_and_unzip(framework):
zip_path = download_framework(framework)
if zip_path:
extract_zip(zip_path, 'frameworks')
def download_framework(framework):
framework_path = os.path.join('frameworks', framework) + '.framework'
if os.path.exists(framework_path):
return
filename = framework + '.framework.zip'
url = FRAMEWORKS_URL + '/' + filename
download_dir = tempdir(prefix='atom-shell-')
path = os.path.join(download_dir, filename)
download('Download ' + framework, url, path)
return path
if __name__ == '__main__':
sys.exit(main())

View file

@ -11,14 +11,13 @@ SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
def main():
os.chdir(SOURCE_ROOT)
update_frameworks()
update_external_binaries()
update_gyp()
def update_frameworks():
if sys.platform == 'darwin':
uf = os.path.join('script', 'update-frameworks.py')
subprocess.check_call([sys.executable, uf])
def update_external_binaries():
uf = os.path.join('script', 'update-external-binaries.py')
subprocess.check_call([sys.executable, uf])
def update_gyp():

View file

@ -65,3 +65,8 @@ describe 'chromium feature', ->
it 'does not crash', ->
RUint8Array = require('remote').getGlobal 'Uint8Array'
new RUint8Array
describe 'webgl', ->
it 'can be get as context in canvas', ->
webgl = document.createElement('canvas').getContext 'webgl'
assert.notEqual webgl, null