Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added ARM Support #305

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/client_handler/Makefile
Expand Up @@ -39,6 +39,9 @@ INC = -I./../ -I./../common/ -I/usr/include/python2.7 \
-I/usr/include/pango-1.0 \
-I/usr/include/gdk-pixbuf-2.0 \
-I/usr/include/atk-1.0 \
-I/usr/lib/arm-linux-gnueabihf/gtk-2.0/include \
-I/usr/lib/arm-linux-gnueabihf/gtk-unix-print-2.0 \
-I/usr/lib/arm-linux-gnueabihf/glib-2.0/include \
-I/usr/lib/x86_64-linux-gnu/gtk-2.0/include \
-I/usr/lib/x86_64-linux-gnu/gtk-unix-print-2.0 \
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include \
Expand Down
20 changes: 14 additions & 6 deletions src/cpp_utils/Makefile
Expand Up @@ -6,13 +6,21 @@ OBJ = $(SRC:.cpp=.o)
OUT = libcpp_utils.a

INC = -I./../ -I/usr/include/gtk-2.0 \
-I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/gtk-2.0/include \
-I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/cairo \
-I/usr/include/pango-1.0 -I/usr/include/gdk-pixbuf-2.0 \
-I/usr/include/atk-1.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include \
-I/usr/include/glib-2.0 \
-I/usr/lib/i386-linux-gnu/gtk-2.0/include \
-I/usr/lib/i386-linux-gnu/glib-2.0/include \
-I/usr/include/cairo \
-I/usr/include/pango-1.0 \
-I/usr/include/gdk-pixbuf-2.0 \
-I/usr/include/atk-1.0 \
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include \
-I/usr/lib/x86_64-linux-gnu/gtk-2.0/include \
-I/usr/lib64/glib-2.0/include -I/usr/lib64/gtk-2.0/include \
-I/usr/lib/glib-2.0/include -I/usr/lib/gtk-2.0/include
-I/usr/lib/arm-linux-gnueabihf/glib-2.0/include \
-I/usr/lib/arm-linux-gnueabihf/gtk-2.0/include \
-I/usr/lib64/glib-2.0/include \
-I/usr/lib64/gtk-2.0/include \
-I/usr/lib/glib-2.0/include \
-I/usr/lib/gtk-2.0/include

.cpp.o:
$(CC) -fPIC $(INC) $(CCFLAGS) -c $< -o $@
Expand Down
5 changes: 4 additions & 1 deletion src/linux/compile.py
Expand Up @@ -118,7 +118,10 @@ def check_cython_version():
elif OS_POSTFIX == "mac":
OS_POSTFIX2 = "mac32" if ARCH32 else "mac64"
elif OS_POSTFIX == "linux":
OS_POSTFIX2 = "linux32" if ARCH32 else "linux64"
if os.uname()[4][:3] == "arm":
OS_POSTFIX2 = "linuxarm"
else:
OS_POSTFIX2 = "linux32" if ARCH32 else "linux64"

PYVERSION = str(sys.version_info[0])+str(sys.version_info[1])
print("PYVERSION = %s" % PYVERSION)
Expand Down
4 changes: 3 additions & 1 deletion src/linux/installer/make-deb.py
Expand Up @@ -24,7 +24,9 @@
BITS = platform.architecture()[0]
assert (BITS == "32bit" or BITS == "64bit")
ARCHITECTURE = "i386" if (BITS == "32bit") else "amd64"
if BITS == "32bit":
if os.uname()[4][:3] == "arm":
LINUX_BITS = "linuxarm"
elif BITS == "32bit":
LINUX_BITS = "linux32"
else:
LINUX_BITS = "linux64"
Expand Down
32 changes: 19 additions & 13 deletions src/linux/installer/make-setup.py
Expand Up @@ -36,7 +36,10 @@
elif OS_POSTFIX == "mac":
OS_POSTFIX2 = "mac32" if ARCH32 else "mac64"
elif OS_POSTFIX == "linux":
OS_POSTFIX2 = "linux32" if ARCH32 else "linux64"
if os.uname()[4][:3] == "arm":
OS_POSTFIX2 = "linuxarm"
else:
OS_POSTFIX2 = "linux32" if ARCH32 else "linux64"

# Directories
INSTALLER_DIR = os.path.dirname(os.path.abspath(__file__))
Expand Down Expand Up @@ -129,14 +132,16 @@ def main():
# with open(setup_dir+"/setup.cfg", "w") as f:
# f.write(SETUP_CFG_CONTENT)

