Skip to content

Commit 080fd7a

Browse files
committed
feat: improve build system and environment handling
* Enhance CMake configuration and build - Add OBJC_TAO_DEBUG_ENABLED option for debug builds - Update library linking with WHOLE_ARCHIVE support - Fix paths to use CMAKE_CURRENT_SOURCE_DIR consistently - Add config template for package installation * Update VSCode integration - Use environment variables for include paths - Update debug configuration paths - Improve IntelliSense settings * Environment and workflow improvements - Update GitHub Actions to use checkout@v4 - Add workflow_dispatch support - Fix environment plugin handling - Update environment version to 5.3.0 * Other improvements - Enable include.h and include-private.h conditionals - Update trace environment variable name - Fix project version handling - Add mulle-clang-project dependency
1 parent b364a02 commit 080fd7a

File tree

30 files changed

+198
-83
lines changed

30 files changed

+198
-83
lines changed

.github/workflows/dockerfile-ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ jobs:
88
runs-on: ubuntu-latest
99

1010
steps:
11-
- uses: actions/checkout@v3
11+
- uses: actions/checkout@v4
1212
if: ${{ ! env.ACT }}
1313

1414
- name: Build Docker image

.github/workflows/mulle-sde-ci.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ jobs:
2727
- name: Dump Environment
2828
run: env | sort
2929

30-
- uses: actions/checkout@v3
30+
- uses: actions/checkout@v4
3131

3232
- uses: mulle-sde/github-ci@v1
3333

34-
- uses: mulle-cc/github-ci@v4
34+
- uses: mulle-cc/github-ci@v5
3535

3636
- name: List extensions
3737
run: |

.mulle/etc/project/formula-info.sh

+3-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.mulle/share/env/environment-plugin.sh

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.mulle/share/env/environment.sh

+14-13
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.mulle/share/env/include-environment.sh

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.mulle/share/env/tool-plugin

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.mulle/share/env/version

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.mulle/share/sde/version/mulle-sde/extension-cmake

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
cmake_minimum_required( VERSION 3.14)
22

3-
project( mulle-objc-developer NONE)
3+
project( mulle-objc-developer VERSION 0.27.0 LANGUAGES NONE)
44

5-
set( PROJECT_VERSION 0.26.1)
5+
set( PROJECT_VERSION 0.27.0)
66

77

88
if( APPLE)

