Skip to content

Commit b4ecc67

Browse files
committed
Install output directory is vendor/library/name/version
1 parent 05d6814 commit b4ecc67

4 files changed

Lines changed: 51 additions & 18 deletions

File tree

cmake/utils/install/install.cmake

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,26 @@
11
include_guard(GLOBAL)
22

3+
function(make_outdir_path OUTVAR IP_LIB)
4+
alias_dereference(_reallib ${IP_LIB})
5+
string(REPLACE "__" "/" outpath "${_reallib}")
6+
7+
set(${OUTVAR} ${outpath} PARENT_SCOPE)
8+
endfunction()
9+
310
function(ip_install IP_LIB)
411
cmake_parse_arguments(ARG "" "" "" ${ARGN})
512
if(ARG_UNPARSED_ARGUMENTS)
613
message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} passed unrecognized argument " "${ARG_UNPARSED_ARGUMENTS}")
714
endif()
815

916

17+
set_property(TARGET ${IP_LIB} APPEND PROPERTY EXPORT_PROPERTIES FILE_SETS)
1018
get_property(export_sources TARGET ${IP_LIB} PROPERTY EXPORT_PROPERTIES)
11-
message("export_source: ${export_sources}")
19+
get_property(filesets TARGET ${IP_LIB} PROPERTY FILE_SETS)
1220
# list(FILTER export_sources INCLUDE REGEX "(_SOURCES|_HEADERS|_INCLUDE_DIRECTORIES)$")
1321

22+
make_outdir_path(OUTDIR ${IP_LIB})
23+
1424
set(sources_list ${export_sources})
1525
list(FILTER sources_list INCLUDE REGEX "_SOURCES$")
1626

@@ -20,34 +30,38 @@ function(ip_install IP_LIB)
2030
set(inc_dirs_list ${export_sources})
2131
list(FILTER inc_dirs_list INCLUDE REGEX "_INCLUDE_DIRECTORIES$")
2232

23-
foreach(fileset ${sources_list})
24-
string(REGEX REPLACE "_SOURCES$" "" fileset ${fileset})
33+
foreach(fileset ${filesets})
34+
string(REPLACE "::" ";" fileset_list "${fileset}")
35+
list(GET fileset_list 0 fileset_language)
36+
list(GET fileset_list 1 fileset_name)
37+
38+
# string(REGEX REPLACE "_SOURCES$" "" fileset ${fileset})
2539
# message("fileset is: ${fileset}")
26-
get_ip_sources(${fileset} ${IP_LIB} ${fileset})
40+
get_ip_sources(${fileset} ${IP_LIB} ${fileset_language} FILE_SETS ${fileset_name})
2741

2842
unset(${fileset}_copy)
2943
foreach(source ${${fileset}})
3044
cmake_path(GET source FILENAME filename)
31-
list(APPEND ${fileset}_copy "\${_IMPORT_PREFIX}/${fileset}/${filename}")
45+
list(APPEND ${fileset}_copy "\${_IMPORT_PREFIX}/${OUTDIR}/${fileset_language}/${fileset_name}/${filename}")
3246
endforeach()
3347

34-
ip_sources(${IP_LIB} ${fileset} REPLACE
48+
ip_sources(${IP_LIB} ${fileset_language} FILE_SET ${fileset_name} REPLACE
3549
${${fileset}_copy}
3650
)
3751

38-
3952
install(FILES ${${fileset}}
40-
DESTINATION ${fileset}
53+
DESTINATION "${OUTDIR}/${fileset_language}/${fileset_name}"
4154
)
42-
get_ip_sources(sources ${IP_LIB} ${fileset})
4355
endforeach()
4456

4557
get_property(IP_NAME TARGET ${IP_LIB} PROPERTY IP_NAME)
4658
get_property(IP_VERSION TARGET ${IP_LIB} PROPERTY VERSION)
59+
set(VERSION_USED FALSE)
4760
if(NOT IP_VERSION)
4861
set(VERSION 0.0.1)
4962
else()
5063
set(VERSION ${IP_VERSION})
64+
set(VERSION_USED TRUE)
5165
endif()
5266

5367
include(CMakePackageConfigHelpers)
@@ -65,15 +79,16 @@ function(ip_install IP_LIB)
6579
configure_package_config_file(
6680
"${CMAKE_CURRENT_FUNCTION_LIST_DIR}/ipConfig.cmake.in"
6781
"${PROJECT_BINARY_DIR}/${IP_NAME}Config.cmake"
68-
INSTALL_DESTINATION lib/cmake/${IP_NAME}
82+
INSTALL_DESTINATION "${OUTDIR}/lib/cmake/${IP_NAME}"
6983
)
7084

7185
install(EXPORT ${IP_NAME}Targets
72-
DESTINATION lib/cmake/${IP_NAME})
86+
DESTINATION "${OUTDIR}/lib/cmake/${IP_NAME}"
87+
)
7388

7489
install(FILES "${PROJECT_BINARY_DIR}/${IP_NAME}ConfigVersion.cmake"
7590
"${PROJECT_BINARY_DIR}/${IP_NAME}Config.cmake"
76-
DESTINATION lib/cmake/${IP_NAME}
91+
DESTINATION "${OUTDIR}/lib/cmake/${IP_NAME}"
7792
)
7893

7994
endfunction()

cmake/utils/install/ipConfig.cmake.in

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ if(NOT "${IP_ALIAS}" STREQUAL "@IP_LIB@")
88
add_library(${IP_ALIAS} ALIAS @IP_LIB@)
99
endif()
1010

11-
if(@IP_VERSION@)
11+
if(@VERSION_USED@)
1212
string(REPLACE "__@IP_VERSION@" "" IP_NO_VERSION_ALIAS "@IP_LIB@")
13+
string(REPLACE "__" "::" IP_NO_VERSION_ALIAS "${IP_NO_VERSION_ALIAS}")
1314
add_library(${IP_NO_VERSION_ALIAS} ALIAS @IP_LIB@)
1415
endif()
1516

examples/install/simple_verilog/CMakeLists.txt

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,23 @@ cmake_minimum_required(VERSION 3.25)
44

55
project(adder NONE)
66

7-
add_ip(adder
7+
foreach(i RANGE 1 10)
8+
add_ip(vendor::ip::adder::0.0.${i} NO_ALIAS
9+
DESCRIPTION "Just a simple adder")
10+
11+
ip_sources(${IP} VERILOG
12+
./adder/adder.v
13+
# HEADERS
14+
# ./adder/adder.v
15+
)
16+
17+
# ip_include_directories(${IP} VERILOG
18+
# ./adder)
19+
20+
ip_install(${IP})
21+
endforeach()
22+
23+
add_ip(vendor::ip::mult::0.0.1 NO_ALIAS
824
DESCRIPTION "Just a simple adder")
925

1026
ip_sources(${IP} VERILOG

examples/install/simple_verilog/tb/CMakeLists.txt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ add_ip(tb
99
ip_sources(${IP} VERILOG
1010
tb.v)
1111

12-
find_package(adder CONFIG REQUIRED
13-
HINTS ../install
12+
find_package(adder 0.0.10 CONFIG REQUIRED
13+
HINTS ${PROJECT_SOURCE_DIR}/../build/here/*/*/*/*
1414
)
15-
ip_link(${IP} adder)
15+
ip_link(${IP} vendor::ip::adder)
1616

17-
modelsim(${IP})
17+
18+
iverilog(${IP})
1819

1920
help()

0 commit comments

Comments
 (0)