diff --git a/src/client_handler/Makefile b/src/client_handler/Makefile index 5340da3d..715d670c 100644 --- a/src/client_handler/Makefile +++ b/src/client_handler/Makefile @@ -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 \ diff --git a/src/cpp_utils/Makefile b/src/cpp_utils/Makefile index 9e589e80..ca0a6c40 100644 --- a/src/cpp_utils/Makefile +++ b/src/cpp_utils/Makefile @@ -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 $@ diff --git a/src/linux/compile.py b/src/linux/compile.py index 16acf092..25d899d5 100644 --- a/src/linux/compile.py +++ b/src/linux/compile.py @@ -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) diff --git a/src/linux/installer/make-deb.py b/src/linux/installer/make-deb.py index 77bf7f12..858c1840 100644 --- a/src/linux/installer/make-deb.py +++ b/src/linux/installer/make-deb.py @@ -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" diff --git a/src/linux/installer/make-setup.py b/src/linux/installer/make-setup.py index bd016cb1..19fd186e 100644 --- a/src/linux/installer/make-setup.py +++ b/src/linux/installer/make-setup.py @@ -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__)) @@ -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 @@ -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/") diff --git a/src/linux/setup/setup.py b/src/linux/setup/setup.py index c9a4494d..de8c6a2b 100644 --- a/src/linux/setup/setup.py +++ b/src/linux/setup/setup.py @@ -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__)) @@ -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', diff --git a/src/subprocess/Makefile b/src/subprocess/Makefile index 75fdeb36..a0c4264a 100644 --- a/src/subprocess/Makefile +++ b/src/subprocess/Makefile @@ -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 \ @@ -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) diff --git a/src/subprocess/Makefile-libcefpythonapp b/src/subprocess/Makefile-libcefpythonapp index 5264a9c5..82416a2b 100644 --- a/src/subprocess/Makefile-libcefpythonapp +++ b/src/subprocess/Makefile-libcefpythonapp @@ -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 \ diff --git a/tools/automate.py b/tools/automate.py index f6dd9fb0..d307044a 100644 --- a/tools/automate.py +++ b/tools/automate.py @@ -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] @@ -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/ @@ -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 @@ -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" @@ -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 @@ -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, @@ -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, @@ -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 @@ -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")) @@ -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) @@ -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"],