diff --git a/libcef/libcef.gyp b/libcef/libcef.gyp index 825bc837..a7f43ba0 100644 --- a/libcef/libcef.gyp +++ b/libcef/libcef.gyp @@ -9,6 +9,8 @@ { 'target_name': 'libcef_library_wrapper', 'type': 'static_library', + + 'toolsets': ['host', 'target'], 'variables': { @@ -17,16 +19,22 @@ }, # OSX, Windows and Linux only - 'conditions': + 'target_conditions': [ [ - 'OS != "mac" and OS != "win" and OS != "linux"', + 'not toolset_os in ("mac", "win", "linux")', { 'type': 'none', }, ], [ - 'OS == "win"', + 'toolset_os == "linux" and not toolset_arch in ("x86", "x86_64")', + { + 'type': 'none', + }, + ], + [ + 'toolset_os == "win"', { 'defines': [ @@ -262,6 +270,8 @@ 'target_name': 'libcef_stubs', 'type': 'static_library', + 'toolsets': ['host', 'target'], + 'variables': { 'library_for_module': 1, @@ -269,10 +279,10 @@ }, # OSX, Windows and Linux only - 'conditions': + 'target_conditions': [ [ - 'OS != "mac" and OS != "win" and OS != "linux"', + 'not toolset_os in ("mac", "win", "linux")', { 'type': 'none', }, diff --git a/libexpat/libexpat.gyp b/libexpat/libexpat.gyp index f7fb9d9b..6a0e3939 100644 --- a/libexpat/libexpat.gyp +++ b/libexpat/libexpat.gyp @@ -9,6 +9,8 @@ { 'target_name': 'libexpat', 'type': 'static_library', + + 'toolsets': ['host', 'target'], 'variables': { @@ -58,10 +60,10 @@ ], }, - 'conditions': + 'target_conditions': [ [ - 'OS != "android"', + 'toolset_os != "android"', { 'type': 'none', }, diff --git a/libffi/include_linux/arm64/ffi.h b/libffi/include_linux/arm64/ffi.h new file mode 100644 index 00000000..7af4cde7 --- /dev/null +++ b/libffi/include_linux/arm64/ffi.h @@ -0,0 +1,487 @@ +/* -----------------------------------------------------------------*-C-*- + libffi 3.2.1 - Copyright (c) 2011, 2014 Anthony Green + - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the ``Software''), to deal in the Software without + restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + + ----------------------------------------------------------------------- */ + +/* ------------------------------------------------------------------- + The basic API is described in the README file. + + The raw API is designed to bypass some of the argument packing + and unpacking on architectures for which it can be avoided. + + The closure API allows interpreted functions to be packaged up + inside a C function pointer, so that they can be called as C functions, + with no understanding on the client side that they are interpreted. + It can also be used in other cases in which it is necessary to package + up a user specified parameter and a function pointer as a single + function pointer. + + The closure API must be implemented in order to get its functionality, + e.g. for use by gij. Routines are provided to emulate the raw API + if the underlying platform doesn't allow faster implementation. + + More details on the raw and cloure API can be found in: + + http://gcc.gnu.org/ml/java/1999-q3/msg00138.html + + and + + http://gcc.gnu.org/ml/java/1999-q3/msg00174.html + -------------------------------------------------------------------- */ + +#ifndef LIBFFI_H +#define LIBFFI_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Specify which architecture libffi is configured for. */ +#ifndef AARCH64 +#define AARCH64 +#endif + +/* ---- System configuration information --------------------------------- */ + +#include + +#ifndef LIBFFI_ASM + +#if defined(_MSC_VER) && !defined(__clang__) +#define __attribute__(X) +#endif + +#include +#include + +/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). + But we can find it either under the correct ANSI name, or under GNU + C's internal name. */ + +#define FFI_64_BIT_MAX 9223372036854775807 + +#ifdef LONG_LONG_MAX +# define FFI_LONG_LONG_MAX LONG_LONG_MAX +#else +# ifdef LLONG_MAX +# define FFI_LONG_LONG_MAX LLONG_MAX +# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ +# undef FFI_64_BIT_MAX +# define FFI_64_BIT_MAX 9223372036854775807LL +# endif /* _AIX52 or newer */ +# else +# ifdef __GNUC__ +# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ +# endif +# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ +# ifndef __PPC64__ +# if defined (__IBMC__) || defined (__IBMCPP__) +# define FFI_LONG_LONG_MAX LONGLONG_MAX +# endif +# endif /* __PPC64__ */ +# undef FFI_64_BIT_MAX +# define FFI_64_BIT_MAX 9223372036854775807LL +# endif +# endif +#endif + +/* The closure code assumes that this works on pointers, i.e. a size_t */ +/* can hold a pointer. */ + +typedef struct _ffi_type +{ + size_t size; + unsigned short alignment; + unsigned short type; + struct _ffi_type **elements; +} ffi_type; + +#ifndef LIBFFI_HIDE_BASIC_TYPES +#if SCHAR_MAX == 127 +# define ffi_type_uchar ffi_type_uint8 +# define ffi_type_schar ffi_type_sint8 +#else + #error "char size not supported" +#endif + +#if SHRT_MAX == 32767 +# define ffi_type_ushort ffi_type_uint16 +# define ffi_type_sshort ffi_type_sint16 +#elif SHRT_MAX == 2147483647 +# define ffi_type_ushort ffi_type_uint32 +# define ffi_type_sshort ffi_type_sint32 +#else + #error "short size not supported" +#endif + +#if INT_MAX == 32767 +# define ffi_type_uint ffi_type_uint16 +# define ffi_type_sint ffi_type_sint16 +#elif INT_MAX == 2147483647 +# define ffi_type_uint ffi_type_uint32 +# define ffi_type_sint ffi_type_sint32 +#elif INT_MAX == 9223372036854775807 +# define ffi_type_uint ffi_type_uint64 +# define ffi_type_sint ffi_type_sint64 +#else + #error "int size not supported" +#endif + +#if LONG_MAX == 2147483647 +# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX + #error "no 64-bit data type supported" +# endif +#elif LONG_MAX != FFI_64_BIT_MAX + #error "long size not supported" +#endif + +#if LONG_MAX == 2147483647 +# define ffi_type_ulong ffi_type_uint32 +# define ffi_type_slong ffi_type_sint32 +#elif LONG_MAX == FFI_64_BIT_MAX +# define ffi_type_ulong ffi_type_uint64 +# define ffi_type_slong ffi_type_sint64 +#else + #error "long size not supported" +#endif + +/* Need minimal decorations for DLLs to works on Windows. */ +/* GCC has autoimport and autoexport. Rely on Libtool to */ +/* help MSVC export from a DLL, but always declare data */ +/* to be imported for MSVC clients. This costs an extra */ +/* indirection for MSVC clients using the static version */ +/* of the library, but don't worry about that. Besides, */ +/* as a workaround, they can define FFI_BUILDING if they */ +/* *know* they are going to link with the static library. */ +#if defined _MSC_VER && !defined FFI_BUILDING +#define FFI_EXTERN extern __declspec(dllimport) +#else +#define FFI_EXTERN extern +#endif + +/* These are defined in types.c */ +FFI_EXTERN ffi_type ffi_type_void; +FFI_EXTERN ffi_type ffi_type_uint8; +FFI_EXTERN ffi_type ffi_type_sint8; +FFI_EXTERN ffi_type ffi_type_uint16; +FFI_EXTERN ffi_type ffi_type_sint16; +FFI_EXTERN ffi_type ffi_type_uint32; +FFI_EXTERN ffi_type ffi_type_sint32; +FFI_EXTERN ffi_type ffi_type_uint64; +FFI_EXTERN ffi_type ffi_type_sint64; +FFI_EXTERN ffi_type ffi_type_float; +FFI_EXTERN ffi_type ffi_type_double; +FFI_EXTERN ffi_type ffi_type_pointer; + +#if 1 +FFI_EXTERN ffi_type ffi_type_longdouble; +#else +#define ffi_type_longdouble ffi_type_double +#endif + +#ifdef FFI_TARGET_HAS_COMPLEX_TYPE +FFI_EXTERN ffi_type ffi_type_complex_float; +FFI_EXTERN ffi_type ffi_type_complex_double; +#if 1 +FFI_EXTERN ffi_type ffi_type_complex_longdouble; +#else +#define ffi_type_complex_longdouble ffi_type_complex_double +#endif +#endif +#endif /* LIBFFI_HIDE_BASIC_TYPES */ + +typedef enum { + FFI_OK = 0, + FFI_BAD_TYPEDEF, + FFI_BAD_ABI +} ffi_status; + +typedef unsigned FFI_TYPE; + +typedef struct { + ffi_abi abi; + unsigned nargs; + ffi_type **arg_types; + ffi_type *rtype; + unsigned bytes; + unsigned flags; +#ifdef FFI_EXTRA_CIF_FIELDS + FFI_EXTRA_CIF_FIELDS; +#endif +} ffi_cif; + +#if 0 +/* Used to adjust size/alignment of ffi types. */ +void ffi_prep_types (ffi_abi abi); +#endif + +/* Used internally, but overridden by some architectures */ +ffi_status ffi_prep_cif_core(ffi_cif *cif, + ffi_abi abi, + unsigned int isvariadic, + unsigned int nfixedargs, + unsigned int ntotalargs, + ffi_type *rtype, + ffi_type **atypes); + +/* ---- Definitions for the raw API -------------------------------------- */ + +#ifndef FFI_SIZEOF_ARG +# if LONG_MAX == 2147483647 +# define FFI_SIZEOF_ARG 4 +# elif LONG_MAX == FFI_64_BIT_MAX +# define FFI_SIZEOF_ARG 8 +# endif +#endif + +#ifndef FFI_SIZEOF_JAVA_RAW +# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG +#endif + +typedef union { + ffi_sarg sint; + ffi_arg uint; + float flt; + char data[FFI_SIZEOF_ARG]; + void* ptr; +} ffi_raw; + +#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 +/* This is a special case for mips64/n32 ABI (and perhaps others) where + sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ +typedef union { + signed int sint; + unsigned int uint; + float flt; + char data[FFI_SIZEOF_JAVA_RAW]; + void* ptr; +} ffi_java_raw; +#else +typedef ffi_raw ffi_java_raw; +#endif + + +void ffi_raw_call (ffi_cif *cif, + void (*fn)(void), + void *rvalue, + ffi_raw *avalue); + +void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); +void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); +size_t ffi_raw_size (ffi_cif *cif); + +/* This is analogous to the raw API, except it uses Java parameter */ +/* packing, even on 64-bit machines. I.e. on 64-bit machines */ +/* longs and doubles are followed by an empty 64-bit word. */ + +void ffi_java_raw_call (ffi_cif *cif, + void (*fn)(void), + void *rvalue, + ffi_java_raw *avalue); + +void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); +void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); +size_t ffi_java_raw_size (ffi_cif *cif); + +/* ---- Definitions for closures ----------------------------------------- */ + +#if FFI_CLOSURES + +#ifdef _MSC_VER +__declspec(align(8)) +#endif +typedef struct { +#if 0 + void *trampoline_table; + void *trampoline_table_entry; +#else + char tramp[FFI_TRAMPOLINE_SIZE]; +#endif + ffi_cif *cif; + void (*fun)(ffi_cif*,void*,void**,void*); + void *user_data; +#ifdef __GNUC__ +} ffi_closure __attribute__((aligned (8))); +#else +} ffi_closure; +# ifdef __sgi +# pragma pack 0 +# endif +#endif + +void *ffi_closure_alloc (size_t size, void **code); +void ffi_closure_free (void *); + +ffi_status +ffi_prep_closure (ffi_closure*, + ffi_cif *, + void (*fun)(ffi_cif*,void*,void**,void*), + void *user_data); + +ffi_status +ffi_prep_closure_loc (ffi_closure*, + ffi_cif *, + void (*fun)(ffi_cif*,void*,void**,void*), + void *user_data, + void*codeloc); + +#ifdef __sgi +# pragma pack 8 +#endif +typedef struct { +#if 0 + void *trampoline_table; + void *trampoline_table_entry; +#else + char tramp[FFI_TRAMPOLINE_SIZE]; +#endif + ffi_cif *cif; + +#if !FFI_NATIVE_RAW_API + + /* if this is enabled, then a raw closure has the same layout + as a regular closure. We use this to install an intermediate + handler to do the transaltion, void** -> ffi_raw*. */ + + void (*translate_args)(ffi_cif*,void*,void**,void*); + void *this_closure; + +#endif + + void (*fun)(ffi_cif*,void*,ffi_raw*,void*); + void *user_data; + +} ffi_raw_closure; + +typedef struct { +#if 0 + void *trampoline_table; + void *trampoline_table_entry; +#else + char tramp[FFI_TRAMPOLINE_SIZE]; +#endif + + ffi_cif *cif; + +#if !FFI_NATIVE_RAW_API + + /* if this is enabled, then a raw closure has the same layout + as a regular closure. We use this to install an intermediate + handler to do the transaltion, void** -> ffi_raw*. */ + + void (*translate_args)(ffi_cif*,void*,void**,void*); + void *this_closure; + +#endif + + void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); + void *user_data; + +} ffi_java_raw_closure; + +ffi_status +ffi_prep_raw_closure (ffi_raw_closure*, + ffi_cif *cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void *user_data); + +ffi_status +ffi_prep_raw_closure_loc (ffi_raw_closure*, + ffi_cif *cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void *user_data, + void *codeloc); + +ffi_status +ffi_prep_java_raw_closure (ffi_java_raw_closure*, + ffi_cif *cif, + void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), + void *user_data); + +ffi_status +ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, + ffi_cif *cif, + void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), + void *user_data, + void *codeloc); + +#endif /* FFI_CLOSURES */ + +/* ---- Public interface definition -------------------------------------- */ + +ffi_status ffi_prep_cif(ffi_cif *cif, + ffi_abi abi, + unsigned int nargs, + ffi_type *rtype, + ffi_type **atypes); + +ffi_status ffi_prep_cif_var(ffi_cif *cif, + ffi_abi abi, + unsigned int nfixedargs, + unsigned int ntotalargs, + ffi_type *rtype, + ffi_type **atypes); + +void ffi_call(ffi_cif *cif, + void (*fn)(void), + void *rvalue, + void **avalue); + +/* Useful for eliminating compiler warnings */ +#define FFI_FN(f) ((void (*)(void))f) + +/* ---- Definitions shared with assembly code ---------------------------- */ + +#endif + +/* If these change, update src/mips/ffitarget.h. */ +#define FFI_TYPE_VOID 0 +#define FFI_TYPE_INT 1 +#define FFI_TYPE_FLOAT 2 +#define FFI_TYPE_DOUBLE 3 +#if 1 +#define FFI_TYPE_LONGDOUBLE 4 +#else +#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE +#endif +#define FFI_TYPE_UINT8 5 +#define FFI_TYPE_SINT8 6 +#define FFI_TYPE_UINT16 7 +#define FFI_TYPE_SINT16 8 +#define FFI_TYPE_UINT32 9 +#define FFI_TYPE_SINT32 10 +#define FFI_TYPE_UINT64 11 +#define FFI_TYPE_SINT64 12 +#define FFI_TYPE_STRUCT 13 +#define FFI_TYPE_POINTER 14 +#define FFI_TYPE_COMPLEX 15 + +/* This should always refer to the last type code (for sanity checks) */ +#define FFI_TYPE_LAST FFI_TYPE_COMPLEX + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libffi/include_linux/arm64/ffi_common.h b/libffi/include_linux/arm64/ffi_common.h new file mode 100644 index 00000000..37f5a9e9 --- /dev/null +++ b/libffi/include_linux/arm64/ffi_common.h @@ -0,0 +1,132 @@ +/* ----------------------------------------------------------------------- + ffi_common.h - Copyright (C) 2011, 2012, 2013 Anthony Green + Copyright (C) 2007 Free Software Foundation, Inc + Copyright (c) 1996 Red Hat, Inc. + + Common internal definitions and macros. Only necessary for building + libffi. + ----------------------------------------------------------------------- */ + +#ifndef FFI_COMMON_H +#define FFI_COMMON_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/* Do not move this. Some versions of AIX are very picky about where + this is positioned. */ +#ifdef __GNUC__ +# if HAVE_ALLOCA_H +# include +# else + /* mingw64 defines this already in malloc.h. */ +# ifndef alloca +# define alloca __builtin_alloca +# endif +# endif +# define MAYBE_UNUSED __attribute__((__unused__)) +#else +# define MAYBE_UNUSED +# if HAVE_ALLOCA_H +# include +# else +# ifdef _AIX +# pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +# ifdef _MSC_VER +# define alloca _alloca +# else +char *alloca (); +# endif +# endif +# endif +# endif +#endif + +/* Check for the existence of memcpy. */ +#if STDC_HEADERS +# include +#else +# ifndef HAVE_MEMCPY +# define memcpy(d, s, n) bcopy ((s), (d), (n)) +# endif +#endif + +#if defined(FFI_DEBUG) +#include +#endif + +#ifdef FFI_DEBUG +void ffi_assert(char *expr, char *file, int line); +void ffi_stop_here(void); +void ffi_type_test(ffi_type *a, char *file, int line); + +#define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) +#define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) +#define FFI_ASSERT_VALID_TYPE(x) ffi_type_test (x, __FILE__, __LINE__) +#else +#define FFI_ASSERT(x) +#define FFI_ASSERT_AT(x, f, l) +#define FFI_ASSERT_VALID_TYPE(x) +#endif + +#define ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1) +#define ALIGN_DOWN(v, a) (((size_t) (v)) & -a) + +/* Perform machine dependent cif processing */ +ffi_status ffi_prep_cif_machdep(ffi_cif *cif); +ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, + unsigned int nfixedargs, unsigned int ntotalargs); + +/* Extended cif, used in callback from assembly routine */ +typedef struct +{ + ffi_cif *cif; + void *rvalue; + void **avalue; +} extended_cif; + +/* Terse sized type definitions. */ +#if defined(_MSC_VER) || defined(__sgi) || defined(__SUNPRO_C) +typedef unsigned char UINT8; +typedef signed char SINT8; +typedef unsigned short UINT16; +typedef signed short SINT16; +typedef unsigned int UINT32; +typedef signed int SINT32; +# ifdef _MSC_VER +typedef unsigned __int64 UINT64; +typedef signed __int64 SINT64; +# else +# include +typedef uint64_t UINT64; +typedef int64_t SINT64; +# endif +#else +typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); +typedef signed int SINT8 __attribute__((__mode__(__QI__))); +typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); +typedef signed int SINT16 __attribute__((__mode__(__HI__))); +typedef unsigned int UINT32 __attribute__((__mode__(__SI__))); +typedef signed int SINT32 __attribute__((__mode__(__SI__))); +typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); +typedef signed int SINT64 __attribute__((__mode__(__DI__))); +#endif + +typedef float FLOAT32; + +#ifndef __GNUC__ +#define __builtin_expect(x, expected_value) (x) +#endif +#define LIKELY(x) __builtin_expect(!!(x),1) +#define UNLIKELY(x) __builtin_expect((x)!=0,0) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libffi/include_linux/arm64/fficonfig.h b/libffi/include_linux/arm64/fficonfig.h new file mode 100644 index 00000000..8a6b0a2e --- /dev/null +++ b/libffi/include_linux/arm64/fficonfig.h @@ -0,0 +1,215 @@ +/* fficonfig.h. Generated from fficonfig.h.in by configure. */ +/* fficonfig.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +/* #undef AC_APPLE_UNIVERSAL_BUILD */ + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ +/* #undef CRAY_STACKSEG_END */ + +/* Define to 1 if using `alloca.c'. */ +/* #undef C_ALLOCA */ + +/* Define to the flags needed for the .section .eh_frame directive. */ +#define EH_FRAME_FLAGS "a" + +/* Define this if you want extra debugging. */ +/* #undef FFI_DEBUG */ + +/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ +/* #undef FFI_EXEC_TRAMPOLINE_TABLE */ + +/* Define this if you want to enable pax emulated trampolines */ +/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ + +/* Cannot use malloc on this target, so, we revert to alternative means */ +/* #undef FFI_MMAP_EXEC_WRIT */ + +/* Define this if you do not want support for the raw API. */ +/* #undef FFI_NO_RAW_API */ + +/* Define this if you do not want support for aggregate types. */ +/* #undef FFI_NO_STRUCTS */ + +/* Define to 1 if you have `alloca', as a function or macro. */ +#define HAVE_ALLOCA 1 + +/* Define to 1 if you have and it should be used (not on Ultrix). + */ +#define HAVE_ALLOCA_H 1 + +/* Define if your assembler supports .ascii. */ +/* #undef HAVE_AS_ASCII_PSEUDO_OP */ + +/* Define if your assembler supports .cfi_* directives. */ +#define HAVE_AS_CFI_PSEUDO_OP 1 + +/* Define if your assembler supports .register. */ +/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ + +/* Define if your assembler and linker support unaligned PC relative relocs. + */ +/* #undef HAVE_AS_SPARC_UA_PCREL */ + +/* Define if your assembler supports .string. */ +/* #undef HAVE_AS_STRING_PSEUDO_OP */ + +/* Define if your assembler supports unwind section type. */ +/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ + +/* Define if your assembler supports PC relative relocs. */ +/* #undef HAVE_AS_X86_PCREL */ + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define if __attribute__((visibility("hidden"))) is supported. */ +#define HAVE_HIDDEN_VISIBILITY_ATTRIBUTE 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define if you have the long double type and it is bigger than a double */ +#define HAVE_LONG_DOUBLE 1 + +/* Define if you support more than one size of the long double type */ +/* #undef HAVE_LONG_DOUBLE_VARIANT */ + +/* Define to 1 if you have the `memcpy' function. */ +#define HAVE_MEMCPY 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `mkostemp' function. */ +/* #undef HAVE_MKOSTEMP */ + +/* Define to 1 if you have the `mmap' function. */ +#define HAVE_MMAP 1 + +/* Define if mmap with MAP_ANON(YMOUS) works. */ +#define HAVE_MMAP_ANON 1 + +/* Define if mmap of /dev/zero works. */ +#define HAVE_MMAP_DEV_ZERO 1 + +/* Define if read-only mmap of a plain file works. */ +#define HAVE_MMAP_FILE 1 + +/* Define if .eh_frame sections should be read-only. */ +#define HAVE_RO_EH_FRAME 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_MMAN_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#define LT_OBJDIR ".libs/" + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +/* #undef NO_MINUS_C_MINUS_O */ + +/* Name of package */ +#define PACKAGE "libffi" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "libffi" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "libffi 3.2.1" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "libffi" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "3.2.1" + +/* The size of `double', as computed by sizeof. */ +#define SIZEOF_DOUBLE 8 + +/* The size of `long double', as computed by sizeof. */ +#define SIZEOF_LONG_DOUBLE 16 + +/* The size of `size_t', as computed by sizeof. */ +#define SIZEOF_SIZE_T 8 + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +/* #undef STACK_DIRECTION */ + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define if symbols are underscored. */ +/* #undef SYMBOL_UNDERSCORE */ + +/* Define this if you are using Purify and want to suppress spurious messages. + */ +/* #undef USING_PURIFY */ + +/* Version number of package */ +#define VERSION "3.2.1" + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +/* # undef WORDS_BIGENDIAN */ +# endif +#endif + +/* Define to `unsigned int' if does not define. */ +/* #undef size_t */ + + +#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE +#ifdef LIBFFI_ASM +#define FFI_HIDDEN(name) .hidden name +#else +#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) +#endif +#else +#ifdef LIBFFI_ASM +#define FFI_HIDDEN(name) +#else +#define FFI_HIDDEN +#endif +#endif + diff --git a/libffi/include_linux/arm64/ffitarget.h b/libffi/include_linux/arm64/ffitarget.h new file mode 100644 index 00000000..4bbced26 --- /dev/null +++ b/libffi/include_linux/arm64/ffitarget.h @@ -0,0 +1,63 @@ +/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +``Software''), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#ifndef LIBFFI_TARGET_H +#define LIBFFI_TARGET_H + +#ifndef LIBFFI_H +#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + +#ifndef LIBFFI_ASM +typedef unsigned long ffi_arg; +typedef signed long ffi_sarg; + +typedef enum ffi_abi + { + FFI_FIRST_ABI = 0, + FFI_SYSV, + FFI_LAST_ABI, + FFI_DEFAULT_ABI = FFI_SYSV + } ffi_abi; +#endif + +/* ---- Definitions for closures ----------------------------------------- */ + +#define FFI_CLOSURES 1 +#define FFI_TRAMPOLINE_SIZE 36 +#define FFI_NATIVE_RAW_API 0 + +/* ---- Internal ---- */ + +#if defined (__APPLE__) +#define FFI_TARGET_SPECIFIC_VARIADIC +#define FFI_EXTRA_CIF_FIELDS unsigned aarch64_flags; unsigned aarch64_nfixedargs +#else +#define FFI_EXTRA_CIF_FIELDS unsigned aarch64_flags +#endif + +#define AARCH64_FFI_WITH_V_BIT 0 + +#define AARCH64_N_XREG 32 +#define AARCH64_N_VREG 32 +#define AARCH64_CALL_CONTEXT_SIZE (AARCH64_N_XREG * 8 + AARCH64_N_VREG * 16) + +#endif diff --git a/libffi/libffi.gyp b/libffi/libffi.gyp index a6cc2613..6552db48 100644 --- a/libffi/libffi.gyp +++ b/libffi/libffi.gyp @@ -36,6 +36,11 @@ [ './include_linux/x86_64', ], + + 'libffi_public_headers_linux_arm64_dir': + [ + './include_linux/arm64', + ], 'libffi_public_headers_android_dir': [ @@ -117,6 +122,12 @@ 'src/arm/sysv.S', 'src/arm/trampoline.S', ], + + 'libffi_linux_arm64_source_files': + [ + 'src/aarch64/ffi.c', + 'src/aarch64/sysv.S', + ], }, 'targets': @@ -284,7 +295,7 @@ }, ], [ - '(toolset_os == "linux" or toolset_os == "android") and (toolset_arch == "armv6" or toolset_arch == "armv6hf")', + 'toolset_os in ("linux", "android") and toolset_arch in ("armv6", "armv6hf", "armv7")', { 'platform_include_dirs': [ @@ -297,10 +308,33 @@ '<@(libffi_generic_sources)' ], - # Disable VFP - 'cflags': + # Disable VFP for non-hard-float targets + 'conditions': + [ + [ + 'toolset_arch == "armv6"', + { + 'cflags': + [ + '-U__ARM_EABI__', + ], + }, + ], + ], + }, + ], + [ + 'toolset_os in ("linux", "android") and toolset_arch == "arm64"', + { + 'platform_include_dirs': + [ + '<@(libffi_public_headers_linux_arm64_dir)', + ], + + 'sources': [ - '-U__ARM_EABI__', + '<@(libffi_linux_arm64_source_files)', + '<@(libffi_generic_sources)', ], }, ], diff --git a/libffi/src/arm/sysv.S b/libffi/src/arm/sysv.S index c2510317..098dfed0 100644 --- a/libffi/src/arm/sysv.S +++ b/libffi/src/arm/sysv.S @@ -398,7 +398,7 @@ LSYM(Lbase_args): beq LSYM(Lepilogue_vfp) cmp r3, #FFI_TYPE_SINT64 - stmeqia r2, {r0, r1} + stmiaeq r2, {r0, r1} beq LSYM(Lepilogue_vfp) cmp r3, #FFI_TYPE_FLOAT diff --git a/libfreetype/libfreetype.gyp b/libfreetype/libfreetype.gyp index 7c84c5bc..5a341fc0 100644 --- a/libfreetype/libfreetype.gyp +++ b/libfreetype/libfreetype.gyp @@ -10,6 +10,8 @@ 'target_name': 'libfreetype', 'type': 'static_library', + 'toolsets': ['target', 'host'], + 'variables': { 'silence_warnings': 1, @@ -167,11 +169,11 @@ ], }, - 'conditions': + 'target_conditions': [ - # This library is only required on Android + # This library is only required on Emscripten and Android [ - 'OS != "android" and OS != "emscripten"', + 'toolset_os not in ("emscripten", "android")', { 'type': 'none', }, diff --git a/libgif/libgif.gyp b/libgif/libgif.gyp index 56603c60..d859443f 100644 --- a/libgif/libgif.gyp +++ b/libgif/libgif.gyp @@ -9,6 +9,8 @@ { 'target_name': 'libgif', + 'toolsets': ['host', 'target'], + 'conditions': [ [ diff --git a/libharfbuzz/libharfbuzz.gyp b/libharfbuzz/libharfbuzz.gyp index f22d5a7f..72d0f53f 100644 --- a/libharfbuzz/libharfbuzz.gyp +++ b/libharfbuzz/libharfbuzz.gyp @@ -10,6 +10,8 @@ 'target_name': 'libharfbuzz', 'type': 'static_library', + 'toolsets': ['target', 'host'], + 'variables': { 'silence_warnings': 1, @@ -78,6 +80,17 @@ '../../prebuilt/include', ], }, + + 'target_conditions': + [ + # This library is only required on Emscripten and Android + [ + 'toolset_os not in ("emscripten", "android")', + { + 'type': 'none', + }, + ], + ], }, ], } diff --git a/libjpeg/libjpeg.gyp b/libjpeg/libjpeg.gyp index c767de62..5bcf7195 100644 --- a/libjpeg/libjpeg.gyp +++ b/libjpeg/libjpeg.gyp @@ -8,6 +8,8 @@ [ { 'target_name': 'libjpeg', + + 'toolsets': ['host', 'target'], 'conditions': [ diff --git a/libpcre/libpcre.gyp b/libpcre/libpcre.gyp index 533187cd..c8715fe0 100644 --- a/libpcre/libpcre.gyp +++ b/libpcre/libpcre.gyp @@ -9,6 +9,8 @@ { 'target_name': 'libpcre', + 'toolsets': ['host', 'target'], + 'conditions': [ [ diff --git a/libpng/libpng.gyp b/libpng/libpng.gyp index c91911c6..8470288b 100644 --- a/libpng/libpng.gyp +++ b/libpng/libpng.gyp @@ -9,6 +9,8 @@ { 'target_name': 'libpng', + 'toolsets': ['host', 'target'], + 'dependencies': [ '../libz/libz.gyp:libz', diff --git a/libskia/libskia.gyp b/libskia/libskia.gyp old mode 100644 new mode 100755 index d489d1a5..54068d2f --- a/libskia/libskia.gyp +++ b/libskia/libskia.gyp @@ -79,11 +79,15 @@ "src/opts/SkBlitRow_opts_none.cpp", ], - 'opts_armv7_arm64_srcs': - [ - "src/opts/SkBitmapProcState_opts_none.cpp", + 'opts_arm_srcs': + [ + "src/opts/SkBitmapProcState_opts_none.cpp", "src/opts/SkBlitMask_opts_arm.cpp", "src/opts/SkBlitRow_opts_arm.cpp", + ], + + 'opts_armv7_arm64_srcs': + [ "src/opts/SkBitmapProcState_arm_neon.cpp", "src/opts/SkBitmapProcState_matrixProcs_neon.cpp", "src/opts/SkBlitMask_opts_arm_neon.cpp", @@ -129,6 +133,23 @@ ], }, + 'target_defaults': + { + 'target_conditions': + [ + [ + 'toolset_os == "android" and toolset_arch == "armv6"', + { + 'cflags': + [ + # Skia won't compile to ARMv6 Thumb + '-marm', + ], + }, + ], + ], + }, + 'targets': [ # We define separate targets for each set of optimizations as they need @@ -142,6 +163,8 @@ 'target_name': 'libskia_opt_none', 'type': 'static_library', + 'toolsets': ['host', 'target'], + 'include_dirs': [ '<@(skia_include_dirs)', @@ -162,10 +185,10 @@ 'src/opts/opts_dummy.cpp', ], - 'conditions': + 'target_conditions': [ [ - 'target_arch not in ("i386", "x86", "x86_64", "i386 x86_64", "x64", "armv7", "arm64", "armv7 arm64")', + 'toolset_arch not in ("i386", "x86", "x86_64", "i386 x86_64", "x64", "armv6", "armv6hf", "armv7", "arm64", "armv7 arm64")', { 'sources': [ @@ -180,6 +203,8 @@ 'target_name': 'libskia_opt_arm', 'type': 'static_library', + 'toolsets': ['host', 'target'], + 'include_dirs': [ '<@(skia_include_dirs)', @@ -200,18 +225,43 @@ 'src/opts/opts_dummy.cpp', ], - 'conditions': + 'target_conditions': [ [ - 'target_arch in ("armv7", "arm64", "armv7 arm64")', + 'toolset_arch in ("armv7", "arm64", "armv7 arm64")', { 'sources': [ + '<@(opts_arm_srcs)', '<@(opts_armv7_arm64_srcs)', '<@(opts_crc32_srcs)', ], + + 'target_conditions': + [ + [ + 'toolset_os == "android" and toolset_arch == "armv7"', + { + 'cflags': + [ + # Needed in order to enable NEON instruction support + '-mfpu=neon', + ], + }, + ], + ], }, ], + [ + 'toolset_arch in ("armv6", "armv6hf")', + { + 'sources': + [ + '<@(opts_arm_srcs)', + '<@(opts_crc32_srcs)', + ], + }, + ], ], }, @@ -219,6 +269,8 @@ 'target_name': 'libskia_opt_sse2', 'type': 'static_library', + 'toolsets': ['host', 'target'], + 'include_dirs': [ '<@(skia_include_dirs)', @@ -239,31 +291,34 @@ 'src/opts/opts_dummy.cpp', ], - 'conditions': + 'target_conditions': [ [ - 'target_arch in ("i386", "x86", "x64", "x86_64", "i386 x86_64")', + 'toolset_arch in ("i386", "x86", "x64", "x86_64", "i386 x86_64")', { 'sources': [ '<@(opts_sse2_srcs)', ], - }, - ], - - [ - 'OS == "win"', - { - 'defines': - [ - 'SK_CPU_SSE_LEVEL=SK_CPU_SSE_LEVEL_SSE2', - ], - }, - { - 'cflags': - [ - '-msse2', - ], + + 'target_conditions': + [ + [ + 'toolset_os == "win"', + { + 'defines': + [ + 'SK_CPU_SSE_LEVEL=SK_CPU_SSE_LEVEL_SSE2', + ], + }, + { + 'cflags': + [ + '-msse2', + ], + }, + ], + ], }, ], ], @@ -273,6 +328,8 @@ 'target_name': 'libskia_opt_sse3', 'type': 'static_library', + 'toolsets': ['host', 'target'], + 'include_dirs': [ '<@(skia_include_dirs)', @@ -293,31 +350,34 @@ 'src/opts/opts_dummy.cpp', ], - 'conditions': + 'target_conditions': [ [ - 'target_arch in ("i386", "x86", "x64", "x86_64", "i386 x86_64")', + 'toolset_arch in ("i386", "x86", "x64", "x86_64", "i386 x86_64")', { 'sources': [ '<@(opts_sse3_srcs)', ], - }, - ], - - [ - 'OS == "win"', - { - 'defines': - [ - 'SK_CPU_SSE_LEVEL=SK_CPU_SSE_LEVEL_SSE3', - ], - }, - { - 'cflags': - [ - '-msse3', - ], + + 'target_conditions': + [ + [ + 'toolset_os == "win"', + { + 'defines': + [ + 'SK_CPU_SSE_LEVEL=SK_CPU_SSE_LEVEL_SSE3', + ], + }, + { + 'cflags': + [ + '-msse3', + ], + }, + ], + ], }, ], ], @@ -327,6 +387,8 @@ 'target_name': 'libskia_opt_sse41', 'type': 'static_library', + 'toolsets': ['host', 'target'], + 'include_dirs': [ '<@(skia_include_dirs)', @@ -347,31 +409,34 @@ 'src/opts/opts_dummy.cpp', ], - 'conditions': + 'target_conditions': [ [ - 'target_arch in ("i386", "x86", "x64", "x86_64", "i386 x86_64")', + 'toolset_arch in ("i386", "x86", "x64", "x86_64", "i386 x86_64")', { 'sources': [ '<@(opts_sse41_srcs)', ], - }, - ], - - [ - 'OS == "win"', - { - 'defines': - [ - 'SK_CPU_SSE_LEVEL=SK_CPU_SSE_LEVEL_SSE41', - ], - }, - { - 'cflags': - [ - '-msse4.1', - ], + + 'target_conditions': + [ + [ + 'toolset_os == "win"', + { + 'defines': + [ + 'SK_CPU_SSE_LEVEL=SK_CPU_SSE_LEVEL_SSE41', + ], + }, + { + 'cflags': + [ + '-msse4.1', + ], + }, + ], + ], }, ], ], @@ -382,6 +447,8 @@ 'target_name': 'libskia_opt_sse42', 'type': 'static_library', + 'toolsets': ['host', 'target'], + 'include_dirs': [ '<@(skia_include_dirs)', @@ -402,31 +469,34 @@ 'src/opts/opts_dummy.cpp', ], - 'conditions': + 'target_conditions': [ [ - 'target_arch in ("i386", "x86", "x64", "x86_64", "i386 x86_64")', + 'toolset_arch in ("i386", "x86", "x64", "x86_64", "i386 x86_64")', { 'sources': [ '<@(opts_sse42_srcs)', ], - }, - ], - - [ - 'OS == "win"', - { - 'defines': - [ - 'SK_CPU_SSE_LEVEL=SK_CPU_SSE_LEVEL_SSE42', - ], - }, - { - 'cflags': - [ - '-msse4.2', - ], + + 'target_conditions': + [ + [ + 'toolset_os == "win"', + { + 'defines': + [ + 'SK_CPU_SSE_LEVEL=SK_CPU_SSE_LEVEL_SSE42', + ], + }, + { + 'cflags': + [ + '-msse4.2', + ], + }, + ], + ], }, ], ], @@ -436,6 +506,8 @@ 'target_name': 'libskia_opt_avx', 'type': 'static_library', + 'toolsets': ['host', 'target'], + 'include_dirs': [ '<@(skia_include_dirs)', @@ -456,31 +528,34 @@ 'src/opts/opts_dummy.cpp', ], - 'conditions': + 'target_conditions': [ [ - 'target_arch in ("i386", "x86", "x64", "x86_64", "i386 x86_64")', + 'toolset_arch in ("i386", "x86", "x64", "x86_64", "i386 x86_64")', { 'sources': [ '<@(opts_avx_srcs)', ], - }, - ], - - [ - 'OS == "win"', - { - 'cflags': - [ - '/arch:AVX', - ], - }, - { - 'cflags': - [ - '-mavx', - ], + + 'target_conditions': + [ + [ + 'toolset_os == "win"', + { + 'cflags': + [ + '/arch:AVX', + ], + }, + { + 'cflags': + [ + '-mavx', + ], + }, + ], + ], }, ], ], @@ -490,6 +565,8 @@ 'target_name': 'libskia_opt_hsw', 'type': 'static_library', + 'toolsets': ['host', 'target'], + 'include_dirs': [ '<@(skia_include_dirs)', @@ -510,35 +587,38 @@ 'src/opts/opts_dummy.cpp', ], - 'conditions': + 'target_conditions': [ [ - 'target_arch in ("i386", "x86", "x64", "x86_64", "i386 x86_64")', + 'toolset_arch in ("i386", "x86", "x64", "x86_64", "i386 x86_64")', { 'sources': [ '<@(opts_hsw_srcs)', ], - }, - ], - - [ - 'OS == "win"', - { - 'cflags': - [ - '/arch:AVX2', - ], - }, - { - 'cflags': - [ - '-mavx2', - '-mbmi', - '-mbmi2', - '-mf16c', - '-mfma', - ], + + 'target_conditions': + [ + [ + 'toolset_os == "win"', + { + 'cflags': + [ + '/arch:AVX2', + ], + }, + { + 'cflags': + [ + '-mavx2', + '-mbmi', + '-mbmi2', + '-mf16c', + '-mfma', + ], + }, + ], + ], }, ], ], @@ -548,6 +628,8 @@ 'target_name': 'libskia', 'type': 'static_library', + 'toolsets': ['host', 'target'], + 'variables': { 'silence_warnings': 1, @@ -1653,7 +1735,20 @@ 'conditions': [ [ - 'OS == "win"', + 'OS in ("emscripten", "android")', + { + 'dependencies': + [ + '../libfreetype/libfreetype.gyp:libfreetype', + ], + } + ], + ], + + 'target_conditions': + [ + [ + 'toolset_os == "win"', { 'include_dirs': [ @@ -1693,18 +1788,10 @@ # TODO: Recheck rounded-rectangle appearence after next Skia update. 'SK_NO_ANALYTIC_AA', ], - - 'link_settings': - { - 'libraries': - [ - #'-lOpenGL32.lib', - ], - }, }, ], [ - 'OS != "win"', + 'toolset_os != "win"', { 'sources/': [ @@ -1716,7 +1803,7 @@ }, ], [ - 'OS in ("mac", "ios")', + 'toolset_os in ("mac", "ios")', { 'sources!': [ @@ -1741,7 +1828,7 @@ }, ], [ - 'OS not in ("mac","ios")', + 'toolset_os not in ("mac","ios")', { 'sources/': [ @@ -1752,12 +1839,12 @@ }, ], [ - 'OS != "emscripten"', + 'toolset_os != "emscripten"', { }, ], [ - 'OS == "linux" or OS == "emscripten"', + 'toolset_os in ("linux", "emscripten")', { # Work around unreliable platform detection in the Skia headers 'defines': @@ -1767,7 +1854,7 @@ }, ], [ - 'OS != "android"', + 'toolset_os != "android"', { 'sources/': [ @@ -1777,7 +1864,7 @@ }, ], [ - 'OS != "android"', + 'toolset_os != "android"', { 'sources!': [ @@ -1787,19 +1874,13 @@ }, ], [ - 'OS == "emscripten"', + 'toolset_os == "emscripten"', { 'defines': [ 'SK_FONT_FILE_PREFIX="/boot/standalone/"', ], - 'dependencies': - [ - '../libexpat/libexpat.gyp:libexpat', - '../libfreetype/libfreetype.gyp:libfreetype', - ], - 'sources!': [ 'src/ports/SkDebug_stdio.cpp', @@ -1820,7 +1901,7 @@ }, ], [ - 'OS == "mac"', + 'toolset_os == "mac"', { 'sources/': [ @@ -1828,7 +1909,7 @@ }, ], [ - 'OS == "ios"', + 'toolset_os == "ios"', { 'sources!': [ @@ -1838,7 +1919,7 @@ }, ], [ - 'OS == "linux"', + 'toolset_os == "linux"', { 'sources!': [ @@ -1853,27 +1934,11 @@ [ ['exclude', 'SkFontMgr_custom'], ], - - 'link_settings': - { - 'libraries': - [ - #'-lGL', - '-lfontconfig', - '-lfreetype', - ], - }, } ], [ - 'OS == "android"', + 'toolset_os == "android"', { - 'dependencies': - [ - '../libexpat/libexpat.gyp:libexpat', - '../libfreetype/libfreetype.gyp:libfreetype', - ], - 'defines': [ 'SK_BUILD_FOR_ANDROID', @@ -1881,6 +1946,11 @@ ], # Need to include the cpufeatures module from the Android NDK + 'variables': + { + # Default value because only Android defines the <(android_ndk_path) variable. + 'android_ndk_path%': '', + }, 'include_dirs': [ '<(android_ndk_path)/sources/android/cpufeatures', @@ -1907,18 +1977,46 @@ ['exclude', 'FontConfig'], ['exclude', 'SkFontMgr_custom'], ], - - 'link_settings': - { - 'libraries': - [ - #'-lEGL', - #'-lGLESv2', - ], - }, - }, + }, ], ], + + 'link_settings': + { + 'target_conditions': + [ + [ + 'toolset_os == "win"', + { + 'libraries': + [ + #'-lOpenGL32.lib' + ], + }, + ], + [ + 'toolset_os == "linux"', + { + 'libraries': + [ + #'-lGL', + '-lfreetype', + '-lfontconfig', + ], + }, + ], + [ + 'toolset_os == "android"', + { + 'libraries': + [ + #'-lEGL', + #'-lGLESv2', + ], + }, + ], + ], + }, 'direct_dependent_settings': {