Add option to generate reflected C++ code.
BUG=5972398
Change-Id: Ib31ca4bd48a0aa15ebb27092a1ba502e7520d0cf
diff --git a/RSCCOptions.td b/RSCCOptions.td
index 903a70e..be992f5 100644
--- a/RSCCOptions.td
+++ b/RSCCOptions.td
@@ -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.
@@ -102,6 +102,13 @@
def _additional_dep_target : Separate<"-a">, Alias<additional_dep_target>;
//===----------------------------------------------------------------------===//
+// Reflection Options
+//===----------------------------------------------------------------------===//
+
+def reflect_cpp : Flag<"-reflect-c++">,
+ HelpText<"Reflect C++ classes">;
+
+//===----------------------------------------------------------------------===//
// Misc Options
//===----------------------------------------------------------------------===//
diff --git a/llvm-rs-cc.cpp b/llvm-rs-cc.cpp
index f9f2a0b..d25d6e6 100644
--- a/llvm-rs-cc.cpp
+++ b/llvm-rs-cc.cpp
@@ -264,6 +264,10 @@
<< OptParser->getOptionName(OPT_bitcode_storage)
<< BitcodeStorageValue;
+ if (Args->hasArg(OPT_reflect_cpp)) {
+ Opts.mBitcodeStorage = slang::BCST_CPP_CODE;
+ }
+
Opts.mOutputDepDir =
Args->getLastArgValue(OPT_output_dep_dir, Opts.mOutputDir);
Opts.mAdditionalDepTargets =
@@ -456,6 +460,7 @@
Opts.mTargetAPI,
Opts.mJavaReflectionPathBase,
Opts.mJavaReflectionPackageName);
+
Compiler->reset();
return CompileFailed;
diff --git a/slang_rs.cpp b/slang_rs.cpp
index 994139e..22e694a 100644
--- a/slang_rs.cpp
+++ b/slang_rs.cpp
@@ -314,26 +314,34 @@
return false;
if (OutputType != Slang::OT_Dependency) {
- if (!reflectToJava(JavaReflectionPathBase,
- JavaReflectionPackageName,
- &RealPackageName))
- return false;
- for (std::vector<std::string>::const_iterator
- I = mGeneratedFileNames.begin(), E = mGeneratedFileNames.end();
- I != E;
- I++) {
- std::string ReflectedName = RSSlangReflectUtils::ComputePackagedPath(
- JavaReflectionPathBase.c_str(),
- (RealPackageName + OS_PATH_SEPARATOR_STR + *I).c_str());
- appendGeneratedFileName(ReflectedName + ".java");
- }
+ if (BitcodeStorage == BCST_CPP_CODE) {
+ // TODO: Call C++ reflection routines + appendGeneratedFileName().
+ } else {
- if ((OutputType == Slang::OT_Bitcode) &&
- (BitcodeStorage == BCST_JAVA_CODE) &&
- !generateBitcodeAccessor(JavaReflectionPathBase,
- RealPackageName.c_str()))
+ if (!reflectToJava(JavaReflectionPathBase,
+ JavaReflectionPackageName,
+ &RealPackageName)) {
return false;
+ }
+
+ for (std::vector<std::string>::const_iterator
+ I = mGeneratedFileNames.begin(), E = mGeneratedFileNames.end();
+ I != E;
+ I++) {
+ std::string ReflectedName = RSSlangReflectUtils::ComputePackagedPath(
+ JavaReflectionPathBase.c_str(),
+ (RealPackageName + OS_PATH_SEPARATOR_STR + *I).c_str());
+ appendGeneratedFileName(ReflectedName + ".java");
+ }
+
+ if ((OutputType == Slang::OT_Bitcode) &&
+ (BitcodeStorage == BCST_JAVA_CODE) &&
+ !generateBitcodeAccessor(JavaReflectionPathBase,
+ RealPackageName.c_str())) {
+ return false;
+ }
+ }
}
if (OutputDep) {
diff --git a/slang_rs_reflect_utils.h b/slang_rs_reflect_utils.h
index f6cfd57..01b93f0 100644
--- a/slang_rs_reflect_utils.h
+++ b/slang_rs_reflect_utils.h
@@ -24,7 +24,8 @@
// BitCode storage type
enum BitCodeStorageType {
BCST_APK_RESOURCE,
- BCST_JAVA_CODE
+ BCST_JAVA_CODE,
+ BCST_CPP_CODE
};
class RSSlangReflectUtils {