--- /dev/null
+/*
+ * Copyright (C) 2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "CompilationBuilder"
+
+#include "CompilationBuilder.h"
+
+// TODO Include these files once availible
+#if 0
+#include "ExecutionBuilder.h"
+#include "ExecutionPlan.h"
+#include "Manager.h"
+#include "ModelBuilder.h"
+#include "Utils.h"
+#endif
+
+namespace android {
+namespace nn {
+
+CompilationBuilder::CompilationBuilder(const ModelBuilder* model) :
+ mModel(model) {
+// VLOG(COMPILATION) << "CompilationBuilder::CompilationBuilder";
+}
+
+int CompilationBuilder::finish() {
+ // Dummy Implementation
+ return ANEURALNETWORKS_NO_ERROR;
+
+ // Original code for reference
+#if 0
+ if (mFinished) {
+ LOG(ERROR) << "ANeuralNetworksCompilation_finish called more than once";
+ return ANEURALNETWORKS_BAD_STATE;
+ }
+ // TODO validate the rest
+
+ mFinished = true;
+
+ if (uint32_t p = DeviceManager::get()->getPartitioning()) {
+ // Get the list of HAL devices.
+ const std::vector<std::shared_ptr<Device>>& devices = DeviceManager::get()->getDrivers();
+
+ int n = mModel->partitionTheWork(devices, mPreference, &mPlan);
+ if (!DeviceManager::partitioningAllowsFallback(p) &&
+ (n != ANEURALNETWORKS_NO_ERROR)) {
+ return n;
+ }
+ }
+
+ return ANEURALNETWORKS_NO_ERROR;
+#endif
+}
+
+int CompilationBuilder::setPreference(int32_t preference) {
+ // Dummy Implementation
+ return ANEURALNETWORKS_NO_ERROR;
+
+ // Original code for reference
+#if 0
+ if (mFinished) {
+ LOG(ERROR) <<
+ "ANeuralNetworksCompilation_setPreference can't modify after compilation finished";
+ return ANEURALNETWORKS_BAD_STATE;
+ }
+ if (preference >= kNumberOfPreferences) {
+ LOG(ERROR) << "ANeuralNetworksCompilation_setPreference invalid preference " << preference;
+ return ANEURALNETWORKS_BAD_DATA;
+ }
+
+ mPreference = preference;
+ return ANEURALNETWORKS_NO_ERROR;
+#endif
+}
+
+int CompilationBuilder::createExecution(ExecutionBuilder **execution) {
+ // Dummy Implementation
+ return ANEURALNETWORKS_NO_ERROR;
+
+ // Original code for reference
+#if 0
+ if (!mFinished) {
+ LOG(ERROR) << "ANeuralNetworksExecution_create passed an unfinished compilation";
+ *execution = nullptr;
+ return ANEURALNETWORKS_BAD_STATE;
+ }
+ *execution = new ExecutionBuilder(this);
+ return (*execution ? ANEURALNETWORKS_NO_ERROR : ANEURALNETWORKS_OUT_OF_MEMORY);
+#endif
+}
+
+} // namespace nn
+} // namespace android
--- /dev/null
+/*
+ * Copyright (C) 2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ANDROID_ML_NN_RUNTIME_COMPILATION_BUILDER_H
+#define ANDROID_ML_NN_RUNTIME_COMPILATION_BUILDER_H
+
+// #include "ExecutionPlan.h" // NOTE ExecutionPlan disabled
+#include "NeuralNetworks.h"
+
+namespace android {
+namespace nn {
+
+class ExecutionBuilder;
+class ModelBuilder;
+
+class CompilationBuilder {
+public:
+ friend class ExecutionBuilder; // TODO remove this
+
+ CompilationBuilder(const ModelBuilder* model);
+
+ int setPreference(int32_t preference);
+
+ int finish();
+
+ int createExecution(ExecutionBuilder** execution);
+
+private:
+ const ModelBuilder* mModel;
+
+// ExecutionPlan mPlan; // NOTE ExecutionPlan disabled
+
+ // Whether the application prefers to go fast or use low power for this execution.
+ int32_t mPreference = ANEURALNETWORKS_PREFER_FAST_SINGLE_ANSWER;
+
+ // Once the compilation has been finished, we should not allow further
+ // modifications to the compilation.
+ bool mFinished = false;
+};
+
+} // namespace nn
+} // namespace android
+
+#endif // ANDROID_ML_NN_RUNTIME_COMPILATION_BUILDER_H