print("Copying binaries to package dir")
# Copy Kivy
old_binaries_dir = os.path.abspath(INSTALLER_DIR+"/../binaries_"+BITS+"/")
ret = os.system("cp -rf "+old_binaries_dir+"/kivy_.py "+package_dir)
assert ret == 0
ret = os.system("cp -rf "+old_binaries_dir+"/kivy-select-boxes/ "
+ package_dir)
assert ret == 0
if OS_POSTFIX2 != "linuxarm":
print("Copying binaries to package dir")
# Copy Kivy
old_binaries_dir = os.path.abspath(INSTALLER_DIR+"/../binaries_"+BITS+"/")
ret = os.system("cp -rf "+old_binaries_dir+"/kivy_.py "+package_dir)
assert ret == 0
ret = os.system("cp -rf "+old_binaries_dir+"/kivy-select-boxes/ "
+ package_dir)
assert ret == 0

# Copy binaries
ret = os.system("cp -rf "+CEF_BINARY+"/*.txt "+package_dir)
assert ret == 0
Expand All @@ -163,10 +168,11 @@ def main():
ret = os.system("cp -r ../../../examples/* "+package_dir+"/examples/")
assert ret == 0

print("Moving kivy-select-boxes dir to examples dir")
assert os.path.exists(package_dir+"/kivy-select-boxes")
shutil.move(package_dir+"/kivy-select-boxes",
package_dir+"/examples/kivy-select-boxes")
if OS_POSTFIX2 != "linuxarm":
print("Moving kivy-select-boxes dir to examples dir")
assert os.path.exists(package_dir+"/kivy-select-boxes")
shutil.move(package_dir+"/kivy-select-boxes",
package_dir+"/examples/kivy-select-boxes")

print("Creating wx dir in package dir")
os.mkdir(package_dir+"/wx/")
Expand Down
9 changes: 8 additions & 1 deletion src/linux/setup/setup.py
Expand Up @@ -41,7 +41,10 @@
elif OS_POSTFIX == "mac":
OS_POSTFIX2 = "mac32" if ARCH32 else "mac64"
elif OS_POSTFIX == "linux":
OS_POSTFIX2 = "linux32" if ARCH32 else "linux64"
if os.uname()[4][:3] == "arm":
OS_POSTFIX2 = "linuxarm"
else:
OS_POSTFIX2 = "linux32" if ARCH32 else "linux64"

# Directories
SETUP_DIR = os.path.abspath(os.path.dirname(__file__))
Expand Down Expand Up @@ -99,6 +102,10 @@ def CompileTimeConstants():
'/usr/include/pango-1.0',
'/usr/include/gdk-pixbuf-2.0',
'/usr/include/atk-1.0',
# arm
'/usr/lib/arm-linux-gnueabihf/gtk-2.0/include',
'/usr/lib/arm-linux-gnueabihf/gtk-unix-print-2.0',
'/usr/lib/arm-linux-gnueabihf/glib-2.0/include',
# Ubuntu
'/usr/lib/x86_64-linux-gnu/gtk-2.0/include',
'/usr/lib/x86_64-linux-gnu/gtk-unix-print-2.0',
Expand Down
7 changes: 6 additions & 1 deletion src/subprocess/Makefile
Expand Up @@ -13,6 +13,9 @@ INC = -I./../ -I./../common/ -I/usr/include/python2.7 \
-I/usr/include/pango-1.0 \
-I/usr/include/gdk-pixbuf-2.0 \
-I/usr/include/atk-1.0 \
-I/usr/lib/arm-linux-gnueabihf/gtk-2.0/include \
-I/usr/lib/arm-linux-gnueabihf/gtk-unix-print-2.0 \
-I/usr/lib/arm-linux-gnueabihf/glib-2.0/include \
-I/usr/lib/x86_64-linux-gnu/gtk-2.0/include \
-I/usr/lib/x86_64-linux-gnu/gtk-unix-print-2.0 \
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include \
Expand All @@ -29,8 +32,10 @@ INC = -I./../ -I./../common/ -I/usr/include/python2.7 \
ifeq ($(UNAME_S), Linux)
LIB_DIRS = -L./../../build/cef_linux64/bin \
-L./../../build/cef_linux32/bin \
-L./../../build/cef_linuxarm/bin \
-L./../../build/cef_linux64/lib \
-L./../../build/cef_linux32/lib
-L./../../build/cef_linux32/lib \
-L./../../build/cef_linuxarm/lib
else ifeq ($(UNAME_S), Darwin)
LIB_DIRS = -F$(CEF_BIN) \
-L$(CEF_LIB)
Expand Down
3 changes: 3 additions & 0 deletions src/subprocess/Makefile-libcefpythonapp
Expand Up @@ -41,6 +41,9 @@ INC = -I./../ -I./../common/ -I/usr/include/python2.7 \
-I/usr/include/pango-1.0 \
-I/usr/include/gdk-pixbuf-2.0 \
-I/usr/include/atk-1.0 \
-I/usr/lib/arm-linux-gnueabihf/gtk-2.0/include \
-I/usr/lib/arm-linux-gnueabihf/gtk-unix-print-2.0 \
-I/usr/lib/arm-linux-gnueabihf/glib-2.0/include \
-I/usr/lib/x86_64-linux-gnu/gtk-2.0/include \
-I/usr/lib/x86_64-linux-gnu/gtk-unix-print-2.0 \
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include \
Expand Down
32 changes: 23 additions & 9 deletions tools/automate.py
Expand Up @@ -20,6 +20,7 @@

