import em from '@$$emscript'
export const $U = em.$declare('COMPOSITE')
export function em$generate() {
let out = $outfile('linkcmd.ld')
const use_sram = $property('em.build.BootFlash', false)
if (!use_sram) {
out.addFrag(`
|-> MEMORY {
|-> DMEM : ORIGIN = 0x20000000, LENGTH = 0x00009000
|-> IMEM : ORIGIN = 0x00000000, LENGTH = 0x00080000
|-> FLASH_CCFG : ORIGIN = 0x4e020000, LENGTH = 0x00000800
|-> }
|->
|-> SECTIONS {
|->
|-> __boot_flag__ = 0;
|->
|-> .text : {
|-> KEEP(*(.intvec))
|-> *(.start)
|-> *(.text .text.*)
|-> . = ALIGN(., 4);
|-> } > IMEM
|->
|-> .ARM.exidx : { } > IMEM
|->
|-> .const : {
|-> *(.rodata .rodata.* .constdata .constdata.*)
|-> . = ALIGN(., 4);
|-> } > IMEM
|->
|-> __data_load_start__ = ALIGN(., 4);
|->
|-> .data : AT(__data_load_start__) {
|-> *(.data .data.* .sdata .sdata.*)
|-> . = ALIGN(., 4);
|-> } > DMEM
|->
|-> .bss (NOLOAD): {
|-> *(.bss .bss.*)
|-> *(.sbss .sbss.*)
|-> . = ALIGN(., 4);
|-> } > DMEM
|->
|-> .ccfg : { KEEP(*(.ccfg)); } > FLASH_CCFG
|->
|-> __bss_addr__ = ADDR(.bss);
|-> __bss_size__ = SIZEOF(.bss) / 4;
|-> __code_addr__ = ADDR(.text);
|-> __data_addr__ = ADDR(.data);
|-> __data_load__ = LOADADDR(.data);
|-> __data_size__ = SIZEOF(.data) / 4;
|-> __code_load__ = ~0;
|-> __code_size__ = ~0;
|-> __global_pointer__ = __data_addr__ + 0x800;
|-> __global_pointer$ = __global_pointer__;
|-> __stack_top__ = 0x20000000 + 0x00009000;
|-> }
`)
}
else { // use_sram
out.addFrag(`
|-> MEMORY {
|-> DMEM : ORIGIN = 0x20005000, LENGTH = 0x00004000
|-> IMEM : ORIGIN = 0x20000000, LENGTH = 0x00005000
|-> LMEM : ORIGIN = 0x00000000, LENGTH = 0x00080000
|-> FLASH_CCFG : ORIGIN = 0x4e020000, LENGTH = 0x00000800
|-> }
|->
|-> SECTIONS {
|->
|-> __boot_flag__ = 0;
|->
|-> .armstart : {
|-> KEEP(*(.start_vec))
|-> KEEP(*(.start))
|-> } > LMEM
|->
|-> .text : {
|-> KEEP(*(.intvec))
|-> *(.text .text.*)
|-> . = ALIGN(., 4);
|-> } > IMEM AT > LMEM
|->
|-> .ARM.exidx : { } > IMEM AT > LMEM
|->
|-> __const_load_start__ = (ALIGN(LOADADDR(.text) + SIZEOF(.text) + SIZEOF(.ARM.exidx), 4));
|->
|-> .const : AT(__const_load_start__) {
|-> *(.rodata .rodata.* .constdata .constdata.*)
|-> . = ALIGN(., 4);
|-> } > IMEM
|->
|-> __data_load_start__ = (ALIGN(LOADADDR(.const) + SIZEOF(.const), 4));
|->
|-> .data : AT(__data_load_start__) {
|-> *(.data .data.* .sdata .sdata.*)
|-> . = ALIGN(., 4);
|-> } > DMEM
|->
|-> .bss (NOLOAD): {
|-> *(.bss .bss.*)
|-> *(.sbss .sbss.*)
|-> . = ALIGN(., 4);
|-> } > DMEM
|->
|-> .ccfg : { KEEP(*(.ccfg)); } > FLASH_CCFG
|->
|-> __bss_addr__ = ADDR(.bss);
|-> __bss_size__ = SIZEOF(.bss) / 4;
|-> __code_addr__ = ADDR(.text);
|-> __data_addr__ = ADDR(.data);
|-> __data_load__ = LOADADDR(.data);
|-> __data_size__ = SIZEOF(.data) / 4;
|-> __code_load__ = LOADADDR(.text);
|-> __code_size__ = ((__data_load__ - __code_load__) / 4);
|-> __global_pointer__ = __data_addr__ + 0x800;
|-> __global_pointer$ = __global_pointer__;
|-> __stack_top__ = 0x20005000 + 0x00004000;
|-> }
`)
}
out.close()
}