Skip to content

Commit

Permalink
Merge branch 'core-fix-cmake'
Browse files Browse the repository at this point in the history
  • Loading branch information
guitorri committed Jun 27, 2015
2 parents 63949a8 + 7002480 commit e539dde
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 78 deletions.
32 changes: 24 additions & 8 deletions qucs-core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
# * By default, the prefix is "/usr/local"
# * Use -DADMSXML_DIR=[path] to give the path containing admsXml
# * Use -DUSE_MAINTAINER_MODE=ON to rebuild submodules (ADMS)
# * Bison can be pointed to with -DBISON_DIR=[path]


## Running with QtCreator
Expand All @@ -22,6 +23,11 @@
#
# Add the following arguments to the 'Run CMake':
# -DAMSXML_DIR=~/git/qucs/qucs-core/adms/admsXml/ -DCMAKE_BUILD_TYPE:STRING=Debug
#
# With Homebrew/MacPorts on Mac OS X:
# It might be necessary to change the PATH variable on the Build Environment.
# Prepend '/usr/local/bin' before '/usr/bin/' otherwise it will find the
# older executables provided by Apple.

## Dependencies
# * CMake 2.8.8
Expand Down Expand Up @@ -142,20 +148,30 @@ ENDIF()
#
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")


#
# Need Flex / Bison
# Need Flex
#
SET(FLEX_MINIMAL_VERSION "2.5.9")
FIND_PACKAGE(FLEX REQUIRED)
FIND_PACKAGE(FLEX 2.5.9 REQUIRED)
IF(FLEX_FOUND)
MESSAGE(STATUS "Found flex: ${FLEX_EXECUTABLE} / Version: ${FLEX_VERSION}" )
ENDIF()

SET(BISON_MINIMAL_VERSION "2.4")
FIND_PACKAGE(BISON REQUIRED)
IF(BISON_FOUND)
MESSAGE(STATUS "Found bison: ${BISON_EXECUTABLE} / Version: ${BISON_VERSION}" )
#
# Need Bison
#
#FIND_PACKAGE(BISON 2.4 REQUIRED
# NO_DEFAULT_PATH)
#IF(BISON_FOUND)
# MESSAGE(STATUS "Found bison: ${BISON_EXECUTABLE} / Version: ${BISON_VERSION}" )
#ENDIF()
FIND_PROGRAM( BISON_EXECUTABLE bison
HINTS ${BISON_DIR} # use -DBISON_DIR=/path/ to overwrite, useful for Windows.
PATHS /usr/local/bin/ /opt/local/bin/ /usr/bin
DOC "bison path"
NO_DEFAULT_PATH )
IF(BISON_EXECUTABLE )
# use external admsXml
MESSAGE(STATUS "Found bison: " ${BISON_EXECUTABLE})
ENDIF()

