mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-07 11:26:02 +03:00

Make sure the overall order corresponds to the user's command-line order of object and source files. The only exception being singleObj builds, for which the single object file for all source files is always the first entry in the object files list (which is forwarded to the linker in that order). This is done so that we can easily get hold of the name when emitting the single object file later in the `ldc::CodeGenerator` dtor. It should also clearly define the linking order (affecting comdat selections etc.) for special singleObj builds. Also reuse some more code (wrt. output filenames) from DMD's main().
45 lines
1.2 KiB
C++
45 lines
1.2 KiB
C++
//===-- driver/codegenerator.h - D module codegen entry point ---*- C++ -*-===//
|
||
//
|
||
// LDC – the LLVM D compiler
|
||
//
|
||
// This file is distributed under the BSD-style LDC license. See the LICENSE
|
||
// file for details.
|
||
//
|
||
//===----------------------------------------------------------------------===//
|
||
//
|
||
// Contains ldc::CodeGenerator, which is the main entry point for emitting code
|
||
// for one or more D modules to LLVM IR and subsequently to whatever output
|
||
// format has been chosen globally.
|
||
//
|
||
// Currently reads parts of the configuration from global.params, as the code
|
||
// has been extracted straight out of main(). This should be cleaned up in the
|
||
// future.
|
||
//
|
||
//===----------------------------------------------------------------------===//
|
||
|
||
#ifndef LDC_DRIVER_CODEGENERATOR_H
|
||
#define LDC_DRIVER_CODEGENERATOR_H
|
||
|
||
#include "gen/irstate.h"
|
||
|
||
namespace ldc {
|
||
|
||
class CodeGenerator {
|
||
public:
|
||
CodeGenerator(llvm::LLVMContext &context, bool singleObj);
|
||
~CodeGenerator();
|
||
void emit(Module *m);
|
||
|
||
private:
|
||
void prepareLLModule(Module *m);
|
||
void finishLLModule(Module *m);
|
||
void writeAndFreeLLModule(const char *filename);
|
||
|
||
llvm::LLVMContext &context_;
|
||
int moduleCount_;
|
||
bool const singleObj_;
|
||
IRState *ir_;
|
||
};
|
||
}
|
||
|
||
#endif
|