%define ASSEMBLY_EXTENSIONS	"a64"

Select {
    extensions={"a64","c"}
}

%include "ghs_compiler_options.bod"
%include "special_options.bod"

CommandOptions {
    GhsCompilerOptions {
	ProgramLayout.disabled=false;

	FPCoprocessor.fhard.disabled=false;
	FPCoprocessor.f.disabled=false;
	LongLong.disabled=false;
	BigSwitch.disabled=false;
	StackCheck.disabled=false;
	StackProtector.disabled=false;
	InstrumentPrologueEpilogue.disabled=false;
	FarCalls.disabled=false;
	FarCalls.hidden=true;
	FarCallPatch.disabled=false;
	GlobalReg.disabled=false;
	ConvertCMemsetToMemclr.hidden=false;
	TargetWalkableStack.hidden=false; 
	MisalignPack.disabled=false;
	MisalignPack.hidden=true;
	MisalignAccess.disabled=false;
	MisalignAccess.hidden=false;
	MisalignAccess.Support.disabled=true;
	MisalignAccess.Support.hidden=true;
	Arm64_MemoryModel.disabled=false;
	Arm64_AAPCS.disabled=false;
        Arm64_StoreDMBLoopErrata.disabled=false;
	Arm64_StoreNOPLoopErrata.disabled=false;
	Endianness.disabled=false;
	GnuAsm.disabled=false
	NaNCompareUnordered.disabled=false;
	FloatingPointBuiltIns.disabled=false;
	FloatingPointFusedMultiplyAdd.disabled=false;
	FloatingPointImplicitRegUse.disabled=false;
	FloatingPointHalfPrecision.disabled=false;
	VectorOptimizations.disabled=false;
	IFCC.disabled=false;
	SafeMemFuncs.disabled=false;
	MemFuncs.disabled=false;
	MemFuncs.simd.hidden=true
	MemFuncs.simd.disabled=true
	AnnotateCallReturn.disabled=false

        SplitDataSectionsByAlignment.disabled=false;
        IndividualDataSections.disabled=false;
        IndividualPragmaDataSections.disabled=false;
        IndividualAttrDataSections.disabled=false;
        IndividualFunctionSections.disabled=false;
        IndividualPragmaFunctionSections.disabled=false;
        IndividualAttrFunctionSections.disabled=false;
 	IndividualSecnameExtraDot.disabled=false;
	IndividualLinkonceSections.disabled=false;
	IndividualDataSectionsForNamelessVars.disabled=false;
	IFCC.disabled=false;

	ExternalSymbols.disabled=false;
	ExternalSymbolFiles.disabled=false;
	InterproceduralOptimizations.disabled=false;
	IPOnesiteInliningOptimizations.disabled=false;
	IPDeleteFunctionsOptimizations.disabled=false;
	IPDeleteGlobalsOptimizations.disabled=false;
	IPLocalizeGlobalsOptimizations.disabled=false;
	IPConstantGlobalsOptimizations.disabled=false;
	IPSmallInliningOptimizations.disabled=false;
	IPConstPropOptimizations.disabled=false;
	IPRemoveParamsOptimizations.disabled=false;
	IPLimitInliningOptimizations.disabled=false;
	IPConstReturnsOptimizations.disabled=false;
	IPRemoveReturnsOptimizations.disabled=false;
	IPAliasReadsOptimizations.disabled=false;
	IPAliasWritesOptimizations.disabled=false;
	IPAliasLibFuncsOptimizations.disabled=false;
	IPAllocVariablesOptimizations.disabled=false;

	MallocNumArenas.disabled=false;

	straightline_spectre_mitigation.disabled=false;
	check_straightline_spectre_mitigation.disabled=false;
	straightline_spectre_assembler_mitigation.disabled=false;

	IFCC.disabled=false

	#### Toolchain Options - ease and elxr
	Asm3gSupport.disabled=false;
	AsmCommandFile.disabled=false;
	LinkerOutput.disabled=false;
	KeepMap.disabled=false;
	MapLines.disabled=false;
	MapFileSorting.disabled=false;
	Mx.disabled=false;
	Ms.disabled=false;
	MapUndefined.disabled=false;
	MapLocals.disabled=false;
	MapEofnSymbols.disabled=false;
	MapfileType.disabled=false;
	LinkerWarnings.disabled=false;
	Elxr_CallGraph.disabled=false;
	Overlap.disabled=false;
	Checksum.disabled=false;
	Elxr_Delete.disabled=false;
	Elxr_DataDelete.disabled=false;
	LinkerConstants.disabled=false;
	LinkerUndefineds.disabled=false;
	Elxr_Multiple.disabled=false;
	Elxr_VirtualDelete.disabled=false;
	Elxr_ForceVirtualDelete.disabled=false;
	Elxr_ExtractAll.disabled=false;
        Elxr_CheckTKSA.disabled=false;
	LnkCommandFile.disabled=false;
	DefaultLnk.disabled=false;
	TData.disabled=false;
	TText.disabled=false;
	Undefined.disabled=false;
	LinkIgnoreDebugReferences.disabled=false;
	CompilationMode.hidden=true;
	Host64.disabled=false;
        EntryExitLinking.disabled=false;
        EntryExitLogging.disabled=false;
	EntryExitInstThreshold.disabled=false;
	EntryExitInstThreshold.hidden=false;
	EagleLinking.disabled=false;
	EagleEventLogging.disabled=false;
	RecordEagleTag.disabled=false;
	MuteEagleTag.disabled=false;
	StripEagleTag.disabled=false;
        DTrace.disabled=false;
        DTrace.hidden=true;
        DataTrace.disabled=false;
        DataTrace.hidden=true;
        DataTraceEnabled.disabled=false;
        DataTraceEnabled.hidden=true;
        DataTraceSupported.disabled=false;
        DataTraceSupported.hidden=true;
        CodeFactor.disabled=false;
	InlineTrivial.disabled=false;
	LinkConstProp.disabled=false;

        # [chrisbadger] Mon Nov 11 16:20:12 2013
	# ARM64 requires --large_vtable_offsets, which in turn requires
        # --new_outside_of_constructor.  Allow the options which corresponds
	# to the defaults, but disallow their inverses and hide the option
        # from the GUI (since users don't really have a choice).
	LargeVirtualTableOffsets.disabled=false;
        LargeVirtualTableOffsets.hidden=true;
	LargeVirtualTableOffsets.Off.disabled=true;
	NewOutsideOfConstructor.Inside.disabled=true;
        NewOutsideOfConstructor.hidden=true;
        TemplateInstantiation.Off.disabled=true;
        TemplateInstantiation.hidden=true;
	CVersion.kr1.hidden=true;
	CVersion.kr2.hidden=true;
	CVersion.kr3.hidden=true;
	CVersion.kr4.hidden=true;
	CVersion.kr5.hidden=true;
	CVersion.kr6.hidden=true;
	PreLinkAgainst.hidden=true;
	PrelinkObjects.hidden=true;

	TargetProcessor {
		# -cpu	
%if file_exists("${__TARGET_DIR__}/arm64/bld_rules")
%include_many "${__TARGET_DIR__}/arm64/bld_rules/*.bod"
%endif
		delimiter="NoArg"
		merge="Replace"
		optionType="Enum"
		pass={"All"}
		disabled=false
		guiLabel="Target Processor"
		guiCategory="Target"
		sortKey="primarySort"
		autoIncrementValue=true
	}
    }
}