CMakePackage.cmake

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
set( CPACK_PACKAGE_NAME "${PROJECT_NAME}")
77
set( CPACK_PACKAGE_VERSION "${PROJECT_VERSION}")
88
set( CPACK_PACKAGE_CONTACT "[email protected]")
9-
set( CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md")
9+
set( CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
1010
set( CPACK_PACKAGE_DESCRIPTION_SUMMARY "🎩 mulle-objc developer kit for mulle-sde")
11-
set( CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
11+
set( CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
1212
set( CPACK_STRIP_FILES false)
1313

1414

Dockerfile

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,6 @@ RUN DEBIAN_FRONTEND=noninteractive \
2828
&& chmod 755 installer-all \
2929
&& ./installer-all /usr no \
3030
\
31-
&& wget "https://github.com/mulle-cc/mulle-clang-project/releases/download/17.0.6.0/mulle-clang-17.0.6.0-bookworm-amd64.deb" \
32-
&& dpkg --install "mulle-clang-17.0.6.0-bookworm-amd64.deb"
31+
&& wget "https://github.com/mulle-cc/mulle-clang-project/releases/download/17.0.6.2/mulle-clang-17.0.6.2-bookworm-amd64.deb" \
32+
&& dpkg --install "mulle-clang-17.0.6.2-bookworm-amd64.deb"
3333

src/mulle-objc/github-actions/project/all/.github/workflows/mulle-sde-ci.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name: CI
33
on:
44
push:
55
branches:
6-
- release
6+
- master
77
pull_request:
88
workflow_dispatch:
99

@@ -33,11 +33,11 @@ jobs:
3333
- name: Dump Environment
3434
run: env | sort
3535

36-
- uses: actions/checkout@v3
36+
- uses: actions/checkout@v4
3737

3838
- uses: mulle-sde/github-ci@v1
3939

40-
- uses: mulle-cc/github-ci@v4
40+
- uses: mulle-cc/github-ci@v5
4141

4242
- name: Dump Project Environment
4343
run: |

src/mulle-objc/github-actions/version

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.26.0
1+
0.27.0

src/mulle-objc/objc-cmake/project/all/cmake/share/CompilerFlagsObjC.cmake

+12-1
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,22 @@ if( NOT __COMPILER_FLAGS_OBJC_CMAKE__)
99
message( STATUS "# Include \"${CMAKE_CURRENT_LIST_FILE}\"" )
1010
endif()
1111

12+
#
13+
# only useful in mulle-objc
14+
#
15+
option( OBJC_TAO_DEBUG_ENABLED "Enable Objective-C TAO for debug builds" MULLE_OBJC)
16+
1217
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OTHER_OBJC_FLAGS} ${UNWANTED_OBJC_WARNINGS}")
1318
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OTHER_OBJC_FLAGS} ${UNWANTED_OBJC_WARNINGS}")
1419

1520
if( CMAKE_BUILD_TYPE)
16-
if( NOT TMP_CONFIGURATION_NAME STREQUAL "DEBUG")
21+
string( TOUPPER "${CMAKE_BUILD_TYPE}" TMP_CONFIGURATION_NAME)
22+
if( TMP_CONFIGURATION_NAME STREQUAL "DEBUG")
23+
if( OBJC_TAO_DEBUG_ENABLED)
24+
message( STATUS "Objective-C TAO enabled")
25+
add_definitions( "-fobjc-tao")
26+
endif()
27+
else()
1728
add_definitions( "-DNS_BLOCK_ASSERTIONS" )
1829
endif()
1930
endif()

src/mulle-objc/objc-cmake/project/all/cmake/share/CreateLoaderIncObjC.cmake

+4-5
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ if( NOT LIBRARY_NAME)
2020
endif()
2121

2222
if( NOT OBJC_LOADER_INC)
23-
set( OBJC_LOADER_INC "${CMAKE_SOURCE_DIR}/<|PROJECT_SOURCE_DIR|>/reflect/objc-loader.inc")
23+
set( OBJC_LOADER_INC "${CMAKE_CURRENT_SOURCE_DIR}/<|PROJECT_SOURCE_DIR|>/reflect/objc-loader.inc")
2424
endif()
2525

2626
#
@@ -150,15 +150,15 @@ if( CREATE_OBJC_LOADER_INC)
150150
# PROPERTIES GENERATED FALSE
151151
# )
152152

153-
add_custom_target( "__objc_loader_inc__"
153+
add_custom_target( "${LIBRARY_NAME}__objc_loader_inc__"
154154
DEPENDS ${OBJC_LOADER_INC}
155155
COMMENT "Target to build \"${OBJC_LOADER_INC}\""
156156
)
157157

158158
if( TARGET "_2_${LIBRARY_NAME}")
159-
add_dependencies( "_2_${LIBRARY_NAME}" "__objc_loader_inc__")
159+
add_dependencies( "_2_${LIBRARY_NAME}" "${LIBRARY_NAME}__objc_loader_inc__")
160160
else()
161-
add_dependencies( "${LIBRARY_NAME}" "__objc_loader_inc__")
161+
add_dependencies( "${LIBRARY_NAME}" "${LIBRARY_NAME}__objc_loader_inc__")
162162
endif()
163163

164164
# seemingly needed
@@ -168,6 +168,5 @@ if( CREATE_OBJC_LOADER_INC)
168168

169169
endif()
170170

171-
172171
include( CreateLoaderIncAuxObjC OPTIONAL)
173172

src/mulle-objc/objc-cmake/project/all/cmake/share/ExecutableObjC.cmake

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ set_target_properties( "${EXECUTABLE_NAME}"
2525

2626
#
2727
# only for mulle-clang
28+
# consider: set_target_properties(your_target PROPERTIES ENABLE_EXPORTS ON)
2829
#
2930
if( UNIX AND NOT (APPLE OR COSMOPOLITAN OR MUSL_STATIC_ONLY))
3031
if( LINK_PHASE)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
### If you want to edit this, copy it from cmake/share to cmake. It will be
2+
### picked up in preference over the one in cmake/share. And it will not get
3+
### clobbered with the next upgrade.
4+
5+
# can be included multiple times
6+
7+
8+
if( MULLE_TRACE_INCLUDE)
9+
message( STATUS "# Include \"${CMAKE_CURRENT_LIST_FILE}\"" )
10+
endif()
11+
12+
#
13+
# the idea here is that this propagates up to the main project, if
14+
# this project is added to another with add_subdirectory
15+
#
16+
# In your library's main CMakeLists.txt
17+
if( CMAKE_VERSION VERSION_GREATER_EQUAL "3.24")
18+
target_link_options( ${LIBRARY_NAME} INTERFACE "$<LINK_LIBRARY:WHOLE_ARCHIVE,${LIBRARY_NAME}>")
19+
endif()
20+
21+
include( LibraryAuxObjC OPTIONAL)

src/mulle-objc/objc-cmake/project/all/cmake/share/OptimizedLinkObjC.cmake

+11-11
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,16 @@ if( NOT __OPTIMIZED_LINK_OBJC_CMAKE__)
3535
# NORMAL_LOAD_LIBRARY # regular link this
3636
#
3737
if( NOT COVERAGE_DIR)
38-
set( COVERAGE_DIR "${PROJECT_SOURCE_DIR}/coverage")
38+
set( COVERAGE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/coverage")
3939
endif()
4040
if( NOT OPTIMIZE_DIR)
41-
set( OPTIMIZE_DIR "${PROJECT_BINARY_DIR}/mulle-objc-optimize/optimize.d")
41+
set( OPTIMIZE_DIR "${CMAKE_CURRENT_BINARY_DIR}/mulle-objc-optimize/optimize.d")
4242
endif()
4343
if( NOT OPTIMIZE_INFO_DIR)
44-
set( OPTIMIZE_INFO_DIR "${PROJECT_SOURCE_DIR}/optimize")
44+
set( OPTIMIZE_INFO_DIR "${CMAKE_CURRENT_SOURCE_DIR}/optimize")
4545
endif()
4646
if( NOT UNARCHIVE_DIR)
47-
set( UNARCHIVE_DIR "${PROJECT_BINARY_DIR}/mulle-objc-optimize/unarchive.d")
47+
set( UNARCHIVE_DIR "${CMAKE_CURRENT_BINARY_DIR}/mulle-objc-optimize/unarchive.d")
4848
endif()
4949

5050
if( NOT EXISTS "${COVERAGE_DIR}/method-coverage.csv")
@@ -65,11 +65,11 @@ if( NOT __OPTIMIZED_LINK_OBJC_CMAKE__)
6565
message( STATUS "OPTIMIZE_INFO_DIR is ${OPTIMIZE_INFO_DIR}")
6666
message( STATUS "UNARCHIVE_DIR is ${UNARCHIVE_DIR}")
6767
message( STATUS "DEPENDENCY_DIR is ${MULLE_SDK_DEPENDENCY_DIR}")
68-
message( STATUS "PROJECT_BINARY_DIR is ${PROJECT_BINARY_DIR}")
68+
message( STATUS "CMAKE_CURRENT_BINARY_DIR is ${CMAKE_CURRENT_BINARY_DIR}")
6969

7070
set( CUSTOM_OUTPUT
71-
"${PROJECT_BINARY_DIR}/${OPTIMIZABLE_LOAD_NAME}"
72-
"${PROJECT_BINARY_DIR}/${ALL_LOAD_NAME}"
71+
"${CMAKE_CURRENT_BINARY_DIR}/${OPTIMIZABLE_LOAD_NAME}"
72+
"${CMAKE_CURRENT_BINARY_DIR}/${ALL_LOAD_NAME}"
7373
)
7474

7575
if( MSVC)
@@ -98,7 +98,7 @@ if( NOT __OPTIMIZED_LINK_OBJC_CMAKE__)
9898
--dependency-dir "${MULLE_SDK_DEPENDENCY_DIR}"
9999
--optimize-info-dir "${OPTIMIZE_INFO_DIR}"
100100
--optimize-dir "${OPTIMIZE_DIR}"
101-
--prefix "${PROJECT_BINARY_DIR}"
101+
--prefix "${CMAKE_CURRENT_BINARY_DIR}"
102102
--unarchive-dir "${UNARCHIVE_DIR}"
103103
${ALL_LOAD_DEPENDENCY_LIBRARIES}
104104
DEPENDS ${ALL_LOAD_DEPENDENCY_LIBRARIES}
@@ -112,17 +112,17 @@ if( NOT __OPTIMIZED_LINK_OBJC_CMAKE__)
112112

113113
# replace ALL_LOAD_DEPENDENCY_LIBRARIES with the non-optimzable stuff
114114
set( ALL_LOAD_DEPENDENCY_LIBRARIES
115-
"${PROJECT_BINARY_DIR}/${ALL_LOAD_NAME}"
115+
"${CMAKE_CURRENT_BINARY_DIR}/${ALL_LOAD_NAME}"
116116
)
117117

118118
#
119119
# move the rest which are optimized into regular DEPENDENCY_LIBRARIES
120120
# to pick up regular C symbols
121121
#
122122
set( DEPENDENCY_LIBRARIES
123-
"${PROJECT_BINARY_DIR}/${OPTIMIZABLE_LOAD_NAME}"
123+
"${CMAKE_CURRENT_BINARY_DIR}/${OPTIMIZABLE_LOAD_NAME}"
124124
${DEPENDENCY_LIBRARIES}
125-
"${PROJECT_BINARY_DIR}/${OPTIMIZABLE_LOAD_NAME}"
125+
"${CMAKE_CURRENT_BINARY_DIR}/${OPTIMIZABLE_LOAD_NAME}"
126126
)
127127

128128
add_dependencies( ${LIBRARY_NAME} "_${LIBRARY_NAME}_optimized_libraries")

0 commit comments

Comments
 (0)