#!/usr/bin/env python3

# Copyright 2023 The SwiftShader Authors. All Rights Reserved.
#
# 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.

import contextlib
import os
import sys
from string import Template

## Generates `CMakeLists.txt` and `Android.bp`

CMAKE_TEMPLATE_PATH = "template_CMakeLists.txt"
DESTINATION_CMAKELISTS_PATH = "../CMakeLists.txt"

ANDROID_BP_TEMPLATE_PATH = "template_Android.bp"
DESTINATION_ANDROID_BP_PATH = "../Android.bp"

# This custom template class changes the delimiter from '$' to
# '%$%'.
# This is needed because CMake build files use '$' extensively.
class CustomTemplate(Template):
	delimiter = '%$%'

@contextlib.contextmanager
def pushd(new_dir):
    previous_dir = os.getcwd()
    os.chdir(new_dir)
    try:
        yield
    finally:
        os.chdir(previous_dir)

# Returns a list of all the .cpp and .c files in the CWD.
def list_all_potentially_compiled_files():
    all_files = []
    for root, sub_folders, files in os.walk("."):
        for file in files:
            file_path = os.path.join(root,file)
            extensions = os.path.splitext(file_path)
            if extensions[1] == ".cpp" or extensions[1] == ".c":
                assert(file_path[0] == '.')
                # Trim the leading '.' out of the path.
                all_files.append(file_path[1:])
    all_files.sort()
    return all_files

# Returns the subset of `files` that do no starts with `banned_prefixes`
def exclude_files_with_prefixes(files, banned_prefixes):
    result = []
    for f in files:
        file_start_with_banned_prefix = False
        for prefix in banned_prefixes:
            if f.startswith(prefix):
                file_start_with_banned_prefix = True
                break
        if not file_start_with_banned_prefix:
            result.append(f)
    return result

# Returns the subset of `files` that starts `needed_prefix`
def keep_files_with_prefix(files, needed_prefix):
    result = []
    for f in files:
        if f.startswith(needed_prefix):
            result.append(f)
    return result

# Get all the files
with pushd("../llvm"):
    all_files = list_all_potentially_compiled_files()