Usage:
automate.py (--prebuilt-cef | --build-cef)
[--arm-build]
[--fast-build FAST_BUILD]
[--force-chromium-update FORCE_CHROMIUM_UPDATE]
[--no-cef-update NO_CEF_UPDATE]
Expand All @@ -35,6 +36,7 @@
binaries for Linux are built on Ubuntu.
--build-cef Whether to build CEF from sources with the
cefpython patches applied.
--arm-build Create an ARM build.
--fast-build Fast build with is_official_build=False
--force-chromium-update Force Chromium update (gclient sync etc).
--no-cef-update Do not update CEF sources (by default both cef/
Expand Down Expand Up @@ -75,6 +77,7 @@ class Options(object):
# From command-line
prebuilt_cef = False
build_cef = False
arm_build = False
fast_build = False
force_chromium_update = False
no_cef_update = False
Expand Down Expand Up @@ -325,6 +328,8 @@ def build_cef_projects():
cef_binary = symbols.replace("_debug_symbols", "")
assert "symbols" not in os.path.basename(cef_binary)
else:
if Options.arm_build:
OS_POSTFIX2 = "linuxarm"
files = glob.glob(os.path.join(Options.binary_distrib,
"cef_binary_*_"+OS_POSTFIX2))
assert len(files) == 1, "Error finding binary distrib"
Expand Down Expand Up @@ -353,6 +358,8 @@ def build_cef_projects():
# Build cefclient, cefsimple, ceftests
if already_built:
print("[automate.py] Already built: cefclient, cefsimple, ceftests")
elif Options.arm_build:
print("[automate.py] Skip built: cefclient, cefsimple, ceftests")
else:
print("[automate.py] Build cefclient, cefsimple, ceftests")
# Cmake
Expand Down Expand Up @@ -597,7 +604,7 @@ def create_prebuilt_binaries():
"build_cefclient", "tests", "cefclient",
Options.build_type,
"cefclient")
if platform.system() != "Windows":
if platform.system() != "Windows" and not Options.arm_build:
# On Windows resources/*.html files are embedded inside exe
cefclient_files = os.path.join(
src,
Expand All @@ -619,7 +626,7 @@ def create_prebuilt_binaries():
"build_cefclient", "tests", "ceftests",
Options.build_type,
"ceftests")
if platform.system() != "Windows":
if platform.system() != "Windows" and not Options.arm_build:
# On Windows resources/*.html files are embedded inside exe
ceftests_files = os.path.join(
src,
Expand All @@ -632,10 +639,10 @@ def create_prebuilt_binaries():
cefclient += ".exe"
cefsimple += ".exe"
ceftests += ".exe"

shutil.copy(cefclient, bindir)
shutil.copy(cefsimple, bindir)
shutil.copy(ceftests, bindir)
if not Options.arm_build:
shutil.copy(cefclient, bindir)
shutil.copy(cefsimple, bindir)
shutil.copy(ceftests, bindir)

# END: Copy cefclient, cefsimple, ceftests

Expand All @@ -654,8 +661,11 @@ def create_prebuilt_binaries():
libdst = os.path.join(libdir, "libcef_dll_wrapper_md.lib")
shutil.copy(libsrc, libdst)
elif platform.system() == "Linux":
cpdir(os.path.join(src, "build_cefclient", "libcef_dll_wrapper"),
libdir)
if Options.arm_build:
shutil.copy(os.path.join(Options.cef_build_dir, "chromium/src/out/Release_GN_arm/obj/cef/")+"libcef_dll_wrapper.a", libdir)
else:
cpdir(os.path.join(src, "build_cefclient", "libcef_dll_wrapper"),
libdir)

# Remove .lib files from bin/ only after libraries were copied
libs = glob.glob(os.path.join(bindir, "*.lib"))
Expand Down Expand Up @@ -745,7 +755,9 @@ def run_automate_git():
ninja -v -j2 -Cout\Release cefclient
"""
args = []
if ARCH64:
if Options.arm_build:
args.append("--arm-build")
elif ARCH64:
args.append("--x64-build")
args.append("--download-dir=" + Options.cef_build_dir)
args.append("--branch=" + Options.cef_branch)
Expand Down Expand Up @@ -819,6 +831,8 @@ def get_prebuilt_name(header_file=""):
version = get_version_from_file(header_file)
else:
version = get_cefpython_version()
if Options.arm_build:
OS_POSTFIX2 = "linuxarm"
name = "cef%s_%s_%s" % (
version["CHROME_VERSION_MAJOR"],
version["CEF_VERSION"],
Expand Down