// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

package com.android.tools.r8;

import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.InternalOptions.DesugarState;

public class CompatDxHelper {
  public static void run(D8Command command, Boolean minimalMainDex)
      throws CompilationFailedException {
    AndroidApp app = command.getInputApp();
    InternalOptions options = command.getInternalOptions();
    // DX does not desugar.
    options.desugarState = DesugarState.OFF;
    // DX allows --multi-dex without specifying a main dex list for legacy devices.
    // That is broken, but for CompatDX we do the same to not break existing builds
    // that are trying to transition.
    options.enableMainDexListCheck = false;
    // DX has a minimal main dex flag. In compat mode only do minimal main dex
    // if the flag is actually set.
    options.minimalMainDex = minimalMainDex;
    D8.runForTesting(app, options);
  }

  public static void ignoreDexInArchive(BaseCommand.Builder builder) {
    builder.setIgnoreDexInArchive(true);
  }
}
