diff --git a/BoardConfig.mk b/BoardConfig.mk index 558e8956..84e83bfa 100644 --- a/BoardConfig.mk +++ b/BoardConfig.mk @@ -6,13 +6,10 @@ TARGET_BOARD_PLATFORM := android-x86 # Some framework code requires this to enable BT BOARD_HAVE_BLUETOOTH := true -BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := device/generic/common/bluetooth -BLUETOOTH_HCI_USE_USB := true -BOARD_HAVE_BLUETOOTH_BCM := true BOARD_USE_LEGACY_UI := true -BOARD_SYSTEMIMAGE_PARTITION_SIZE = $(if $(MKSQUASHFS),0,1073741824) +BOARD_SYSTEMIMAGE_PARTITION_SIZE = $(if $(MKSQUASHFS),0,1610612736) # customize the malloced address to be 16-byte aligned BOARD_MALLOC_ALIGNMENT := 16 @@ -21,14 +18,18 @@ BOARD_MALLOC_ALIGNMENT := 16 # of an SDK AVD. Note that this operation only works on Linux for now ifeq ($(HOST_OS),linux) WITH_DEXPREOPT := true -TARGET_GCC_VERSION_EXP := 4.9 +WITH_DEXPREOPT_PIC := true endif # the following variables could be overridden TARGET_PRELINK_MODULE := false TARGET_NO_KERNEL ?= false TARGET_NO_RECOVERY ?= true -TARGET_EXTRA_KERNEL_MODULES := 8723au tp_smapi +TARGET_EXTRA_KERNEL_MODULES := tp_smapi +ifneq ($(filter efi_img,$(MAKECMDGOALS)),) +TARGET_KERNEL_ARCH ?= x86_64 +endif +TARGET_USES_64_BIT_BINDER := $(if $(filter x86_64,$(TARGET_ARCH) $(TARGET_KERNEL_ARCH)),true) BOARD_USES_GENERIC_AUDIO ?= false BOARD_USES_ALSA_AUDIO ?= true @@ -47,6 +48,8 @@ BUILD_EMULATOR_GPS_MODULE ?= false BUILD_EMULATOR_LIGHTS_MODULE ?= false BUILD_EMULATOR_SENSORS_MODULE ?= false +BUILD_ARM_FOR_X86 := $(WITH_NATIVE_BRIDGE) + BOARD_USE_LIBVA_INTEL_DRIVER := true BOARD_USE_LIBVA := true BOARD_USE_LIBMIX := true @@ -55,6 +58,7 @@ USE_INTEL_OMX_COMPONENTS := true USE_OPENGL_RENDERER := true NUM_FRAMEBUFFER_SURFACE_BUFFERS ?= 3 +BOARD_USES_DRM_HWCOMPOSER ?= true USE_CAMERA_STUB ?= false @@ -67,11 +71,15 @@ BOARD_WPA_SUPPLICANT_PRIVATE_LIB ?= private_lib_driver_cmd WPA_SUPPLICANT_VERSION ?= VER_2_1_DEVEL WIFI_DRIVER_MODULE_PATH ?= auto -#BOARD_GPU_DRIVERS ?= i915 i965 ilo r300g r600g nouveau vmwgfx -BOARD_GPU_DRIVERS ?= i915 i965 swrast r300g r600g +BOARD_GPU_DRIVERS ?= i915 i965 nouveau r300g r600g radeonsi swrast virgl vmwgfx ifneq ($(strip $(BOARD_GPU_DRIVERS)),) TARGET_HARDWARE_3D := true BOARD_EGL_CFG ?= device/generic/common/gpu/egl_mesa.cfg endif -BOARD_KERNEL_CMDLINE := root=/dev/ram0 androidboot.hardware=$(TARGET_PRODUCT) video=-16 +BOARD_KERNEL_CMDLINE := root=/dev/ram0 androidboot.hardware=$(TARGET_PRODUCT) androidboot.selinux=permissive +TARGET_KERNEL_DIFFCONFIG := device/generic/common/selinux_diffconfig + +COMPATIBILITY_ENHANCEMENT_PACKAGE := true +PRC_COMPATIBILITY_PACKAGE := true +ZIP_OPTIMIZATION_NO_INTEGRITY := true diff --git a/app/Android.mk b/app/Android.mk new file mode 100644 index 00000000..08076882 --- /dev/null +++ b/app/Android.mk @@ -0,0 +1,36 @@ +# +# Copyright (C) 2011-2015 The Android-x86 Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# + +LOCAL_PATH := $(call my-dir) +LOCAL_APPS := $(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/*$(COMMON_ANDROID_PACKAGE_SUFFIX))) + +define include-app +include $$(CLEAR_VARS) + +LOCAL_LIBS := $$(shell zipinfo -1 $$(LOCAL_PATH)/$(1) | grep ^lib/ | grep -v /$$$$) + +LOCAL_MODULE := $$(basename $(1)) +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_CLASS := APPS +LOCAL_MODULE_SUFFIX := $$(suffix $(1)) +LOCAL_BUILT_MODULE_STEM := package.apk +LOCAL_CERTIFICATE := PRESIGNED +LOCAL_SRC_FILES := $(1) +LOCAL_DEX_PREOPT := false +LOCAL_MODULE_TARGET_ARCH := $$(call get-prebuilt-src-arch,$$(notdir $$(patsubst %/,%,$$(dir $$(LOCAL_LIBS))))) +LOCAL_PREBUILT_JNI_LIBS := $$(addprefix @,$$(filter lib/$$(LOCAL_MODULE_TARGET_ARCH)/%,$$(LOCAL_LIBS))) +#$$(info $$(LOCAL_MODULE) LOCAL_MODULE_TARGET_ARCH=$$(LOCAL_MODULE_TARGET_ARCH)) +#$$(info $$(LOCAL_MODULE) LOCAL_PREBUILT_JNI_LIBS=$$(LOCAL_PREBUILT_JNI_LIBS)) +include $$(BUILD_PREBUILT) + +ALL_DEFAULT_INSTALLED_MODULES += $$(LOCAL_INSTALLED_MODULE) +endef + +$(foreach a,$(LOCAL_APPS),$(eval $(call include-app,$(a)))) diff --git a/app/AndroidTerm.apk b/app/AndroidTerm.apk new file mode 100644 index 00000000..36de1bd3 Binary files /dev/null and b/app/AndroidTerm.apk differ diff --git a/app/README b/app/README new file mode 100644 index 00000000..24569eb8 --- /dev/null +++ b/app/README @@ -0,0 +1,3 @@ +# +# Put your apks here. The Android-x86 build system will add them automatically. +# diff --git a/device.mk b/device.mk index 605afafb..2c17ac41 100644 --- a/device.mk +++ b/device.mk @@ -24,12 +24,13 @@ PRODUCT_PROPERTY_OVERRIDES := \ PRODUCT_DEFAULT_PROPERTY_OVERRIDES := \ ro.arch=x86 \ - ro.rtc_local_time=1 \ + persist.rtc_local_time=1 \ PRODUCT_COPY_FILES := \ $(if $(wildcard $(PRODUCT_DIR)init.rc),$(PRODUCT_DIR)init.rc:root/init.rc) \ $(if $(wildcard $(PRODUCT_DIR)init.sh),$(PRODUCT_DIR),$(LOCAL_PATH)/)init.sh:system/etc/init.sh \ $(if $(wildcard $(PRODUCT_DIR)modules.blacklist),$(PRODUCT_DIR),$(LOCAL_PATH)/)modules.blacklist:system/etc/modules.blacklist \ + $(if $(wildcard $(PRODUCT_DIR)fstab.$(TARGET_PRODUCT)),$(PRODUCT_DIR)fstab.$(TARGET_PRODUCT),$(LOCAL_PATH)/fstab.x86):root/fstab.$(TARGET_PRODUCT) \ $(if $(wildcard $(PRODUCT_DIR)wpa_supplicant.conf),$(PRODUCT_DIR),$(LOCAL_PATH)/)wpa_supplicant.conf:system/etc/wifi/wpa_supplicant.conf \ $(if $(wildcard $(PRODUCT_DIR)excluded-input-devices.xml),$(PRODUCT_DIR),$(LOCAL_PATH)/)excluded-input-devices.xml:system/etc/excluded-input-devices.xml \ $(if $(wildcard $(PRODUCT_DIR)init.$(TARGET_PRODUCT).rc),$(PRODUCT_DIR)init.$(TARGET_PRODUCT).rc,$(LOCAL_PATH)/init.x86.rc):root/init.$(TARGET_PRODUCT).rc \ @@ -42,6 +43,7 @@ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/media_codecs.xml:system/etc/media_codecs.xml \ $(LOCAL_PATH)/media_profiles.xml:system/etc/media_profiles.xml \ device/sample/etc/apns-full-conf.xml:system/etc/apns-conf.xml \ + device/sample/etc/old-apns-conf.xml:system/etc/old-apns-conf.xml \ frameworks/av/media/libstagefright/data/media_codecs_google_audio.xml:system/etc/media_codecs_google_audio.xml \ frameworks/av/media/libstagefright/data/media_codecs_google_video.xml:system/etc/media_codecs_google_video.xml \ frameworks/native/data/etc/tablet_core_hardware.xml:system/etc/permissions/tablet_core_hardware.xml \ @@ -53,11 +55,12 @@ PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.ethernet.xml:system/etc/permissions/android.hardware.ethernet.xml \ frameworks/native/data/etc/android.hardware.location.xml:system/etc/permissions/android.hardware.location.xml \ frameworks/native/data/etc/android.hardware.location.gps.xml:system/etc/permissions/android.hardware.location.gps.xml \ - frameworks/native/data/etc/android.hardware.sensor.proximity.xml:system/etc/permissions/android.hardware.sensor.proximity.xml \ - frameworks/native/data/etc/android.hardware.sensor.light.xml:system/etc/permissions/android.hardware.sensor.light.xml \ - frameworks/native/data/etc/android.hardware.sensor.gyroscope.xml:system/etc/permissions/android.hardware.sensor.gyroscope.xml \ - frameworks/native/data/etc/android.hardware.sensor.barometer.xml:system/etc/permissions/android.hardware.sensor.barometer.xml \ frameworks/native/data/etc/android.hardware.sensor.accelerometer.xml:system/etc/permissions/android.hardware.sensor.accelerometer.xml \ + frameworks/native/data/etc/android.hardware.sensor.barometer.xml:system/etc/permissions/android.hardware.sensor.barometer.xml \ + frameworks/native/data/etc/android.hardware.sensor.compass.xml:system/etc/permissions/android.hardware.sensor.compass.xml \ + frameworks/native/data/etc/android.hardware.sensor.gyroscope.xml:system/etc/permissions/android.hardware.sensor.gyroscope.xml \ + frameworks/native/data/etc/android.hardware.sensor.light.xml:system/etc/permissions/android.hardware.sensor.light.xml \ + frameworks/native/data/etc/android.hardware.sensor.proximity.xml:system/etc/permissions/android.hardware.sensor.proximity.xml \ frameworks/native/data/etc/android.hardware.touchscreen.multitouch.distinct.xml:system/etc/permissions/android.hardware.touchscreen.multitouch.distinct.xml \ frameworks/native/data/etc/android.hardware.touchscreen.multitouch.jazzhand.xml:system/etc/permissions/android.hardware.touchscreen.multitouch.jazzhand.xml \ frameworks/native/data/etc/android.hardware.usb.accessory.xml:system/etc/permissions/android.hardware.usb.accessory.xml \ @@ -78,7 +81,7 @@ PRODUCT_AAPT_PREF_CONFIG := mdpi DEVICE_PACKAGE_OVERLAYS := $(LOCAL_PATH)/overlay # Get the firmwares -$(call inherit-product,$(LOCAL_PATH)/firmware.mk) +$(call inherit-product,device/generic/firmware/firmware.mk) # Get the touchscreen calibration tool $(call inherit-product-if-exists,external/tslib/tslib.mk) @@ -101,5 +104,5 @@ $(call inherit-product,frameworks/native/build/tablet-10in-xhdpi-2048-dalvik-hea # Get GMS $(call inherit-product-if-exists,vendor/google/products/gms.mk) -# Get Arm translator -$(call inherit-product-if-exists,vendor/intel/houdini/houdini.mk) +# Get native bridge settings +$(call inherit-product-if-exists,$(LOCAL_PATH)/nativebridge/nativebridge.mk) diff --git a/firmware.mk b/firmware.mk deleted file mode 100644 index 37b38eb6..00000000 --- a/firmware.mk +++ /dev/null @@ -1,15 +0,0 @@ -# -# Copyright (C) 2012 The Android-x86 Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# - -LOCAL_FIRMWARES_DIR ?= /lib/firmware -LOCAL_FIRMWARES ?= $(filter-out %.mk,$(subst $(LOCAL_FIRMWARES_DIR)/,,$(shell find $(LOCAL_FIRMWARES_DIR) -type f))) - -PRODUCT_COPY_FILES := \ - $(foreach f,$(LOCAL_FIRMWARES),$(LOCAL_FIRMWARES_DIR)/$(f):system/lib/firmware/$(f)) diff --git a/fstab.x86 b/fstab.x86 new file mode 100644 index 00000000..44de82f3 --- /dev/null +++ b/fstab.x86 @@ -0,0 +1,5 @@ +none /cache tmpfs nosuid,nodev,noatime defaults + +/devices/*/usb*/* auto auto defaults voldmanaged=usb:auto,encryptable=userdata +/devices/*/*sdmmc*/* auto auto defaults voldmanaged=sdcard1:auto,encryptable=userdata +/devices/*/80860F14:01/mmc_* auto auto defaults voldmanaged=sdcard1:auto,encryptable=userdata diff --git a/gpu/gpu_mesa.mk b/gpu/gpu_mesa.mk index 6d27c717..b04ec641 100644 --- a/gpu/gpu_mesa.mk +++ b/gpu/gpu_mesa.mk @@ -10,7 +10,8 @@ PRODUCT_PACKAGES := \ gralloc.drm \ - libGLES_mesa + libGLES_mesa \ + libtxc_dxtn \ PRODUCT_PROPERTY_OVERRIDES := \ ro.opengles.version = 196608 diff --git a/idc/AlpsPS_2_ALPS_DualPoint_TouchPad.idc b/idc/AlpsPS_2_ALPS_DualPoint_TouchPad.idc new file mode 100644 index 00000000..6b28c535 --- /dev/null +++ b/idc/AlpsPS_2_ALPS_DualPoint_TouchPad.idc @@ -0,0 +1,3 @@ +touch.deviceType = default +touch.orientationAware = 1 +touch.gestureMode = spots diff --git a/idc/AlpsPS_2_ALPS_GlidePoint.idc b/idc/AlpsPS_2_ALPS_GlidePoint.idc new file mode 100644 index 00000000..6b28c535 --- /dev/null +++ b/idc/AlpsPS_2_ALPS_GlidePoint.idc @@ -0,0 +1,3 @@ +touch.deviceType = default +touch.orientationAware = 1 +touch.gestureMode = spots diff --git a/idc/Microsoft_Surface_Type_Cover_UNKNOWN.idc b/idc/Microsoft_Surface_Type_Cover_UNKNOWN.idc new file mode 100644 index 00000000..6b28c535 --- /dev/null +++ b/idc/Microsoft_Surface_Type_Cover_UNKNOWN.idc @@ -0,0 +1,3 @@ +touch.deviceType = default +touch.orientationAware = 1 +touch.gestureMode = spots diff --git a/idc/N-Trig_MultiTouch.idc b/idc/N-Trig_MultiTouch.idc new file mode 100644 index 00000000..57a194b8 --- /dev/null +++ b/idc/N-Trig_MultiTouch.idc @@ -0,0 +1,3 @@ +touch.deviceType = touchScreen +touch.orientationAware = 0 +device.internal = 1 diff --git a/init.sh b/init.sh index 39f05756..e9bbb986 100644 --- a/init.sh +++ b/init.sh @@ -1,30 +1,26 @@ # -# Copyright (C) 2013 The Android-x86 Open Source Project +# Copyright (C) 2013-2015 The Android-x86 Open Source Project # # License: GNU Public License v2 or later # function set_property() { - # this must be run before post-fs stage - echo $1=$2 >> /x86.prop + setprop "$1" "$2" + [ -n "$DEBUG" ] && echo "$1"="$2" >> /dev/x86.prop } function init_misc() { + # device information + setprop ro.product.manufacturer "$(cat $DMIPATH/sys_vendor)" + setprop ro.product.model "$PRODUCT" + # a hack for USB modem lsusb | grep 1a8d:1000 && eject # in case no cpu governor driver autoloads [ -d /sys/devices/system/cpu/cpu0/cpufreq ] || modprobe acpi-cpufreq - - case "$PRODUCT" in - T10*TA) - echo on > /sys/bus/platform/drivers/sdhci-acpi/INT33BB:00/power/control - ;; - *) - ;; - esac } function init_hal_audio() @@ -36,6 +32,10 @@ function init_hal_audio() *) ;; esac + + if [ "`cat /proc/asound/card0/id`" = "IntelHDMI" ]; then + [ -d /proc/asound/card1 ] || set_property ro.hardware.audio.primary hdmi + fi } function init_hal_bluetooth() @@ -45,15 +45,44 @@ function init_hal_bluetooth() [ "$type" = "wlan" -o "$type" = "bluetooth" ] && echo 1 > $r/state done - # these modules are incompatible with bluedroid - rmmod ath3k - rmmod btusb - rmmod bluetooth + case "$PRODUCT" in + T10*TA|HP*Omni*) + BTUART_PORT=/dev/ttyS1 + ;; + MacBookPro8*) + rmmod b43 + modprobe b43 btcoex=0 + modprobe btusb + ;; + # FIXME + # Fix MacBook 2013-2015 (Air6/7&Pro11/12) BCM4360 ssb&wl conflict. + MacBookPro11* | MacBookPro12* | MacBookAir6* | MacBookAir7*) + rmmod b43 + rmmod ssb + rmmod bcma + rmmod wl + modprobe wl + modprobe btusb + ;; + *) + for bt in $(lsusb -v | awk ' /Class:.E0/ { print $9 } '); do + chown 1002.1002 $bt && chmod 660 $bt + done + modprobe btusb + ;; + esac + + if [ -n "$BTUART_PORT" ]; then + set_property hal.bluetooth.uart $BTUART_PORT + chown bluetooth.bluetooth $BTUART_PORT + start btattach:-B$BTUART_PORT + log -t hciconfig -p i "`hciconfig`" + fi } function init_hal_camera() { - [ -c /dev/video0 ] || modprobe vivi + return } function init_hal_gps() @@ -78,41 +107,35 @@ function set_drm_mode() function init_uvesafb() { case "$PRODUCT" in - *Q550) - UVESA_MODE=${UVESA_MODE:-1280x800} - ;; ET2002*) UVESA_MODE=${UVESA_MODE:-1600x900} ;; - T91*) - UVESA_MODE=${UVESA_MODE:-1024x600} - ;; - VirtualBox*|Bochs*) - UVESA_MODE=${UVESA_MODE:-1024x768} - ;; *) ;; esac - modprobe uvesafb mode_option=${UVESA_MODE:-800x600}-16 ${UVESA_OPTION:-mtrr=3 scroll=redraw} + [ "$HWACCEL" = "0" ] && bpp=16 || bpp=32 + modprobe uvesafb mode_option=${UVESA_MODE:-1024x768}-$bpp ${UVESA_OPTION:-mtrr=3 scroll=redraw} } function init_hal_gralloc() { case "$(cat /proc/fb | head -1)" in - 0*inteldrmfb|0*radeondrmfb) + *virtiodrmfb) +# set_property ro.hardware.hwcomposer drm + ;& + 0*inteldrmfb|0*radeondrmfb|0*nouveaufb|0*svgadrmfb) set_property ro.hardware.gralloc drm set_drm_mode ;; - 0*svgadrmfb) - ;; "") init_uvesafb ;& 0*) - [ "$HWACCEL" = "1" ] || set_property debug.egl.hw 0 ;; esac + + [ -n "$DEBUG" ] && set_property debug.egl.trace error } function init_hal_hwcomposer() @@ -141,48 +164,49 @@ function init_hal_power() function init_hal_sensors() { + # if we have sensor module for our hardware, use it + ro_hardware=$(getprop ro.hardware) + [ -f /system/lib/hw/sensors.${ro_hardware}.so ] && return 0 + + local hal_sensors=kbd case "$(cat $DMIPATH/uevent)" in - *T*00LA*) - modprobe kfifo-buf - modprobe industrialio-triggered-buffer - modprobe hid-sensor-hub - modprobe hid-sensor-iio-common - modprobe hid-sensor-trigger - modprobe hid-sensor-accel-3d - modprobe hid-sensor-gyro-3d - modprobe hid-sensor-als - modprobe hid-sensor-magn-3d - sleep 1; busybox chown -R 1000.1000 /sys/bus/iio/devices/iio:device?/ - set_property ro.hardware.sensors hsb - ;; *Lucid-MWE*) set_property ro.ignore_atkbd 1 - set_property ro.hardware.sensors hdaps + hal_sensors=hdaps ;; *ICONIA*W5*) - set_property ro.hardware.sensors w500 + hal_sensors=w500 ;; *S10-3t*) - set_property ro.hardware.sensors s103t + hal_sensors=s103t ;; *Inagua*) #setkeycodes 0x62 29 #setkeycodes 0x74 56 set_property ro.ignore_atkbd 1 - set_property ro.hardware.sensors kbd set_property hal.sensors.kbd.type 2 ;; *TEGA*|*2010:svnIntel:*) set_property ro.ignore_atkbd 1 - set_property ro.hardware.sensors kbd set_property hal.sensors.kbd.type 1 io_switch 0x0 0x1 setkeycodes 0x6d 125 ;; + *DLI*) + set_property ro.ignore_atkbd 1 + set_property hal.sensors.kbd.type 1 + setkeycodes 0x64 1 + setkeycodes 0x65 172 + setkeycodes 0x66 120 + setkeycodes 0x67 116 + setkeycodes 0x68 114 + setkeycodes 0x69 115 + setkeycodes 0x6c 114 + setkeycodes 0x6d 115 + ;; *tx2*) setkeycodes 0xb1 138 setkeycodes 0x8a 152 - set_property ro.hardware.sensors kbd set_property hal.sensors.kbd.type 6 set_property poweroff.doubleclick 0 set_property qemu.hw.mainkeys 1 @@ -190,20 +214,34 @@ function init_hal_sensors() *MS-N0E1*) set_property ro.ignore_atkbd 1 set_property poweroff.doubleclick 0 + setkeycodes 0xa5 125 + setkeycodes 0xa7 1 + setkeycodes 0xe3 142 ;; *Aspire1*25*) modprobe lis3lv02d_i2c - set_property ro.hardware.sensors hdaps echo -n "enabled" > /sys/class/thermal/thermal_zone0/mode ;; *ThinkPad*Tablet*) modprobe hdaps - set_property ro.hardware.sensors hdaps + hal_sensors=hdaps + ;; + *i7Stylus*) + set_property hal.sensors.iio.accel.matrix 1,0,0,0,-1,0,0,0,-1 ;; *) - set_property ro.hardware.sensors kbd ;; esac + + # has iio sensor-hub? + if [ -n "`ls /sys/bus/iio/devices/iio:device* 2> /dev/null`" ]; then + busybox chown -R 1000.1000 /sys/bus/iio/devices/iio:device*/ + lsmod | grep -q hid_sensor_accel_3d && hal_sensors=hsb || hal_sensors=iio + elif lsmod | grep -q lis3lv02d_i2c; then + hal_sensors=hdaps + fi + + set_property ro.hardware.sensors $hal_sensors } function create_pointercal() @@ -220,6 +258,9 @@ function create_pointercal() function init_tscal() { case "$PRODUCT" in + ST70416-6*) + modprobe gslx680_ts_acpi + ;& T91|T101|ET2002|74499FU|945GSE-ITE8712|CF-19[CDYFGKLP]*) create_pointercal return @@ -246,10 +287,10 @@ function init_ril() *TEGA*|*2010:svnIntel:*|*Lucid-MWE*) set_property rild.libpath /system/lib/libhuaweigeneric-ril.so set_property rild.libargs "-d /dev/ttyUSB2 -v /dev/ttyUSB1" + set_property ro.radio.noril no ;; *) - set_property rild.libpath /system/lib/libreference-ril.so - set_property rild.libargs "-d /dev/ttyUSB2" + set_property ro.radio.noril yes ;; esac } @@ -279,7 +320,6 @@ function do_init() init_hal_sensors init_tscal init_ril - chmod 640 /x86.prop post_init } @@ -297,9 +337,7 @@ function do_bootcomplete() # FIXME: autosleep works better on i965? [ "$(getprop debug.mesa.driver)" = "i965" ] && setprop debug.autosleep 1 - for bt in $(lsusb -v | awk ' /Class:.E0/ { print $9 } '); do - chown 1002.1002 $bt && chmod 660 $bt - done + lsmod | grep -e brcmfmac && setprop wlan.no-unload-driver 1 case "$PRODUCT" in 1866???|1867???|1869???) # ThinkPad X41 Tablet @@ -352,13 +390,24 @@ function do_bootcomplete() alsa_amixer -c $c set Capture 100% alsa_amixer -c $c set Capture cap alsa_amixer -c $c set PCM 100 unmute + alsa_amixer -c $c set SPO unmute alsa_amixer -c $c set 'Mic Boost' 3 alsa_amixer -c $c set 'Internal Mic Boost' 3 fi done } -PATH=/system/bin:/system/xbin +function do_hci() +{ + local hci=`hciconfig | grep ^hci | cut -d: -f1` + local btd="`getprop init.svc.bluetoothd`" + log -t bluetoothd -p i "$btd ($hci)" + if [ -n "`getprop hal.bluetooth.uart`" ]; then + [ "`getprop init.svc.bluetoothd`" = "running" ] && hciconfig $hci up + fi +} + +PATH=/sbin:/system/bin:/system/xbin DMIPATH=/sys/class/dmi/id BOARD=$(cat $DMIPATH/board_name) @@ -367,10 +416,20 @@ PRODUCT=$(cat $DMIPATH/product_name) # import cmdline variables for c in `cat /proc/cmdline`; do case $c in - androidboot.hardware=*) + BOOT_IMAGE=*|iso-scan/*|*.*=*) ;; *=*) eval $c + if [ -z "$1" ]; then + case $c in + HWACCEL=*) + set_property debug.egl.hw $HWACCEL + ;; + DEBUG=*) + [ -n "$DEBUG" ] && set_property debug.logcat 1 + ;; + esac + fi ;; esac done @@ -388,6 +447,9 @@ case "$1" in bootcomplete) do_bootcomplete ;; + hci) + do_hci + ;; init|"") do_init ;; diff --git a/init.x86.rc b/init.x86.rc index 47022b4d..b79a42ab 100644 --- a/init.x86.rc +++ b/init.x86.rc @@ -1,55 +1,26 @@ +import /init.bluetooth.rc import /init.superuser.rc on early-init - mount debugfs debugfs /sys/kernel/debug - chmod 755 /sys/kernel/debug write /proc/sys/kernel/ctrl-alt-del 1 write /sys/module/xt_qtaguid/parameters/ctrl_write_limited N export force_s3tc_enable true -# export EGL_LOG_LEVEL info + export EGL_LOG_LEVEL info # export EGL_DRIVERS egl_dri2 on init - mkdir /mnt/shell/emulated 0700 shell shell - mkdir /storage/emulated 0555 root root - mkdir /mnt/media_rw/usb0 0700 media_rw media_rw - mkdir /storage/usb0 0700 root root - mkdir /mnt/media_rw/usb1 0700 media_rw media_rw - mkdir /storage/usb1 0700 root root - mkdir /mnt/media_rw/usb2 0700 media_rw media_rw - mkdir /storage/usb2 0700 root root - mkdir /mnt/media_rw/usb3 0700 media_rw media_rw - mkdir /storage/usb3 0700 root root - mkdir /mnt/media_rw/sdcard1 0700 media_rw media_rw - mkdir /storage/sdcard1 0700 root root - - export EXTERNAL_STORAGE /storage/emulated/legacy - export EMULATED_STORAGE_SOURCE /mnt/shell/emulated - export EMULATED_STORAGE_TARGET /storage/emulated - export SECONDARY_STORAGE /storage/usb0:/storage/usb1:/storage/usb2:/storage/usb3:/storage/sdcard1 - - # Support legacy paths - symlink /storage/emulated/legacy /sdcard - symlink /storage/emulated/legacy /mnt/sdcard - symlink /storage/emulated/legacy /storage/sdcard0 - symlink /mnt/shell/emulated/0 /storage/emulated/legacy - - # Backward compatibility - symlink system/lib /lib - - # device information - setprop ro.product.manufacturer $[/sys/class/dmi/id/sys_vendor] - setprop ro.product.model $[/sys/class/dmi/id/product_name] - - exec /system/bin/logwrapper /system/bin/sh /system/etc/init.sh + symlink /sdcard /mnt/sdcard + symlink /sdcard /storage/sdcard0 -on post-fs-data - sysclktz 1 +on fs + mount_all /fstab.${ro.hardware} - mkdir /data/media 0770 media_rw media_rw +on post-fs + exec -- /system/bin/logwrapper /system/bin/sh /system/etc/init.sh +on post-fs-data mkdir /data/misc/wifi 0770 wifi wifi mkdir /data/misc/wifi/sockets 0770 wifi wifi mkdir /data/misc/wifi/wpa_supplicant 0770 wifi wifi @@ -59,12 +30,8 @@ on post-fs-data # Set indication (checked by vold) that we have finished this action setprop vold.post_fs_data_done 1 -on early-boot - readprops /x86.prop - on boot setprop ro.radio.use-ppp yes - setprop ro.radio.noril no setprop status.battery.state Slow setprop status.battery.level 5 setprop status.battery.level_raw 50 @@ -81,14 +48,7 @@ on boot # workaround for h.265 slowness setprop sys.media.vdec.drop 0 -on fs - setprop ro.crypto.fuse_sdcard true - # manually start class late_start since we don't use mount_all - class_start main - class_start late_start - service wpa_supplicant /system/bin/wpa_supplicant -c/data/misc/wifi/wpa_supplicant.conf \ - -ddddd \ -iwlan0 -Dnl80211 \ -O/data/misc/wifi/sockets \ -e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0 @@ -120,39 +80,32 @@ service iprenew_eth0 /system/bin/dhcpcd -n disabled oneshot -service enable_houdini /system/bin/enable_houdini - class main - oneshot - -service powerbtnd /system/bin/powerbtnd - class late_start - -service sdcard /system/bin/sdcard -u 1023 -g 1023 -l /data/media /mnt/shell/emulated - class late_start - -service fuse_sdcard1 /system/bin/sdcard -u 1023 -g 1023 -w 1023 -d /mnt/media_rw/sdcard1 /storage/sdcard1 - class late_start - disabled - -service fuse_usb0 /system/bin/sdcard -u 1023 -g 1023 -w 1023 -d /mnt/media_rw/usb0 /storage/usb0 +service dhcpcd_bt-pan /system/bin/dhcpcd -BKLG class late_start disabled + oneshot -service fuse_usb1 /system/bin/sdcard -u 1023 -g 1023 -w 1023 -d /mnt/media_rw/usb1 /storage/usb1 +service iprenew_bt-pan /system/bin/dhcpcd -n class late_start disabled + oneshot -service fuse_usb2 /system/bin/sdcard -u 1023 -g 1023 -w 1023 -d /mnt/media_rw/usb2 /storage/usb2 - class late_start +service nativebridge /system/bin/enable_nativebridge + class main disabled + oneshot -service fuse_usb3 /system/bin/sdcard -u 1023 -g 1023 -w 1023 -d /mnt/media_rw/usb3 /storage/usb3 +service powerbtnd /system/bin/powerbtnd class late_start - disabled service logcat /system/bin/logcat -v threadtime -f /data/log.txt class debug +service btattach /system/bin/btattach -Pbcm + class main + disabled + oneshot + service wacom-input /system/bin/wacom-input disabled oneshot @@ -172,10 +125,26 @@ on property:system_init.startsurfaceflinger=0 on property:sys.boot_completed=1 write /proc/sys/kernel/ctrl-alt-del 0 - exec /system/bin/logwrapper /system/bin/sh /system/etc/init.sh bootcomplete + exec -- /system/bin/logwrapper /system/bin/sh /system/etc/init.sh bootcomplete + +on property:init.svc.bluetoothd=running + exec -- /system/bin/logwrapper /system/bin/sh /system/etc/init.sh hci + +on property:init.svc.bluetoothd=stopped + exec -- /system/bin/logwrapper /system/bin/sh /system/etc/init.sh hci on property:net.dns1=* - exec /system/bin/logwrapper /system/bin/sh /system/etc/init.sh netconsole + exec -- /system/bin/logwrapper /system/bin/sh /system/etc/init.sh netconsole on property:debug.logcat=1 class_start debug + +on property:persist.sys.nativebridge=1 + mkdir /data/arm 0775 system system + start nativebridge + +on property:persist.sys.nativebridge=0 + stop nativebridge + +on property:debug.egl.hw=0 + setprop ro.kernel.qemu 1 diff --git a/modules.blacklist b/modules.blacklist index 6e9f9e20..a8b88854 100644 --- a/modules.blacklist +++ b/modules.blacklist @@ -1,3 +1 @@ blacklist evbug -blacklist btusb -blacklist bluetooth diff --git a/nativebridge/Android.mk b/nativebridge/Android.mk new file mode 100644 index 00000000..11fc0087 --- /dev/null +++ b/nativebridge/Android.mk @@ -0,0 +1,23 @@ +# +# Copyright (C) 2015 The Android-x86 Open Source Project +# +# Licensed under the GNU General Public License Version 2 or later. +# You may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.gnu.org/licenses/gpl.html +# + +LOCAL_PATH := $(my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := libnb +LOCAL_SRC_FILES := src/libnb.cpp +LOCAL_CFLAGS := -Werror -Wall +LOCAL_CPPFLAGS := -std=c++11 +LOCAL_SHARED_LIBRARIES := libcutils libdl liblog +LOCAL_MULTILIB := both +LOCAL_POST_INSTALL_CMD := mkdir -p $(TARGET_OUT)/{lib/arm,$(if $(filter true,$(TARGET_IS_64_BIT)),lib64/arm64)} + +include $(BUILD_SHARED_LIBRARY) diff --git a/nativebridge/bin/enable_nativebridge b/nativebridge/bin/enable_nativebridge new file mode 100644 index 00000000..18a06db7 --- /dev/null +++ b/nativebridge/bin/enable_nativebridge @@ -0,0 +1,71 @@ +#!/system/bin/sh + +PATH=/system/bin:/system/xbin + +houdini_bin=0 +dest_dir=/system/lib$1/arm$1 +binfmt_misc_dir=/proc/sys/fs/binfmt_misc + +cd /data/arm +if [ -e /system/lib$1/libhoudini.so ]; then + log -pi -thoudini "found /system/lib$1/libhoudini.so" +elif [ -e /system/etc/houdini$1.sfs ]; then + busybox mount /system/etc/houdini$1.sfs $dest_dir +else + if mountpoint -q $dest_dir; then + kill -9 `fuser -m $dest_dir` + umount -f $dest_dir + fi + while ! busybox mount houdini$1.sfs $dest_dir; do + while [ "$(getprop net.dns1)" = "" ]; do + sleep 10 + done + if [ -z "$1" ]; then + [ "`uname -m`" = "x86_64" ] && url=http://goo.gl/Knnmyl || url=http://goo.gl/JsoX2C + else + url=http://goo.gl/n6KtQa + fi + wget $url -cO houdini$1.sfs && continue + rm -f houdini$1.sfs + sleep 30 + done +fi + + +# if you don't see the files 'register' and 'status' in /proc/sys/fs/binfmt_misc +# then run the following command: +# mount -t binfmt_misc none /proc/sys/fs/binfmt_misc + +# this is to add the supported binary formats via binfmt_misc + +if [ ! -e $binfmt_misc_dir/register ]; then + mount -t binfmt_misc none $binfmt_misc_dir +fi + +cd $binfmt_misc_dir +if [ -e register ]; then + [ -e /system/bin/houdini$1 ] && dest_dir=/system/bin + # register Houdini for arm binaries + if [ -z "$1" ]; then + echo ':arm_exe:M::\\x7f\\x45\\x4c\\x46\\x01\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x28::'"$dest_dir/houdini:P" > register + echo ':arm_dyn:M::\\x7f\\x45\\x4c\\x46\\x01\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x00\\x28::'"$dest_dir/houdini:P" > register + else + echo ':arm64_exe:M::\\x7f\\x45\\x4c\\x46\\x02\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\xb7::'"$dest_dir/houdini64:P" > register + echo ':arm64_dyn:M::\\x7f\\x45\\x4c\\x46\\x02\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x00\\xb7::'"$dest_dir/houdini64:P" > register + fi + if [ -e arm${1}_exe ]; then + houdini_bin=1 + fi +else + log -pe -thoudini "No binfmt_misc support" +fi + +if [ $houdini_bin -eq 0 ]; then + log -pe -thoudini "houdini$1 enabling failed!" +else + log -pi -thoudini "houdini$1 enabled" +fi + +[ "$(getprop ro.zygote)" = "zygote64_32" -a -z "$1" ] && exec $0 64 + +exit 0 diff --git a/nativebridge/nativebridge.mk b/nativebridge/nativebridge.mk new file mode 100644 index 00000000..c8641a2f --- /dev/null +++ b/nativebridge/nativebridge.mk @@ -0,0 +1,38 @@ +# +# Copyright (C) 2015 The Android-x86 Open Source Project +# +# Licensed under the GNU General Public License Version 2 or later. +# You may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.gnu.org/licenses/gpl.html +# + +# Enable native bridge +WITH_NATIVE_BRIDGE := true + +# Native Bridge ABI List +NATIVE_BRIDGE_ABI_LIST_32_BIT := armeabi-v7a armeabi +NATIVE_BRIDGE_ABI_LIST_64_BIT := arm64-v8a + +LOCAL_SRC_FILES := bin/enable_nativebridge + +PRODUCT_COPY_FILES := $(foreach f,$(LOCAL_SRC_FILES),$(LOCAL_PATH)/$(f):system/$(f)) + +PRODUCT_PROPERTY_OVERRIDES := \ + ro.dalvik.vm.isa.arm=x86 \ + ro.enable.native.bridge.exec=1 \ + +ifeq ($(TARGET_SUPPORTS_64_BIT_APPS),true) +PRODUCT_PROPERTY_OVERRIDES += \ + ro.dalvik.vm.isa.arm64=x86_64 \ + ro.enable.native.bridge.exec64=1 +endif + +ifneq ($(HOUDINI_PREINSTALL),intel) +PRODUCT_DEFAULT_PROPERTY_OVERRIDES := ro.dalvik.vm.native.bridge=libnb.so + +PRODUCT_PACKAGES := libnb +endif + +$(call inherit-product-if-exists,vendor/intel/houdini/houdini.mk) diff --git a/nativebridge/src/libnb.cpp b/nativebridge/src/libnb.cpp new file mode 100644 index 00000000..aa963cf7 --- /dev/null +++ b/nativebridge/src/libnb.cpp @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2015 The Android-x86 Open Source Project + * + * by Chih-Wei Huang + * + * Licensed under the GNU General Public License Version 2 or later. + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.gnu.org/licenses/gpl.html + * + */ + +#define LOG_TAG "libnb" + +#include +#include +#include +#include "nativebridge/native_bridge.h" + +namespace android { + +static void *native_handle = nullptr; + +static NativeBridgeCallbacks *get_callbacks() +{ + static NativeBridgeCallbacks *callbacks = nullptr; + + if (!callbacks) { + const char *libnb = "/system/" +#ifdef __LP64__ + "lib64/arm64/" +#else + "lib/arm/" +#endif + "libhoudini.so"; + if (!native_handle) { + native_handle = dlopen(libnb, RTLD_LAZY); + if (!native_handle) { + ALOGE("Unable to open %s", libnb); + return nullptr; + } + } + callbacks = reinterpret_cast(dlsym(native_handle, "NativeBridgeItf")); + } + return callbacks; +} + +// NativeBridgeCallbacks implementations +static bool native_bridge2_initialize(const NativeBridgeRuntimeCallbacks *art_cbs, + const char *app_code_cache_dir, + const char *isa) +{ + ALOGV("enter native_bridge2_initialize %s %s", app_code_cache_dir, isa); + if (property_get_bool("persist.sys.nativebridge", 0)) { + if (NativeBridgeCallbacks *cb = get_callbacks()) { + return cb->initialize(art_cbs, app_code_cache_dir, isa); + } + } else { + ALOGW("Native bridge is disabled"); + } + return false; +} + +static void *native_bridge2_loadLibrary(const char *libpath, int flag) +{ + ALOGV("enter native_bridge2_loadLibrary %s", libpath); + NativeBridgeCallbacks *cb = get_callbacks(); + return cb ? cb->loadLibrary(libpath, flag) : nullptr; +} + +static void *native_bridge2_getTrampoline(void *handle, const char *name, + const char* shorty, uint32_t len) +{ + ALOGV("enter native_bridge2_getTrampoline %s", name); + NativeBridgeCallbacks *cb = get_callbacks(); + return cb ? cb->getTrampoline(handle, name, shorty, len) : nullptr; +} + +static bool native_bridge2_isSupported(const char *libpath) +{ + ALOGV("enter native_bridge2_isSupported %s", libpath); + NativeBridgeCallbacks *cb = get_callbacks(); + return cb ? cb->isSupported(libpath) : false; +} + +static const struct NativeBridgeRuntimeValues *native_bridge2_getAppEnv(const char *abi) +{ + ALOGV("enter native_bridge2_getAppEnv %s", abi); + NativeBridgeCallbacks *cb = get_callbacks(); + return cb ? cb->getAppEnv(abi) : nullptr; +} + +static bool native_bridge2_is_compatible_compatible_with(uint32_t version) +{ + // For testing, allow 1 and 2, but disallow 3+. + return version <= 2; +} + +static NativeBridgeSignalHandlerFn native_bridge2_get_signal_handler(int signal) +{ + ALOGV("enter native_bridge2_getAppEnv %d", signal); + NativeBridgeCallbacks *cb = get_callbacks(); + return cb ? cb->getSignalHandler(signal) : nullptr; +} + +static void __attribute__ ((destructor)) on_dlclose() +{ + if (native_handle) { + dlclose(native_handle); + native_handle = nullptr; + } +} + +extern "C" { + +NativeBridgeCallbacks NativeBridgeItf = { + .version = 2, + .initialize = &native_bridge2_initialize, + .loadLibrary = &native_bridge2_loadLibrary, + .getTrampoline = &native_bridge2_getTrampoline, + .isSupported = &native_bridge2_isSupported, + .getAppEnv = &native_bridge2_getAppEnv, + .isCompatibleWith = &native_bridge2_is_compatible_compatible_with, + .getSignalHandler = &native_bridge2_get_signal_handler, +}; + +} // extern "C" +} // namespace android diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml index ec4dec54..2ac2eabb 100644 --- a/overlay/frameworks/base/core/res/res/values/config.xml +++ b/overlay/frameworks/base/core/res/res/values/config.xml @@ -53,19 +53,6 @@ "9,1" - - - 0 - 2 - 3 - 4 - 5 - 9 - 10 - 11 - 12 - - true diff --git a/overlay/frameworks/base/core/res/res/xml/storage_list.xml b/overlay/frameworks/base/core/res/res/xml/storage_list.xml index 66984e8d..73c0766f 100644 --- a/overlay/frameworks/base/core/res/res/xml/storage_list.xml +++ b/overlay/frameworks/base/core/res/res/xml/storage_list.xml @@ -26,29 +26,4 @@ android:primary="true" android:emulated="true" android:mtpReserve="100" /> - - - - - diff --git a/overlay/packages/apps/Trebuchet/res/values-sw340dp/config.xml b/overlay/packages/apps/Trebuchet/res/values-sw340dp/config.xml deleted file mode 100644 index c01c4df5..00000000 --- a/overlay/packages/apps/Trebuchet/res/values-sw340dp/config.xml +++ /dev/null @@ -1,3 +0,0 @@ - - false - diff --git a/packages.mk b/packages.mk index 934f2350..d8e7faae 100644 --- a/packages.mk +++ b/packages.mk @@ -22,6 +22,7 @@ PRODUCT_PACKAGES := \ Galaxy4 \ GlobalTime \ HoloSpiralWallpaper \ + Launcher3 \ LiveWallpapers \ LiveWallpapersPicker \ MagicSmokeWallpapers \ @@ -41,10 +42,12 @@ PRODUCT_PACKAGES := \ hwcomposer.x86 \ icu.dat \ io_switch \ + libGLES_android \ libhuaweigeneric-ril \ lights.default \ make_ext4fs \ parted \ + power.x86 \ powerbtnd \ scp \ sensors.hsb \ @@ -53,6 +56,7 @@ PRODUCT_PACKAGES := \ sshd \ su \ tablet-mode \ + v86d \ wacom-input \ PRODUCT_PACKAGES += \ @@ -64,7 +68,9 @@ PRODUCT_PACKAGES += \ PRODUCT_PACKAGES += \ badblocks \ e2fsck \ + fsck.exfat \ mke2fs \ + mkfs.exfat \ mkntfs \ mount.exfat \ ntfs-3g \ @@ -75,6 +81,4 @@ PRODUCT_PACKAGES += \ # Third party apps PRODUCT_PACKAGES += \ CMFileManager \ - Superuser \ - TSCalibration2 \ - Trebuchet \ + Eleven \ diff --git a/selinux_diffconfig b/selinux_diffconfig new file mode 100644 index 00000000..807ed71b --- /dev/null +++ b/selinux_diffconfig @@ -0,0 +1,7 @@ +CONFIG_SECURITY_PATH=y +CONFIG_SECURITY_SELINUX_BOOTPARAM=y +CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1 +CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 +CONFIG_DEFAULT_SECURITY_SELINUX=y +# CONFIG_DEFAULT_SECURITY_DAC is not set +CONFIG_DEFAULT_SECURITY="selinux" diff --git a/tablet-mode/tablet-mode.c b/tablet-mode/tablet-mode.c index aea8d974..a06778f1 100644 --- a/tablet-mode/tablet-mode.c +++ b/tablet-mode/tablet-mode.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include diff --git a/ueventd.x86.rc b/ueventd.x86.rc index 9c0f1a15..ba82d75a 100644 --- a/ueventd.x86.rc +++ b/ueventd.x86.rc @@ -7,3 +7,5 @@ # for bluetooth nodes /dev/uhid 0660 bluetooth bluetooth + +/sys/devices/system/cpu/cpu* online 0664 system system diff --git a/x86.mk b/x86.mk index a8521861..2c94d1fb 100644 --- a/x86.mk +++ b/x86.mk @@ -21,6 +21,9 @@ PRODUCT_PROPERTY_OVERRIDES := \ ro.com.android.dateformat=MM-dd-yyyy \ +$(call inherit-product,$(LOCAL_PATH)/device.mk) +$(call inherit-product,$(LOCAL_PATH)/packages.mk) + # Get a list of languages. $(call inherit-product,$(SRC_TARGET_DIR)/product/locales_full.mk) @@ -29,6 +32,3 @@ $(call inherit-product,$(SRC_TARGET_DIR)/product/generic.mk) # Get some sounds $(call inherit-product-if-exists,frameworks/base/data/sounds/AudioPackage6.mk) - -$(call inherit-product,$(LOCAL_PATH)/device.mk) -$(call inherit-product,$(LOCAL_PATH)/packages.mk) diff --git a/x86_64.mk b/x86_64.mk new file mode 100644 index 00000000..4970b2ae --- /dev/null +++ b/x86_64.mk @@ -0,0 +1,18 @@ +# +# Copyright (C) 2016 The Android-x86 Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +$(call inherit-product,$(SRC_TARGET_DIR)/product/core_64_bit.mk) +$(call inherit-product,$(LOCAL_PATH)/x86.mk)