Skip to content

Support VxWorks "muncher" for C++ #889

@jhnphm

Description

@jhnphm

Is your feature request related to a problem? Please describe.
VxWorks requires a tool called a "muncher" in order to generate stubs required for static destructors/constructors to run, when building for C++.

Describe the solution you'd like
Run the muncher. An example implementation is below:

In VxWorks-CFE.cmake, change

set(CMAKE_CXX_CREATE_SHARED_MODULE ${CMAKE_C_CREATE_SHARED_MODULE})

to

if(NOT DEFINED CMAKE_CXX_CREATE_SHARED_MODULE)
    set(CMAKE_CXX_CREATE_SHARED_MODULE ${CMAKE_C_CREATE_SHARED_MODULE})
endif()

Somewhere in the target-specific PSP cmakefiles or toolchain file, define something like (the below is for SP0-S, derived from the workbench-generated makefiles)

set(VSB_DIR "${WIND_BASE}/target/lib")
set(VXMUNCHER_TAGS ${VSB_DIR}/tags/ppc/PPC85XX/e500v2common/dkm.tags)
set(VXMUNCHER_TCL "tclsh ${WIND_BASE}/host/resource/hutils/tcl/munch.tcl -c ppc -tags ${VXMUNCHER_TAGS}")
set(VXMUNCHER_COMPILE_FLAGS "-O2 -fstrength-reduce -te500v2 -mhard-float -fno-implicit-fp -mstrict-align -fno-builtin -fdollars-in-identifiers -c")
set(VX_LINK_FLAGS "-r -nostdlib -Wl,-X -T ${WIND_BASE}/target/h/tool/gnu/ldscripts/link.OUT")


set(CMAKE_CXX_CREATE_SHARED_MODULE
    "<CMAKE_CXX_COMPILER> <FLAGS> <CMAKE_C_LINK_FLAGS> ${VX_LINK_FLAGS} <LINK_FLAGS> <OBJECTS> -o <TARGET>.PartialImage.out <LINK_LIBRARIES>"
    "${CMAKE_NM} <TARGET>.PartialImage.out | ${VXMUNCHER_TCL} > <TARGET>.ctdt.c"
    "<CMAKE_C_COMPILER> -c <TARGET>.ctdt.c -o <TARGET>.ctdt.c.o ${VXMUNCHER_COMPILE_FLAGS}"
    "<CMAKE_CXX_COMPILER> <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <TARGET>.PartialImage.out <TARGET>.ctdt.c.o -o <TARGET> ${VX_LINK_FLAGS}"
)

Describe alternatives you've considered
Leave CMAKE_CXX_CREATE_SHARED_MODULE unset so it can be overridden in the toolchain file.

Additional context
N/A

Requester Info
John N Pham, Northrop Grumman

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions