Skip to content

Commit

Permalink
Add build job.
Browse files Browse the repository at this point in the history
  • Loading branch information
kovacsv committed Nov 21, 2023
1 parent 18a1ba6 commit a90c524
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 272 deletions.
120 changes: 33 additions & 87 deletions .github/workflows/archicad_addon.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,95 +7,41 @@ on:
tags:
- '*'

defaults:
run:
shell: bash

jobs:
build_win:
strategy:
matrix:
params:
- acVersion: 25
devKitUrl: WIN_DEVKIT_AC25
devKitDir: API Development Kit 25.3002
- acVersion: 26
devKitUrl: WIN_DEVKIT_AC26
devKitDir: API Development Kit 26.3000
- acVersion: 27
devKitUrl: WIN_DEVKIT_AC27
devKitDir: API Development Kit 27.3001
runs-on: [ windows-2019 ]
steps:
- name: Checkout Repo
uses: actions/checkout@v3
- name: Download Development Kit
run: python archicad-addon/Tools/download_and_unzip.py ${{ secrets[matrix.params.devKitUrl] }} archicad-addon/Build
- name: Generate Project
run: cmake -B archicad-addon/Build -G "Visual Studio 16 2019" -A "x64" -T "v142" -DAC_API_DEVKIT_DIR="archicad-addon/Build/${{ matrix.params.devKitDir }}" archicad-addon
- name: Build Debug
run: cmake --build archicad-addon/Build --config Debug
- name: Build RelWithDebInfo
run: cmake --build archicad-addon/Build --config RelWithDebInfo
- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
name: Tapir Add-On AC${{ matrix.params.acVersion }} Win
path: archicad-addon/Build/RelWithDebInfo/TapirAddOn_AC${{ matrix.params.acVersion }}_Win.apx
- name: Create Release
if: startsWith(github.ref, 'refs/tags/')
uses: ncipollo/release-action@v1
with:
artifacts: archicad-addon/Build/RelWithDebInfo/TapirAddOn_AC${{ matrix.params.acVersion }}_Win.apx
draft: true
allowUpdates: true
token: ${{ secrets.GITHUB_TOKEN }}
build:
runs-on: ${{ matrix.os-type }}

build_mac:
strategy:
matrix:
params:
- acVersion: 25
devKitUrl: MAC_DEVKIT_AC25
devKitDir: GRAPHISOFT ARCHICAD API DevKit 25.3006
- acVersion: 26
devKitUrl: MAC_DEVKIT_AC26
devKitDir: Graphisoft Archicad API DevKit 26.3000
- acVersion: 27
devKitUrl: MAC_DEVKIT_AC27
devKitDir: Graphisoft Archicad API DevKit 27.3001
runs-on: [ macos-12 ]
os-type: [ windows-2019, macos-12 ]
fail-fast: false

steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Download Development Kit
run: python3 archicad-addon/Tools/download_and_unzip.py ${{ secrets[matrix.params.devKitUrl] }} archicad-addon/Build
- name: Generate Project
run: cmake -B archicad-addon/Build -G "Xcode" -DCMAKE_OSX_ARCHITECTURES="x86_64" -DAC_API_DEVKIT_DIR="archicad-addon/Build/${{ matrix.params.devKitDir }}" archicad-addon
- name: Build Debug
run: cmake --build archicad-addon/Build --config Debug
- name: Build RelWithDebInfo
run: cmake --build archicad-addon/Build --config RelWithDebInfo
- name: Code sign and notarize
run: |
echo ${{ secrets.CODE_SIGN_CERT }} | base64 --decode > certificate.p12
./archicad-addon/Tools/code_sign_and_notarize.sh \
certificate.p12 \
${{ secrets.CODE_SIGN_CERT_PWD }} \
"Developer ID Application: enzyme apd Limited (${{ secrets.TEAM_ID }})" \
archicad-addon/Tools/addon.entitlements \
${{ secrets.APPLE_ID }} \
${{ secrets.APPLE_ID_PWD }} \
${{ secrets.TEAM_ID }} \
archicad-addon/Build/RelWithDebInfo/TapirAddOn_AC${{ matrix.params.acVersion }}_Mac.bundle
- name: Create zip file
run: ditto -c -k --keepParent archicad-addon/Build/RelWithDebInfo/TapirAddOn_AC${{ matrix.params.acVersion }}_Mac.bundle archicad-addon/Build/RelWithDebInfo/TapirAddOn_AC${{ matrix.params.acVersion }}_Mac.zip
- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
name: Tapir Add-On AC${{ matrix.params.acVersion }} Mac
path: archicad-addon/Build/RelWithDebInfo/TapirAddOn_AC${{ matrix.params.acVersion }}_Mac.zip
- name: Create Release
if: startsWith(github.ref, 'refs/tags/')
uses: ncipollo/release-action@v1
with:
artifacts: archicad-addon/Build/RelWithDebInfo/TapirAddOn_AC${{ matrix.params.acVersion }}_Mac.zip
draft: true
allowUpdates: true
token: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/checkout@v3