# Split the `all_files`` in several groups
# LLVM common files
prefixes_of_files_not_needed_by_llvm = [
    # The following is a list of files and directories that were
    # removed during the process of making llvm 16 build.
    "/lib/DebugInfo/PDB/DIA/",
    "/lib/ExecutionEngine/OProfileJIT/OProfileWrapper.cpp",
    "/lib/ExecutionEngine/IntelJITEvents/IntelJITEventListener.cpp",
    "/lib/ExecutionEngine/PerfJITEvents/PerfJITEventListener.cpp",
    "/lib/ExecutionEngine/OProfileJIT",
    "/lib/Frontend/OpenACC/",
    "/lib/ObjCopy/",
    "/lib/Support/BLAKE3/",
    "/lib/Target/",
    "/lib/Testing/",
    "/lib/ToolDrivers/llvm-lib/LibDriver.cpp",
    "/lib/ToolDrivers/llvm-dlltool/DlltoolDriver.cpp",
    "/lib/WindowsManifest/WindowsManifestMerger.cpp",
    # The following is a list of files and directories founds by running
    # build/strip_cmakelists.sh on a build that uses CMakeLists.txt.
    # The files removed were copied here.
    "/lib/Analysis/AliasAnalysisSummary.cpp",
    "/lib/Analysis/Analysis.cpp",
    "/lib/Analysis/DevelopmentModeInlineAdvisor.cpp",
    "/lib/Analysis/DomPrinter.cpp",
    "/lib/Analysis/Interval.cpp",
    "/lib/Analysis/IntervalPartition.cpp",
    "/lib/Analysis/MLInlineAdvisor.cpp",
    "/lib/Analysis/MemDepPrinter.cpp",
    "/lib/Analysis/ModelUnderTrainingRunner.cpp",
    "/lib/Analysis/NoInferenceModelRunner.cpp",
    "/lib/Analysis/RegionPrinter.cpp",
    "/lib/Analysis/TFLiteUtils.cpp",
    "/lib/Analysis/Trace.cpp",
    "/lib/Analysis/TrainingLogger.cpp",
    "/lib/BinaryFormat/AMDGPUMetadataVerifier.cpp",
    "/lib/BinaryFormat/DXContainer.cpp",
    "/lib/BinaryFormat/ELF.cpp",
    "/lib/BinaryFormat/Minidump.cpp",
    "/lib/BinaryFormat/MsgPackDocument.cpp",
    "/lib/BinaryFormat/MsgPackDocumentYAML.cpp",
    "/lib/BinaryFormat/MsgPackReader.cpp",
    "/lib/BinaryFormat/MsgPackWriter.cpp",
    "/lib/Bitcode/Reader/BitReader.cpp",
    "/lib/Bitcode/Reader/BitcodeAnalyzer.cpp",
    "/lib/Bitcode/Writer/BitWriter.cpp",
    "/lib/Bitcode/Writer/BitcodeWriterPass.cpp",
    "/lib/CodeGen/AsmPrinter/ErlangGCPrinter.cpp",
    "/lib/CodeGen/AsmPrinter/OcamlGCPrinter.cpp",
    "/lib/CodeGen/CodeGenPassBuilder.cpp",
    "/lib/CodeGen/CommandFlags.cpp",
    "/lib/CodeGen/MIRParser/MILexer.cpp",
    "/lib/CodeGen/MIRParser/MIParser.cpp",
    "/lib/CodeGen/MIRParser/MIRParser.cpp",
    "/lib/CodeGen/MIRYamlMapping.cpp",
    "/lib/CodeGen/MLRegallocPriorityAdvisor.cpp",
    "/lib/CodeGen/MachinePassManager.cpp",
    "/lib/CodeGen/MultiHazardRecognizer.cpp",
    "/lib/CodeGen/NonRelocatableStringpool.cpp",
    "/lib/CodeGen/ParallelCG.cpp",
    "/lib/CodeGen/RegAllocScore.cpp",
    "/lib/CodeGen/VLIWMachineScheduler.cpp",
    "/lib/DWARFLinker/DWARFLinker.cpp",
    "/lib/DWARFLinker/DWARFLinkerCompileUnit.cpp",
    "/lib/DWARFLinker/DWARFLinkerDeclContext.cpp",
    "/lib/DWARFLinker/DWARFStreamer.cpp",
    "/lib/DWARFLinkerParallel/DWARFLinker.cpp",
    "/lib/DWP/DWP.cpp",
    "/lib/DWP/DWPError.cpp",
    "/lib/DebugInfo/CodeView/AppendingTypeTableBuilder.cpp",
    "/lib/DebugInfo/CodeView/CVSymbolVisitor.cpp",
    "/lib/DebugInfo/CodeView/DebugChecksumsSubsection.cpp",
    "/lib/DebugInfo/CodeView/DebugCrossExSubsection.cpp",
    "/lib/DebugInfo/CodeView/DebugCrossImpSubsection.cpp",
    "/lib/DebugInfo/CodeView/DebugFrameDataSubsection.cpp",
    "/lib/DebugInfo/CodeView/DebugInlineeLinesSubsection.cpp",
    "/lib/DebugInfo/CodeView/DebugLinesSubsection.cpp",
    "/lib/DebugInfo/CodeView/DebugStringTableSubsection.cpp",
    "/lib/DebugInfo/CodeView/DebugSubsection.cpp",
    "/lib/DebugInfo/CodeView/DebugSubsectionRecord.cpp",
    "/lib/DebugInfo/CodeView/DebugSubsectionVisitor.cpp",
    "/lib/DebugInfo/CodeView/DebugSymbolRVASubsection.cpp",
    "/lib/DebugInfo/CodeView/DebugSymbolsSubsection.cpp",
    "/lib/DebugInfo/CodeView/Formatters.cpp",
    "/lib/DebugInfo/CodeView/LazyRandomTypeCollection.cpp",
    "/lib/DebugInfo/CodeView/MergingTypeTableBuilder.cpp",
    "/lib/DebugInfo/CodeView/StringsAndChecksums.cpp",
    "/lib/DebugInfo/CodeView/SymbolDumper.cpp",
    "/lib/DebugInfo/CodeView/SymbolRecordHelpers.cpp",
    "/lib/DebugInfo/CodeView/SymbolSerializer.cpp",
    "/lib/DebugInfo/CodeView/TypeDumpVisitor.cpp",
    "/lib/DebugInfo/CodeView/TypeRecordHelpers.cpp",
    "/lib/DebugInfo/CodeView/TypeStreamMerger.cpp",
    "/lib/DebugInfo/DWARF/DWARFLocationExpression.cpp",
    "/lib/DebugInfo/GSYM/",
    "/lib/DebugInfo/LogicalView/",
    "/lib/DebugInfo/MSF/",
    "/lib/DebugInfo/PDB/",
    "/lib/DebugInfo/Symbolize/",
    "/lib/Debuginfod/",
    "/lib/ExecutionEngine/ExecutionEngine.cpp",
    "/lib/ExecutionEngine/ExecutionEngineBindings.cpp",
    "/lib/ExecutionEngine/GDBRegistrationListener.cpp",
    "/lib/ExecutionEngine/IntelJITEvents/jitprofiling.c",
    "/lib/ExecutionEngine/Interpreter/Execution.cpp",
    "/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp",
    "/lib/ExecutionEngine/Interpreter/Interpreter.cpp",
    "/lib/ExecutionEngine/MCJIT/MCJIT.cpp",
    "/lib/ExecutionEngine/Orc/COFFPlatform.cpp",
    "/lib/ExecutionEngine/Orc/COFFVCRuntimeSupport.cpp",
    "/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp",
    "/lib/ExecutionEngine/Orc/DebugObjectManagerPlugin.cpp",
    "/lib/ExecutionEngine/Orc/DebuggerSupportPlugin.cpp",
    "/lib/ExecutionEngine/Orc/EPCDebugObjectRegistrar.cpp",
    "/lib/ExecutionEngine/Orc/EPCDynamicLibrarySearchGenerator.cpp",
    "/lib/ExecutionEngine/Orc/EPCEHFrameRegistrar.cpp",
    "/lib/ExecutionEngine/Orc/EPCGenericDylibManager.cpp",
    "/lib/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManager.cpp",
    "/lib/ExecutionEngine/Orc/EPCGenericRTDyldMemoryManager.cpp",
    "/lib/ExecutionEngine/Orc/EPCIndirectionUtils.cpp",
    "/lib/ExecutionEngine/Orc/IRTransformLayer.cpp",
    "/lib/ExecutionEngine/Orc/IndirectionUtils.cpp",
    "/lib/ExecutionEngine/Orc/LLJIT.cpp",
    "/lib/ExecutionEngine/Orc/LazyReexports.cpp",
    "/lib/ExecutionEngine/Orc/LookupAndRecordAddrs.cpp",
    "/lib/ExecutionEngine/Orc/MapperJITLinkMemoryManager.cpp",
    "/lib/ExecutionEngine/Orc/MemoryMapper.cpp",
    "/lib/ExecutionEngine/Orc/ObjectTransformLayer.cpp",
    "/lib/ExecutionEngine/Orc/OrcABISupport.cpp",
    "/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp",
    "/lib/ExecutionEngine/Orc/Shared/OrcRTBridge.cpp",
    "/lib/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.cpp",
    "/lib/ExecutionEngine/Orc/SimpleRemoteEPC.cpp",
    "/lib/ExecutionEngine/Orc/SpeculateAnalyses.cpp",
    "/lib/ExecutionEngine/Orc/Speculation.cpp",
    "/lib/ExecutionEngine/Orc/TargetProcess/ExecutorSharedMemoryMapperService.cpp",
    "/lib/ExecutionEngine/Orc/TargetProcess/JITLoaderGDB.cpp",
    "/lib/ExecutionEngine/Orc/TargetProcess/OrcRTBootstrap.cpp",
    "/lib/ExecutionEngine/Orc/TargetProcess/SimpleExecutorDylibManager.cpp",
    "/lib/ExecutionEngine/Orc/TargetProcess/SimpleExecutorMemoryManager.cpp",
    "/lib/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.cpp",
    "/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldChecker.cpp",
    "/lib/ExecutionEngine/TargetSelect.cpp",
    "/lib/Extensions/Extensions.cpp",
    "/lib/FileCheck/FileCheck.cpp",
    "/lib/Frontend/HLSL/HLSLResource.cpp",
    "/lib/Frontend/OpenMP/OMP.cpp",
    "/lib/Frontend/OpenMP/OMPContext.cpp",
    "/lib/FuzzMutate/",
    "/lib/IR/Core.cpp",
    "/lib/IR/ReplaceConstant.cpp",
    "/lib/IR/StructuralHash.cpp",
    "/lib/IR/TypedPointerType.cpp",
    "/lib/IR/VectorBuilder.cpp",
    "/lib/InterfaceStub/",
    "/lib/LTO/",
    "/lib/LineEditor/LineEditor.cpp",
    "/lib/Linker/LinkModules.cpp",
    "/lib/MC/ConstantPools.cpp",
    "/lib/MC/MCAsmInfoGOFF.cpp",
    "/lib/MC/MCAsmInfoWasm.cpp",
    "/lib/MC/MCAsmInfoXCOFF.cpp",
    "/lib/MC/MCDisassembler/Disassembler.cpp",
    "/lib/MC/MCDisassembler/MCDisassembler.cpp",
    "/lib/MC/MCDisassembler/MCExternalSymbolizer.cpp",
    "/lib/MC/MCDisassembler/MCSymbolizer.cpp",
    "/lib/MC/MCInstrInfo.cpp",
    "/lib/MC/MCLabel.cpp",
    "/lib/MC/MCParser/COFFMasmParser.cpp",
    "/lib/MC/MCParser/MasmParser.cpp",
    "/lib/MC/MCTargetOptionsCommandFlags.cpp",
    "/lib/MC/MCWasmObjectTargetWriter.cpp",
    "/lib/MC/MCXCOFFObjectTargetWriter.cpp",
    "/lib/MCA/",
    "/lib/Object/ArchiveWriter.cpp",
    "/lib/Object/BuildID.cpp",
    "/lib/Object/COFFImportFile.cpp",
    "/lib/Object/COFFModuleDefinition.cpp",
    "/lib/Object/DXContainer.cpp",
    "/lib/Object/FaultMapParser.cpp",
    "/lib/Object/MachOUniversalWriter.cpp",
    "/lib/Object/Object.cpp",
    "/lib/Object/SymbolSize.cpp",
    "/lib/Object/WindowsMachineFlag.cpp",
    "/lib/ObjectYAML/",
    "/lib/Passes/PassBuilderBindings.cpp",
    "/lib/Passes/PassPlugin.cpp",
    "/lib/Passes/StandardInstrumentations.cpp",
    "/lib/ProfileData/Coverage/CoverageMapping.cpp",
    "/lib/ProfileData/Coverage/CoverageMappingReader.cpp",
    "/lib/ProfileData/Coverage/CoverageMappingWriter.cpp",
    "/lib/ProfileData/GCOV.cpp",
    "/lib/ProfileData/InstrProfWriter.cpp",
    "/lib/ProfileData/RawMemProfReader.cpp",
    "/lib/ProfileData/SampleProfWriter.cpp",
    "/lib/Remarks/Remark.cpp",
    "/lib/Remarks/RemarkLinker.cpp",
    "/lib/Support/AMDGPUMetadata.cpp",
    "/lib/Support/APFixedPoint.cpp",
    "/lib/Support/ARMWinEH.cpp",
    "/lib/Support/AddressRanges.cpp",
    "/lib/Support/Allocator.cpp",
    "/lib/Support/Atomic.cpp",
    "/lib/Support/AutoConvert.cpp",
    "/lib/Support/Base64.cpp",
    "/lib/Support/BuryPointer.cpp",
    "/lib/Support/COM.cpp",
    "/lib/Support/CSKYAttributeParser.cpp",
    "/lib/Support/CSKYAttributes.cpp",
    "/lib/Support/CachePruning.cpp",
    "/lib/Support/Caching.cpp",
    "/lib/Support/DAGDeltaAlgorithm.cpp",
    "/lib/Support/DeltaAlgorithm.cpp",
    "/lib/Support/FileCollector.cpp",
    "/lib/Support/FileOutputBuffer.cpp",
    "/lib/Support/FileUtilities.cpp",
    "/lib/Support/InitLLVM.cpp",
    "/lib/Support/LockFileManager.cpp",
    "/lib/Support/MSP430AttributeParser.cpp",
    "/lib/Support/MSP430Attributes.cpp",
    "/lib/Support/Parallel.cpp",
    "/lib/Support/PluginLoader.cpp",
    "/lib/Support/RWMutex.cpp",
    "/lib/Support/SHA256.cpp",
    "/lib/Support/SystemUtils.cpp",
    "/lib/Support/TarWriter.cpp",
    "/lib/Support/ThreadPool.cpp",
    "/lib/Support/UnicodeNameToCodepoint.cpp",
    "/lib/Support/UnicodeNameToCodepointGenerated.cpp",
    "/lib/Support/Watchdog.cpp",
    "/lib/Support/Z3Solver.cpp",
    "/lib/Support/raw_os_ostream.cpp",
    "/lib/TableGen/",
    "/lib/TargetParser/CSKYTargetParser.cpp",
    "/lib/TargetParser/LoongArchTargetParser.cpp",
    "/lib/TargetParser/RISCVTargetParser.cpp",
    "/lib/TargetParser/TargetParser.cpp",
    "/lib/TargetParser/X86TargetParser.cpp",
    "/lib/TextAPI/Symbol.cpp",
    "/lib/Transforms/Hello/Hello.cpp",
    "/lib/Transforms/IPO/BarrierNoopPass.cpp",
    "/lib/Transforms/IPO/ExtractGV.cpp",
    "/lib/Transforms/IPO/IPO.cpp",
    "/lib/Transforms/IPO/InlineSimple.cpp",
    "/lib/Transforms/IPO/PassManagerBuilder.cpp",
    "/lib/Transforms/IPO/ThinLTOBitcodeWriter.cpp",
    "/lib/Transforms/Scalar/PlaceSafepoints.cpp",
    "/lib/Transforms/Scalar/Scalar.cpp",
    "/lib/Transforms/Utils/AMDGPUEmitPrintf.cpp",
    "/lib/Transforms/Utils/LowerMemIntrinsics.cpp",
    "/lib/Transforms/Utils/SanitizerStats.cpp",
    "/lib/Transforms/Utils/SplitModule.cpp",
    "/lib/Transforms/Utils/Utils.cpp",
    "/lib/Transforms/Vectorize/VPlanSLP.cpp",
    "/lib/Transforms/Vectorize/Vectorize.cpp",
    "/lib/WindowsDriver/MSVCPaths.cpp",
    "/lib/XRay/",
    "/lib/Target/X86/Disassembler/X86Disassembler.cpp",
    "/lib/Target/X86/MCA/X86CustomBehaviour.cpp",
    "/lib/Target/Mips/Disassembler/MipsDisassembler.cpp",
    "/lib/Target/AArch64/Disassembler/AArch64Disassembler.cpp",
    "/lib/Target/ARM/Disassembler/ARMDisassembler.cpp",
    "/lib/Target/PowerPC/Disassembler/PPCDisassembler.cpp",
    "/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp",
]
files_to_add_back_for_llvm = [
    "/lib/Target/TargetLoweringObjectFile.cpp",
    "/lib/Target/TargetMachine.cpp",
    "/lib/Support/BLAKE3/blake3.c",
    "/lib/Support/BLAKE3/blake3_dispatch.c",
    "/lib/Support/BLAKE3/blake3_portable.c"
]
files_llvm = exclude_files_with_prefixes(all_files, prefixes_of_files_not_needed_by_llvm)
files_llvm.extend(files_to_add_back_for_llvm)

