1cmake_minimum_required(VERSION 3.13...3.27) 2project(pioasm CXX) 3 4if (NOT CMAKE_BUILD_TYPE) 5 set(CMAKE_BUILD_TYPE Release) 6endif() 7 8set(CMAKE_CXX_STANDARD 11) 9 10if (PIOASM_GENERATE_PARSER) 11 find_package(BISON 3.4.2) 12 find_package(FLEX 2.5.13) # no idea about the version 13 14 FLEX_TARGET(pioasm_lexer lexer.ll ${CMAKE_CURRENT_SOURCE_DIR}/gen/lexer.cpp) 15 BISON_TARGET(pioasm_parser parser.yy ${CMAKE_CURRENT_SOURCE_DIR}/gen/parser.cpp COMPILE_FLAGS "-Wcounterexamples") 16 ADD_FLEX_BISON_DEPENDENCY(pioasm_lexer pioasm_parser) 17endif() 18 19add_executable(pioasm 20 main.cpp 21 pio_assembler.cpp 22 pio_disassembler.cpp 23 gen/lexer.cpp 24 gen/parser.cpp 25) 26 27target_sources(pioasm PRIVATE c_sdk_output.cpp) 28target_sources(pioasm PRIVATE python_output.cpp) 29target_sources(pioasm PRIVATE hex_output.cpp) 30target_sources(pioasm PRIVATE json_output.cpp) 31target_sources(pioasm PRIVATE ada_output.cpp) 32target_sources(pioasm PRIVATE go_output.cpp) 33target_sources(pioasm PRIVATE ${PIOASM_EXTRA_SOURCE_FILES}) 34target_sources(pioasm PRIVATE pio_types.h) 35 36if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND 37 (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "7") AND 38 (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9") AND 39 (CMAKE_SYSTEM_PROCESSOR MATCHES "^arm.*$")) 40 # disable GCC ARM info notice about ABI change 41 target_compile_options(pioasm PRIVATE -Wno-psabi) 42endif() 43 44target_include_directories(pioasm PRIVATE ${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_LIST_DIR}/gen) 45 46if (MSVC OR 47 (WIN32 AND NOT MINGW AND (CMAKE_CXX_COMPILER_ID STREQUAL "Clang"))) 48 target_compile_definitions(pioasm PRIVATE YY_NO_UNISTD_H) 49endif() 50if (MSVC) 51 target_compile_options(pioasm PRIVATE "/std:c++latest") 52endif() 53 54 55# allow installing to flat dir 56include(GNUInstallDirs) 57if (PIOASM_FLAT_INSTALL) 58 set(INSTALL_CONFIGDIR pioasm) 59 set(INSTALL_BINDIR pioasm) 60else() 61 set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/pioasm) 62 set(INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR}) 63endif() 64 65# allow `make install` 66install(TARGETS pioasm 67 EXPORT pioasm-targets 68 RUNTIME DESTINATION ${INSTALL_BINDIR} 69) 70 71#Export the targets to a script 72install(EXPORT pioasm-targets 73 FILE 74 pioasmTargets.cmake 75 DESTINATION 76 ${INSTALL_CONFIGDIR} 77) 78 79include(../../pico_sdk_version.cmake) 80set(PACKAGE_VERSION "${PICO_SDK_VERSION_MAJOR}.${PICO_SDK_VERSION_MINOR}.${PICO_SDK_VERSION_REVISION}") 81 82#Create a ConfigVersion.cmake file 83include(CMakePackageConfigHelpers) 84write_basic_package_version_file( 85 ${CMAKE_CURRENT_BINARY_DIR}/pioasmConfigVersion.cmake 86 VERSION ${PACKAGE_VERSION} 87 COMPATIBILITY ExactVersion 88 ARCH_INDEPENDENT 89) 90 91configure_package_config_file(${CMAKE_CURRENT_LIST_DIR}/cmake/pioasmConfig.cmake 92 ${CMAKE_CURRENT_BINARY_DIR}/pioasmConfig.cmake 93 INSTALL_DESTINATION ${INSTALL_CONFIGDIR} 94) 95 96#Install the config and configversion 97install(FILES 98 ${CMAKE_CURRENT_BINARY_DIR}/pioasmConfig.cmake 99 ${CMAKE_CURRENT_BINARY_DIR}/pioasmConfigVersion.cmake 100 DESTINATION ${INSTALL_CONFIGDIR} 101) 102