- name: Checkout the submodule
uses: actions/checkout@v3
with:
submodules: recursive

- name: setup python
uses: actions/setup-python@v2
with:
python-version: 3.8

- name: Run build script
run: |
python archicad-addon/Tools/BuildAddOn.py --configFile archicad-addon/config.json --acVersion 25 26 27 --release --package
- name: Create Release
if: startsWith(github.ref, 'refs/tags/')
uses: ncipollo/release-action@v1
with:
artifacts: Build/Package/*.zip
draft: true
allowUpdates: true
token: ${{ secrets.GITHUB_TOKEN }}
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "archicad-addon/Tools"]
path = archicad-addon/Tools
url = https://github.com/GRAPHISOFT/archicad-addon-cmake-tools.git
196 changes: 11 additions & 185 deletions archicad-addon/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,196 +1,22 @@
cmake_minimum_required (VERSION 3.16)
cmake_minimum_required (VERSION 3.17)

function (SetCompilerOptions target)
target_compile_features (${target} PUBLIC cxx_std_14)
target_compile_options (${target} PUBLIC "$<$<CONFIG:Debug>:-DDEBUG>")
if (WIN32)
target_compile_options (${target} PUBLIC /W4 /WX
/Zc:wchar_t-
/wd4499
)
else ()
target_compile_options (${target} PUBLIC -Wall -Wextra -Werror
-fvisibility=hidden
-Wno-multichar
-Wno-ctor-dtor-privacy
-Wno-invalid-offsetof
-Wno-ignored-qualifiers
-Wno-reorder
-Wno-overloaded-virtual
-Wno-unused-parameter
-Wno-deprecated
-Wno-unknown-pragmas
-Wno-missing-braces
-Wno-unused-private-field
-Wno-non-c-typedef-for-linkage)
endif ()
endfunction ()
include (Tools/CMakeCommon.cmake)

set (API_DEVKIT_DIR $ENV{AC_API_DEVKIT_DIR})

set_property (GLOBAL PROPERTY USE_FOLDERS ON)

set (CMAKE_SUPPRESS_REGENERATION 1)
set (CMAKE_CONFIGURATION_TYPES Debug;Release;RelWithDebInfo)
set (AC_API_DEVKIT_DIR $ENV{AC_API_DEVKIT_DIR} CACHE PATH "API DevKit directory.")
set (AC_API_DEVKIT_DIR ${API_DEVKIT_DIR} CACHE PATH "API DevKit directory.")
set (AC_ADDON_NAME "TapirAddOn" CACHE STRING "Add-On name.")
set (AC_ADDON_LANGUAGE "INT" CACHE STRING "Add-On language code.")

set (ACAPINC_FILE_LOCATION ${AC_API_DEVKIT_DIR}/Support/Inc/ACAPinc.h)
if (EXISTS ${ACAPINC_FILE_LOCATION})
file (READ ${ACAPINC_FILE_LOCATION} ACAPIncContent)
string (REGEX MATCHALL "#define[ \t]+ServerMainVers_([0-9][0-9])" VersionList ${ACAPIncContent})
set (ARCHICAD_VERSION ${CMAKE_MATCH_1})
message (STATUS "Archicad Version: ${ARCHICAD_VERSION}")
else ()
message (FATAL_ERROR "Failed to detect Archicad version, please check the value of the AC_API_DEVKIT_DIR variable.")
endif ()

if (WIN32)
add_definitions (-DUNICODE -D_UNICODE)
else ()
add_definitions (-Dmacintosh=1)
endif ()
add_definitions (-DACExtension)

if (${ARCHICAD_VERSION} LESS 27)
set (CMAKE_CXX_STANDARD 14)
else ()
set (CMAKE_CXX_STANDARD 17)
endif ()
project (${AC_ADDON_NAME})

if (WIN32)
set (OutputPostfix Win)
else ()
set (OutputPostfix Mac)
endif ()

set (OutputName ${AC_ADDON_NAME}_AC${ARCHICAD_VERSION}_${OutputPostfix})
project (${OutputName})
DetectACVersion (${AC_API_DEVKIT_DIR} ACVersion)
message (STATUS "Archicad Version: ${ACVersion}")

set (AddOnSourcesFolder Sources)

set (ResourceObjectsDir ${CMAKE_BINARY_DIR}/ResourceObjects)
set (ResourceStampFile "${ResourceObjectsDir}/AddOnResources.stamp")

if (WIN32)
file (GLOB AddOnResourceFiles
${AddOnSourcesFolder}/R${AC_ADDON_LANGUAGE}/*.grc
${AddOnSourcesFolder}/RFIX/*.grc
${AddOnSourcesFolder}/RFIX/*.grc
${AddOnSourcesFolder}/RFIX.win/*.rc2
)
else ()
file (GLOB AddOnResourceFiles
${AddOnSourcesFolder}/R${AC_ADDON_LANGUAGE}/*.grc
${AddOnSourcesFolder}/RFIX/*.grc
${AddOnSourcesFolder}/RFIX.mac/*.plist
)
endif ()

file (GLOB AddOnHeaderFiles
${AddOnSourcesFolder}/*.h
${AddOnSourcesFolder}/*.hpp
)
file (GLOB AddOnSourceFiles
${AddOnSourcesFolder}/*.c
${AddOnSourcesFolder}/*.cpp
)
set (
AddOnFiles
${AddOnHeaderFiles}
${AddOnSourceFiles}
${AddOnResourceFiles}
${ResourceStampFile}
)

source_group ("Sources" FILES ${AddOnHeaderFiles} ${AddOnSourceFiles})
source_group ("Resources" FILES ${AddOnResourceFiles})

if (WIN32)
add_library (AddOn SHARED ${AddOnFiles})
else ()
add_library (AddOn MODULE ${AddOnFiles})
endif ()


get_filename_component (AddOnSourcesFolderAbsolute "${CMAKE_CURRENT_LIST_DIR}/${AddOnSourcesFolder}" ABSOLUTE)
if (WIN32)
add_custom_command (
OUTPUT ${ResourceStampFile}
DEPENDS ${AddOnResourceFiles}
COMMENT "Compiling resources..."
COMMAND ${CMAKE_COMMAND} -E make_directory "${ResourceObjectsDir}"
COMMAND python "${AddOnSourcesFolderAbsolute}/Tools/CompileResources.py" "${AC_ADDON_LANGUAGE}" "${AC_API_DEVKIT_DIR}" "${AddOnSourcesFolderAbsolute}" "${AddOnSourcesFolderAbsolute}" "${ResourceObjectsDir}" "${ResourceObjectsDir}/${OutputName}.res"
COMMAND ${CMAKE_COMMAND} -E touch ${ResourceStampFile}
)
else ()
add_custom_command (
OUTPUT ${ResourceStampFile}
DEPENDS ${AddOnResourceFiles}
COMMENT "Compiling resources..."
COMMAND ${CMAKE_COMMAND} -E make_directory "${ResourceObjectsDir}"
COMMAND python3 "${AddOnSourcesFolderAbsolute}/Tools/CompileResources.py" "${AC_ADDON_LANGUAGE}" "${AC_API_DEVKIT_DIR}" "${AddOnSourcesFolderAbsolute}" "${AddOnSourcesFolderAbsolute}" "${ResourceObjectsDir}" "${CMAKE_BINARY_DIR}/$<CONFIG>/${OutputName}.bundle/Contents/Resources"
COMMAND ${CMAKE_COMMAND} -E copy "${AC_API_DEVKIT_DIR}/Support/Inc/PkgInfo" "${CMAKE_BINARY_DIR}/$<CONFIG>/${OutputName}.bundle/Contents/PkgInfo"
COMMAND ${CMAKE_COMMAND} -E touch ${ResourceStampFile}
)
endif ()

set_target_properties (AddOn PROPERTIES OUTPUT_NAME ${OutputName})
if (WIN32)
set_target_properties (AddOn PROPERTIES SUFFIX ".apx")
else ()
set_target_properties (AddOn PROPERTIES BUNDLE TRUE)
set_target_properties (AddOn PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_LIST_DIR}/${AddOnSourcesFolder}/RFIX.mac/Info.plist")
set_target_properties (AddOn PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/$<CONFIG>")
endif ()

if (WIN32)
target_link_options (AddOn PUBLIC "${ResourceObjectsDir}/${OutputName}.res")
target_link_options (AddOn PUBLIC /export:GetExportedFuncAddrs,@1 /export:SetImportedFuncAddrs,@2)
endif ()

target_include_directories (AddOn PUBLIC
${AddOnSourcesFolder}
${AC_API_DEVKIT_DIR}/Support/Inc
)

if (WIN32)
if (${ARCHICAD_VERSION} LESS 27)
target_link_libraries (AddOn
"$<$<CONFIG:Debug>:${AC_API_DEVKIT_DIR}/Support/Lib/Win/ACAP_STATD.lib>"
"$<$<CONFIG:Release>:${AC_API_DEVKIT_DIR}/Support/Lib/Win/ACAP_STAT.lib>"
"$<$<CONFIG:RelWithDebInfo>:${AC_API_DEVKIT_DIR}/Support/Lib/Win/ACAP_STAT.lib>"
)
else ()
target_link_libraries (AddOn
"$<$<CONFIG:Debug>:${AC_API_DEVKIT_DIR}/Support/Lib/ACAP_STATD.lib>"
"$<$<CONFIG:Release>:${AC_API_DEVKIT_DIR}/Support/Lib/ACAP_STAT.lib>"
"$<$<CONFIG:RelWithDebInfo>:${AC_API_DEVKIT_DIR}/Support/Lib/ACAP_STAT.lib>"
)
endif ()
else ()
find_library (CocoaFramework Cocoa)
if (${ARCHICAD_VERSION} LESS 27)
target_link_libraries (AddOn
"${AC_API_DEVKIT_DIR}/Support/Lib/Mactel/libACAP_STAT.a"
${CocoaFramework}
)
else ()
target_link_libraries (AddOn
"${AC_API_DEVKIT_DIR}/Support/Lib/libACAP_STAT.a"
${CocoaFramework}
)
endif ()
endif ()

SetCompilerOptions (AddOn)
set_source_files_properties (${AddOnSourceFiles} PROPERTIES LANGUAGE CXX)

file (GLOB ModuleFolders ${AC_API_DEVKIT_DIR}/Support/Modules/*)
target_include_directories (AddOn PUBLIC ${ModuleFolders})
if (WIN32)
file (GLOB LibFilesInFolder ${AC_API_DEVKIT_DIR}/Support/Modules/*/*/*.lib)
target_link_libraries (AddOn ${LibFilesInFolder})
else ()
file (GLOB FrameworkFilesInFolder ${AC_API_DEVKIT_DIR}/Support/Frameworks/*.framework)
target_link_libraries (AddOn ${FrameworkFilesInFolder})
endif ()
set (AddOnResourcesFolder Sources)
SetGlobalCompilerDefinitions ()
GenerateAddOnProject (${ACVersion} ${AC_API_DEVKIT_DIR} ${AC_ADDON_NAME} ${AddOnSourcesFolder} ${AddOnResourcesFolder} ${AC_ADDON_LANGUAGE})
1 change: 1 addition & 0 deletions archicad-addon/Tools
Submodule Tools added at 6fd150
18 changes: 18 additions & 0 deletions archicad-addon/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"addOnName": "TapirAddOn",
"devKitLinks": {
"WIN": {
"27": "https://github.com/GRAPHISOFT/archicad-api-devkit/releases/download/27.3001/API.Development.Kit.WIN.27.3001.zip",
"26": "https://github.com/GRAPHISOFT/archicad-api-devkit/releases/download/26.3000/API.Development.Kit.WIN.26.3000.zip",
"25": "https://github.com/GRAPHISOFT/archicad-api-devkit/releases/download/25.3002/API.Development.Kit.WIN.25.3002.zip"
},
"MAC": {
"27": "https://github.com/GRAPHISOFT/archicad-api-devkit/releases/download/27.3001/API.Development.Kit.MAC.27.3001.zip",
"26": "https://github.com/GRAPHISOFT/archicad-api-devkit/releases/download/26.3000/API.Development.Kit.MAC.26.3000.zip",
"25": "https://github.com/GRAPHISOFT/archicad-api-devkit/releases/download/25.3002/API.Development.Kit.MAC.25.3002.zip"
}
},
"languages": [
"INT"
]
}

0 comments on commit a90c524

Please sign in to comment.