# Architecture specific files
files_x86 = keep_files_with_prefix(all_files, "/lib/Target/X86/")
files_Mips = keep_files_with_prefix(all_files, "/lib/Target/Mips/")
files_AArch64 = keep_files_with_prefix(all_files, "/lib/Target/AArch64/")
files_ARM = keep_files_with_prefix(all_files, "/lib/Target/ARM/")
files_PowerPC = keep_files_with_prefix(all_files, "/lib/Target/PowerPC/")
files_RISCV = keep_files_with_prefix(all_files, "/lib/Target/RISCV/")

generated_file_comment = "File generated by " + sys.argv[0]

# Generate CMakeLists.txt
def format_file_list_for_cmake(files):
    return '\n'.join(["        ${LLVM_DIR}" + s for s in files])
cmake_template_data = {
    'generated_file_comment' : "# " + generated_file_comment,
    'files_llvm' : '\n'.join(["    ${LLVM_DIR}" + s for s in files_llvm]),
    'files_x86' : format_file_list_for_cmake(files_x86),
    'files_Mips' : format_file_list_for_cmake(files_Mips),
    'files_AArch64' : format_file_list_for_cmake(files_AArch64),
    'files_ARM' : format_file_list_for_cmake(files_ARM),
    'files_PowerPC' : format_file_list_for_cmake(files_PowerPC),
    'files_RISCV' : format_file_list_for_cmake(files_RISCV),
}
with open(CMAKE_TEMPLATE_PATH, 'r') as f:
    cmake_template = CustomTemplate(f.read())
    result = cmake_template.substitute(cmake_template_data)
    cmake_output = open(DESTINATION_CMAKELISTS_PATH, "w")
    cmake_output.write(result)

# Generate Android.bp
def format_file_list_for_android_bp(files):
    return '\n'.join(["        \"llvm" + s + "\"," for s in files])
android_bp_template_data = {
    'generated_file_comment' : "// " + generated_file_comment,
    'files_llvm' : format_file_list_for_android_bp(files_llvm),
    'files_x86' : format_file_list_for_android_bp(files_x86),
    'files_AArch64' : format_file_list_for_android_bp(files_AArch64),
    'files_ARM' : format_file_list_for_android_bp(files_ARM),
    'files_RISCV' : format_file_list_for_android_bp(files_RISCV),
}
with open(ANDROID_BP_TEMPLATE_PATH, 'r') as f:
    android_bp_template = CustomTemplate(f.read())
    result = android_bp_template.substitute(android_bp_template_data)
    cmake_output = open(DESTINATION_ANDROID_BP_PATH, "w")
    cmake_output.write(result)