#
Expand Down
62 changes: 36 additions & 26 deletions qucs-core/src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -278,39 +278,49 @@ CONFIGURE_FILE (
# List of lexer/parsers type names
#
SET(ParserTypes
csv citi dataset mdl netlist touchstone zvr
csv
citi
dataset
mdl
netlist
touchstone
zvr
)

# Flex/Bison generated code, example:
# - parse_csv.cpp scan_csv.cpp
SET(generated_SRC)

# TODO Double check the location where the generated scanner/parser should go
FOREACH( type ${ParserTypes} )

FLEX_TARGET(scan${type} scan_${type}.l ${PROJECT_SOURCE_DIR}/scan_${type}.cpp)

BISON_TARGET(parse${type}
parse_${type}.y ${PROJECT_SOURCE_DIR}/parse_${type}.cpp
COMPILE_FLAGS --defines="${PROJECT_SOURCE_DIR}/tokens_${type}.h" )

ADD_FLEX_BISON_DEPENDENCY(scan${type} parse${type})

SET(flexInputs ${flexInputs} ${FLEX_scan${type}_INPUT} )
SET(flexOutputs ${flexOutputs} ${FLEX_scan${type}_OUTPUTS} )
SET(bisonInputs ${bisonInputs} ${BISON_parse${type}_INPUT} )
SET(bisonOutputs ${bisonOutputs} ${BISON_parse${type}_OUTPUTS})
# Create custom Bison
SET(BO_${type}
${CMAKE_CURRENT_BINARY_DIR}/parse_${type}.cpp
${CMAKE_CURRENT_BINARY_DIR}/tokens_${type}.h )
ADD_CUSTOM_COMMAND(
OUTPUT ${BO_${type}}
COMMAND ${BISON_EXECUTABLE}
--defines=${CMAKE_CURRENT_BINARY_DIR}/tokens_${type}.h
--output=${CMAKE_CURRENT_BINARY_DIR/}parse_${type}.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parse_${type}.y
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/parse_${type}.y
)

# Create custom Flex
SET(FI_${type} ${CMAKE_CURRENT_SOURCE_DIR}/scan_${type}.l )
SET(FO_${type} ${CMAKE_CURRENT_BINARY_DIR}/scan_${type}.cpp )
ADD_CUSTOM_COMMAND(
OUTPUT ${FO_${type}}
COMMAND ${FLEX_EXECUTABLE}
--outfile=${FO_${type}}
${FI_${type}}
DEPENDS ${BO_${type}} ${FI_${type}}
)
SET(generated_SRC ${generated_SRC} ${FO_${type}})
SET(generated_SRC ${generated_SRC} ${BO_${type}})
ENDFOREACH()

#
# Combine all genereated flex/bison files
#
SET(generated_SRC ${flexOutputs} ${bisonOutputs})

#MESSAGE(STATUS "----> Scanner / Parser ${generated_SRC}\n")
#MESSAGE(STATUS "Qucsator -- Flex Inputs : ${flexInputs}")
#MESSAGE(STATUS "Qucsator -- Flex Outputs: ${flexOutputs}")
#MESSAGE(STATUS "Qucsator -- Bison Inputs : ${bisonInputs}")
#MESSAGE(STATUS "Qucsator -- Bison Outputs: ${bisonOutputs}")
FOREACH( gfile ${generated_SRC} )
SET_SOURCE_FILES_PROPERTIES(${gfile} PROPERTIES GENERATED TRUE)
ENDFOREACH()


#
Expand Down
45 changes: 27 additions & 18 deletions qucs-core/src/components/verilog/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,21 @@ SET( VA_FILES
)


# XML sripts need to build, the order matters
SET(XML_BUILD
analogfunction.xml
qucsVersion.xml
qucsMODULEcore.xml
qucsMODULEdefs.xml
)

# Concatenate scripts into command: -e script1 [-e script2]
SET(XML_CMD)
FOREACH(script ${XML_BUILD})
SET(XML_CMD ${XML_CMD} -e ${CMAKE_CURRENT_SOURCE_DIR}/${script})
ENDFOREACH()


# clear lists of generated files
SET(generated_SRC)

Expand Down Expand Up @@ -99,17 +114,18 @@ FOREACH( filename ${VA_FILES} )
SET(base_abs ${CMAKE_CURRENT_BINARY_DIR}/${base})

# set outputs for each Verilog-A input
SET(output ${base_abs}.analogfunction.cpp ${base_abs}.analogfunction.h
${base_abs}.core.cpp ${base_abs}.core.h ${base_abs}.defs.h)
SET(output ${base_abs}.analogfunction.cpp
${base_abs}.analogfunction.h
${base_abs}.core.cpp
${base_abs}.core.h
${base_abs}.defs.h)

# custom command/rule to generate outputs with admsXml
ADD_CUSTOM_COMMAND(
OUTPUT ${output}
COMMAND ${ADMSXML} ${CMAKE_CURRENT_SOURCE_DIR}/${filename}
-e ${CMAKE_CURRENT_SOURCE_DIR}/analogfunction.xml
-e ${CMAKE_CURRENT_SOURCE_DIR}/qucsVersion.xml
-e ${CMAKE_CURRENT_SOURCE_DIR}/qucsMODULEcore.xml
-e ${CMAKE_CURRENT_SOURCE_DIR}/qucsMODULEdefs.xml )
COMMAND ${ADMSXML} ${CMAKE_CURRENT_SOURCE_DIR}/${filename} ${XML_CMD}
DEPENDS ${filename} ${XML_BUILD}
)
SET_SOURCE_FILES_PROPERTIES(${output} PROPERTIES GENERATED TRUE)

# append outputs list of generated sources
Expand All @@ -125,18 +141,11 @@ ENDFOREACH()
ADD_LIBRARY( coreVerilog OBJECT ${generated_SRC} )


