diff options
author | Stephen Hines <srhines@google.com> | 2012-08-03 16:52:40 -0700 |
---|---|---|
committer | Stephen Hines <srhines@google.com> | 2012-08-03 17:09:45 -0700 |
commit | 0a813a3ef2a82f19d7eab9e23ae8493197143803 (patch) | |
tree | 813b7c16444a594f73ee76947361dadebe99afd6 | |
parent | e37f7d349704bdd8c94afad7c6021561787ec5c9 (diff) | |
download | android_frameworks_compile_slang-0a813a3ef2a82f19d7eab9e23ae8493197143803.tar.gz android_frameworks_compile_slang-0a813a3ef2a82f19d7eab9e23ae8493197143803.tar.bz2 android_frameworks_compile_slang-0a813a3ef2a82f19d7eab9e23ae8493197143803.zip |
Add RS package name option + support.
Usage:
llvm-rs-cc -rs-package-name=android.renderscript ...
or
llvm-rs-cc -rs-package-name android.renderscript ...
This allows us to reflect a different import path for our base RS classes.
The default value is "android.renderscript", resulting in a reflection that
produces "import android.renderscript.*;".
Change-Id: Icf7e83b963ba70c803899697f49b41fdfb9586e7
-rw-r--r-- | RSCCOptions.td | 5 | ||||
-rw-r--r-- | llvm-rs-cc.cpp | 9 | ||||
-rw-r--r-- | slang_rs.cpp | 8 | ||||
-rw-r--r-- | slang_rs.h | 10 | ||||
-rw-r--r-- | slang_rs_context.cpp | 8 | ||||
-rw-r--r-- | slang_rs_context.h | 13 | ||||
-rw-r--r-- | slang_rs_reflection.cpp | 18 | ||||
-rw-r--r-- | slang_rs_reflection.h | 11 | ||||
-rw-r--r-- | tests/P_rs_package_name/rs_package_name.rs | 4 | ||||
-rw-r--r-- | tests/P_rs_package_name/stderr.txt.expect | 0 | ||||
-rw-r--r-- | tests/P_rs_package_name/stdout.txt.expect | 1 |
11 files changed, 63 insertions, 24 deletions
diff --git a/RSCCOptions.td b/RSCCOptions.td index ebd7f36..caeba16 100644 --- a/RSCCOptions.td +++ b/RSCCOptions.td @@ -83,6 +83,11 @@ def bitcode_storage : Separate<"-bitcode-storage">, MetaVarName<"<value>">, HelpText<"<value> should be 'ar' or 'jc'">; def _bitcode_storage : Separate<"-s">, Alias<bitcode_storage>; +def rs_package_name : Separate<"-rs-package-name">, + MetaVarName<"<package_name>">, + HelpText<"package name for referencing RS classes">; +def rs_package_name_EQ : Joined<"-rs-package-name=">, Alias<rs_package_name>; + def W : Joined<"-W">; def w : Flag<"-w">, HelpText<"Suppress all warnings">; diff --git a/llvm-rs-cc.cpp b/llvm-rs-cc.cpp index 495489a..08e25e7 100644 --- a/llvm-rs-cc.cpp +++ b/llvm-rs-cc.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2010, The Android Open Source Project + * Copyright 2010-2012, The Android 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. @@ -131,6 +131,8 @@ class RSCCOptions { std::string mJavaReflectionPackageName; + std::string mRSPackageName; + slang::BitCodeStorageType mBitcodeStorage; unsigned mOutputDep : 1; @@ -263,6 +265,8 @@ static void ParseArguments(llvm::SmallVectorImpl<const char*> &ArgVector, Opts.mJavaReflectionPackageName = Args->getLastArgValue(OPT_java_reflection_package_name); + Opts.mRSPackageName = Args->getLastArgValue(OPT_rs_package_name); + llvm::StringRef BitcodeStorageValue = Args->getLastArgValue(OPT_bitcode_storage); if (BitcodeStorageValue == "ar") @@ -479,7 +483,8 @@ int main(int argc, const char **argv) { Opts.mDebugEmission, Opts.mOptimizationLevel, Opts.mJavaReflectionPathBase, - Opts.mJavaReflectionPackageName); + Opts.mJavaReflectionPackageName, + Opts.mRSPackageName); Compiler->reset(); diff --git a/slang_rs.cpp b/slang_rs.cpp index 4aa2214..18858b2 100644 --- a/slang_rs.cpp +++ b/slang_rs.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2010, The Android Open Source Project + * Copyright 2010-2012, The Android 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. @@ -64,9 +64,11 @@ namespace slang { bool SlangRS::reflectToJava(const std::string &OutputPathBase, const std::string &OutputPackageName, + const std::string &RSPackageName, std::string *RealPackageName) { return mRSContext->reflectToJava(OutputPathBase, OutputPackageName, + RSPackageName, getInputFileName(), getOutputFileName(), RealPackageName); @@ -270,7 +272,8 @@ bool SlangRS::compile( unsigned int TargetAPI, bool EmitDebug, llvm::CodeGenOpt::Level OptimizationLevel, const std::string &JavaReflectionPathBase, - const std::string &JavaReflectionPackageName) { + const std::string &JavaReflectionPackageName, + const std::string &RSPackageName) { if (IOFiles.empty()) return true; @@ -336,6 +339,7 @@ bool SlangRS::compile( if (!reflectToJava(JavaReflectionPathBase, JavaReflectionPackageName, + RSPackageName, &RealPackageName)) { return false; } @@ -1,5 +1,5 @@ /* - * Copyright 2010, The Android Open Source Project + * Copyright 2010-2012, The Android 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. @@ -67,6 +67,7 @@ class SlangRS : public Slang { // The package name that's really applied will be filled in RealPackageName. bool reflectToJava(const std::string &OutputPathBase, const std::string &OutputPackageName, + const std::string &RSPackageName, std::string *RealPackageName); bool generateBitcodeAccessor(const std::string &OutputPathBase, @@ -129,6 +130,10 @@ class SlangRS : public Slang { // line. This may override the package name // specified in the .rs using #pragma. // + // @RSPackageName - The RS package name supplied by the command line. This + // can override the default value of + // "android.renderscript" used by the normal APIs. + // bool compile(const std::list<std::pair<const char*, const char*> > &IOFiles, const std::list<std::pair<const char*, const char*> > &DepFiles, const std::vector<std::string> &IncludePaths, @@ -138,7 +143,8 @@ class SlangRS : public Slang { unsigned int TargetAPI, bool EmitDebug, llvm::CodeGenOpt::Level OptimizationLevel, const std::string &JavaReflectionPathBase, - const std::string &JavaReflectionPackageName); + const std::string &JavaReflectionPackageName, + const std::string &RSPackageName); virtual void reset(); diff --git a/slang_rs_context.cpp b/slang_rs_context.cpp index 53962e7..4ed7e40 100644 --- a/slang_rs_context.cpp +++ b/slang_rs_context.cpp @@ -57,6 +57,7 @@ RSContext::RSContext(clang::Preprocessor &PP, mTargetData(NULL), mLLVMContext(llvm::getGlobalContext()), mLicenseNote(NULL), + mRSPackageName("android.renderscript"), version(0), mMangleCtx(Ctx.createMangleContext()) { slangAssert(mGeneratedFileNames && "Must supply GeneratedFileNames"); @@ -282,6 +283,7 @@ bool RSContext::insertExportType(const llvm::StringRef &TypeName, bool RSContext::reflectToJava(const std::string &OutputPathBase, const std::string &OutputPackageName, + const std::string &RSPackageName, const std::string &InputFileName, const std::string &OutputBCFileName, std::string *RealPackageName) { @@ -306,8 +308,12 @@ bool RSContext::reflectToJava(const std::string &OutputPathBase, // Copy back the really applied package name RealPackageName->assign(PackageName); + if (!RSPackageName.empty()) { + mRSPackageName = RSPackageName; + } + RSReflection *R = new RSReflection(this, mGeneratedFileNames); - bool ret = R->reflect(OutputPathBase, PackageName, + bool ret = R->reflect(OutputPathBase, PackageName, mRSPackageName, InputFileName, OutputBCFileName); if (!ret) fprintf(stderr, "RSContext::reflectToJava : failed to do reflection " diff --git a/slang_rs_context.h b/slang_rs_context.h index 4024300..2463ad9 100644 --- a/slang_rs_context.h +++ b/slang_rs_context.h @@ -1,5 +1,5 @@ /* - * Copyright 2010, The Android Open Source Project + * Copyright 2010-2012, The Android 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. @@ -82,6 +82,8 @@ class RSContext { std::string mReflectJavaPackageName; std::string mReflectJavaPathName; + std::string mRSPackageName; + int version; llvm::OwningPtr<clang::MangleContext> mMangleCtx; @@ -139,6 +141,14 @@ class RSContext { return mReflectJavaPackageName; } + inline void setRSPackageName(const std::string &S) { + mRSPackageName = S; + return; + } + inline const std::string &getRSPackageName() { + return mRSPackageName; + } + bool processExport(); inline void newExportable(RSExportable *E) { if (E != NULL) @@ -207,6 +217,7 @@ class RSContext { bool reflectToJava(const std::string &OutputPathBase, const std::string &OutputPackageName, + const std::string &RSPackageName, const std::string &InputFileName, const std::string &OutputBCFileName, std::string *RealPackageName); diff --git a/slang_rs_reflection.cpp b/slang_rs_reflection.cpp index 1962f0e..f69070c 100644 --- a/slang_rs_reflection.cpp +++ b/slang_rs_reflection.cpp @@ -1906,6 +1906,7 @@ void RSReflection::genAddPaddingToElementBuiler(Context &C, bool RSReflection::reflect(const std::string &OutputPathBase, const std::string &OutputPackageName, + const std::string &RSPackageName, const std::string &InputFileName, const std::string &OutputBCFileName) { Context *C = NULL; @@ -1926,10 +1927,10 @@ bool RSReflection::reflect(const std::string &OutputPathBase, if (OutputPackageName.empty() || OutputPackageName == "-") C = new Context(OutputPathBase, InputFileName, "<Package Name>", - ResourceId, PaddingPrefix, true); + RSPackageName, ResourceId, PaddingPrefix, true); else C = new Context(OutputPathBase, InputFileName, OutputPackageName, - ResourceId, PaddingPrefix, false); + RSPackageName, ResourceId, PaddingPrefix, false); if (C != NULL) { std::string ErrorMsg, ScriptClassName; @@ -1998,15 +1999,6 @@ const char *const RSReflection::Context::ApacheLicenseNote = " */\n" "\n"; -const char *const RSReflection::Context::Import[] = { - // Renderscript java class - "android.renderscript.*", - // Import R - "android.content.res.Resources", - // Import for debugging - // "android.util.Log", -}; - bool RSReflection::Context::openClassFile(const std::string &ClassName, std::string &ErrorMsg) { if (!mUseStdout) { @@ -2066,8 +2058,8 @@ bool RSReflection::Context::startClass(AccessModifier AM, out() << std::endl; // Imports - for (unsigned i = 0; i < (sizeof(Import) / sizeof(const char*)); i++) - out() << "import " << Import[i] << ";" << std::endl; + out() << "import " << mRSPackageName << ".*;" << std::endl; + out() << "import android.content.res.Resources;" << std::endl; out() << std::endl; // All reflected classes should be annotated as hidden, so that they won't diff --git a/slang_rs_reflection.h b/slang_rs_reflection.h index 3674e82..4811144 100644 --- a/slang_rs_reflection.h +++ b/slang_rs_reflection.h @@ -1,5 +1,5 @@ /* - * Copyright 2010-2011, The Android Open Source Project + * Copyright 2010-2012, The Android 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. @@ -49,8 +49,6 @@ class RSReflection { private: static const char *const ApacheLicenseNote; - static const char *const Import[]; - bool mVerbose; std::string mOutputPathBase; @@ -58,6 +56,7 @@ class RSReflection { std::string mInputRSFile; std::string mPackageName; + std::string mRSPackageName; std::string mResourceId; std::string mPaddingPrefix; @@ -119,6 +118,7 @@ class RSReflection { Context(const std::string &OutputPathBase, const std::string &InputRSFile, const std::string &PackageName, + const std::string &RSPackageName, const std::string &ResourceId, const std::string &PaddingPrefix, bool UseStdout) @@ -126,6 +126,7 @@ class RSReflection { mOutputPathBase(OutputPathBase), mInputRSFile(InputRSFile), mPackageName(PackageName), + mRSPackageName(RSPackageName), mResourceId(ResourceId), mPaddingPrefix(PaddingPrefix), mLicenseNote(ApacheLicenseNote), @@ -197,6 +198,9 @@ class RSReflection { void endBlock(); inline const std::string &getPackageName() const { return mPackageName; } + inline const std::string &getRSPackageName() const { + return mRSPackageName; + } inline const std::string &getClassName() const { return mClassName; } inline const std::string &getResourceId() const { return mResourceId; } @@ -330,6 +334,7 @@ class RSReflection { bool reflect(const std::string &OutputPathBase, const std::string &OutputPackageName, + const std::string &RSPackageName, const std::string &InputFileName, const std::string &OutputBCFileName); diff --git a/tests/P_rs_package_name/rs_package_name.rs b/tests/P_rs_package_name/rs_package_name.rs new file mode 100644 index 0000000..ac62324 --- /dev/null +++ b/tests/P_rs_package_name/rs_package_name.rs @@ -0,0 +1,4 @@ +// -rs-package-name different.rs.package.name +#pragma version(1) +#pragma rs java_package_name(foo) + diff --git a/tests/P_rs_package_name/stderr.txt.expect b/tests/P_rs_package_name/stderr.txt.expect new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/tests/P_rs_package_name/stderr.txt.expect diff --git a/tests/P_rs_package_name/stdout.txt.expect b/tests/P_rs_package_name/stdout.txt.expect new file mode 100644 index 0000000..7f736f8 --- /dev/null +++ b/tests/P_rs_package_name/stdout.txt.expect @@ -0,0 +1 @@ +Generating ScriptC_rs_package_name.java ... |