aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Hines <srhines@google.com>2012-08-03 16:52:40 -0700
committerStephen Hines <srhines@google.com>2012-08-03 17:09:45 -0700
commit0a813a3ef2a82f19d7eab9e23ae8493197143803 (patch)
tree813b7c16444a594f73ee76947361dadebe99afd6
parente37f7d349704bdd8c94afad7c6021561787ec5c9 (diff)
downloadandroid_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.td5
-rw-r--r--llvm-rs-cc.cpp9
-rw-r--r--slang_rs.cpp8
-rw-r--r--slang_rs.h10
-rw-r--r--slang_rs_context.cpp8
-rw-r--r--slang_rs_context.h13
-rw-r--r--slang_rs_reflection.cpp18
-rw-r--r--slang_rs_reflection.h11
-rw-r--r--tests/P_rs_package_name/rs_package_name.rs4
-rw-r--r--tests/P_rs_package_name/stderr.txt.expect0
-rw-r--r--tests/P_rs_package_name/stdout.txt.expect1
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;
}
diff --git a/slang_rs.h b/slang_rs.h
index b2ef41d..571f1fa 100644
--- a/slang_rs.h
+++ b/slang_rs.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.
@@ -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 ...