# TODO install distributable files
#
#
# EXTRA_DIST = $(VERILOG_FILES) $(XML_FILES)

SET(XML_FILES
analogfunction.xml
qucsMODULEcore.xml
qucsMODULEdefs.xml
# Distribute XML scripts
SET(XML_DIST
${XML_BUILD}
qucsMODULEgui.xml
qucsMODULEguiJSONsymbol.xml
qucsVersion.xml
)

SET(MAKE_FILES
Expand All @@ -149,7 +158,7 @@ SET(VA_INCLUDES
disciplines.vams
)

INSTALL(FILES ${XML_FILES} DESTINATION include/qucs-core)
INSTALL(FILES ${XML_DIST} DESTINATION include/qucs-core)
INSTALL(FILES ${MAKE_FILES} DESTINATION include/qucs-core)
INSTALL(FILES ${VA_INCLUDES} DESTINATION include/qucs-core)

Expand Down
58 changes: 32 additions & 26 deletions qucs-core/src/converter/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,37 +20,43 @@ SET(ParserTypes
vcd
)

# clear list of generated files
SET(conv_generated)

# generated files are named like:
# - parse_spice.cpp scan_spice.cpp tokens_spice.h

# TODO Double check the location where the generated scanner/parser should go
FOREACH(type ${ParserTypes})

FLEX_TARGET(scan${type} scan_${type}.l ${PROJECT_SOURCE_DIR}/scan_${type}.cpp)

BISON_TARGET(parse${type}
parse_${type}.y ${PROJECT_SOURCE_DIR}/parse_${type}.cpp
COMPILE_FLAGS --defines="${PROJECT_SOURCE_DIR}/tokens_${type}.h" )

ADD_FLEX_BISON_DEPENDENCY(scan${type} parse${type})

SET(convflexInputs ${convflexInputs} ${FLEX_scan${type}_INPUT} )
SET(convflexOutputs ${convflexOutputs} ${FLEX_scan${type}_OUTPUTS} )
SET(convbisonInputs ${convbisonInputs} ${BISON_parse${type}_INPUT} )
SET(convbisonOutputs ${convbisonOutputs} ${BISON_parse${type}_OUTPUTS})

# clear list of generated files
SET(conv_generated)
FOREACH( type ${ParserTypes} )

# Create custom Bison
SET(BO_${type}
${CMAKE_CURRENT_BINARY_DIR}/parse_${type}.cpp
${CMAKE_CURRENT_BINARY_DIR}/tokens_${type}.h )
ADD_CUSTOM_COMMAND(
OUTPUT ${BO_${type}}
COMMAND ${BISON_EXECUTABLE}
--defines=${CMAKE_CURRENT_BINARY_DIR}/tokens_${type}.h
--output=${CMAKE_CURRENT_BINARY_DIR/}parse_${type}.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parse_${type}.y
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/parse_${type}.y
)

# Create custom Flex
SET(FI_${type} ${CMAKE_CURRENT_SOURCE_DIR}/scan_${type}.l )
SET(FO_${type} ${CMAKE_CURRENT_BINARY_DIR}/scan_${type}.cpp )
ADD_CUSTOM_COMMAND(
OUTPUT ${FO_${type}}
COMMAND ${FLEX_EXECUTABLE}
--outfile=${FO_${type}}
${FI_${type}}
DEPENDS ${BO_${type}} ${FI_${type}}
)
SET(conv_generated ${conv_generated} ${FO_${type}})
SET(conv_generated ${conv_generated} ${BO_${type}})
ENDFOREACH()
FOREACH( gfile ${conv_generated} )
SET_SOURCE_FILES_PROPERTIES(${gfile} PROPERTIES GENERATED TRUE)
ENDFOREACH()

SET(conv_generated ${convflexOutputs} ${convbisonOutputs})

#message(STATUS "----> Scanner / Parser ${conv_generated}\n")
#message(STATUS "Qucsconv -- Flex Inputs : ${convflexInputs}")
#message(STATUS "Qucsconv -- Flex Outputs : ${convflexOutputs}")
#message(STATUS "Qucsconv -- Bison Inputs : ${convbisonInputs}")
#message(STATUS "Qucsconv -- Bison Outputs: ${convbisonOutputs}")

#
# qucsator is needed before qucsconv can be compiled
Expand Down

0 comments on commit e539dde

Please sign in to comment.