shake-language-c 0.8.6 → 0.9.0
raw patch · 4 files changed
+33/−23 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Development.Shake.Language.C.Target.Android: toolChain :: FilePath -> Version -> (ToolChainVariant, Version) -> Target -> ToolChain
+ Development.Shake.Language.C.Target.Android: toolChain :: FilePath -> Version -> ToolChainVariant -> Target -> ToolChain
Files
- CHANGELOG.md +4/−0
- shake-language-c.cabal +2/−2
- src/Development/Shake/Language/C/Host/Windows.hs +1/−1
- src/Development/Shake/Language/C/Target/Android.hs +26/−20
CHANGELOG.md view
@@ -1,5 +1,9 @@ # Changelog for shake-language-c +## v0.9.0++* Add support for the Android *arm64-v8a* target architecture and drop support for specifying the toolchain version; this API breaking change requires a minimum Android NDK revision 11c+ ## v0.8.6 * Fix Windows host target
shake-language-c.cabal view
@@ -13,14 +13,14 @@ -- limitations under the License. Name: shake-language-c-Version: 0.8.6+Version: 0.9.0 Synopsis: Utilities for cross-compiling with Shake Description: This library provides <http://hackage.haskell.org/package/shake Shake> utilities for cross-compiling @C@, @C++@ and @ObjC@ code for various target platforms. Currently supported target platforms are Android, iOS, Linux, MacOS X, Windows\/MinGW and Google Portable Native Client (PNaCl). Supported host platforms are MacOS X, Linux and Windows. Category: Development License: Apache-2.0 License-File: LICENSE -Copyright: Copyright (c) 2012-2014 Samplecount S.L.+Copyright: Copyright (c) 2012-2016 Samplecount S.L. Homepage: https://github.com/samplecount/shake-language-c Bug-Reports: https://github.com/samplecount/shake-language-c/issues Maintainer: stefan@samplecount.com
src/Development/Shake/Language/C/Host/Windows.hs view
@@ -1,4 +1,4 @@--- Copyright 2012-2014 Samplecount S.L.+-- Copyright 2012-2016 Samplecount S.L. -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License.
src/Development/Shake/Language/C/Target/Android.hs view
@@ -1,4 +1,4 @@--- Copyright 2012-2013 Samplecount S.L.+-- Copyright 2012-2016 Samplecount S.L. -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License.@@ -18,6 +18,8 @@ This module provides toolchain definitions and utilities for targeting Android. See "Development.Shake.Language.C.Rules" for examples of how to use a target toolchain.++The minimum required Android NDK revision is 11c. -} module Development.Shake.Language.C.Target.Android ( target@@ -45,6 +47,7 @@ toolChainPrefix x = case targetArch x of X86 _ -> "x86-"+ Arm Arm64 -> "aarch64-linux-android-" Arm _ -> "arm-linux-androideabi-" arch -> unsupportedArch arch @@ -85,9 +88,10 @@ </> "platforms" </> "android-" ++ show (head (versionBranch version)) </> "arch-" ++ case arch of- (X86 _) -> "x86"- (Arm _) -> "arm"- _ -> unsupportedArch arch+ (X86 _) -> "x86"+ (Arm Arm64) -> "arm64"+ (Arm _) -> "arm"+ _ -> unsupportedArch arch march = "-march=" ++ case arch of X86 I386 -> "i386" X86 I686 -> "i686"@@ -95,8 +99,10 @@ Arm Armv5 -> "armv5te" Arm Armv6 -> "armv5te" Arm Armv7 -> "armv7-a"+ Arm Arm64 -> "armv8-a" _ -> unsupportedArch arch- archCompilerFlags (Arm Armv7) = [(Nothing, ["-mfloat-abi=softfp", "-mfpu=neon" {- vfpv3-d16 -}])]+ archCompilerFlags (Arm Armv7) = [(Nothing, ["-mfloat-abi=softfp", "-mfpu=neon"])]+ archCompilerFlags (Arm Arm64) = [] archCompilerFlags (Arm _) = [(Nothing, ["-mtune=xscale", "-msoft-float"])] archCompilerFlags _ = [] archLinkerFlags (Arm Armv7) = ["-Wl,--fix-cortex-a8"]@@ -108,42 +114,42 @@ sdkVersion :: Int -> Version sdkVersion n = Version [n] [] -gccToolChain :: FilePath -> Target -> Version -> FilePath-gccToolChain ndk target version =+gccToolChain :: FilePath -> Target -> FilePath+gccToolChain ndk target = ndk </> "toolchains"- </> toolChainPrefix target ++ showVersion version+ </> toolChainPrefix target ++ showVersion (Version [4,9] []) </> "prebuilt" </> osPrefix -- | Construct an Android toolchain. toolChain :: FilePath -- ^ NDK source directory -> Version -- ^ SDK version, see `sdkVersion`- -> (ToolChainVariant, Version) -- ^ Toolchain variant and version+ -> ToolChainVariant -- ^ Toolchain variant -> Target -- ^ Build target, see `target` -> ToolChain -- ^ Resulting toolchain-toolChain "" _ (_, _) _ = error "Empty NDK directory"-toolChain ndk version (GCC, tcVersion) t =+toolChain "" _ _ _ = error "Empty NDK directory"+toolChain ndk version GCC t = set variant GCC- $ set toolDirectory (Just (gccToolChain ndk t tcVersion </> "bin"))+ $ set toolDirectory (Just (gccToolChain ndk t </> "bin")) $ set toolPrefix (toolPrefix_ t) $ set compilerCommand "gcc" $ set archiverCommand "ar" $ set linkerCommand "g++" $ set defaultBuildFlags (return $ mkDefaultBuildFlags ndk version (targetArch t)) $ defaultToolChain-toolChain ndk version (LLVM, tcVersion) t =+toolChain ndk version LLVM t = set variant LLVM $ set toolDirectory (Just (ndk </> "toolchains"- </> "llvm-" ++ showVersion tcVersion+ </> "llvm" </> "prebuilt" </> osPrefix </> "bin")) $ set compilerCommand "clang"- $ set archiverCommand "llvm-ar"+ $ set archiverCommand (gccToolChain ndk t </> "bin" </> toolPrefix_ t ++ "ar") $ set linkerCommand "clang++" $ set defaultBuildFlags (return $ let flags = [ "-target", llvmTarget t- , "-gcc-toolchain", gccToolChain ndk t (Version [4,8] []) ]+ , "-gcc-toolchain", gccToolChain ndk t ] in mkDefaultBuildFlags ndk version (targetArch t) . append compilerFlags [(Nothing, flags)] . append linkerFlags flags@@ -154,18 +160,18 @@ case targetArch x of Arm Armv5 -> "armv5te-none-linux-androideabi" Arm Armv7 -> "armv7-none-linux-androideabi"+ Arm Arm64 -> "aarch64-none-linux-android" X86 I386 -> "i686-none-linux-android" arch -> unsupportedArch arch-toolChain _ _ (tcVariant, tcVersion) _ =- error $ "Unknown toolchain variant "- ++ show tcVariant ++ " "- ++ showVersion tcVersion+toolChain _ _ tcVariant _ =+ error $ "Unsupported toolchain variant " ++ show tcVariant -- | Valid Android ABI identifier for the given architecture. abiString :: Arch -> String abiString (Arm Armv5) = "armeabi" abiString (Arm Armv6) = "armeabi" abiString (Arm Armv7) = "armeabi-v7a"+abiString (Arm Arm64) = "arm64-v8a" abiString (X86 _) = "x86" abiString arch = unsupportedArch arch